diff --git a/.gitignore b/.gitignore index b1a739b148d..e4d0670940f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,14 @@ lib/debug lib/release lib/proto -lib/bootstrap/4.0/*.mdb -lib/bootstrap/4.0/*.xml -lib/bootstrap/4.0/fsharpc -lib/bootstrap/4.0/fsharpi -lib/bootstrap/4.0/policy* +lib/bootstrap/4.1/*.mdb +lib/bootstrap/4.1/*.xml +lib/bootstrap/4.1/fsharpc +lib/bootstrap/4.1/fsharpi +lib/bootstrap/4.1/policy* aclocal.m4 src/*.userprefs src/fsharp/FSStrings.resources -lkg packages src/fsharp/FSharp.Build/*.resx src/fsharp/FSharp.Build-proto/*.resx @@ -66,12 +65,6 @@ tests/projects/Sample_VS2012_FSharp_ConsoleApp_net45_with_resource/Sample_VS2012 obj extras ossreadme*.txt -tests/fsharp/typecheck/sigs/*.exe -tests/fsharp/typecheck/sigs/*.diff -tests/fsharp/typecheck/sigs/*.err -tests/fsharp/typecheck/sigs/*.vsdiff -tests/fsharp/typecheck/sigs/*.dll -tests/fsharp/typecheck/sigs/*.vserr src/fsharp/FSharp.LanguageService.Compiler/illex.* src/fsharp/FSharp.LanguageService.Compiler/ilpars.* src/fsharp/FSharp.LanguageService.Compiler/lex.* @@ -79,27 +72,26 @@ src/fsharp/FSharp.LanguageService.Compiler/pars.* src/fsharp/FSharp.LanguageService.Compiler/pplex.fs src/fsharp/FSharp.LanguageService.Compiler/pppars.fs src/fsharp/FSharp.LanguageService.Compiler/pppars.fsi -tests/fsharp/typecheck/sigs/*.dll -tests/fsharp/typecheck/sigs/*.exe -tests/fsharp/typeProviders/builtin/SqlDataConnection/DataDirectory/ -tests/fsharp/typeProviders/builtin/SqlDataConnection/ExampleResolutionFolder/ -tests/fsharp/typeProviders/builtin/SqlEntityConnection/DataDirectory/ vsintegration/src/unittests/Unittests.fsi +tests/*FSharp_Failures.env +tests/*FSharp_Failures.lst tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Module01.dll tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Module01.pdb -tests/fsharp/typeProviders/helloWorld/bincompat1/ -tests/fsharp/typeProviders/helloWorld/bincompat2/ tests/XFSharpQA_Failures.log.* vsintegration/src/vs/FsPkgs/FSharp.Project/FS/FSharp.ProjectSystem.FSharp.fsi vsintegration/src/vs/FsPkgs/FSharp.Project/FS/ctofiles/ tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Utils.dll tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExprLibrary.dll - +tests/fsharpqa/Source/*FSharpQA_Failures.env +tests/fsharpqa/Source/*FSharpQA_Failures.lst *.csproj.user - +*.sln.DotSettings.user *.ide *.log *.jrs *.chk *.bak *.orig +*.mdf +*.ldf +tests/**/FSharp.Core.dll diff --git a/.nuget/NuGet.Config b/.nuget/NuGet.Config index 67f8ea046ef..baef485daec 100644 --- a/.nuget/NuGet.Config +++ b/.nuget/NuGet.Config @@ -3,4 +3,10 @@ + + + + + + \ No newline at end of file diff --git a/.nuget/NuGet.exe b/.nuget/NuGet.exe index c41a0d0debd..9f8781de0db 100644 Binary files a/.nuget/NuGet.exe and b/.nuget/NuGet.exe differ diff --git a/CHANGELOG.md b/CHANGELOG.md index ae07beb021a..1c1ea833292 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ - Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. + Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. @@ -9,6 +9,28 @@ Visual F# All notable changes to this project will be documented in this file. +### [4.0.0] - Visual Studio 2015 Update 1 - 30 November 2015 + +#### Enhancements +* Perf: `for i in expr do body` optimization [#219](https://github.com/Microsoft/visualfsharp/pull/219) +* Remove type provider security dialog and use custom icon for type provider assembly reference [#448](https://github.com/Microsoft/visualfsharp/pull/448) +* Perf: Enable parallel build inside Visual Studio [#487](https://github.com/Microsoft/visualfsharp/pull/487) +* Perf: Remove StructBox for Value Types [#549](https://github.com/Microsoft/visualfsharp/pull/549) +* Add compiler warnings for redundant arguments in raise/failwith/failwithf/nullArg/invalidOp/invalidArg [#630](https://github.com/Microsoft/visualfsharp/pull/630) +* Add a compiler warning for lower case literals in patterns [#666](https://github.com/Microsoft/visualfsharp/pull/666) + +#### Bug fixes +* Fix scope of types for named values in attributes improperly set [#437](https://github.com/Microsoft/visualfsharp/pull/437) +* Add general check for escaping typars to check phase [#442](https://github.com/Microsoft/visualfsharp/pull/442) +* Fix AccessViolationException on obfuscated assemblies [#519](https://github.com/Microsoft/visualfsharp/pull/519) +* Fix memory leaks while reloading solutions in Visual Studio [#591](https://github.com/Microsoft/visualfsharp/pull/591) +* Enable breakpoints in `with` augmentations for class types [#608](https://github.com/Microsoft/visualfsharp/pull/608) +* Fix false escaping type parameter check error [#613](https://github.com/Microsoft/visualfsharp/pull/613) +* Fix quotation of readonly fields [#622](https://github.com/Microsoft/visualfsharp/pull/622) +* Keep the reference icons when opening references [#623](https://github.com/Microsoft/visualfsharp/pull/623) +* Don't suppress missing FSI transitive references [#626](https://github.com/Microsoft/visualfsharp/pull/626) +* Make Seq.cast's non-generic and generic IEnumerable implementations equivalent [#651](https://github.com/Microsoft/visualfsharp/pull/651) + ### [4.0.0] - 20 July 2015 Includes commits up to `dd8252eb8d20aaedf7b1c7576cd2a8a82d24f587` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e4e6059f68e..1f03a068c9d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,14 +3,15 @@ The Visual F# team is proud to be a contributor to F#, and urge you to join in too. F# users and the F# community are grateful for all contributions to F#. Besides this overview, we recommend ["Becoming a contributor"](http://mrange.wordpress.com/2014/12/11/becoming-an-fsharp-contributor/), a community blog post by Mårten Rånge. +For those contributing to the core of the F# compiler, we recommend ["The F# Compiler Technical Overview"](http://fsharp.github.io/2015/09/29/fsharp-compiler-guide.html) ###Getting Started - Install required software - Clone the repo - `git clone https://github.com/microsoft/visualfsharp.git` -- How to build -- How to run tests +- How to build ([DEVGUIDE](DEVGUIDE.md)) +- How to run tests ([TESTGUIDE](TESTGUIDE.md)) ###What to Contribute? @@ -90,6 +91,8 @@ Performance improvement checkins have the following minimum requirements (in add - The PR must show a reliable, substantive performance improvement that justifies the complexity introduced. For the compiler, performance improvements of ~1% are of interest. For the core library, it will depend on the routine in question. For the Visual F# tools, reactivity of the user interface will be of more interest than raw CPU performance. +- Performance improvements should not cause performance degradation in existing code. + #### Mimimum Bar for Bug Fix Pull Requests Bug fix PRs have the following minimum requirements @@ -100,6 +103,8 @@ Bug fix PRs have the following minimum requirements - Thorough test cases must be included in the PR (unless tests already exist for a failing case). PRs without matching tests will be closed with a polite request to please add the tests. However, if you need help adding tests, please note this in the description of the change and people will guide you through where to add the tests. +- Bug fix PRs should not cause performance degradation in existing code. + #### Mimimum Bar for Feature Pull Requests Feature PRs have the following minimum requirements: @@ -112,6 +117,12 @@ Feature PRs have the following minimum requirements: - For F# Language and Library features, you will be asked to submit a speclet for the feature to the [F# Language Design](https://github.com/fsharp/FSharpLangDesign/) GitHub repository of speclets. In some cases you will only need to do this after your feature is accepted, but for more complex features you may be asked to do this during the review of the feature. +- Language feature implementations must take into account the expectations of typical users about the performance + impact of using the feature. For example, we should avoid the situation where using an optional language feature + which appears benign to a typical user has a large negative performance impact on code. + +- Language feature implementations should not cause performance degradation in existing code. + ###Language Evolution We are committed to carefully managing the evolution of the F# language. diff --git a/DEVGUIDE.md b/DEVGUIDE.md index 257bceef898..b133750a2dc 100644 --- a/DEVGUIDE.md +++ b/DEVGUIDE.md @@ -1,10 +1,17 @@ # F# Compiler, Core Library and Visual F# Tools Open Contribution Repository This repo is where you can contribute to the F# compiler, core library and the Visual F# Tools. +To learn what F# is and why it's interesting, go to [fsharp.org](http://fsharp.org). To get a free F# environment, go to [fsharp.org](http://fsharp.org/use/windows). -To learn what F# is and why it's interesting, go to [fsharp.org](http://fsharp.org). +**Compiler Technical Documentation** -To get a free F# environment, go to [fsharp.org](http://fsharp.org/use/windows). +The primary technical documents for the F# compiler code are + +* [The F# Language Specification](http://fsharp.org/specs/language-spec/) + +* [The F# Compiler Technical Guide](http://fsharp.github.io/2015/09/29/fsharp-compiler-guide.html) + maintained by contributors to this repository. Please read + and contribute to that guide. **License** > Contributions made to this repo are subject to terms and conditions of the Apache License, Version 2.0. A copy of the license can be found in the [License.txt](License.txt) file at the root of this distribution. @@ -15,7 +22,7 @@ To get a free F# environment, go to [fsharp.org](http://fsharp.org/use/windows). ## 0. A Shortcut to Build and Smoke Test You can build a subset of functionality (including bootstrapped compiler and library) and run a very -small number of 'smoke' tests using the script used by continuous integration: +small number of 'smoke' tests using the script used by continuous integration on Windows: .\appveyor-build.cmd @@ -66,7 +73,7 @@ Prior to a **Debug** test run, you need to complete **all** of these steps: [Optional] If testing the Visual Studio bits (see below) you will also need: - msbuild vsintegration\fsharp-vsintegration-build.proj + msbuild VisualFSharp.sln msbuild vsintegration\fsharp-vsintegration-unittests-build.proj Prior to a **Release** test run, you need to do **all** of these: @@ -91,15 +98,15 @@ Prior to a **Release** test run, you need to do **all** of these: [Optional] If testing **Release** build of the Visual F# IDE Tools (see below) you will also need: - msbuild vsintegration\fsharp-vsintegration-build.proj /p:Configuration=Release + msbuild VisualFSharp.sln /p:Configuration=Release msbuild vsintegration\fsharp-vsintegration-unittests-build.proj /p:Configuration=Release -## 4. [Optional] Install the Visual F# IDE Tools and Clobber the F# 4.0 SDK on the machine +## 4. [Optional] Install the Visual F# IDE Tools and Clobber the F# SDK on the machine -**Note:** Step #3 will install a VSIX extension into Visual Studio 2015 that changes the Visual F# IDE Tools +**Note:** Step #2 below will install a VSIX extension into Visual Studio 2015 that changes the Visual F# IDE Tools components installed into Visual Studio 2015. You can revert this step by disabling or uninstalling the addin. -**Note:** Step #4 will clobber the machine-wide installed F# 4.0 SDK on your machine. This replaces the ``fsi.exe``/``fsiAnyCpu.exe`` used +**Note:** Step #3 below will clobber the machine-wide installed F# SDK on your machine. This replaces the ``fsi.exe``/``fsiAnyCpu.exe`` used by Visual F# Interactive and the ``fsc.exe`` used by ``Microsoft.FSharp.targets``. Repairing Visual Studio 2015 is currently the only way to revert this step. @@ -111,20 +118,20 @@ For **Debug**: 1. Ensure that the VSIX package is uninstalled. In VS, select Tools/Extensions and Updates and if the package `VisualStudio.FSharp.EnableOpenSource` is installed, select Uninstall 1. Run ``debug\net40\bin\EnableOpenSource.vsix`` -1. Run ``vsintegration\update-vsintegration.cmd debug`` (clobbers the installed F# 4.0 SDK) +1. Run ``vsintegration\update-vsintegration.cmd debug`` (clobbers the installed F# SDK) For **Release**: 1. Ensure that the VSIX package is uninstalled. In VS, select Tools/Extensions and Updates and if the package `VisualStudio.FSharp.EnableOpenSource` is installed, select Uninstall 1. Run ``release\net40\bin\EnableOpenSource.vsix`` -1. Run ``vsintegration\update-vsintegration.cmd release`` (clobbers the installed F# 4.0 SDK) +1. Run ``vsintegration\update-vsintegration.cmd release`` (clobbers the installed F# SDK) Restart Visual Studio, it should now be running your freshly-built Visual F# IDE Tools with updated F# Interactive. ### Notes on the build -1. The `update.cmd` script adds the built `FSharp.Core` to the GAC, adds required strong name validation skips, and NGens the compiler and libraries. This requires admin privileges. +1. The `update.cmd` script adds required strong name validation skips, and NGens the compiler and libraries. This requires admin privileges. 1. The compiler binaries produced are "private" and strong-named signed with a test key. 1. Some additional tools are required to build the compiler, notably `fslex.exe`, `fsyacc.exe`, `FSharp.PowerPack.Build.Tasks.dll`, `FsSrGen.exe`, `FSharp.SRGen.Build.Tasks.dll`, and the other tools found in the `lkg` directory. 1. The overall bootstrapping process executes as follows @@ -132,3 +139,8 @@ Restart Visual Studio, it should now be running your freshly-built Visual F# IDE - We use this compiler to compile the source in this distribution, to produce a "proto" compiler, dropped to the `proto` directory. When run, this compiler still relies on `FSharp.Core.dll` with version X. - We use the proto compiler to compile the source for `FSharp.Core.dll` in this distribution. - We use the proto compiler to compile the source for `FSharp.Compiler.dll`, `fsc.exe`, `fsi.exe`, and other binaries found in this distribution. + +### Further technical resources + +The primary technical guide to the core compiler code is [The F# Compiler Technical Guide](http://fsharp.github.io/2015/09/29/fsharp-compiler-guide.html). Please read and contribute to that guide. + diff --git a/License.txt b/License.txt index 4447da3feeb..d985ec668bf 100644 --- a/License.txt +++ b/License.txt @@ -1,4 +1,4 @@ -Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. +Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use these files except in compliance with the License. You may obtain a copy of the diff --git a/README.md b/README.md index 37ec0d1da39..0c41fb87e40 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,16 @@ -[![Issue Stats](http://issuestats.com/github/Microsoft/visualfsharp/badge/pr)](http://issuestats.com/github/microsoft/visualfsharp) -[![Issue Stats](http://issuestats.com/github/Microsoft/visualfsharp/badge/issue)](http://issuestats.com/github/microsoft/visualfsharp) -[![Build status](https://img.shields.io/appveyor/ci/KevinRansom/visualfsharp-radou/fsharp4.svg)](https://ci.appveyor.com/project/KevinRansom/visualfsharp-radou/branch/fsharp4) [![Join the chat at https://gitter.im/Microsoft/visualfsharp](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Microsoft/visualfsharp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) #Visual F# Tools +## Windows build + +| |Debug (Build only)|Release (Build only)|Release (Build and tests)| +|:----------:|:----------------:|:------------------:|:-----------------------:| +|**master** |[![Build Status](http://dotnet-ci.cloudapp.net/buildStatus/icon?job=Microsoft_visualfsharp/debug_windows_nt)](http://dotnet-ci.cloudapp.net/job/Microsoft_visualfsharp/job/debug_windows_nt/)|[![Build Status](http://dotnet-ci.cloudapp.net/buildStatus/icon?job=Microsoft_visualfsharp/release_windows_nt)](http://dotnet-ci.cloudapp.net/job/Microsoft_visualfsharp/job/release_windows_nt/)| [![Build status](https://img.shields.io/appveyor/ci/KevinRansom/visualfsharp-radou/master.svg)](https://ci.appveyor.com/project/KevinRansom/visualfsharp-radou/branch/master) | +|**vs2015** ||| [![Build status](https://img.shields.io/appveyor/ci/KevinRansom/visualfsharp-radou/vs2015.svg)](https://ci.appveyor.com/project/KevinRansom/visualfsharp-radou/branch/vs2015) | +|**coreclr** ||| [![Build status](https://img.shields.io/appveyor/ci/KevinRansom/visualfsharp-radou/coreclr.svg)](https://ci.appveyor.com/project/KevinRansom/visualfsharp-radou/branch/coreclr) | + ###Contributing to the F# Language, Library, and Tools You are invited to join with the F# Community and the Visual F# Tools team to help produce future releases of the F# language compiler, library, and tools. @@ -16,7 +21,9 @@ Changes contributed here are packaged into the Visual F# Tools, the F# Open Edit ###Engineering status -[F# 4.0 status](https://github.com/Microsoft/visualfsharp/wiki/F%23-4.0-Status) +[F# for CoreCLR status](https://github.com/Microsoft/visualfsharp/wiki/F%23-for-CoreCLR---Status) + +[F# 4.0 status](https://github.com/Microsoft/visualfsharp/wiki/F%23-4.0-Status) --- Completed, shipped. ###License @@ -24,15 +31,45 @@ This project is subject to the Apache Licence, Version 2.0. A copy of the licens ###Development and Testing -See [DEVGUIDE.md](DEVGUIDE.md) and [TESTGUIDE.md](TESTGUIDE.md) in the root of the repo for details on build, development, and testing. A list of required frameworks and development tools can be found [here](https://github.com/Microsoft/visualfsharp/wiki/Required-Software). - +See [DEVGUIDE.md](DEVGUIDE.md) and [TESTGUIDE.md](TESTGUIDE.md) in the root of the repo for details on build, development, and testing. Quickstart guides for build and test can be found [here](https://github.com/Microsoft/visualfsharp/wiki/Build-Quickstart) and [here](https://github.com/Microsoft/visualfsharp/wiki/Test-Quickstart), respectively. + +###Required Tools for Windows Development and Testing + +###Development tools + +For F# 3.1.X development + +- [Visual Studio 2013](http://www.visualstudio.com/en-us/downloads) + latest updates (or the free [Visual Studio Community Edition](http://www.visualstudio.com/products/visual-studio-community-vs)) +- [Visual Studio 2013 SDK](https://www.microsoft.com/en-us/download/details.aspx?id=40758) + +For F# 4.0 development + +- [Visual Studio 2015](http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs) +- [Visual Studio 2015 SDK](http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs) + +###Additional frameworks + +- [Git for windows](http://msysgit.github.io/) +- [Perl](http://www.perl.org/get.html#win32) (ActiveState 5.16.3 is known to be supported) +- [.NET 3.5](http://www.microsoft.com/en-us/download/details.aspx?id=21) +- [.NET 4.5](http://www.microsoft.com/en-us/download/details.aspx?id=30653) +- [.NET 4.5.1](http://www.microsoft.com/en-us/download/details.aspx?id=40779) +- [MSBuild 12.0](http://www.microsoft.com/en-us/download/details.aspx?id=40760) +- [Windows 7 SDK](http://www.microsoft.com/en-us/download/details.aspx?id=8279) +- [Windows 8 SDK](http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx) +- [Windows 8.1 SDK](http://msdn.microsoft.com/en-us/library/windows/desktop/bg162891.aspx) ###Contributing Guidelines for contributions to the Visual F# compiler, library, and tools can be found [here](CONTRIBUTING.md). -If you would like to contribute to the F# ecosystem more generally, please see the F# Software Foundation's [Community Projects](http://fsharp.org/community/projects/) pages. +How we label issues and PRs: https://github.com/dotnet/roslyn/wiki/Labels-used-for-issues + + +This project has adopted the code of conduct defined by the [Contributor Covenant](http://contributor-covenant.org/) to clarify expected behavior in our community. This code of conduct has been [adopted by many other projects](http://contributor-covenant.org/adopters/). For more information see the [Code of conduct](https://github.com/Microsoft/visualfsharp/wiki/Code-of-Conduct). + +If you would like to contribute to the F# ecosystem more generally see the F# Software Foundation's [Community Projects](http://fsharp.org/community/projects/) pages. ###Code Flow to Other Platforms @@ -43,3 +80,4 @@ Although the primary focus of this repo is F# for Windows and the Visual Studio ###Get In Touch Keep up with the Visual F# Team and the development of the Visual F# Tools by following us [@VisualFSharp](https://twitter.com/VisualFSharp) or subscribing to our [team blog](http://blogs.msdn.com/b/fsharpteam/). + diff --git a/TESTGUIDE.md b/TESTGUIDE.md index c676493d187..b54f7a43a7d 100644 --- a/TESTGUIDE.md +++ b/TESTGUIDE.md @@ -23,7 +23,7 @@ In order to run all of the tests, you will need to install * [Perl](http://www.perl.org/get.html) (ActiveState Perl 5.16.3 is known to work fine) -Perl must be included in the `%PATH%` for the below steps to work. It is also recommended that you run tests from an elevated command prompt, as there are a couple of test cases which modify the GAC, and this requires administrative privileges. +Perl must be included in the `%PATH%` for the below steps to work. It is also recommended that you run tests from an elevated command prompt, as there are a couple of test cases which require administrative privileges. Before running tests, make sure you have successfully built all required projects as specified in the 'Prepare For Tests' section of the [DEVGUIDE](DEVGUIDE.md). @@ -103,7 +103,7 @@ To build these unit test binaries, from the `src` directory call - `msbuild fsharp-library-unittests-build.proj` - Output binary is `FSharp.Core.Unittests.dll` -You can execute and re-run these tests using any standard NUnit approach - via graphical `nunit.exe` or on the command line via `nunit-console.exe`. +You can execute and re-run these tests using any standard NUnit approach - via graphical `nunit.exe` or on the command line via `nunit3-console.exe`. ### Visual F# Tools IDE Unit Test Suite @@ -113,9 +113,9 @@ To build the unit test binary, call msbuild fsharp-vsintegration-unittests-build.proj ``` -from the `src` directory. Tests are contained in the binary `Unittests.dll`. +from the `src` directory. Tests are contained in the binary `VisualFSharp.Unittests.dll`. -The IDE unit tests rely on the "Salsa" library, which is a set of Visual Studio mocks. The code for Salsa resides at `vsintegration\src\Salsa`. +The IDE unit tests rely on the "VisualFSharp.Salsa" library, which is a set of Visual Studio mocks. The code for Salsa resides at `vsintegration\src\Salsa`. Note that for compatibility reasons, the IDE unit tests should be run in a 32-bit process, either `nunit-console-x86.exe` or `nunit-x86.exe`. diff --git a/vsintegration/src/Deployment.sln b/VisualFSharp.sln similarity index 82% rename from vsintegration/src/Deployment.sln rename to VisualFSharp.sln index f322743e9af..7010474b3d8 100644 --- a/vsintegration/src/Deployment.sln +++ b/VisualFSharp.sln @@ -1,99 +1,117 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.22512.0 +VisualStudioVersion = 14.0.24720.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnableOpenSource", "deployment\EnableOpenSource\EnableOpenSource.csproj", "{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnableOpenSource", "vsintegration\src\deployment\EnableOpenSource\EnableOpenSource.csproj", "{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ItemTemplates", "Templates\ItemTemplates\ItemTemplates.csproj", "{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ItemTemplates", "vsintegration\src\Templates\ItemTemplates\ItemTemplates.csproj", "{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverlightProjectTemplates", "Templates\SilverlightProjectTemplates\SilverlightProjectTemplates.csproj", "{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverlightProjectTemplates", "vsintegration\src\Templates\SilverlightProjectTemplates\SilverlightProjectTemplates.csproj", "{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetCoreProjectTemplates", "Templates\NetCoreProjectTemplates\NetCoreProjectTemplates.csproj", "{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetCoreProjectTemplates", "vsintegration\src\Templates\NetCoreProjectTemplates\NetCoreProjectTemplates.csproj", "{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortableLibraryProjectTemplates", "Templates\PortableLibraryProjectTemplates\PortableLibraryProjectTemplates.csproj", "{DB374A0C-7560-479F-9B21-D37C81F7624F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortableLibraryProjectTemplates", "vsintegration\src\Templates\PortableLibraryProjectTemplates\PortableLibraryProjectTemplates.csproj", "{DB374A0C-7560-479F-9B21-D37C81F7624F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TutorialProjectTemplates", "Templates\TutorialProjectTemplates\TutorialProjectTemplates.csproj", "{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TutorialProjectTemplates", "vsintegration\src\Templates\TutorialProjectTemplates\TutorialProjectTemplates.csproj", "{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleProjectTemplates", "Templates\ConsoleProjectTemplates\ConsoleProjectTemplates.csproj", "{604F0DAA-2D33-48DD-B162-EDF0B672803D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleProjectTemplates", "vsintegration\src\Templates\ConsoleProjectTemplates\ConsoleProjectTemplates.csproj", "{604F0DAA-2D33-48DD-B162-EDF0B672803D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibraryProjectTemplates", "Templates\LibraryProjectTemplates\LibraryProjectTemplates.csproj", "{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibraryProjectTemplates", "vsintegration\src\Templates\LibraryProjectTemplates\LibraryProjectTemplates.csproj", "{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VsProDeployTemplates", "deployment\VsProDeployTemplates\VsProDeployTemplates.csproj", "{493D19F9-35A4-4D0B-9B25-CA948823B709}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VsProDeployTemplates", "vsintegration\src\deployment\VsProDeployTemplates\VsProDeployTemplates.csproj", "{493D19F9-35A4-4D0B-9B25-CA948823B709}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VWDExpressDeployTemplates", "deployment\VWDExpressDeployTemplates\VWDExpressDeployTemplates.csproj", "{530DF8CA-7996-407A-B533-D0C2873257AF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VWDExpressDeployTemplates", "vsintegration\src\deployment\VWDExpressDeployTemplates\VWDExpressDeployTemplates.csproj", "{530DF8CA-7996-407A-B533-D0C2873257AF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WDExpressDeployTemplates", "deployment\WDExpressDeployTemplates\WDExpressDeployTemplates.csproj", "{98ABDE09-9E08-49C7-B006-FB3CB5365B54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WDExpressDeployTemplates", "vsintegration\src\deployment\WDExpressDeployTemplates\WDExpressDeployTemplates.csproj", "{98ABDE09-9E08-49C7-B006-FB3CB5365B54}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler", "..\..\src\fsharp\FSharp.Compiler\FSharp.Compiler.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler", "src\fsharp\FSharp.Compiler\FSharp.Compiler.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSHarp.VS.FSI", "vs\FsPkgs\FSharp.VS.FSI\FSHarp.VS.FSI.fsproj", "{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.VS.FSI", "vsintegration\src\vs\FsPkgs\FSharp.VS.FSI\FSharp.VS.FSI.fsproj", "{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Server.Shared", "..\..\src\fsharp\FSharp.Compiler.Server.Shared\FSharp.Compiler.Server.Shared.fsproj", "{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Server.Shared", "src\fsharp\FSharp.Compiler.Server.Shared\FSharp.Compiler.Server.Shared.fsproj", "{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Core", "..\..\src\fsharp\FSharp.Core\FSharp.Core.fsproj", "{DED3BBD7-53F4-428A-8C9F-27968E768605}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Core", "src\fsharp\FSharp.Core\FSharp.Core.fsproj", "{DED3BBD7-53F4-428A-8C9F-27968E768605}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.LanguageService.Compiler", "..\..\src\fsharp\FSharp.LanguageService.Compiler\FSharp.LanguageService.Compiler.fsproj", "{A437A6EC-5323-47C2-8F86-E2CAC54FF152}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.LanguageService.Compiler", "src\fsharp\FSharp.LanguageService.Compiler\FSharp.LanguageService.Compiler.fsproj", "{A437A6EC-5323-47C2-8F86-E2CAC54FF152}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.LanguageService", "vs\FsPkgs\FSharp.LanguageService\FSharp.LanguageService.fsproj", "{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.LanguageService", "vsintegration\src\vs\FsPkgs\FSharp.LanguageService\FSharp.LanguageService.fsproj", "{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSharp.LanguageService.Base", "vs\FsPkgs\FSharp.LanguageService\FSharp.LanguageService.Base\FSharp.LanguageService.Base.csproj", "{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSharp.LanguageService.Base", "vsintegration\src\vs\FsPkgs\FSharp.LanguageService\FSharp.LanguageService.Base\FSharp.LanguageService.Base.csproj", "{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Editor", "vs\FsPkgs\FSharp.Editor\FSharp.Editor.fsproj", "{65E0E82A-EACE-4787-8994-888674C2FE87}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Editor", "vsintegration\src\vs\FsPkgs\FSharp.Editor\FSharp.Editor.fsproj", "{65E0E82A-EACE-4787-8994-888674C2FE87}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectSystem.Base", "vs\FsPkgs\FSharp.Project\Common.Source.CSharp\Project\ProjectSystem.Base.csproj", "{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectSystem.Base", "vsintegration\src\vs\FsPkgs\FSharp.Project\Common.Source.CSharp\Project\ProjectSystem.Base.csproj", "{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}" EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FSharp.PropertiesPages", "vs\FsPkgs\FSharp.Project\VB\FSharpPropPage\FSharp.PropertiesPages.vbproj", "{FCFB214C-462E-42B3-91CA-FC557EFEE74F}" +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FSharp.PropertiesPages", "vsintegration\src\vs\FsPkgs\FSharp.Project\VB\FSharpPropPage\FSharp.PropertiesPages.vbproj", "{FCFB214C-462E-42B3-91CA-FC557EFEE74F}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ProjectSystem", "vs\FsPkgs\FSharp.Project\FS\ProjectSystem.fsproj", "{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ProjectSystem", "vsintegration\src\vs\FsPkgs\FSharp.Project\FS\ProjectSystem.fsproj", "{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetCore259ProjectTemplates", "Templates\NetCore259ProjectTemplates\NetCore259ProjectTemplates.csproj", "{D9D95330-3626-4199-B7AF-17B8E4AF6D87}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetCore259ProjectTemplates", "vsintegration\src\Templates\NetCore259ProjectTemplates\NetCore259ProjectTemplates.csproj", "{D9D95330-3626-4199-B7AF-17B8E4AF6D87}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetCore78ProjectTemplates", "Templates\NetCore78ProjectTemplates\NetCore78ProjectTemplates.csproj", "{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetCore78ProjectTemplates", "vsintegration\src\Templates\NetCore78ProjectTemplates\NetCore78ProjectTemplates.csproj", "{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Templates", "Templates", "{C9B1D3F5-4971-4F04-9C26-37E3AC809AB4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{CFE3259A-2D30-4EB0-80D5-E8B5F3D01449}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Salsa", "Salsa\Salsa.fsproj", "{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "VisualFSharp.Salsa", "vsintegration\src\Salsa\VisualFSharp.Salsa.fsproj", "{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Unittests", "unittests\Unittests.fsproj", "{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "VisualFSharp.Unittests", "vsintegration\src\unittests\VisualFSharp.Unittests.fsproj", "{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DefinitionLocationAttribute", "unittests\Resources.MockTypeProviders\DefinitionLocationAttribute\DefinitionLocationAttribute.csproj", "{DA39AD38-4A58-47BF-9215-E49768295169}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DefinitionLocationAttribute", "vsintegration\src\unittests\Resources.MockTypeProviders\DefinitionLocationAttribute\DefinitionLocationAttribute.csproj", "{DA39AD38-4A58-47BF-9215-E49768295169}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DefinitionLocationAttributeFileDoesnotExist", "unittests\Resources.MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist\DefinitionLocationAttributeFileDoesnotExist.csproj", "{8C2439BD-0E49-4929-A8B1-29CEE228191E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DefinitionLocationAttributeFileDoesnotExist", "vsintegration\src\unittests\Resources.MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist\DefinitionLocationAttributeFileDoesnotExist.csproj", "{8C2439BD-0E49-4929-A8B1-29CEE228191E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DefinitionLocationAttributeLineDoesnotExist", "unittests\Resources.MockTypeProviders\DefinitionLocationAttributeLineDoesnotExist\DefinitionLocationAttributeLineDoesnotExist.csproj", "{F47196DC-186D-4055-BAF2-658282A12F33}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DefinitionLocationAttributeLineDoesnotExist", "vsintegration\src\unittests\Resources.MockTypeProviders\DefinitionLocationAttributeLineDoesnotExist\DefinitionLocationAttributeLineDoesnotExist.csproj", "{F47196DC-186D-4055-BAF2-658282A12F33}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DefinitionLocationAttributeWithSpaceInTheType", "unittests\Resources.MockTypeProviders\DefinitionLocationAttributeWithSpaceInTheType\DefinitionLocationAttributeWithSpaceInTheType.csproj", "{D4C88934-5893-467E-A55C-A11ECD6479FE}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DefinitionLocationAttributeWithSpaceInTheType", "vsintegration\src\unittests\Resources.MockTypeProviders\DefinitionLocationAttributeWithSpaceInTheType\DefinitionLocationAttributeWithSpaceInTheType.csproj", "{D4C88934-5893-467E-A55C-A11ECD6479FE}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "DummyProviderForLanguageServiceTesting", "unittests\Resources.MockTypeProviders\DummyProviderForLanguageServiceTesting\DummyProviderForLanguageServiceTesting.fsproj", "{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "DummyProviderForLanguageServiceTesting", "vsintegration\src\unittests\Resources.MockTypeProviders\DummyProviderForLanguageServiceTesting\DummyProviderForLanguageServiceTesting.fsproj", "{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EditorHideMethodsAttribute", "unittests\Resources.MockTypeProviders\EditorHideMethodsAttribute\EditorHideMethodsAttribute.csproj", "{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EditorHideMethodsAttribute", "vsintegration\src\unittests\Resources.MockTypeProviders\EditorHideMethodsAttribute\EditorHideMethodsAttribute.csproj", "{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "EmptyAssembly", "unittests\Resources.MockTypeProviders\EmptyAssembly\EmptyAssembly.fsproj", "{004982C6-93EA-4E70-B4F0-BE7D7219926A}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "EmptyAssembly", "vsintegration\src\unittests\Resources.MockTypeProviders\EmptyAssembly\EmptyAssembly.fsproj", "{004982C6-93EA-4E70-B4F0-BE7D7219926A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithAdequateComment", "unittests\Resources.MockTypeProviders\XmlDocAttributeWithAdequateComment\XmlDocAttributeWithAdequateComment.csproj", "{243A81AC-A954-4601-833A-60EEEFB00FCD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithAdequateComment", "vsintegration\src\unittests\Resources.MockTypeProviders\XmlDocAttributeWithAdequateComment\XmlDocAttributeWithAdequateComment.csproj", "{243A81AC-A954-4601-833A-60EEEFB00FCD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithEmptyComment", "unittests\Resources.MockTypeProviders\XmlDocAttributeWithEmptyComment\XmlDocAttributeWithEmptyComment.csproj", "{B4595EB6-053A-400E-AA1B-7727F1BC900F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithEmptyComment", "vsintegration\src\unittests\Resources.MockTypeProviders\XmlDocAttributeWithEmptyComment\XmlDocAttributeWithEmptyComment.csproj", "{B4595EB6-053A-400E-AA1B-7727F1BC900F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithLocalizedComment", "unittests\Resources.MockTypeProviders\XmlDocAttributeWithLocalizedComment\XmlDocAttributeWithLocalizedComment.csproj", "{A559D7E8-7EFD-473A-B618-A10B41AB523B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithLocalizedComment", "vsintegration\src\unittests\Resources.MockTypeProviders\XmlDocAttributeWithLocalizedComment\XmlDocAttributeWithLocalizedComment.csproj", "{A559D7E8-7EFD-473A-B618-A10B41AB523B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithLongComment", "unittests\Resources.MockTypeProviders\XmlDocAttributeWithLongComment\XmlDocAttributeWithLongComment.csproj", "{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithLongComment", "vsintegration\src\unittests\Resources.MockTypeProviders\XmlDocAttributeWithLongComment\XmlDocAttributeWithLongComment.csproj", "{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithNullComment", "unittests\Resources.MockTypeProviders\XmlDocAttributeWithNullComment\XmlDocAttributeWithNullComment.csproj", "{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithNullComment", "vsintegration\src\unittests\Resources.MockTypeProviders\XmlDocAttributeWithNullComment\XmlDocAttributeWithNullComment.csproj", "{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Build", "..\..\src\fsharp\FSharp.Build\FSharp.Build.fsproj", "{702A7979-BCF9-4C41-853E-3ADFC9897890}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Build", "src\fsharp\FSharp.Build\FSharp.Build.fsproj", "{702A7979-BCF9-4C41-853E-3ADFC9897890}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fsc", "..\..\src\fsharp\Fsc\Fsc.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fsc", "src\fsharp\Fsc\Fsc.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Data.TypeProviders", "..\..\src\fsharp\FSharp.Data.TypeProviders\FSharp.Data.TypeProviders.fsproj", "{CB7D20C4-6506-406D-9144-5342C3595F03}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Data.TypeProviders", "src\fsharp\FSharp.Data.TypeProviders\FSharp.Data.TypeProviders.fsproj", "{CB7D20C4-6506-406D-9144-5342C3595F03}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Interactive.Settings", "..\..\src\fsharp\FSharp.Compiler.Interactive.Settings\FSharp.Compiler.Interactive.Settings.fsproj", "{649FA588-F02E-457C-9FCF-87E46407481E}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Interactive.Settings", "src\fsharp\FSharp.Compiler.Interactive.Settings\FSharp.Compiler.Interactive.Settings.fsproj", "{649FA588-F02E-457C-9FCF-87E46407481E}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsiAnyCPU", "..\..\src\fsharp\fsiAnyCpu\FsiAnyCPU.fsproj", "{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsiAnyCPU", "src\fsharp\fsiAnyCpu\FsiAnyCPU.fsproj", "{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fsi", "..\..\src\fsharp\fsi\Fsi.fsproj", "{D0E98C0D-490B-4C61-9329-0862F6E87645}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fsi", "src\fsharp\fsi\Fsi.fsproj", "{D0E98C0D-490B-4C61-9329-0862F6E87645}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Tests", "tests\fsharp\FSharp.Tests.fsproj", "{C163E892-5BF7-4B59-AA99-B0E8079C67C4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VisualFSharp.Unittests Support", "VisualFSharp.Unittests Support", "{3F044931-FB83-4433-B934-AE66AB27B278}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Unittests", "src\fsharp\FSharp.Compiler.Unittests\FSharp.Compiler.Unittests.fsproj", "{A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Core.Unittests", "src\fsharp\FSharp.Core.Unittests\FSharp.Core.Unittests.fsproj", "{88E2D422-6852-46E3-A740-83E391DC7973}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VisualFSharp", "VisualFSharp", "{4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compiler", "Compiler", "{3881429D-A97A-49EB-B7AE-A82BA5FE9C77}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{F7876C9B-FB6A-4EFB-B058-D6967DB75FB2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{B8DDA694-7939-42E3-95E5-265C2217C142}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{3058BC79-8E79-4645-B05D-48CC182FA8A6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -988,11 +1006,72 @@ Global {D0E98C0D-490B-4C61-9329-0862F6E87645}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU {D0E98C0D-490B-4C61-9329-0862F6E87645}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU {D0E98C0D-490B-4C61-9329-0862F6E87645}.VSRelease|x86.Build.0 = VSRelease|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Debug|x86.ActiveCfg = Debug|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Debug|x86.Build.0 = Debug|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Proto|Any CPU.ActiveCfg = Proto|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Proto|Any CPU.Build.0 = Proto|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Proto|x86.ActiveCfg = Proto|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Proto|x86.Build.0 = Proto|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Release|Any CPU.Build.0 = Release|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Release|x86.ActiveCfg = Release|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Release|x86.Build.0 = Release|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.VSDebug|x86.Build.0 = VSDebug|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.VSRelease|x86.Build.0 = VSRelease|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Debug|x86.ActiveCfg = Debug|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Debug|x86.Build.0 = Debug|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Proto|Any CPU.ActiveCfg = Proto|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Proto|Any CPU.Build.0 = Proto|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Proto|x86.ActiveCfg = Proto|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Proto|x86.Build.0 = Proto|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Release|Any CPU.Build.0 = Release|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Release|x86.ActiveCfg = Release|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Release|x86.Build.0 = Release|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.VSDebug|x86.Build.0 = VSDebug|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.VSRelease|x86.Build.0 = VSRelease|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Debug|Any CPU.Build.0 = Debug|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Debug|x86.ActiveCfg = Debug|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Debug|x86.Build.0 = Debug|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Proto|Any CPU.ActiveCfg = Proto|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Proto|Any CPU.Build.0 = Proto|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Proto|x86.ActiveCfg = Proto|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Proto|x86.Build.0 = Proto|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Release|Any CPU.ActiveCfg = Release|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Release|Any CPU.Build.0 = Release|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Release|x86.ActiveCfg = Release|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.Release|x86.Build.0 = Release|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.VSDebug|x86.Build.0 = VSDebug|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU + {88E2D422-6852-46E3-A740-83E391DC7973}.VSRelease|x86.Build.0 = VSRelease|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution + {4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} {15A57828-F9F5-4FB4-8E1E-AE7622A10F70} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} {5B739CF3-1116-4EB4-B598-6C16BEA81CE5} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} @@ -1003,21 +1082,44 @@ Global {493D19F9-35A4-4D0B-9B25-CA948823B709} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} {530DF8CA-7996-407A-B533-D0C2873257AF} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} {98ABDE09-9E08-49C7-B006-FB3CB5365B54} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} + {991DCF75-C2EB-42B6-9A0D-AA1D2409D519} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} = {B8DDA694-7939-42E3-95E5-265C2217C142} + {DED3BBD7-53F4-428A-8C9F-27968E768605} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} + {A437A6EC-5323-47C2-8F86-E2CAC54FF152} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} + {EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {65E0E82A-EACE-4787-8994-888674C2FE87} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {FCFB214C-462E-42B3-91CA-FC557EFEE74F} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {6196B0F8-CAEA-4CF1-AF82-1B520F77FE44} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {D9D95330-3626-4199-B7AF-17B8E4AF6D87} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} {1A8DBF70-4178-4AE3-AF5F-39DDD5692210} = {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} - {FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {DA39AD38-4A58-47BF-9215-E49768295169} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {8C2439BD-0E49-4929-A8B1-29CEE228191E} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {F47196DC-186D-4055-BAF2-658282A12F33} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {D4C88934-5893-467E-A55C-A11ECD6479FE} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {004982C6-93EA-4E70-B4F0-BE7D7219926A} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {243A81AC-A954-4601-833A-60EEEFB00FCD} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {B4595EB6-053A-400E-AA1B-7727F1BC900F} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {A559D7E8-7EFD-473A-B618-A10B41AB523B} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {AC85EE6D-033C-45F9-B8BA-884BC22EC6D9} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} + {C9B1D3F5-4971-4F04-9C26-37E3AC809AB4} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7} = {F7876C9B-FB6A-4EFB-B058-D6967DB75FB2} + {EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F} = {F7876C9B-FB6A-4EFB-B058-D6967DB75FB2} + {DA39AD38-4A58-47BF-9215-E49768295169} = {3F044931-FB83-4433-B934-AE66AB27B278} + {8C2439BD-0E49-4929-A8B1-29CEE228191E} = {3F044931-FB83-4433-B934-AE66AB27B278} + {F47196DC-186D-4055-BAF2-658282A12F33} = {3F044931-FB83-4433-B934-AE66AB27B278} + {D4C88934-5893-467E-A55C-A11ECD6479FE} = {3F044931-FB83-4433-B934-AE66AB27B278} + {6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B} = {3F044931-FB83-4433-B934-AE66AB27B278} + {0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E} = {3F044931-FB83-4433-B934-AE66AB27B278} + {004982C6-93EA-4E70-B4F0-BE7D7219926A} = {3F044931-FB83-4433-B934-AE66AB27B278} + {243A81AC-A954-4601-833A-60EEEFB00FCD} = {3F044931-FB83-4433-B934-AE66AB27B278} + {B4595EB6-053A-400E-AA1B-7727F1BC900F} = {3F044931-FB83-4433-B934-AE66AB27B278} + {A559D7E8-7EFD-473A-B618-A10B41AB523B} = {3F044931-FB83-4433-B934-AE66AB27B278} + {AC85EE6D-033C-45F9-B8BA-884BC22EC6D9} = {3F044931-FB83-4433-B934-AE66AB27B278} + {956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C} = {3F044931-FB83-4433-B934-AE66AB27B278} + {702A7979-BCF9-4C41-853E-3ADFC9897890} = {B8DDA694-7939-42E3-95E5-265C2217C142} + {C94C257C-3C0A-4858-B5D8-D746498D1F08} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} + {CB7D20C4-6506-406D-9144-5342C3595F03} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} + {649FA588-F02E-457C-9FCF-87E46407481E} = {B8DDA694-7939-42E3-95E5-265C2217C142} + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B} = {B8DDA694-7939-42E3-95E5-265C2217C142} + {D0E98C0D-490B-4C61-9329-0862F6E87645} = {B8DDA694-7939-42E3-95E5-265C2217C142} + {C163E892-5BF7-4B59-AA99-B0E8079C67C4} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} + {3F044931-FB83-4433-B934-AE66AB27B278} = {F7876C9B-FB6A-4EFB-B058-D6967DB75FB2} + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} + {88E2D422-6852-46E3-A740-83E391DC7973} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} + {F7876C9B-FB6A-4EFB-B058-D6967DB75FB2} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} EndGlobalSection EndGlobal diff --git a/appveyor-build.cmd b/appveyor-build.cmd index c6039fa1148..b6abcaffc7b 100644 --- a/appveyor-build.cmd +++ b/appveyor-build.cmd @@ -1,26 +1,224 @@ +@echo off + +:ARGUMENTS_VALIDATION + +if /I "%1" == "/help" (goto :USAGE) +if /I "%1" == "/h" (goto :USAGE) +if /I "%1" == "/?" (goto :USAGE) +goto :ARGUMENTS_OK + +:USAGE + +echo Build and run a subset of test suites +echo. +echo Usage: +echo. +echo appveyor-build.cmd ^ +echo. +echo No arguments default to 'smoke' ( build all profiles, run all unit tests, cambridge Smoke, fsharpqa Smoke) +echo. +echo To specify multiple values, separate strings by comma +echo. +echo The example below run portable47, vs and qa: +echo. +echo appveyor-build.cmd portable47,vs,qa_suite +exit /b 1 + +:ARGUMENTS_OK + +set DO_NET40=0 +set DO_PORTABLE47=0 +set DO_PORTABLE7=0 +set DO_PORTABLE78=0 +set DO_PORTABLE259=0 +set DO_VS=0 +set TEST_NET40=0 +set TEST_PORTABLE47=0 +set TEST_PORTABLE7=0 +set TEST_PORTABLE78=0 +set TEST_PORTABLE259=0 +set TEST_VS=0 +set TEST_CAMBRIDGE_SUITE=0 +set CONF_CAMBRIDGE_SUITE= +set TEST_QA_SUITE=0 +set CONF_QA_SUITE= + +setlocal enableDelayedExpansion +set /a counter=0 +for /l %%x in (1 1 9) do ( + set /a counter=!counter!+1 + call :SET_CONFIG %%!counter! "!counter!" +) +setlocal disableDelayedExpansion +echo. +echo. + +goto :MAIN + +:SET_CONFIG +set BUILD_PROFILE=%~1 + +if "%BUILD_PROFILE%" == "1" if "%2" == "" ( + set BUILD_PROFILE=smoke +) + +if "%2" == "" if not "%BUILD_PROFILE%" == "smoke" goto :EOF + +echo Parse argument %BUILD_PROFILE% + +if /i '%BUILD_PROFILE%' == 'net40' ( + set DO_NET40=1 + set TEST_NET40=1 +) + +if /i '%BUILD_PROFILE%' == 'portable47' ( + set DO_PORTABLE47=1 + set TEST_PORTABLE47=1 +) + +if /i '%BUILD_PROFILE%' == 'portable7' ( + set DO_PORTABLE7=1 + set TEST_PORTABLE7=1 +) + +if /i '%BUILD_PROFILE%' == 'portable78' ( + set DO_PORTABLE78=1 + set TEST_PORTABLE78=1 +) + +if /i '%BUILD_PROFILE%' == 'portable259' ( + set DO_PORTABLE259=1 + set TEST_PORTABLE259=1 +) + +if /i '%BUILD_PROFILE%' == 'vs' ( + set DO_VS=1 + set TEST_VS=1 +) + +if /i '%BUILD_PROFILE%' == 'cambridge_suite' ( + set DO_NET40=1 + set TEST_CAMBRIDGE_SUITE=1 +) + +if /i '%BUILD_PROFILE%' == 'qa_suite' ( + set DO_NET40=1 + set TEST_QA_SUITE=1 +) + +if /i '%BUILD_PROFILE%' == 'all' ( + set DO_NET40=1 + set DO_PORTABLE47=1 + set DO_PORTABLE7=1 + set DO_PORTABLE78=1 + set DO_PORTABLE259=1 + set DO_VS=1 + set TEST_NET40=1 + set TEST_PORTABLE47=1 + set TEST_PORTABLE7=1 + set TEST_PORTABLE78=1 + set TEST_PORTABLE259=1 + set TEST_VS=1 + set TEST_CAMBRIDGE_SUITE=1 + set TEST_QA_SUITE=1 +) + +if /i '%BUILD_PROFILE%' == 'smoke' ( + set DO_NET40=1 + set DO_PORTABLE47=1 + set DO_PORTABLE7=1 + set DO_PORTABLE78=1 + set DO_PORTABLE259=1 + set DO_VS=1 + set TEST_NET40=1 + set TEST_PORTABLE47=1 + set TEST_PORTABLE7=1 + set TEST_PORTABLE78=1 + set TEST_PORTABLE259=1 + set TEST_VS=1 + set TEST_CAMBRIDGE_SUITE=1 + set CONF_CAMBRIDGE_SUITE=Smoke + set TEST_QA_SUITE=1 + set CONF_QA_SUITE=Smoke +) + +if /i '%BUILD_PROFILE%' == 'smoke_only' ( + set CONF_CAMBRIDGE_SUITE=Smoke + set CONF_QA_SUITE=Smoke +) + +if /i '%BUILD_PROFILE%' == 'build_only' ( + set TEST_NET40=0 + set TEST_PORTABLE47=0 + set TEST_PORTABLE7=0 + set TEST_PORTABLE78=0 + set TEST_PORTABLE259=0 + set TEST_VS=0 + set TEST_CAMBRIDGE_SUITE=0 + set TEST_QA_SUITE=0 +) + +goto :EOF + +:MAIN + +REM after this point, BUILD_PROFILE variable should not be used, use only DO_* or TEST_* + +echo Build/Tests configuration: +echo. +echo DO_NET40=%DO_NET40% +echo DO_PORTABLE47=%DO_PORTABLE47% +echo DO_PORTABLE7=%DO_PORTABLE7% +echo DO_PORTABLE78=%DO_PORTABLE78% +echo DO_PORTABLE259=%DO_PORTABLE259% +echo DO_VS=%DO_VS% +echo. +echo TEST_NET40=%TEST_NET40% +echo TEST_PORTABLE47=%TEST_PORTABLE47% +echo TEST_PORTABLE7=%TEST_PORTABLE7% +echo TEST_PORTABLE78=%TEST_PORTABLE78% +echo TEST_PORTABLE259=%TEST_PORTABLE259% +echo TEST_VS=%TEST_VS% +echo TEST_CAMBRIDGE_SUITE=%TEST_CAMBRIDGE_SUITE% +echo CONF_CAMBRIDGE_SUITE=%CONF_CAMBRIDGE_SUITE% +echo TEST_QA_SUITE=%TEST_QA_SUITE% +echo CONF_QA_SUITE=%CONF_QA_SUITE% +echo. + @echo on set APPVEYOR_CI=1 :: Check prerequisites if not '%VisualStudioVersion%' == '' goto vsversionset +if exist "%VS140COMNTOOLS%..\ide\devenv.exe" set VisualStudioVersion=14.0 if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\common7\ide\devenv.exe" set VisualStudioVersion=14.0 if exist "%ProgramFiles%\Microsoft Visual Studio 14.0\common7\ide\devenv.exe" set VisualStudioVersion=14.0 if not '%VisualStudioVersion%' == '' goto vsversionset +if exist "%VS120COMNTOOLS%..\ide\devenv.exe" set VisualStudioVersion=12.0 if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0 if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0 :vsversionset -if '%VisualStudioVersion%' == '' echo Error: Could not find an installation of Visual Studio && goto :eof +if '%VisualStudioVersion%' == '' echo Error: Could not find an installation of Visual Studio && goto :failure if exist "%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" if exist "%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" -if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. && goto :eof +if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. && goto :failure + +:: See +if defined APPVEYOR ( + rem See + if exist "C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" ( + rem HACK HACK HACK + set _msbuildexe=%_msbuildexe% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + ) +) set _ngenexe="%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\ngen.exe" if not exist %_ngenexe% echo Error: Could not find ngen.exe. && goto :failure -.\.nuget\NuGet.exe restore packages.config -PackagesDirectory packages +.\.nuget\NuGet.exe restore packages.config -PackagesDirectory packages -ConfigFile .nuget\nuget.config @if ERRORLEVEL 1 echo Error: Nuget restore failed && goto :failure :: Build @@ -36,63 +234,120 @@ if not exist %_ngenexe% echo Error: Could not find ngen.exe. && goto :failure %_msbuildexe% src/fsharp-compiler-build.proj /p:Configuration=Release @if ERRORLEVEL 1 echo Error: compiler build failed && goto :failure +if '%DO_PORTABLE47%' == '1' ( %_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable47 /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library portable47 build failed && goto :failure +) +if '%DO_PORTABLE7%' == '1' ( %_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable7 /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library portable7 build failed && goto :failure +) +if '%DO_PORTABLE78%' == '1' ( %_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable78 /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library portable78 build failed && goto :failure +) +if '%DO_PORTABLE259%' == '' ( %_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable259 /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library portable259 build failed && goto :failure +) +if '%TEST_NET40%' == '1' ( %_msbuildexe% src/fsharp-compiler-unittests-build.proj /p:Configuration=Release @if ERRORLEVEL 1 echo Error: compiler unittests build failed && goto :failure %_msbuildexe% src/fsharp-library-unittests-build.proj /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library unittests build failed && goto :failure +) +if '%TEST_PORTABLE47%' == '1' ( %_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable47 /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library unittests build failed portable47 && goto :failure +) +if '%TEST_PORTABLE7%' == '1' ( %_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable7 /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library unittests build failed portable7 && goto :failure +) +if '%TEST_PORTABLE78%' == '1' ( %_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable78 /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library unittests build failed portable78 && goto :failure +) +if '%TEST_PORTABLE259%' == '1' ( %_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable259 /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library unittests build failed portable259 && goto :failure +) -%_msbuildexe% vsintegration\fsharp-vsintegration-build.proj /p:Configuration=Release +if '%DO_VS%' == '1' ( +%_msbuildexe% VisualFSharp.sln /p:Configuration=Release @if ERRORLEVEL 1 echo Error: VS integration build failed && goto :failure +) +if '%TEST_VS%' == '1' ( %_msbuildexe% vsintegration\fsharp-vsintegration-unittests-build.proj /p:Configuration=Release @if ERRORLEVEL 1 echo Error: VS integration unit tests build failed && goto :failure +) @echo on call src\update.cmd release -ngen +REM This clobbers the installed F# SDK on the machine +REM call vsintegration\update-vsintegration.cmd release +pushd tests @echo on -call tests\BuildTestTools.cmd release -@if ERRORLEVEL 1 echo Error: 'tests\BuildTestTools.cmd release' failed && goto :failure +call BuildTestTools.cmd release +@if ERRORLEVEL 1 echo Error: 'BuildTestTools.cmd release' failed && goto :failure @echo on -pushd tests +if '%TEST_CAMBRIDGE_SUITE%' == '1' ( +set FSHARP_TEST_SUITE_USE_NUNIT_RUNNER=true -call RunTests.cmd release fsharp Smoke -@if ERRORLEVEL 1 type testresults\fsharp_failures.log && echo Error: 'RunTests.cmd release fsharp Smoke' failed && goto :failure +%_msbuildexe% fsharp\fsharp.tests.fsproj /p:Configuration=Release +@if ERRORLEVEL 1 echo Error: fsharp cambridge tests for nunit failed && goto :failure -call RunTests.cmd release fsharpqa Smoke -@if ERRORLEVEL 1 type testresults\fsharpqa_failures.log && echo Error: 'RunTests.cmd release fsharpqa Smoke' failed && goto :failure +call RunTests.cmd release fsharp %CONF_CAMBRIDGE_SUITE% +@if ERRORLEVEL 1 type testresults\fsharp_failures.log && echo Error: 'RunTests.cmd release fsharp %CONF_CAMBRIDGE_SUITE%' failed && goto :failure +set FSHARP_TEST_SUITE_USE_NUNIT_RUNNER= +) +if '%TEST_QA_SUITE%' == '1' ( +call RunTests.cmd release fsharpqa %CONF_QA_SUITE% +@if ERRORLEVEL 1 type testresults\fsharpqa_failures.log && echo Error: 'RunTests.cmd release fsharpqa %CONF_QA_SUITE%' failed && goto :failure +) + +if '%TEST_NET40%' == '1' ( call RunTests.cmd release compilerunit @if ERRORLEVEL 1 echo Error: 'RunTests.cmd release compilerunit' failed && goto :failure call RunTests.cmd release coreunit @if ERRORLEVEL 1 echo Error: 'RunTests.cmd release coreunit' failed && goto :failure +) + +if '%TEST_PORTABLE47%' == '1' ( +call RunTests.cmd release coreunitportable47 +@if ERRORLEVEL 1 echo Error: 'RunTests.cmd release coreunitportable47' failed && goto :failure +) + +if '%TEST_PORTABLE7%' == '1' ( +call RunTests.cmd release coreunitportable7 +@if ERRORLEVEL 1 echo Error: 'RunTests.cmd release coreunitportable7' failed && goto :failure +) + +if '%TEST_PORTABLE78%' == '1' ( +call RunTests.cmd release coreunitportable78 +@if ERRORLEVEL 1 echo Error: 'RunTests.cmd release coreunitportable78' failed && goto :failure +) + +if '%TEST_PORTABLE259%' == '1' ( +call RunTests.cmd release coreunitportable259 +@if ERRORLEVEL 1 echo Error: 'RunTests.cmd release coreunitportable259' failed && goto :failure +) + +rem tests for TEST_VS are not executed popd diff --git a/appveyor.yml b/appveyor.yml index 0dbbaa64802..f528d69f665 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,8 +1,14 @@ -os: Windows Server 2012 R2 +os: Visual Studio 2015 + +environment: + matrix: + - BUILD_PROFILE: net40,portable7,portable47,portable78,portable259,vs + - BUILD_PROFILE: cambridge_suite,smoke_only + - BUILD_PROFILE: qa_suite,smoke_only init: build_script: - - cmd: appveyor-build.cmd + - cmd: appveyor-build.cmd %BUILD_PROFILE% # scripts that run after cloning repository install: @@ -13,4 +19,4 @@ test: off version: 0.0.1.{build} artifacts: - path: Release - name: Release + name: Release \ No newline at end of file diff --git a/jenkins-build.cmd b/jenkins-build.cmd new file mode 100644 index 00000000000..0e5eb363620 --- /dev/null +++ b/jenkins-build.cmd @@ -0,0 +1,118 @@ +@echo off + +:ARGUMENTS_VALIDATION + +if /I "%1" == "/help" (goto :USAGE) +if /I "%1" == "/h" (goto :USAGE) +if /I "%1" == "/?" (goto :USAGE) + +set BUILD_PROFILE=%1 + +if /I "%BUILD_PROFILE%" == "debug" ( + goto :ARGUMENTS_OK +) +if /I "%BUILD_PROFILE%" == "release" ( + goto :ARGUMENTS_OK +) + +echo '%BUILD_PROFILE%' is not a valid profile +goto :USAGE + +:USAGE + +echo Usage: +echo Builds the source tree using a specific configuration +echo jenkins-build.cmd ^ +exit /b 1 + +:ARGUMENTS_OK + +if not '%VisualStudioVersion%' == '' goto vsversionset +if exist "%VS140COMNTOOLS%..\ide\devenv.exe" set VisualStudioVersion=14.0 +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\common7\ide\devenv.exe" set VisualStudioVersion=14.0 +if exist "%ProgramFiles%\Microsoft Visual Studio 14.0\common7\ide\devenv.exe" set VisualStudioVersion=14.0 +if not '%VisualStudioVersion%' == '' goto vsversionset +if exist "%VS120COMNTOOLS%..\ide\devenv.exe" set VisualStudioVersion=12.0 +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0 +if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0 + +:vsversionset +if '%VisualStudioVersion%' == '' echo Error: Could not find an installation of Visual Studio && goto :failure + +if exist "%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" +if exist "%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" +if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. && goto :failure + +set _ngenexe="%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\ngen.exe" +if not exist %_ngenexe% echo Error: Could not find ngen.exe. && goto :failure + +echo Restoring nuget packages: + +.\.nuget\NuGet.exe restore packages.config -PackagesDirectory packages -ConfigFile .nuget\nuget.config +@if ERRORLEVEL 1 echo Error: Nuget restore failed && goto :failure + +echo Building the source tree using configuration: %BUILD_PROFILE% + +%_msbuildexe% src\fsharp-proto-build.proj +@if ERRORLEVEL 1 echo Error: compiler proto build failed && goto :failure + +%_ngenexe% install Proto\net40\bin\fsc-proto.exe +@if ERRORLEVEL 1 echo Error: NGen of proto failed && goto :failure + +%_msbuildexe% src/fsharp-library-build.proj /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: library build failed && goto :failure + +%_msbuildexe% src/fsharp-compiler-build.proj /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: compiler build failed && goto :failure + +%_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable47 /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: library portable47 build failed && goto :failure + +%_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable7 /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: library portable7 build failed && goto :failure + +%_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable78 /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: library portable78 build failed && goto :failure + +%_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable259 /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: library portable259 build failed && goto :failure + +echo Building the test tree using configuration: %BUILD_PROFILE% + +%_msbuildexe% src/fsharp-compiler-unittests-build.proj /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: compiler unittests build failed && goto :failure + +%_msbuildexe% src/fsharp-library-unittests-build.proj /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: library unittests build failed && goto :failure + +%_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable47 /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: library unittests build failed portable47 && goto :failure + +%_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable7 /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: library unittests build failed portable7 && goto :failure + +%_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable78 /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: library unittests build failed portable78 && goto :failure + +%_msbuildexe% src/fsharp-library-unittests-build.proj /p:TargetFramework=portable259 /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: library unittests build failed portable259 && goto :failure + +%_msbuildexe% tests/fsharp\fsharp.tests.fsproj /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: fsharp cambridge tests for nunit failed && goto :failure + +%_msbuildexe% VisualFSharp.sln /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: VS integration build failed && goto :failure + +%_msbuildexe% vsintegration\fsharp-vsintegration-unittests-build.proj /p:Configuration=%BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: VS integration unit tests build failed && goto :failure + +echo Running update scripts + +@echo on +call tests/BuildTestTools.cmd %BUILD_PROFILE% +@if ERRORLEVEL 1 echo Error: 'BuildTestTools.cmd %BUILD_PROFILE%' failed && goto :failure + +goto :eof + +:failure +exit /b 1 diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll new file mode 100644 index 00000000000..1c3381272a8 Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Interactive.Settings.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Interactive.Settings.dll new file mode 100644 index 00000000000..6df56160452 Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Interactive.Settings.dll differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Compiler.Server.Shared.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Server.Shared.dll similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.Compiler.Server.Shared.dll rename to lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.Server.Shared.dll diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Compiler.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.dll similarity index 56% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.Compiler.dll rename to lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.dll index 122194a8d8c..13cf1c8bee2 100644 Binary files a/lkg/FSharp-4.0.30319.1/bin/FSharp.Compiler.dll and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Compiler.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.dll new file mode 100644 index 00000000000..d2ede9e9789 Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.optdata b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.optdata new file mode 100644 index 00000000000..896507e6b38 Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.optdata differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.sigdata b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.sigdata new file mode 100644 index 00000000000..a383f91dd43 Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.sigdata differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.xml b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.xml similarity index 68% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.Core.xml rename to lkg/FSharp-14.0.23413.0/bin/FSharp.Core.xml index 81a308d414f..803e617ed71 100644 --- a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.xml +++ b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core.xml @@ -2,30 +2,6 @@ FSharp.Core - - - - - - - - - - - - - - - - - - - - - - - - Gets the tail of the list, which is a list containing all the elements of the list, excluding the first element @@ -47,6 +23,12 @@ Returns an empty list of a particular type + + Gets a slice of the list, the elements of the list from the given start index to the given end index. + The start index. + The end index. + The sub list specified by the input indices. + Returns a list with head as its first element and tail as its subsequent elements A new head value for the list. @@ -83,9 +65,6 @@ Removes an element from the domain of the map. No exception is raised if the element is not present. The input key. The resulting map. - - - Tests if an element is in the domain of the map. @@ -93,11 +72,12 @@ True if the map contains the given key. - Returns a new map with the binding added to the given map. + Returns a new map with the binding added to the given map. + If a binding with the given key already exists in the input map, the existing binding is replaced by the new binding in the result map. The input key. The resulting map. - + Builds a map that contains the bindings of the given IEnumerable. The input sequence of key/value pairs. The resulting map. @@ -165,9 +145,6 @@ one element of the second is not in the first. The set to test against. True if this set is a proper subset of otherSet. - - - A useful shortcut for Set.contains. See the Set module for further operations on sets. @@ -233,7 +210,7 @@ The zero-based output array. - + Builds a new array whose elements are the results of applying the given function to each of the elements of the array. The integer indices passed to the function indicates the element being transformed. @@ -247,11 +224,11 @@ An array whose elements have been transformed by the given mapping. - + Builds a new array whose elements are the results of applying the given function to each of the elements of the array. - For non-zero-based arrays the basing on an input array will be propogated to the output + For non-zero-based arrays the basing on an input array will be propagated to the output array. A function that is applied to transform each item of the input array. @@ -273,14 +250,14 @@ The length of the array in the first dimension. - + Applies the given function to each element of the array. The integer indices passed to the function indicates the index of element. A function to apply to each element of the array with the indices available as an argument. The input array. - + Applies the given function to each element of the array. A function to apply to each element of the array. @@ -309,7 +286,7 @@ The created array. Thrown when base1, base2, length1, or length2 is negative. - + Creates a based array given the dimensions and a generator function to compute the elements. The base for the first dimension of the array. @@ -340,7 +317,7 @@ The created array. Thrown when length1 or length2 is negative. - + Creates an array given the dimensions and a generator function to compute the elements. The length of the first dimension of the array. @@ -367,7 +344,7 @@ Builds a new array whose elements are the same as the input array. - For non-zero-based arrays the basing on an input array will be propogated to the output + For non-zero-based arrays the basing on an input array will be propagated to the output array. The input array. @@ -417,22 +394,22 @@ The index along the third dimension. The value to set at the given index. - + Builds a new array whose elements are the results of applying the given function to each of the elements of the array. The integer indices passed to the function indicates the element being transformed. - For non-zero-based arrays the basing on an input array will be propogated to the output + For non-zero-based arrays the basing on an input array will be propagated to the output array. The function to transform the elements at each index in the array. The input array. The array created from the transformed elements. - + Builds a new array whose elements are the results of applying the given function to each of the elements of the array. - For non-zero-based arrays the basing on an input array will be propogated to the output + For non-zero-based arrays the basing on an input array will be propagated to the output array. The function to transform each element of the array. The input array. @@ -453,13 +430,13 @@ The input array. The length of the array in the first dimension. - - Applies the given function to each element of the array. The integer indicies passed to the + + Applies the given function to each element of the array. The integer indices passed to the function indicates the index of element. The function to apply to each element of the array. The input array. - + Applies the given function to each element of the array. The function to apply to each element of the array. The input array. @@ -472,7 +449,7 @@ The index along the third dimension. The value at the given index. - + Creates an array given the dimensions and a generator function to compute the elements. The length of the first dimension. The length of the second dimension. @@ -538,7 +515,7 @@ The input array. The length of the array in the first dimension. - + Creates an array given the dimensions and a generator function to compute the elements. The length of the first dimension. The length of the second dimension. @@ -565,6 +542,7 @@ The first input array. The second input array. The third input array. + Thrown when any of the input arrays are null. Thrown when the input arrays differ in length. The array of tupled elements. @@ -573,65 +551,196 @@ raised. The first input array. The second input array. + Thrown when either of the input arrays is null. Thrown when the input arrays differ in length. The array of tupled elements. - + + Returns an array of sliding windows containing elements drawn from the input + array. Each window is returned as a fresh array. + The number of elements in each window. + The input array. + The result array. + Thrown when the input array is null. + Thrown when windowSize is not positive. + + + Returns a new array containing only the elements of the array + for which the given predicate returns "true". + The function to test the input elements. + The input array. + An array containing the elements for which the given predicate returns true. + + Thrown when the input array is null. + + Splits an array of triples into three arrays. The input array. The tuple of three arrays. + Thrown when the input array is null. - + Splits an array of pairs into two arrays. The input array. The two arrays. + Thrown when the input array is null. + + + Returns an array that contains the elements generated by the given computation. + The given initial state argument is passed to the element generator. + A function that takes in the current state and returns an option tuple of the next + element of the array and the next state value. + The initial state value. + The result array. + + + Returns the index of the last element in the array + that satisfies the given predicate. + The function to test the input elements. + The input array. + Thrown when the input array is null. + The index of the last element that satisfies the predicate, or None. + + + Tries to find the nth element in the array. + Returns None if index is negative or the input array does not contain enough elements. + The index of element to retrieve. + The input array. + The nth element of the array or None. + Thrown when the input array is null. - + Returns the index of the first element in the array that satisfies the given predicate. The function to test the input elements. The input array. + Thrown when the input array is null. The index of the first element that satisfies the predicate, or None. - + + Returns the last element for which the given function returns true. + Return None if no such element exists. + The function to test the input elements. + The input array. + Thrown when the input array is null. + The last element that satisfies the predicate, or None. + + Returns the first element for which the given function returns true. Return None if no such element exists. The function to test the input elements. The input array. The first element that satisfies the predicate, or None. + Thrown when the input array is null. + + + Returns at most N elements in a new array. + The maximum number of items to return. + The input array. + The result array. + Thrown when the input array is null. Views the given array as a sequence. The input array. The sequence of array elements. + Thrown when the input array is null. Builds a list from the given array. The input array. The list of array elements. + Thrown when the input array is null. + + + Returns a new array containing the elements of the original except the first element. + + The input array. + Thrown when the array is empty. + Thrown when the input array is null. + A new array containing the elements of the original except the first element. + + + Returns an array that contains all elements of the original array while the + given predicate returns true, and then returns no further elements. + + A function that evaluates to false when no more items should be returned. + The input array. + + The result array. + + Thrown when the input array is null. - + + Returns the first N elements of the array. + Throws InvalidOperationException + if the count exceeds the number of elements in the array. Array.truncate + returns as many items as the array contains instead of throwing an exception. + + The number of items to take. + The input array. + + The result array. + + Thrown when the input array is null. + Thrown when the input array is empty. + Thrown when count exceeds the number of elements + in the list. + + Returns the sum of the results generated by applying the function to each element of the array. The function to transform the array elements into the type to be summed. The input array. The resulting sum. + Thrown when the input array is null. Returns the sum of the elements in the array. The input array. The resulting sum. + Thrown when the input array is null. + + + Sorts the elements of an array, in descending order, using the given projection for the keys and returning a new array. + Elements are compared using Operators.compare. + + This is not a stable sort, i.e. the original order of equal elements is not necessarily preserved. + For a stable sort, consider using Seq.sort. + The function to transform array elements into the type that is compared. + The input array. + The sorted array. + + + Sorts the elements of an array, in descending order, returning a new array. Elements are compared using Operators.compare. + + This is not a stable sort, i.e. the original order of equal elements is not necessarily preserved. + For a stable sort, consider using Seq.sort. + The input array. + The sorted array. + + + Splits an array into two arrays, at the given index. + The index at which the array is split. + The input array. + The two split arrays. + + Thrown when the input array is null. + Thrown when split index exceeds the number of elements + in the array. Sorts the elements of an array by mutating the array in-place, using the given comparison function. Elements are compared using Operators.compare. The input array. + Thrown when the input array is null. - + Sorts the elements of an array by mutating the array in-place, using the given comparison function as the order. The function to compare pairs of array elements. The input array. + Thrown when the input array is null. - + Sorts the elements of an array by mutating the array in-place, using the given projection for the keys. Elements are compared using Operators.compare. @@ -639,8 +748,9 @@ For a stable sort, consider using Seq.sort. The function to transform array elements into the type that is compared. The input array. + Thrown when the input array is null. - + Sorts the elements of an array, using the given comparison function as the order, returning a new array. This is not a stable sort, i.e. the original order of equal elements is not necessarily preserved. @@ -648,8 +758,9 @@ The function to compare pairs of array elements. The input array. The sorted array. + Thrown when the input array is null. - + Sorts the elements of an array, using the given projection for the keys and returning a new array. Elements are compared using Operators.compare. @@ -658,6 +769,7 @@ The function to transform array elements into the type that is compared. The input array. The sorted array. + Thrown when the input array is null. Sorts the elements of an array, returning a new array. Elements are compared using Operators.compare. @@ -666,6 +778,7 @@ For a stable sort, consider using Seq.sort. The input array. The sorted array. + Thrown when the input array is null. Builds a new array that contains the given subrange specified by @@ -674,60 +787,103 @@ The index of the first element of the sub array. The length of the sub array. The created sub array. + Thrown when the input array is null. + Thrown when either startIndex or count is negative, + or when there aren't enough elements in the input array. + + + Bypasses elements in an array while the given predicate returns true, and then returns + the remaining elements in a new array. + A function that evaluates an element of the array to a boolean value. + The input array. + The created sub array. + Thrown when the input array is null. + + + Builds a new array that contains the elements of the given array, excluding the first N elements. + The number of elements to skip. + The input array. + A copy of the input array, after removing the first N elements. + Thrown when the input array is null. + Thrown when count is negative or exceeds the number of + elements in the array. Sets an element of an array. The input array. The input index. The input value. + Thrown when the input array is null. + Thrown when the index is negative or the input array does not contain enough elements. + + + Returns an array that contains one item only. + + The input item. + + The result array of one item. - + Like foldBack, but return both the intermediary and final results. The function to update the state given the input elements. The input array. The initial state. The array of state values. + Thrown when the input array is null. - + Like fold, but return the intermediary and final results. The function to update the state given the input elements. The initial state. The input array. The array of state values. + Thrown when the input array is null. Returns a new array with the elements in reverse order. The input array. The reversed array. + Thrown when the input array is null. - - Applies a function to each element of the array, threading an accumulator argument + + Creates an array by replicating the given initial value. + The number of elements to replicate. + The value to replicate + The generated array. + Thrown when count is negative. + + + Applies a function to each element of the array, starting from the end, threading an accumulator argument through the computation. If the input function is f and the elements are i0...iN - then computes f i0 (...(f iN-1 iN)). - Raises ArgumentException if the array has size zero. - The function to reduce a pair of elements to a single element. + then computes f i0 (...(f iN-1 iN)). + A function that takes in the next-to-last element of the list and the + current accumulated result to produce the next accumulated result. The input array. + Thrown when the input array is null. Thrown when the input array is empty. The final result of the reductions. - + Applies a function to each element of the array, threading an accumulator argument through the computation. If the input function is f and the elements are i0...iN then computes f (... (f i0 i1)...) iN. Raises ArgumentException if the array has size zero. The function to reduce a pair of elements to a single element. The input array. + Thrown when the input array is null. Thrown when the input array is empty. - The final result of the redcutions. + The final result of the reductions. - + Returns an array with all elements permuted according to the specified permutation. The function that maps input indices to output indices. The input array. The output array. + Thrown when the input array is null. + Thrown when indexMap does not produce a valid permutation. - + Splits the collection into two collections, containing the elements for which the given predicate returns "true" and "false" respectively. @@ -735,23 +891,36 @@ The input array. A pair of arrays. The first containing the elements the predicate evaluated to true, and the second containing those evaluated to false. + Thrown when the input array is null. + + + Returns an array of each element in the input array and its predecessor, with the + exception of the first element which is only returned as the predecessor of the second element. + + The input array. + + The result array. + + Thrown when the input sequence is null. Builds a new array from the given enumerable object. The input sequence. The array of elements from the sequence. + Thrown when the input sequence is null. Builds an array from the given list. The input list. The array of elements from the list. - + Returns the lowest of all elements of the array, compared via Operators.min on the function result. Throws ArgumentException for empty arrays. The function to transform the elements into a type supporting comparison. The input array. + Thrown when the input array is null. Thrown when the input array is empty. The minimum element. @@ -760,15 +929,17 @@ Throws ArgumentException for empty arrays The input array. + Thrown when the input array is null. Thrown when the input array is empty. The minimum element. - + Returns the greatest of all elements of the array, compared via Operators.max on the function result. Throws ArgumentException for empty arrays. The function to transform the elements into a type supporting comparison. The input array. + Thrown when the input array is null. Thrown when the input array is empty. The maximum element. @@ -777,18 +948,20 @@ Throws ArgumentException for empty arrays. The input array. + Thrown when the input array is null. Thrown when the input array is empty. The maximum element. - + Builds a new array whose elements are the results of applying the given function to each of the elements of the array. The integer index passed to the function indicates the index of element being transformed. The function to transform elements and their indices. The input array. The array of transformed elements. + Thrown when the input array is null. - + Builds a new collection whose elements are the results of applying the given function to the corresponding elements of the two collections pairwise, also passing the index of the elements. The two input arrays must have the same lengths, otherwise an ArgumentException is @@ -796,10 +969,42 @@ The function to transform pairs of input elements and their indices. The first input array. The second input array. + Thrown when either of the input arrays is null. + Thrown when the input arrays differ in length. + The array of transformed elements. + + + Builds a new collection whose elements are the results of applying the given function + to the corresponding triples from the three collections. The three input + arrays must have the same length, otherwise an ArgumentException is + raised. + The function to transform the pairs of the input elements. + The first input array. + The second input array. + The third input array. Thrown when the input arrays differ in length. + Thrown when any of the input arrays is null. The array of transformed elements. - + + Combines map and foldBack. Builds a new array whose elements are the results of applying the given function + to each of the elements of the input array. The function is also used to accumulate a final value. + The function to transform elements from the input array and accumulate the final value. + The input array. + The initial state. + Thrown when the input array is null. + The array of transformed elements, and the final accumulated value. + + + Combines map and fold. Builds a new array whose elements are the results of applying the given function + to each of the elements of the input array. The function is also used to accumulate a final value. + The function to transform elements from the input array and accumulate the final value. + The initial state. + The input array. + Thrown when the input array is null. + The array of transformed elements, and the final accumulated value. + + Builds a new collection whose elements are the results of applying the given function to the corresponding elements of the two collections pairwise. The two input arrays must have the same lengths, otherwise an ArgumentException is @@ -808,72 +1013,135 @@ The first input array. The second input array. Thrown when the input arrays differ in length. + Thrown when either of the input arrays is null. The array of transformed elements. - + Builds a new array whose elements are the results of applying the given function to each of the elements of the array. The function to transform elements of the array. The input array. The array of transformed elements. + Thrown when the input array is null. + + + Returns the last element of the array. + Return None if no such element exists. + The input array. + The last element of the array or None. + Thrown when the input sequence is null. Returns the length of an array. You can also use property arr.Length. The input array. The length of the array. + Thrown when the input array is null. + + + Gets an element from an array. + The input index. + The input array. + The value of the array at the given index. + Thrown when the input array is null. + Thrown when the index is negative or the input array does not contain enough elements. - + + Returns the last element of the array. + The input array. + The last element of the array. + Thrown when the input array is null. + Thrown when the input does not have any elements. + + Applies the given function to pair of elements drawn from matching indices in two arrays, also passing the index of the elements. The two arrays must have the same lengths, otherwise an ArgumentException is raised. The function to apply to each index and pair of elements. The first input array. The second input array. + Thrown when either of the input arrays is null. Thrown when the input arrays differ in length. - + Applies the given function to each element of the array. The integer passed to the function indicates the index of element. The function to apply to each index and element. The input array. + Thrown when the input array is null. - + Applies the given function to pair of elements drawn from matching indices in two arrays. The two arrays must have the same lengths, otherwise an ArgumentException is raised. The function to apply. The first input array. The second input array. + Thrown when either of the input arrays is null. Thrown when the input arrays differ in length. - + Applies the given function to each element of the array. The function to apply. The input array. + Thrown when the input array is null. Returns true if the given array is empty, otherwise false. The input array. True if the array is empty. + Thrown when the input array is null. Creates an array where the entries are initially the default value Unchecked.defaultof<'T>. The length of the array to create. The created array. + Thrown when count is negative. - + Creates an array given the dimension and a generator function to compute the elements. The number of elements to initialize. The function to generate the initial values for each index. The created array. + Thrown when count is negative. + + + Builds a new array whose elements are the corresponding elements of the input array + paired with the integer index (from 0) of each element. + The input array. + The array of indexed elements. + Thrown when the input array is null. + + + Applies a key-generating function to each element of an array and yields an array of + unique keys. Each unique key contains an array of all elements that match + to this key. + + A function that transforms an element of the array into a comparable key. + The input array. + + The result array. + + Thrown when the input array is null. + + + Returns the first element of the array. + + The input array. + + The first element of the array. + + Thrown when the input array is null. + Thrown when the input array is empty. Gets an element from an array. The input array. The input index. The value of the array at the given index. + Thrown when the input array is null. + Thrown when the index is negative or the input array does not contain enough elements. - + Apply a function to pairs of elements drawn from the two collections, right-to-left, threading an accumulator argument through the computation. The two input arrays must have the same lengths, otherwise an ArgumentException is @@ -882,10 +1150,11 @@ The first input array. The second input array. The initial state. + Thrown when either of the input arrays is null. Thrown when the input arrays differ in length. The final state. - + Applies a function to pairs of elements drawn from the two collections, left-to-right, threading an accumulator argument through the computation. The two input @@ -895,19 +1164,21 @@ The initial state. The first input array. The second input array. + Thrown when either of the input arrays is null. Thrown when the input arrays differ in length. The final state. - - Applies a function to each element of the array, threading an accumulator argument + + Applies a function to each element of the array, starting from the end, threading an accumulator argument through the computation. If the input function is f and the elements are i0...iN then computes f i0 (...(f iN s)) The function to update the state given the input elements. The input array. The initial state. - The final state. + The state object after the folding function is applied to each element of the array. + Thrown when the input array is null. - + Applies a function to each element of the collection, threading an accumulator argument through the computation. If the input function is f and the elements are i0...iN then computes f (... (f s i0)...) iN @@ -915,8 +1186,9 @@ The initial state. The input array. The final state. + Thrown when the input array is null. - + Tests if all corresponding elements of the array satisfy the given predicate pairwise. The predicate is applied to matching elements in the two collections up to the lesser of the @@ -927,10 +1199,11 @@ The function to test the input elements. The first input array. The second input array. + Thrown when either of the input arrays is null. Thrown when the input arrays differ in length. True if all of the array elements satisfy the predicate. - + Tests if all elements of the array satisfy the given predicate. The predicate is applied to the elements of the input collection. If any application @@ -939,34 +1212,59 @@ The function to test the input elements. The input array. True if all of the array elements satisfy the predicate. + Thrown when the input array is null. + + + Returns the index of the last element in the array + that satisfies the given predicate. Raise KeyNotFoundException if + none of the elements satisfy the predicate. + The function to test the input elements. + The input array. + Thrown if predicate + never returns true. + Thrown when the input array is null. + The index of the last element in the array that satisfies the given predicate. - + Returns the index of the first element in the array that satisfies the given predicate. Raise KeyNotFoundException if - none of the elements satisy the predicate. + none of the elements satisfy the predicate. The function to test the input elements. The input array. Thrown if predicate never returns true. + Thrown when the input array is null. The index of the first element in the array that satisfies the given predicate. - + + Returns the last element for which the given function returns 'true'. + Raise KeyNotFoundException if no such element exists. + The function to test the input elements. + The input array. + Thrown if predicate + never returns true. + Thrown when the input array is null. + The last element for which predicate returns true. + + Returns the first element for which the given function returns 'true'. Raise KeyNotFoundException if no such element exists. The function to test the input elements. The input array. + Thrown when the input array is null. Thrown if predicate never returns true. The first element for which predicate returns true. - + Returns a new collection containing only the elements of the collection for which the given predicate returns "true". The function to test the input elements. The input array. An array containing the elements for which the given predicate returns true. + Thrown when the input array is null. - + Tests if any pair of corresponding elements of the arrays satisfies the given predicate. The predicate is applied to matching elements in the two collections up to the lesser of the @@ -978,8 +1276,10 @@ The first input array. The second input array. True if any result from predicate is true. + Thrown when either of the input arrays is null. + Thrown when the input arrays differ in length. - + Tests if any element of the array satisfies the given predicate. The predicate is applied to the elements of the input array. If any application @@ -988,24 +1288,89 @@ The function to test the input elements. The input array. True if any result from predicate is true. + Thrown when the input array is null. + + + Returns a new list with the distinct elements of the input array which do not appear in the itemsToExclude sequence, + using generic hash and equality comparisons to compare values. + + A sequence whose elements that also occur in the input array will cause those elements to be + removed from the result. + An array whose elements that are not also in itemsToExclude will be returned. + + An array that contains the distinct elements of array that do not appear in itemsToExclude. + + Thrown when either itemsToExclude or array is null. + + + Returns the only element of the array. + + The input array. + + The only element of the array. + + Thrown when the input array is null. + Thrown when the input does not have precisely one element. Returns an empty array of the given type. + The empty array. + + + Splits the input array into at most count chunks. + The maximum number of chunks. + The input array. + The array split into chunks. + Thrown when the input array is null. + Thrown when count is not positive. + + + Returns an array that contains no duplicate entries according to the + generic hash and equality comparisons on the keys returned by the given key-generating function. + If an element occurs multiple times in the array then the later occurrences are discarded. + + A function transforming the array items into comparable keys. + The input array. + + The result array. + + Thrown when the input array is null. - + + Returns an array that contains no duplicate entries according to generic hash and + equality comparisons on the entries. + If an element occurs multiple times in the array then the later occurrences are discarded. + + The input array. + + The result array. + + Thrown when the input array is null. + + + Divides the input array into chunks of size at most chunkSize. + The maximum size of each chunk. + The input array. + The array divided into chunks. + Thrown when the input array is null. + Thrown when chunkSize is not positive. + + Applies the given function to each element of the array. Returns the array comprised of the results "x" for each element where the function returns Some(x) The function to generate options from the elements. The input array. The array of results. + Thrown when the input array is null. - + Applies the given function to successive elements, returning the first result where function returns Some(x) for some x. If the function never returns Some(x) then KeyNotFoundException is raised. The function to generate options from the elements. The input array. + Thrown when the input array is null. Thrown if every result from chooser is None. The first result. @@ -1016,36 +1381,85 @@ The index of the first element to set. The number of elements to set. The value to set. + Thrown when the input array is null. + Thrown when either targetIndex or count is negative. - + Applies the given function to successive elements, returning the first result where function returns Some(x) for some x. If the function never returns Some(x) then None is returned. The function to transform the array elements into options. The input array. The first transformed element that is Some(x). + Thrown when the input array is null. + + + Returns the first element of the array, or + None if the array is empty. + The input array. + Thrown when the input array is null. + The first element of the array or None. Creates an array whose elements are all initially the given value. The length of the array to create. The value for the elements. The created array. + Thrown when count is negative. + + + Applies a key-generating function to each element of an array and returns an array yielding unique + keys and their number of occurrences in the original array. + + A function transforming each item of the input array into a key to be + compared against the others. + The input array. + + The result array. + + Thrown when the input array is null. Builds a new array that contains the elements of the given array. The input array. A copy of the input array. + Thrown when the input array is null. + + + Tests if the array contains the specified element. + The value to locate in the input array. + The input array. + True if the input array contains the specified element; false otherwise. + Thrown when the input array is null. Builds a new array that contains the elements of each of the given sequence of arrays. The input sequence of arrays. The concatenation of the sequence of input arrays. + Thrown when the input sequence is null. + + + Compares two arrays using the given comparison function, element by element. + Returns the first non-zero result from the comparison function. If the end of an array + is reached it returns a -1 if the first array is shorter and a 1 if the second array + is shorter. + + A function that takes an element from each array and returns an int. + If it evaluates to a non-zero value iteration is stopped and that value is returned. + The first input array. + The second input array. + + The first non-zero value from the comparison function. + + Thrown when either of the input arrays + is null. - + For each element of the array, applies the given function. Concatenates all the results and return the combined array. The function to create sub-arrays from the input array elements. The input array. The concatenation of the sub-arrays. + Thrown when the input array is null. Reads a range of elements from the first array and write them into the second. @@ -1054,47 +1468,54 @@ The target array. The starting index of the target array. The number of elements to copy. + Thrown when either of the input arrays is null. + Thrown when any of sourceIndex, targetIndex or count are negative, + or when there aren't enough elements in source or target. - + Returns the average of the elements generated by applying the function to each element of the array. The function to transform the array elements before averaging. The input array. Thrown when array is empty. The computed average. + Thrown when the input array is null. Returns the average of the elements in the array. The input array. Thrown when array is empty. The average of the elements in the array. + Thrown when the input array is null. Builds a new array that contains the elements of the first array followed by the elements of the second array. The first input array. The second input array. The resulting array. + Thrown when either of the input arrays is null. - + Split the collection into two collections, containing the elements for which the given predicate returns "true" and "false" respectively Performs the operation in parallel using System.Threading.Parallel.For. - The order in which the given function is applied to indicies is not specified. + The order in which the given function is applied to indices is not specified. The function to test the input elements. The input array. 'T[] * 'T[] + Thrown when the input array is null. - + Create an array given the dimension and a generator function to compute the elements. Performs the operation in parallel using System.Threading.Parallel.For. - The order in which the given function is applied to indicies is not specified. + The order in which the given function is applied to indices is not specified. 'T[] - + Apply the given function to each element of the array. The integer passed to the function indicates the index of element. @@ -1102,16 +1523,18 @@ The order in which the given function is applied to elements of the input array is not specified. The input array. + Thrown when the input array is null. - + Apply the given function to each element of the array. Performs the operation in parallel using System.Threading.Parallel.For. The order in which the given function is applied to elements of the input array is not specified. The input array. + Thrown when the input array is null. - + Build a new array whose elements are the results of applying the given function to each of the elements of the array. The integer index passed to the function indicates the index of element being transformed. @@ -1121,8 +1544,9 @@ The input array. 'U[] + Thrown when the input array is null. - + Build a new array whose elements are the results of applying the given function to each of the elements of the array. @@ -1131,8 +1555,9 @@ The input array. 'U[] + Thrown when the input array is null. - + For each element of the array, apply the given function. Concatenate all the results and return the combined array. Performs the operation in parallel using System.Threading.Parallel.For. @@ -1140,8 +1565,9 @@ The input array. 'U[] + Thrown when the input array is null. - + Apply the given function to each element of the array. Return the array comprised of the results "x" for each element where the function returns Some(x). @@ -1151,6 +1577,7 @@ The function to generate options from the elements. The input array. 'U[] + Thrown when the input array is null. Provides parallel operations on arrays @@ -1158,18 +1585,21 @@ Basic operations on arrays. - + Compare using the given comparer function. A function to compare two values. An object implementing IComparer using the supplied comparer. + + Non-structural comparison. Compare using NonStructuralComparison.compare. + Structural comparison. Compare using Operators.compare. Common notions of comparison identity used with sorted data structures. - + Hash using the given hashing and equality functions. A function to generate a hash code from a value. A function to test equality of two values. @@ -1182,8 +1612,8 @@ and for reference types use System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode and reference equality. - - + + Non-structural hashing. Equality using NonStructuralComparison.(=) and NonStructuralComparison.hash. Structural hashing. Hash using Operators.(=) and Operators.hash. @@ -1204,17 +1634,56 @@ The second input list. A single list containing pairs of matching elements from the input lists. - + + Returns a list of sliding windows containing elements drawn from the input + list. Each window is returned as a fresh list. + The number of elements in each window. + The input list. + The result list. + Thrown when windowSize is not positive. + + + Returns a new list containing only the elements of the list + for which the given predicate returns "true" + The function to test the input elements. + The input list. + A list containing only the elements that satisfy the predicate. + + Splits a list of triples into three lists. The input list. Three lists of split elements. - + Splits a list of pairs into two lists. The input list. Two lists of split elements. - + + Returns a list that contains the elements generated by the given computation. + The given initial state argument is passed to the element generator. + A function that takes in the current state and returns an option tuple of the next + element of the list and the next state value. + The initial state value. + The result list. + + + Returns the index of the last element in the list + that satisfies the given predicate. + Return None if no such element exists. + The function to test the input elements. + The input list. + The index of the last element for which the predicate returns true, or None if + every element evaluates to false. + + + Tries to find the nth element in the list. + Returns None if index is negative or the list does not contain enough elements. + The index to retrieve. + The input list. + The value at the given index or None. + + Returns the index of the first element in the list that satisfies the given predicate. Return None if no such element exists. @@ -1223,7 +1692,15 @@ The index of the first element for which the predicate returns true, or None if every element evaluates to false. - + + Returns the last element for which the given function returns true.. + Return None if no such element exists. + The function to test the input elements. + The input list. + The last element for which the predicate returns true, or None if + every element evaluates to false. + + Returns the first element for which the given function returns true.. Return None if no such element exists. The function to test the input elements. @@ -1231,7 +1708,7 @@ The first element for which the predicate returns true, or None if every element evaluates to false. - + Applies the given function to successive elements, returning Some(x) the first result where function returns Some(x) for some x. If no such element exists then return None. @@ -1239,6 +1716,18 @@ The input list. The first resulting value or None. + + Returns at most N elements in a new list. + The maximum number of items to return. + The input list. + The result list. + + + Returns the first element of the list, or + None if the list is empty. + The input list. + The first element of the list or None. + Views the given list as a sequence. The input list. @@ -1249,10 +1738,38 @@ The input list. The array containing the elements of the list. - + + Returns a list that contains all elements of the original list while the + given predicate returns true, and then returns no further elements. + + A function that evaluates to false when no more items should be returned. + The input list. + + The result list. + + + Returns the first N elements of the list. + Throws InvalidOperationException + if the count exceeds the number of elements in the list. List.truncate + returns as many items as the list contains instead of throwing an exception. + + The number of items to take. + The input list. + + The result list. + + Thrown when the input list is empty. + Thrown when count exceeds the number of elements + in the list. + + + Returns the list after removing the first element. + The input list. + Thrown when the list is empty. + The list after removing the first element. - + Returns the sum of the results generated by applying the function to each element of the list. The function to transform the list elements into the type to be summed. The input list. @@ -1263,6 +1780,30 @@ The input list. The resulting sum. + + Sorts the given list in descending order using Operators.compare. + + This is a stable sort, i.e. the original order of equal elements is preserved. + The input list. + The sorted list. + + + Sorts the given list in descending order using keys given by the given projection. Keys are compared using Operators.compare. + + This is a stable sort, i.e. the original order of equal elements is preserved. + The function to transform the list elements into the type to be compared. + The input list. + The sorted list. + + + Splits a list into two lists, at the given index. + The index at which the list is split. + The input list. + The two split lists. + + Thrown when split index exceeds the number of elements + in the list. + Sorts the given list using Operators.compare. @@ -1270,7 +1811,7 @@ The input list. The sorted list. - + Sorts the given list using keys given by the given projection. Keys are compared using Operators.compare. This is a stable sort, i.e. the original order of equal elements is preserved. @@ -1278,7 +1819,7 @@ The input list. The sorted list. - + Sorts the given list using the given comparison function. This is a stable sort, i.e. the original order of equal elements is preserved. @@ -1286,14 +1827,36 @@ The input list. The sorted list. - + + Bypasses elements in a list while the given predicate returns true, and then returns + the remaining elements of the list. + A function that evaluates an element of the list to a boolean value. + The input list. + The result list. + + + Returns the list after removing the first N elements. + The number of elements to skip. + The input list. + The list after removing the first N elements. + Thrown when count is negative or exceeds the number of + elements in the list. + + + Returns a list that contains one item only. + + The input item. + + The result list of one item. + + Like foldBack, but returns both the intermediary and final results The function to update the state given the input elements. The input list. The initial state. The list of states. - + Applies a function to each element of the collection, threading an accumulator argument through the computation. Take the second argument, and apply the function to it and the first element of the list. Then feed this result into the function along @@ -1309,23 +1872,22 @@ The reversed list. - Creates a list by calling the given generator on each index. + Creates a list by replicating the given initial value. The number of elements to replicate. The value to replicate The generated list. - - Applies a function to each element of the collection, threading an accumulator argument + + Applies a function to each element of the collection, starting from the end, threading an accumulator argument through the computation. If the input function is f and the elements are i0...iN then computes f i0 (...(f iN-1 iN)). - - Raises System.ArgumentException if list is empty - The function to reduce two list elements to a single element. + A function that takes in the next-to-last element of the list and the + current accumulated result to produce the next accumulated result. The input list. Thrown when the list is empty. - The final reduced value. + The final result of the reductions. - + Apply a function to each element of the collection, threading an accumulator argument through the computation. Apply the function to the first two elements of the list. Then feed this result into the function along with the third element and so on. @@ -1338,14 +1900,15 @@ Thrown when the list is empty. The final reduced value. - + Returns a list with all elements permuted according to the specified permutation. The function to map input indices to output indices. The input list. - The permutated list. + The permuted list. + Thrown when indexMap does not produce a valid permutation. - + Applies the given function to successive elements, returning the first result where function returns Some(x) for some x. If no such element exists then raise System.Collections.Generic.KeyNotFoundException @@ -1354,15 +1917,23 @@ Thrown when the list is empty. The first resulting value. - + Splits the collection into two collections, containing the elements for which the given predicate returns true and false - respectively. + respectively. Element order is preserved in both of the created lists. The function to test the input elements. The input list. A list containing the elements for which the predicate evaluated to false and a list containing the elements for which the predicate evaluated to true. + + Returns a list of each element in the input list and its predecessor, with the + exception of the first element which is only returned as the predecessor of the second element. + + The input list. + + The result list. + Builds a new list from the given enumerable object. The input sequence. @@ -1378,8 +1949,9 @@ The input list. The index to retrieve. The value at the given index. + Thrown when the index is negative or the input list does not contain enough elements. - + Returns the lowest of all elements of the list, compared via Operators.min on the function result Raises System.ArgumentException if list is empty. @@ -1396,7 +1968,7 @@ Thrown when the list is empty. The minimum value. - + Returns the greatest of all elements of the list, compared via Operators.max on the function result. Raises System.ArgumentException if list is empty. @@ -1413,14 +1985,14 @@ Thrown when the list is empty. The maximum element. - + Like mapi, but mapping corresponding elements from two lists of equal length. The function to transform pairs of elements from the two lists and their index. The first input list. The second input list. The list of transformed elements. - + Builds a new collection whose elements are the results of applying the given function to each of the elements of the collection. The integer index passed to the function indicates the index (from 0) of element being transformed. @@ -1428,7 +2000,23 @@ The input list. The list of transformed elements. - + + Combines map and foldBack. Builds a new list whose elements are the results of applying the given function + to each of the elements of the input list. The function is also used to accumulate a final value. + The function to transform elements from the input list and accumulate the final value. + The input list. + The initial state. + The list of transformed elements, and the final accumulated value. + + + Combines map and fold. Builds a new list whose elements are the results of applying the given function + to each of the elements of the input list. The function is also used to accumulate a final value. + The function to transform elements from the input list and accumulate the final value. + The initial state. + The input list. + The list of transformed elements, and the final accumulated value. + + Builds a new collection whose elements are the results of applying the given function to the corresponding elements of the three collections simultaneously. The function to transform triples of elements from the input lists. @@ -1437,7 +2025,7 @@ The third input list. The list of transformed elements. - + Builds a new collection whose elements are the results of applying the given function to the corresponding elements of the two collections pairwise. The function to transform pairs of elements from the input lists. @@ -1445,19 +2033,31 @@ The second input list. The list of transformed elements. - + Builds a new collection whose elements are the results of applying the given function to each of the elements of the collection. The function to transform elements from the input list. The input list. The list of transformed elements. + + Returns the last element of the list. + Return None if no such element exists. + The input list. + The last element of the list or None. + Returns the length of the list. The input list. The length of the list. - + + Returns the last element of the list. + The input list. + The last element of the list. + Thrown when the input does not have any elements. + + Applies the given function to two collections simultaneously. The collections must have identical size. The integer passed to the function indicates the index of element. @@ -1465,44 +2065,66 @@ The first input list. The second input list. - + Applies the given function to each element of the collection. The integer passed to the function indicates the index of element. The function to apply to the elements of the list along with their index. The input list. - + Applies the given function to two collections simultaneously. The collections must have identical size. The function to apply to pairs of elements from the input lists. The first input list. The second input list. - + Applies the given function to each element of the collection. The function to apply to elements from the input list. The input list. + + Indexes into the list. The first element has index 0. + The index to retrieve. + The input list. + The value at the given index. + Thrown when the index is negative or the input list does not contain enough elements. + Returns true if the list contains no elements, false otherwise. The input list. True if the list is empty. - + Creates a list by calling the given generator on each index. The length of the list to generate. The function to generate an element from an index. The list of generated elements. + + Returns a new list whose elements are the corresponding elements + of the input list paired with the index (from 0) of each element. + The input list. + The list of indexed elements. + Returns the first element of the list. - Raises System.ArgumentException if list is empty The input list. Thrown when the list is empty. The first element of the list. - + + Applies a key-generating function to each element of a list and yields a list of + unique keys. Each unique key contains a list of all elements that match + to this key. + + A function that transforms an element of the list into a comparable key. + The input list. + + The result list. + + Tests if all corresponding elements of the collection satisfy the given predicate pairwise. The predicate is applied to matching elements in the two collections up to the lesser of the @@ -1516,7 +2138,7 @@ Thrown when the input lists differ in length. True if all of the pairs of elements satisfy the predicate. - + Tests if all elements of the collection satisfy the given predicate. The predicate is applied to the elements of the input list. If any application @@ -1526,7 +2148,7 @@ The input list. True if all of the elements satisfy the predicate. - + Applies a function to corresponding elements of two collections, threading an accumulator argument through the computation. The collections must have identical sizes. If the input function is f and the elements are i0...iN and j0...jN @@ -1537,16 +2159,16 @@ The initial state. The final state value. - - Applies a function to each element of the collection, threading an accumulator argument + + Applies a function to each element of the collection, starting from the end, threading an accumulator argument through the computation. If the input function is f and the elements are i0...iN then computes f i0 (...(f iN s)). The function to update the state given the input elements. The input list. The initial state. - The final state value. + The state object after the folding function is applied to each element of the list. - + Applies a function to corresponding elements of two collections, threading an accumulator argument through the computation. The collections must have identical sizes. If the input function is f and the elements are i0...iN and j0...jN @@ -1557,7 +2179,7 @@ The second input list. The final state value. - + Applies a function to each element of the collection, threading an accumulator argument through the computation. Take the second argument, and apply the function to it and the first element of the list. Then feed this result into the function along @@ -1569,14 +2191,24 @@ The input list. The final state value. - + Returns a new collection containing only the elements of the collection for which the given predicate returns "true" The function to test the input elements. The input list. A list containing only the elements that satisfy the predicate. - + + Returns the index of the last element in the list + that satisfies the given predicate. + Raises KeyNotFoundException if no such element exists. + The function to test the input elements. + The input list. + Thrown if the predicate evaluates to false for all the + elements of the list. + The index of the last element that satisfies the predicate. + + Returns the index of the first element in the list that satisfies the given predicate. Raises KeyNotFoundException if no such element exists. @@ -1586,7 +2218,16 @@ elements of the list. The index of the first element that satisfies the predicate. - + + Returns the last element for which the given function returns true. + Raises KeyNotFoundException if no such element exists. + The function to test the input elements. + The input list. + Thrown if the predicate evaluates to false for + all the elements of the list. + The last element that satisfies the predicate. + + Returns the first element for which the given function returns true. Raises KeyNotFoundException if no such element exists. The function to test the input elements. @@ -1595,7 +2236,7 @@ all the elements of the list. The first element that satisfies the predicate. - + Tests if any pair of corresponding elements of the lists satisfies the given predicate. The predicate is applied to matching elements in the two collections up to the lesser of the @@ -1609,7 +2250,7 @@ Thrown when the input lists differ in length. True if any pair of elements satisfy the predicate. - + Tests if any element of the list satisfies the given predicate. The predicate is applied to the elements of the input list. If any application @@ -1619,21 +2260,104 @@ The input list. True if any element satisfies the predicate. + + Returns the only element of the list. + + The input list. + + The only element of the list. + + Thrown when the input does not have precisely one element. + + + Returns a new list with the distinct elements of the input list which do not appear in the itemsToExclude sequence, + using generic hash and equality comparisons to compare values. + + A sequence whose elements that also occur in the input list will cause those elements to be + removed from the result. + A list whose elements that are not also in itemsToExclude will be returned. + + A list that contains the distinct elements of list that do not appear in itemsToExclude. + + Thrown when itemsToExclude is null. + Returns an empty list of the given type. + + Splits the input list into at most count chunks. + The maximum number of chunks. + The input list. + The list split into chunks. + Thrown when count is not positive. + + + Applies a key-generating function to each element of a list and returns a list yielding unique + keys and their number of occurrences in the original list. + + A function transforming each item of the input list into a key to be + compared against the others. + The input list. + + The result list. + + + Returns a list that contains no duplicate entries according to the + generic hash and equality comparisons on the keys returned by the given key-generating function. + If an element occurs multiple times in the list then the later occurrences are discarded. + + A function transforming the list items into comparable keys. + The input list. + + The result list. + + + Returns a list that contains no duplicate entries according to generic hash and + equality comparisons on the entries. + If an element occurs multiple times in the list then the later occurrences are discarded. + + The input list. + + The result list. + + + Tests if the list contains the specified element. + The value to locate in the input list. + The input list. + True if the input list contains the specified element; false otherwise. + Returns a new list that contains the elements of each the lists in order. The input sequence of lists. The resulting concatenated list. - + + Compares two lists using the given comparison function, element by element. + Returns the first non-zero result from the comparison function. If the end of a list + is reached it returns a -1 if the first list is shorter and a 1 if the second list + is shorter. + + A function that takes an element from each list and returns an int. + If it evaluates to a non-zero value iteration is stopped and that value is returned. + The first input list. + The second input list. + + The first non-zero value from the comparison function. + + For each element of the list, applies the given function. Concatenates all the results and return the combined list. The function to transform each input element into a sublist to be concatenated. The input list. The concatenation of the transformed sublists. - + + Divides the input list into chunks of size at most chunkSize. + The maximum size of each chunk. + The input list. + The list divided into chunks. + Thrown when chunkSize is not positive. + + Applies the given function to each element of the list. Returns the list comprised of the results x for each element where the function returns Some(x) @@ -1641,7 +2365,7 @@ The input list. The list comprising the values selected from the chooser function. - + Returns the average of the elements generated by applying the function to each element of the list. Raises System.ArgumentException if list is empty. @@ -1668,14 +2392,14 @@ Basic operations on lists. - + Returns the key of the first mapping in the collection that satisfies the given predicate. Returns 'None' if no such element exists. The function to test the input elements. The input map. The first key for which the predicate returns true or None if the predicate evaluates to false for each key/value pair. - + Evaluates the function on each mapping in the collection. Returns the key for the first mapping where the function returns 'true'. Raise KeyNotFoundException if no such element exists. The function to test the input elements. @@ -1696,7 +2420,7 @@ The input map. The resulting map. - + Builds two new maps, one containing the bindings for which the given predicate returns 'true', and the other the remaining bindings. The function to test the input elements. @@ -1710,7 +2434,7 @@ The input map. True if the map contains the key. - + Builds a new collection whose elements are the results of applying the given function to each of the elements of the collection. The key passed to the function indicates the key of element being transformed. @@ -1718,52 +2442,52 @@ The input map. The resulting map of keys and transformed values. - + Returns true if the given predicate returns true for all of the bindings in the map. The function to test the input elements. The input map. True if the predicate evaluates to true for all of the bindings in the map. - + Builds a new map containing only the bindings for which the given predicate returns 'true'. The function to test the key/value pairs. The input map. The filtered map. - + Returns true if the given predicate returns true for one of the bindings in the map. The function to test the input elements. The input map. True if the predicate returns true for one of the key/value pairs. - + Applies the given function to each binding in the dictionary The function to apply to each key/value pair. The input map. - + Folds over the bindings in the map The function to update the state given the input key/value pairs. The initial state. The input map. The final state value. - + Folds over the bindings in the map. The function to update the state given the input key/value pairs. The input map. The initial state. The final state value. - + Searches the map looking for the first element where the given function returns a Some value The function to generate options from the key/value pairs. The input map. The first result. - + Searches the map looking for the first element where the given function returns a Some value. The function to generate options from the key/value pairs. The input map. @@ -1803,23 +2527,24 @@ The input map. The sequence of key/value pairs. - + Returns a new map made from the given bindings. The input sequence of key/value pairs. The resulting map. - + Returns a new map made from the given bindings. The input array of key/value pairs. The resulting map. - + Returns a new map made from the given bindings. The input list of key/value pairs. The resulting map. - Returns a new map with the binding added to the given map. + Returns a new map with the binding added to the given map. + If a binding with the given key already exists in the input map, the existing binding is replaced by the new binding in the result map. The input key. The input value. The input map. @@ -1854,18 +2579,15 @@ Thrown when either of the input sequences is null. - Returns a sequence that yields sliding windows of containing elements drawn from the input + Returns a sequence that yields sliding windows containing elements drawn from the input sequence. Each window is returned as a fresh array. - The number of elements in each window. The input sequence. - The result sequence. - Thrown when the input sequence is null. - Thrown when the input sequence is empty. + Thrown when windowSize is not positive. - + Returns a sequence that contains the elements generated by the given computation. The given initial state argument is passed to the element generator. For each IEnumerator elements in the stream are generated on-demand by applying the element @@ -1893,36 +2615,64 @@ Thrown when the input sequence is null. - + Applies the given function to successive elements, returning the first result where the function returns "Some(x)". A function that transforms items from the input sequence into options. The input sequence. - The result sequence. + The chosen element or None. Thrown when the input sequence is null. - + + Returns the index of the last element in the sequence + that satisfies the given predicate. Return None if no such element exists. + This function digests the whole initial sequence as soon as it is called. As a + result this function should not be used with large or infinite sequences. + A function that evaluates to a Boolean when given an item in the sequence. + The input sequence. + The found index or None. + Thrown when the input sequence is null. + + + Tries to find the nth element in the sequence. + Returns None if index is negative or the input sequence does not contain enough elements. + The index of element to retrieve. + The input sequence. + The nth element of the sequence or None. + Thrown when the input sequence is null. + + Returns the index of the first element in the sequence that satisfies the given predicate. Return None if no such element exists. A function that evaluates to a Boolean when given an item in the sequence. The input sequence. - The result sequence. + The found index or None. Thrown when the input sequence is null. - + + Returns the last element for which the given function returns true. + Return None if no such element exists. + This function digests the whole initial sequence as soon as it is called. As a + result this function should not be used with large or infinite sequences. + A function that evaluates to a Boolean when given an item in the sequence. + The input sequence. + The found element or None. + Thrown when the input sequence is null. + + Returns the first element for which the given function returns true. Return None if no such element exists. A function that evaluates to a Boolean when given an item in the sequence. The input sequence. - The result sequence. + The found element or None. Thrown when the input sequence is null. @@ -1931,7 +2681,7 @@ The input sequence. - The result sequence. + The result list. Thrown when the input sequence is null. @@ -1940,11 +2690,11 @@ The input sequence. - The result sequence. + The result array. Thrown when the input sequence is null. - + Returns a sequence that, when iterated, yields elements of the underlying sequence while the given predicate returns true, and then returns no further elements. @@ -1971,14 +2721,25 @@ Thrown when count exceeds the number of elements in the sequence. - + + Returns a sequence that skips 1 element of the underlying sequence and then yields the + remaining elements of the sequence. + + The input sequence. + + The result sequence. + + Thrown when the input sequence is null. + Thrown when the input sequence is empty. + + Returns the sum of the results generated by applying the function to each element of the sequence. The generated elements are summed using the + operator and Zero property associated with the generated type. A function to transform items from the input sequence into the type that will be summed. The input sequence. - The result sequence. + The computed sum. Returns the sum of the elements in the sequence. @@ -1987,9 +2748,43 @@ The input sequence. + The computed sum. + + + Applies a key-generating function to each element of a sequence and yield a sequence ordered + descending by keys. The keys are compared using generic comparison as implemented by Operators.compare. + + This function returns a sequence that digests the whole initial sequence as soon as + that sequence is iterated. As a result this function should not be used with + large or infinite sequences. The function makes no assumption on the ordering of the original + sequence. + + This is a stable sort, that is the original order of equal elements is preserved. + + A function to transform items of the input sequence into comparable keys. + The input sequence. + + The result sequence. + + Thrown when the input sequence is null. + + + Yields a sequence ordered descending by keys. + + This function returns a sequence that digests the whole initial sequence as soon as + that sequence is iterated. As a result this function should not be used with + large or infinite sequences. The function makes no assumption on the ordering of the original + sequence. + + This is a stable sort, that is the original order of equal elements is preserved. + + The input sequence. + The result sequence. + + Thrown when the input sequence is null. - + Applies a key-generating function to each element of a sequence and yield a sequence ordered by keys. The keys are compared using generic comparison as implemented by Operators.compare. @@ -2007,6 +2802,18 @@ Thrown when the input sequence is null. + + Yields a sequence ordered using the given comparison function. + This function returns a sequence that digests the whole initial sequence as soon as + that sequence is iterated. As a result this function should not be used with + large or infinite sequences. The function makes no assumption on the ordering of the original + sequence. + + This is a stable sort, that is the original order of equal elements is preserved. + The function to compare the collection elements. + The input sequence. + The result sequence. + Yields a sequence ordered by keys. @@ -2023,7 +2830,7 @@ Thrown when the input sequence is null. - + Returns a sequence that, when iterated, skips elements of the underlying sequence while the given predicate returns true, and then yields the remaining elements of the sequence. @@ -2052,20 +2859,54 @@ The input item. - The result sequence. + The result sequence of one item. + + + Like foldBack, but returns the sequence of intermediary and final results. + This function returns a sequence that digests the whole initial sequence as soon as that + sequence is iterated. As a result this function should not be used with large or infinite sequences. + + A function that updates the state with each element from the sequence. + The input sequence. + The initial state. + The resulting sequence of computed states. + Thrown when the input sequence is null. - + Like fold, but computes on-demand and returns the sequence of intermediary and final results. A function that updates the state with each element from the sequence. The initial state. The input sequence. - The result sequence. + The resulting sequence of computed states. Thrown when the input sequence is null. - + + Returns a new sequence with the elements in reverse order. + The input sequence. + The reversed sequence. + Thrown when the input sequence is null. + + + Applies a function to each element of the sequence, starting from the end, threading an accumulator argument + through the computation. If the input function is f and the elements are i0...iN + then computes f i0 (...(f iN-1 iN)). + A function that takes in the next-to-last element of the sequence and the + current accumulated result to produce the next accumulated result. + The input sequence. + The final result of the reductions. + Thrown when the input sequence is null. + Thrown when the input sequence is empty. + + + Creates a sequence by replicating the given initial value. + The number of elements to replicate. + The value to replicate + The generated sequence. + + Applies a function to each element of the sequence, threading an accumulator argument through the computation. Begin by applying the function to the first two elements. Then feed this result into the function along with the third element and so on. @@ -2075,7 +2916,7 @@ element of the sequence to produce the next accumulated result. The input sequence. - The result sequence. + The final result of the reduction function. Thrown when the input sequence is null. Thrown when the input sequence is empty. @@ -2092,19 +2933,35 @@ Thrown when the input sequence is null. - + Applies the given function to successive elements, returning the first x where the function returns "Some(x)". A function to transform each item of the input sequence into an option of the output type. The input sequence. - The result sequence. + The selected element. Thrown when the input sequence is null. Thrown when every item of the sequence evaluates to None when the given function is applied. + + Returns a sequence with all elements permuted according to the + specified permutation. + + Note that this function returns a sequence that digests the whole initial sequence as soon as + that sequence is iterated. As a result this function should not be used with + large or infinite sequences. + + The function that maps input indices to output indices. + The input sequence. + + The result sequence. + + Thrown when the input sequence is null. + Thrown when indexMap does not produce a valid permutation. + Returns a sequence of each element in the input sequence and its predecessor, with the exception of the first element which is only returned as the predecessor of the second element. @@ -2137,17 +2994,18 @@ The index of element to retrieve. The input sequence. - The result sequence. + The nth element of the sequence. Thrown when the input sequence is null. + Thrown when the index is negative or the input sequence does not contain enough elements. - + Returns the lowest of all elements of the sequence, compared via Operators.min on the function result. A function to transform items from the input sequence into comparable keys. The input sequence. - The result sequence. + The smallest element of the sequence. Thrown when the input sequence is null. Thrown when the input sequence is empty. @@ -2157,18 +3015,18 @@ The input sequence. - The result sequence. + The smallest element of the sequence. Thrown when the input sequence is null. Thrown when the input sequence is empty. - + Returns the greatest of all elements of the sequence, compared via Operators.max on the function result. A function to transform items from the input sequence into comparable keys. The input sequence. - The result sequence. + The largest element of the sequence. Thrown when the input sequence is null. Thrown when the input sequence is empty. @@ -2181,9 +3039,23 @@ Thrown when the input sequence is null. Thrown when the input sequence is empty. + The largest element of the sequence. + + + Builds a new collection whose elements are the results of applying the given function + to the corresponding pairs of elements from the two sequences. If one input sequence is shorter than + the other then the remaining elements of the longer sequence are ignored. The integer index passed to the + function indicates the index (from 0) of element being transformed. + + A function to transform pairs of items from the input sequences that also supplies the current index. + The first input sequence. + The second input sequence. + The result sequence. + + Thrown when either of the input sequences is null. - + Builds a new collection whose elements are the results of applying the given function to each of the elements of the collection. The integer index passed to the function indicates the index (from 0) of element being transformed. @@ -2195,20 +3067,56 @@ Thrown when the input sequence is null. - + Builds a new collection whose elements are the results of applying the given function - to the corresponding pairs of elements from the two sequences. If one input sequence is shorter than - the other then the remaining elements of the longer sequence are ignored. + to the corresponding triples of elements from the three sequences. If one input sequence if shorter than + the others then the remaining elements of the longer sequences are ignored. - A function to transform pairs of items from the input sequences. - The first input sequence. + The function to transform triples of elements from the input sequences. + The first input sequence. The second input sequence. + The third input sequence. The result sequence. - Thrown when either of the input sequences is null. + Thrown when any of the input sequences is null. - + + Combines map and foldBack. Builds a new collection whose elements are the results of applying the given function + to each of the elements of the collection. The function is also used to accumulate a final value. + This function digests the whole initial sequence as soon as it is called. As a result this function should + not be used with large or infinite sequences. + The function to transform elements from the input collection and accumulate the final value. + The input collection. + The initial state. + Thrown when the input collection is null. + The collection of transformed elements, and the final accumulated value. + + + Combines map and fold. Builds a new collection whose elements are the results of applying the given function + to each of the elements of the collection. The function is also used to accumulate a final value. + This function digests the whole initial sequence as soon as it is called. As a result this function should + not be used with large or infinite sequences. + The function to transform elements from the input collection and accumulate the final value. + The initial state. + The input collection. + Thrown when the input collection is null. + The collection of transformed elements, and the final accumulated value. + + + Builds a new collection whose elements are the results of applying the given function + to the corresponding pairs of elements from the two sequences. If one input sequence is shorter than + the other then the remaining elements of the longer sequence are ignored. + + A function to transform pairs of items from the input sequences. + The first input sequence. + The second input sequence. + + The result sequence. + + Thrown when either of the input sequences is null. + + Builds a new collection whose elements are the results of applying the given function to each of the elements of the collection. The given function will be applied as elements are demanded using the MoveNext method on enumerators retrieved from the @@ -2229,11 +3137,22 @@ The input sequence. - The result sequence. + The length of the sequence. Thrown when the input sequence is null. - + + Applies the given function to two collections simultaneously. If one sequence is shorter than + the other then the remaining elements of the longer sequence are ignored. The integer passed to the + function indicates the index of element. + + A function to apply to each pair of elements from the input sequences along with their index. + The first input sequence. + The second input sequence. + + Thrown when either of the input sequences is null. + + Applies the given function to two collections simultaneously. If one sequence is shorter than the other then the remaining elements of the longer sequence are ignored. @@ -2241,32 +3160,34 @@ The first input sequence. The second input sequence. - The result sequence. - Thrown when either of the input sequences is null. - + Applies the given function to each element of the collection. The integer passed to the function indicates the index of element. A function to apply to each element of the sequence that can also access the current index. The input sequence. - The result sequence. - Thrown when the input sequence is null. - + Applies the given function to each element of the collection. A function to apply to each element of the sequence. The input sequence. - The result sequence. - Thrown when the input sequence is null. - + + Computes the element at the specified index in the collection. + The index of the element to retrieve. + The input sequence. + The element at the specified index of the sequence. + Thrown when the input sequence is null. + Thrown when the index is negative or the input sequence does not contain enough elements. + + Generates a new sequence which, when iterated, will return successive elements by calling the given function. The results of calling the function will not be saved, that is the function will be reapplied as necessary to @@ -2281,11 +3202,10 @@ The result sequence. - + Generates a new sequence which, when iterated, will return successive - elements by calling the given function, up to the given count. The results of calling the function - will not be saved, that is the function will be reapplied as necessary to - regenerate the elements. The function is passed the index of the item being + elements by calling the given function, up to the given count. Each element is saved after its + initialization. The function is passed the index of the item being generated. The returned sequence may be passed between threads safely. However, @@ -2298,12 +3218,55 @@ Thrown when count is negative. + + Builds a new collection whose elements are the corresponding elements of the input collection + paired with the integer index (from 0) of each element. + The input sequence. + The result sequence. + Thrown when the input sequence is null. + Returns true if the sequence contains no elements, false otherwise. The input sequence. - The result sequence. + True if the sequence is empty; false otherwise. + + Thrown when the input sequence is null. + + + Returns the only element of the sequence. + + The input sequence. + + The only element of the sequence. + + Thrown when the input sequence is null. + Thrown when the input does not have precisely one element. + + + Returns the last element of the sequence. + Return None if no such element exists. + + The input sequence. + + The last element of the sequence or None. + + Thrown when the input sequence is null. + + + Returns the last element of the sequence. + The input sequence. + The last element of the sequence. + Thrown when the input sequence is null. + Thrown when the input does not have any elements. + + + Returns the first element of the sequence, or None if the sequence is empty. + + The input sequence. + + The first element of the sequence or None. Thrown when the input sequence is null. @@ -2312,14 +3275,14 @@ The input sequence. - The result sequence. + The first element of the sequence. Thrown when the input sequence is null. Thrown when the input does not have any elements. - + Applies a key-generating function to each element of a sequence and yields a sequence of - unique keys. Each unique key has also contains a sequence of all elements that match + unique keys. Each unique key contains a sequence of all elements that match to this key. This function returns a sequence that digests the whole initial sequence as soon as @@ -2332,7 +3295,7 @@ The result sequence. - + Tests the all pairs of elements drawn from the two sequences satisfy the given predicate. If one sequence is shorter than the other then the remaining elements of the longer sequence are ignored. @@ -2341,11 +3304,11 @@ The first input sequence. The second input sequence. - The result sequence. + True if all pairs satisfy the predicate; false otherwise. Thrown when either of the input sequences is null. - + Tests if all elements of the sequence satisfy the given predicate. The predicate is applied to the elements of the input sequence. If any application @@ -2355,11 +3318,46 @@ A function to test an element of the input sequence. The input sequence. - The result sequence. + True if every element of the sequence satisfies the predicate; false otherwise. Thrown when the input sequence is null. - + + Applies a function to corresponding elements of two collections, starting from the end of the shorter collection, + threading an accumulator argument through the computation. The two sequences need not have equal lengths. + If the input function is f and the elements are i0...iN and j0...jM, N < M + then computes f i0 j0 (... (f iN jN s)...). + The function to update the state given the input elements. + The first input sequence. + The second input sequence. + The initial state. + The final state value. + Thrown when the either of the input sequences is null. + + + Applies a function to each element of the collection, starting from the end, threading an accumulator argument + through the computation. If the input function is f and the elements are i0...iN + then computes f i0 (... (f iN s)...) + The function to update the state given the input elements. + The input sequence. + The initial state. + The state object after the folding function is applied to each element of the sequence. + Thrown when the input sequence is null. + + + Applies a function to corresponding elements of two collections, threading an accumulator argument + through the computation. The two sequences need not have equal lengths: + when one sequence is exhausted any remaining elements in the other sequence are ignored. + If the input function is f and the elements are i0...iN and j0...jN + then computes f (... (f s i0 j0)...) iN jN. + The function to update the state given the input elements. + The initial state. + The first input sequence. + The second input sequence. + The final state value. + Thrown when the either of the input sequences is null. + + Applies a function to each element of the collection, threading an accumulator argument through the computation. If the input function is f and the elements are i0...iN then computes f (... (f s i0)...) iN @@ -2368,41 +3366,81 @@ The initial state. The input sequence. - The result sequence. + The state object after the folding function is applied to each element of the sequence. Thrown when the input sequence is null. - + + Returns the index of the last element for which the given function returns true. + This function digests the whole initial sequence as soon as it is called. As a + result this function should not be used with large or infinite sequences. + A function to test whether the index of a particular element should be returned. + The input sequence. + The index of the last element for which the predicate returns true. + Thrown if no element returns true when + evaluated by the predicate + Thrown when the input sequence is null + + Returns the index of the first element for which the given function returns true. A function to test whether the index of a particular element should be returned. The input sequence. - The result sequence. + The index of the first element for which the predicate returns true. Thrown if no element returns true when evaluated by the predicate Thrown when the input sequence is null - + + Returns the last element for which the given function returns true. + This function digests the whole initial sequence as soon as it is called. As a + result this function should not be used with large or infinite sequences. + A function to test whether an item in the sequence should be returned. + The input sequence. + The last element for which the predicate returns true. + Thrown if no element returns true when + evaluated by the predicate + Thrown when the input sequence is null + + Returns the first element for which the given function returns true. A function to test whether an item in the sequence should be returned. The input sequence. - The result sequence. + The first element for which the predicate returns true. Thrown if no element returns true when evaluated by the predicate Thrown when the input sequence is null - + Returns a new collection containing only the elements of the collection for which the given predicate returns "true". The returned sequence may be passed between threads safely. However, individual IEnumerator values generated from the returned sequence should not be accessed concurrently. + Remember sequence is lazy, effects are delayed until it is enumerated. + + A synonym for Seq.filter. + + A function to test whether each item in the input sequence should be included in the output. + The input sequence. + + The result sequence. + + Thrown when the input sequence is null. + + + Returns a new collection containing only the elements of the collection + for which the given predicate returns "true". This is a synonym for Seq.where. + + The returned sequence may be passed between threads safely. However, + individual IEnumerator values generated from the returned sequence should not be accessed concurrently. + Remember sequence is lazy, effects are delayed until it is enumerated. A function to test whether each item in the input sequence should be included in the output. @@ -2412,7 +3450,7 @@ Thrown when the input sequence is null. - + Tests if any pair of corresponding elements of the input sequences satisfies the given predicate. The predicate is applied to matching elements in the two sequences up to the lesser of the @@ -2424,11 +3462,11 @@ The first input sequence. The second input sequence. - The result sequence. + True if any result from the predicate is true; false otherwise. Thrown when either of the two input sequences is null. - + Tests if any element of the sequence satisfies the given predicate. The predicate is applied to the elements of the input sequence. If any application @@ -2438,16 +3476,43 @@ A function to test each item of the input sequence. The input sequence. - The result sequence. + True if any result from the predicate is true; false otherwise. Thrown when the input sequence is null. + + Returns a new sequence with the distinct elements of the second sequence which do not appear in the first sequence, + using generic hash and equality comparisons to compare values. + + Note that this function returns a sequence that digests the whole of the first input sequence as soon as + the result sequence is iterated. As a result this function should not be used with + large or infinite sequences in the first parameter. The function makes no assumption on the ordering of the first input + sequence. + + A sequence whose elements that also occur in the second sequence will cause those elements to be + removed from the returned sequence. + A sequence whose elements that are not also in first will be returned. + + A sequence that contains the set difference of the elements of two sequences. + + Thrown when either of the two input sequences is null. + Creates an empty sequence. - The result sequence. + An empty sequence. + + + Splits the input sequence into at most count chunks. + This function returns a sequence that digests the whole initial sequence as soon as that + sequence is iterated. As a result this function should not be used with large or infinite sequences. + The maximum number of chunks. + The input sequence. + The sequence split into chunks. + Thrown when the input sequence is null. + Thrown when count is not positive. - + Returns a sequence that contains no duplicate entries according to the generic hash and equality comparisons on the keys returned by the given key-generating function. If an element occurs multiple times in the sequence then the later occurrences are discarded. @@ -2470,7 +3535,7 @@ Thrown when the input sequence is null. - + Returns a sequence that is built from the given delayed specification of a sequence. @@ -2479,8 +3544,8 @@ The generating function for the sequence. - - Applies a key-generating function to each element of a sequence and return a sequence yielding unique + + Applies a key-generating function to each element of a sequence and returns a sequence yielding unique keys and their number of occurrences in the original sequence. Note that this function returns a sequence that digests the whole initial sequence as soon as @@ -2488,7 +3553,7 @@ large or infinite sequences. The function makes no assumption on the ordering of the original sequence. - A function transforming each item of input sequence into a key to be + A function transforming each item of the input sequence into a key to be compared against the others. The input sequence. @@ -2496,6 +3561,13 @@ Thrown when the input sequence is null. + + Tests if the sequence contains the specified element. + The value to locate in the input sequence. + The input sequence. + True if the input sequence contains the specified element; false otherwise. + Thrown when the input sequence is null. + Combines the given enumeration-of-enumerations as a single concatenated enumeration. @@ -2509,7 +3581,7 @@ Thrown when the input sequence is null. - + Compares two sequences using the given comparison function, element by element. Returns the first non-zero result from the comparison function. If the end of a sequence is reached it returns a -1 if the first sequence is shorter and a 1 if the second sequence @@ -2520,12 +3592,12 @@ The first input sequence. The second input sequence. - The result sequence. + The first non-zero value from the comparison function. Thrown when either of the input sequences is null. - + Applies the given function to each element of the sequence and concatenates all the results. @@ -2539,7 +3611,15 @@ Thrown when the input sequence is null. - + + Divides the input sequence into chunks of size at most chunkSize. + The maximum size of each chunk. + The input sequence. + The sequence divided into chunks. + Thrown when the input sequence is null. + Thrown when chunkSize is not positive. + + Applies the given function to each element of the list. Return the list comprised of the results "x" for each element where the function returns Some(x). @@ -2598,7 +3678,7 @@ Thrown when the input sequence is null. - + Returns the average of the results generated by applying the function to each element of the sequence. @@ -2608,7 +3688,7 @@ A function applied to transform each element of the sequence. The input sequence. - The result sequence. + The average. Thrown when the input sequence is null. Thrown when the input sequence has zero elements. @@ -2621,7 +3701,7 @@ The input sequence. - The result sequence. + The average. Thrown when the input sequence is null. Thrown when the input sequence has zero elements. @@ -2698,7 +3778,7 @@ The input set. The input set with value removed. - + Splits the set into two sets containing the elements for which the given predicate returns true and false respectively. The function to test set elements. @@ -2706,7 +3786,7 @@ A pair of sets with the first containing the elements for which predicate returns true and the second containing the elements for which predicate returns false. - + Applies the given function to each element of the set, in order according to the comparison function. The function to apply to each element. @@ -2719,7 +3799,7 @@ Computes the union of a sequence of sets. - The sequence of sets to untion. + The sequence of sets to union. The union of the input sets. @@ -2739,7 +3819,7 @@ The second input set. The intersection of set1 and set2. - + Tests if all elements of the collection satisfy the given predicate. If the input function is f and the elements are i0...iN and "j0...jN" then computes p i0 && ... && p iN. @@ -2747,35 +3827,35 @@ The input set. True if all elements of set satisfy predicate. - + Applies the given accumulating function to all the elements of the set. The accumulating function. The input set. The initial state. The final state. - + Applies the given accumulating function to all the elements of the set The accumulating function. The initial state. The input set. The final state. - + Returns a new collection containing the results of applying the given function to each element of the input set. The function to transform elements of the input set. The input set. A set containing the transformed elements. - + Returns a new collection containing only the elements of the collection for which the given predicate returns true. The function to test set elements. The input set. The set containing only the elements for which predicate returns true. - + Tests if any element of the collection satisfies the given predicate. If the input function is predicate and the elements are i0...iN then computes p i0 or ... or p iN. @@ -2850,7 +3930,7 @@ An asynchronous computation capable of retrieving the CancellationToken from a computation expression. - + Creates an asynchronous computation that executes computation. If this computation is cancelled before it completes then the computation generated by running compensation is executed. @@ -2876,7 +3956,7 @@ The synchronization context to accept the posted computation. An asynchronous computation that uses the syncContext context to execute. - + Runs an asynchronous computation, starting immediately on the current operating system thread. Call one of the three continuations when the operation completes. If no cancellation token is provided then the default cancellation token @@ -2897,9 +3977,7 @@ The default is used if this parameter is not provided. - - Creates an asynchronous computation which starts the given computation as a <c>System.Threading.Tasks.Task</c> - + Creates an asynchronous computation which starts the given computation as a System.Threading.Tasks.Task Starts a child computation within an asynchronous workflow. @@ -2925,12 +4003,11 @@ A new computation that waits for the input computation to finish. - - Executes a computation in the thread pool. Returns a <c>System.Threading.Tasks.Task</c> that will be completed - in the corresponding state once the computation terminates (produces the result, throws exception or gets canceled) + Executes a computation in the thread pool. + If no cancellation token is provided then the default cancellation token is used. + A System.Threading.Tasks.Task that will be completed + in the corresponding state once the computation terminates (produces the result, throws exception or gets canceled) - If no cancellation token is provided then the default cancellation token is used. - Starts the asynchronous computation in the thread pool. Do not await its result. @@ -2982,7 +4059,7 @@ A sequence of distinct computations to be parallelized. A computation that returns an array of values from the sequence of input computations. - + Generates a scoped, cooperative cancellation handler for use within an asynchronous workflow. For example, @@ -3003,7 +4080,7 @@ The input computation. A computation that is equivalent to the input computation, but disregards the result. - + Creates an asynchronous computation that captures the current success, exception and cancellation continuations. The callback must eventually call exactly one of the given continuations. @@ -3011,9 +4088,9 @@ continuations. An asynchronous computation that provides the callback with the current continuations. - + Creates an asynchronous computation in terms of a Begin/End pair of actions in - the style used in CLI APIs. This overlaod should be used if the operation is + the style used in CLI APIs. This overload should be used if the operation is qualified by three arguments. For example, Async.FromBeginEnd(arg1,arg2,arg3,ws.BeginGetWeather,ws.EndGetWeather) When the computation is run, beginFunc is executed, with @@ -3034,9 +4111,9 @@ An optional function to be executed when a cancellation is requested. An asynchronous computation wrapping the given Begin/End functions. - + Creates an asynchronous computation in terms of a Begin/End pair of actions in - the style used in CLI APIs. This overlaod should be used if the operation is + the style used in CLI APIs. This overload should be used if the operation is qualified by two arguments. For example, Async.FromBeginEnd(arg1,arg2,ws.BeginGetWeather,ws.EndGetWeather) When the computation is run, beginFunc is executed, with @@ -3056,9 +4133,9 @@ An optional function to be executed when a cancellation is requested. An asynchronous computation wrapping the given Begin/End functions. - + Creates an asynchronous computation in terms of a Begin/End pair of actions in - the style used in CLI APIs. This overlaod should be used if the operation is + the style used in CLI APIs. This overload should be used if the operation is qualified by one argument. For example, Async.FromBeginEnd(place,ws.BeginGetWeather,ws.EndGetWeather) When the computation is run, beginFunc is executed, with @@ -3077,7 +4154,7 @@ An optional function to be executed when a cancellation is requested. An asynchronous computation wrapping the given Begin/End functions. - + Creates an asynchronous computation in terms of a Begin/End pair of actions in the style used in CLI APIs. For example, Async.FromBeginEnd(ws.BeginGetWeather,ws.EndGetWeather) @@ -3119,6 +4196,12 @@ then the default value of -1 corresponding to System.Threading.Timeout.Infinite. An asynchronous computation that waits on the given WaitHandle. + + + Return an asynchronous computation that will wait for the given task to complete and return + its result. + + Return an asynchronous computation that will wait for the given task to complete and return @@ -3134,7 +4217,7 @@ then the default value of -1 corresponding to System.Threading.Timeout.Infinite. An asynchronous computation that waits on the given IAsyncResult. - + Creates an asynchronous computation that waits for a single invocation of a CLI event by adding a handler to the event. Once the computation completes or is cancelled, the handler is removed from the event. @@ -3150,7 +4233,7 @@ cancellation is issued. An asynchronous computation that waits for the event to be invoked. - + Creates three functions that can be used to implement the .NET Asynchronous Programming Model (APM) for a given asynchronous computation. @@ -3198,7 +4281,7 @@ async { ... } computation expression syntax. An asynchronous computation that returns (). - + Creates an asynchronous computation that runs computation repeatedly until guard() becomes false. @@ -3211,7 +4294,7 @@ of a while expression. An asynchronous computation that behaves similarly to a while loop when run. - + Creates an asynchronous computation that runs binder(resource). The action resource.Dispose() is executed as this computation yields its result or if the asynchronous computation exits by an exception or by cancellation. @@ -3225,7 +4308,7 @@ computation. An asynchronous computation that binds and eventually disposes resource. - + Creates an asynchronous computation that runs computation and returns its result. If an exception happens then catchHandler(exn) is called and the resulting computation executed instead. @@ -3238,7 +4321,7 @@ An asynchronous computation that executes computation and calls catchHandler if an exception is thrown. - + Creates an asynchronous computation that runs computation. The action compensation is executed after computation completes, whether computation exits normally or by an exception. If compensation raises an exception itself the original exception is discarded and the new exception becomes the overall result of the computation. @@ -3250,7 +4333,7 @@ The input computation. The action to be run after computation completes or raises an exception (including cancellation). - An asynchronous computation that executes computation and compensation aftewards or + An asynchronous computation that executes computation and compensation afterwards or when an exception is raised. @@ -3271,7 +4354,7 @@ The value to return from the computation. An asynchronous computation that returns value when executed. - + Creates an asynchronous computation that enumerates the sequence seq on demand and runs body for each element. @@ -3285,7 +4368,7 @@ An asynchronous computation that will enumerate the sequence and run body for each element. - + Creates an asynchronous computation that runs generator. A cancellation check is performed when the computation is executed. @@ -3304,7 +4387,7 @@ The second part of the sequenced computation. An asynchronous computation that runs both of the computations sequentially. - + Creates an asynchronous computation that runs computation, and when computation generates a result T, runs binder res. @@ -3392,9 +4475,6 @@ Event implementations for a delegate types following the standard .NET Framework convention of a first 'sender' argument. - - - A delegate type associated with the F# event type IEvent<_> @@ -3415,7 +4495,7 @@ First class event values for arbitrary delegate types. F# gives special status to member properties compatible with type IDelegateEvent and - tagged with the CLIEventAttribute. In this case the F# compiler generates approriate + tagged with the CLIEventAttribute. In this case the F# compiler generates appropriate CLI metadata to make the member appear to other CLI languages as a CLI event. @@ -3452,7 +4532,7 @@ Occurs when the execution of the agent results in an exception. - + Scans for a message by looking through messages in arrival order until scanner returns a Some value. Other messages remain in the queue. @@ -3480,7 +4560,7 @@ An asynchronous computation that returns the received message or None if the timeout is exceeded. - + Like PostAndReply, but returns None if no reply within the timeout period. The function to incorporate the AsyncReplyChannel into the message to be sent. @@ -3491,7 +4571,7 @@ Starts the agent. - + Creates and starts an agent. The body function is used to generate the asynchronous computation executed by the agent. The function to produce an asynchronous computation that will be executed @@ -3500,7 +4580,7 @@ Defaults to Async.DefaultCancellationToken. The created MailboxProcessor. - + Scans for a message by looking through messages in arrival order until scanner returns a Some value. Other messages remain in the queue. @@ -3529,7 +4609,7 @@ An asynchronous computation that returns the received message. Thrown when the timeout is exceeded. - + Like AsyncPostAndReply, but returns None if no reply within the timeout period. The function to incorporate the AsyncReplyChannel into the message to be sent. @@ -3537,7 +4617,7 @@ Defaults to -1 which corresponds to System.Threading.Timeout.Infinite. An asynchronous computation that will return the reply or None if the timeout expires. - + Posts a message to an agent and await a reply on the channel, synchronously. The message is generated by applying buildMessage to a new reply channel @@ -3549,7 +4629,7 @@ Defaults to -1 which corresponds to System.Threading.Timeout.Infinite. The reply from the agent. - + Posts a message to an agent and await a reply on the channel, asynchronously. The message is generated by applying buildMessage to a new reply channel @@ -3559,13 +4639,13 @@ the message to be sent. An optional timeout parameter (in milliseconds) to wait for a reply message. Defaults to -1 which corresponds to System.Threading.Timeout.Infinite. - An asychronous computation that will wait for the reply from the agent. + An asynchronous computation that will wait for the reply from the agent. Posts a message to the message queue of the MailboxProcessor, asynchronously. The message to post. - + Creates an agent. The body function is used to generate the asynchronous computation executed by the agent. This function is not executed until Start is called. @@ -3585,8 +4665,42 @@ The agent may wait for messages using the Receive or TryReceive methods or scan through all available messages using the Scan or TryScan method. - - + + Connects a listener function to the observable. The listener will + be invoked for each observation. The listener can be removed by + calling Dispose on the returned IDisposable object. + The function to be called for each observation. + An object that will remove the listener if disposed. + + + Permanently connects a listener function to the observable. The listener will + be invoked for each observation. + The function to be called for each observation. + + + Returns an asynchronous computation that will write the given bytes to the stream. + The buffer to write from. + An optional offset as a number of bytes in the stream. + An optional number of bytes to write to the stream. + An asynchronous computation that will write the given bytes to the stream. + Thrown when the sum of offset and count is longer than + the buffer length. + Thrown when offset or count is negative. + + + Returns an asynchronous computation that will read the given number of bytes from the stream. + The number of bytes to read. + An asynchronous computation that returns the read byte[] when run. + + + Returns an asynchronous computation that will read from the stream into the given buffer. + The buffer to read into. + An optional offset as a number of bytes in the stream. + An optional number of bytes to read from the stream. + An asynchronous computation that will read from the stream into the given buffer. + Thrown when the sum of offset and count is longer than + the buffer length. + Thrown when offset or count is negative. A module of extension members providing asynchronous operations for some basic CLI types related to concurrency and I/O. @@ -3599,12 +4713,12 @@ The input event. An event that triggers on pairs of consecutive values passed from the source event. - + Runs the given function each time the given event is triggered. The function to call when the event is triggered. The input event. - + Returns a new event consisting of the results of applying the given accumulating function to successive values triggered on the input event. An item of internal state records the current value of the state parameter. The internal state is not locked during the @@ -3615,14 +4729,14 @@ The input event. An event that fires on the updated state values. - + Returns a new event which fires on a selection of messages from the original event. The selection function takes an original message to an optional new message. The function to select and transform event values to pass on. The input event. An event that fires only when the chooser returns Some. - + Returns a new event that listens to the original event and triggers the first resulting event if the application of the function to the event arguments returned a Choice1Of2, and the second event if it returns a Choice2Of2. @@ -3631,7 +4745,7 @@ A tuple of events. The first fires whenever splitter evaluates to Choice1of1 and the second fires whenever splitter evaluates to Choice2of2. - + Returns a new event that listens to the original event and triggers the first resulting event if the application of the predicate to the event arguments returned true, and the second event if it returned false. @@ -3640,14 +4754,14 @@ A tuple of events. The first is triggered when the predicate evaluates to true and the second when the predicate evaluates to false. - + Returns a new event that listens to the original event and triggers the resulting event only when the argument to the event passes the given function. The function to determine which triggers from the event to propagate. The input event. An event that only passes values that pass the predicate. - + Returns a new event that passes values transformed by the given function. The function to transform event values. The input event. @@ -3659,8 +4773,20 @@ The second input event. An event that fires when either of the input events fire. - - + + Forces the execution of this value and return its result. Same as Value. Mutual exclusion is used to + prevent other threads also computing the value. + The value of the Lazy object. + + + Creates a lazy computation that evaluates to the given value when forced. + The input value. + The created Lazy object. + + + Creates a lazy computation that evaluates to the result of the given function when forced. + The function to provide the value when needed. + The created Lazy object. Extensions related to Lazy values. @@ -3677,20 +4803,20 @@ The input Observable. An Observable that triggers on successive pairs of observations from the input Observable. - + Creates an observer which subscribes to the given observable and which calls the given function for each observation. The function to be called on each observation. The input Observable. An object that will remove the callback if disposed. - + Creates an observer which permanently subscribes to the given observable and which calls the given function for each observation. The function to be called on each observation. The input Observable. - + Returns an observable which, for each observer, allocates an item of state and applies the given accumulating function to successive values arising from the input. The returned object will trigger observations for each computed @@ -3705,7 +4831,7 @@ The input Observable. An Observable that triggers on the updated state values. - + Returns an observable which chooses a projection of observations from the source using the given function. The returned object will trigger observations x for which the splitter returns Some x. The returned object also propagates @@ -3715,7 +4841,7 @@ The input Observable. An Observable that only propagates some of the observations from the source. - + Returns two observables which split the observations of the source by the given function. The first will trigger observations x for which the splitter returns Choice1Of2 x. The second will trigger observations @@ -3729,7 +4855,7 @@ A tuple of Observables. The first triggers when splitter returns Choice1of2 and the second triggers when splitter returns Choice2of2. - + Returns two observables which partition the observations of the source by the given function. The first will trigger observations for those values for which the predicate returns true. The second will trigger observations @@ -3743,7 +4869,7 @@ A tuple of Observables. The first triggers when the predicate returns true, and the second triggers when the predicate returns false. - + Returns an observable which filters the observations of the source by the given function. The observable will see only those observations for which the predicate returns true. The predicate is executed once for @@ -3754,7 +4880,7 @@ The input Observable. An Observable that filters observations based on filter. - + Returns an observable which transforms the observations of the source by the given function. The transformation function is executed once for each subscribed observer. The returned object also propagates error observations @@ -3778,6 +4904,26 @@ Basic operations on first class event and other observable objects. + + Returns an asynchronous computation that, when run, will wait for the download of the given URI to specified file. + The URI to retrieve. + The filename to save download to. + An asynchronous computation that will wait for the download of the URI to specified file. + + + Returns an asynchronous computation that, when run, will wait for the download of the given URI. + The URI to retrieve. + An asynchronous computation that will wait for the download of the URI. + + + Returns an asynchronous computation that, when run, will wait for the download of the given URI. + The URI to retrieve. + An asynchronous computation that will wait for the download of the URI. + + + Returns an asynchronous computation that, when run, will wait for a response to the given WebRequest. + An asynchronous computation that waits for response to the WebRequest. + A module of extension members providing asynchronous operations for some basic Web operations. @@ -3789,6 +4935,13 @@ Adding this attribute to class definition makes it abstract, which means it need not implement all its methods. Instances of abstract classes may not be constructed directly. + + The value of the attribute, indicating whether the type allows the null literal or not + + + Creates an instance of the attribute with the specified value + AllowNullLiteralAttribute + Creates an instance of the attribute AllowNullLiteralAttribute @@ -3816,7 +4969,7 @@ This attribute is used for two purposes. When applied to an assembly, it must be given a string argument, and this argument must indicate a valid module or namespace in that assembly. Source code files compiled with a reference to this assembly are processed in an environment - where the given path is automatically oepned. + where the given path is automatically opened. When applied to a module within an assembly, then the attribute must not be given any arguments. When the enclosing namespace is opened in user source code, the module is also implicitly opened. @@ -3842,6 +4995,14 @@ metadata event, through a syntactic translation to a pair of 'add_EventName' and 'remove_EventName' methods. + + Creates an instance of the attribute + CLIMutableAttribute + + + Adding this attribute to a record type causes it to be compiled to a CLI representation + with a default constructor with property getters and setters. + Choice 2 of 2 choices @@ -3978,12 +5139,23 @@ Indicates the variant number of the entity, if any, in a linear sequence of elements with F# source code + + Indicates the type definitions needed to resolve the source construct + Indicates the relationship between the compiled entity and F# source code Indicates the sequence number of the entity, if any, in a linear sequence of elements with F# source code + + Indicates the resource the source construct relates to + + + Creates an instance of the attribute + Indicates the type definitions needed to resolve the source construct. + CompilationMappingAttribute + Creates an instance of the attribute Indicates the type of source construct. @@ -4019,26 +5191,23 @@ For example, it may be used to note that the null representation may be used for a type. This affects how some constructs are compiled. - + Compile a property as a CLI event. - + Permit the use of null as a representation for nullary discriminators in a discriminated union. - + append 'Module' to the end of a module whose name clashes with a type name in the same namespace. - + Compile a member as 'instance' even if null is used as a representation for this type. - + Compile an instance member as 'static' . - + No special compilation representation. - - - Indicates one or more adjustments to the compiled representation of an F# type or member. @@ -4108,6 +5277,61 @@ Adding this attribute to a type indicates it is a type with a user-defined implementation of equality. + + Indicates if the custom operation maintains the variable space of the query of computation expression through the use of a bind operation + + + Indicates if the custom operation maintains the variable space of the query of computation expression + + + Indicates the name used for the 'on' part of the custom query operator for join-like operators + + + Indicates if the custom operation is an operation similar to a zip in a sequence computation, supporting two inputs + + + Indicates if the custom operation is an operation similar to a join in a sequence computation, supporting two inputs and a correlation constraint + + + Indicates if the custom operation is an operation similar to a group join in a sequence computation, supporting two inputs and a correlation constraint, and generating a group + + + Indicates if the custom operation supports the use of 'into' immediately after the use of the operation in a query or other computation expression to consume the results of the operation + + + Get the name of the custom operation when used in a query or other computation expression + + + Indicates if the custom operation maintains the variable space of the query of computation expression through the use of a bind operation + + + Indicates if the custom operation maintains the variable space of the query of computation expression + + + Indicates the name used for the 'on' part of the custom query operator for join-like operators + + + Indicates if the custom operation is an operation similar to a zip in a sequence computation, supporting two inputs + + + Indicates if the custom operation is an operation similar to a join in a sequence computation, supporting two inputs and a correlation constraint + + + Indicates if the custom operation is an operation similar to a group join in a sequence computation, supporting two inputs and a correlation constraint, and generating a group + + + Indicates if the custom operation supports the use of 'into' immediately after the use of the operation in a query or other computation expression to consume the results of the operation + + + Creates an instance of the attribute + CustomOperationAttribute + + + + Indicates that a member on a computation builder type is a custom query operator, + and indicates the name of that operator. + + The value of the attribute, indicating whether the type has a default augmentation or not @@ -4145,7 +5369,7 @@ Adding this attribute to a function indicates it is the entrypoint for an application. - If this absent is not speficied for an EXE then the initialization implicit in the + If this attribute is not specified for an EXE then the initialization implicit in the module bindings in the last file in the compilation sequence are used as the entrypoint. @@ -4180,17 +5404,17 @@ The input System.Converter. An F# function of the same type. - + Convert an F# first class function value to a value of type System.Converter The input function. A System.Converter of the function type. - + Convert an F# first class function value to a value of type System.Converter The input function. System.Converter<'T,'U> - + Invoke an F# first class function value with two curried arguments. In some cases this will result in a more efficient application than applying the arguments successively. The input function. @@ -4198,7 +5422,7 @@ The second arg. The function result. - + Invoke an F# first class function value with three curried arguments. In some cases this will result in a more efficient application than applying the arguments successively. The input function. @@ -4207,7 +5431,7 @@ The third arg. The function result. - + Invoke an F# first class function value with four curried arguments. In some cases this will result in a more efficient application than applying the arguments successively. The input function. @@ -4217,7 +5441,7 @@ The fourth arg. The function result. - + Invoke an F# first class function value with five curried arguments. In some cases this will result in a more efficient application than applying the arguments successively. The input function. @@ -4304,28 +5528,28 @@ The input action. The F# function. - + A utility function to convert function values from tupled to curried form The input tupled function. The output curried function. - + A utility function to convert function values from tupled to curried form The input tupled function. The output curried function. - + A utility function to convert function values from tupled to curried form The input tupled function. The output curried function. - + A utility function to convert function values from tupled to curried form The input tupled function. The output curried function. - Helper functions for converting F# first class function values to and from CLI representaions + Helper functions for converting F# first class function values to and from CLI representations of functions using delegates. @@ -4471,7 +5695,15 @@ Value generated after post processing (e.g. failwithf generates a string internally then raises an exception) Tuple of values generated by scan or match. - + + Creates an instance of the attribute + ProjectionParameterAttribute + + + Indicates that, when a custom operator is used in a computation expression, + a parameter is automatically parameterized by the variable space of the computation expression + + The current value of the reference cell @@ -4495,6 +5727,14 @@ of overrides for 'System.Object.Equals(obj)', 'System.Object.GetHashCode()' and 'System.IComparable' for the type. The type will by default use reference equality. + + The value of the attribute, indicating whether to include the evaluated value of the definition as the outer node of the quotation + + + Creates an instance of the attribute + Indicates whether to include the evaluated value of the definition as the outer node of the quotation + ReflectedDefinitionAttribute + Creates an instance of the attribute ReflectedDefinitionAttribute @@ -4509,7 +5749,7 @@ RequireQualifiedAccessAttribute - This attribute is used to indicate that references to a the elements of a module, record or union + This attribute is used to indicate that references to the elements of a module, record or union type require explicit qualified access. @@ -4536,44 +5776,41 @@ Adding this attribute to class definition makes it sealed, which means it may not be extended or implemented. - + Indicates that the compiled entity had private or internal representation in F# source code. - + The mask of values related to the kind of the compiled entity. - + Indicates that the compiled entity is part of the representation of an F# value declaration. - + Indicates that the compiled entity is part of the representation of an F# union case declaration. - + Indicates that the compiled entity is part of the representation of an F# module declaration. - + Indicates that the compiled entity is part of the representation of an F# closure. - + Indicates that the compiled entity is part of the representation of an F# exception declaration. - + Indicates that the compiled entity is part of the representation of an F# record or union case field declaration. - + Indicates that the compiled entity is part of the representation of an F# class or other object type declaration. - + Indicates that the compiled entity is part of the representation of an F# record type declaration. - + Indicates that the compiled entity is part of the representation of an F# union type declaration. - + Indicates that the compiled entity has no relationship to an element in F# source code. - - - Indicates the relationship between a compiled entity in a CLI binary and an element in F# source code. @@ -4615,8 +5852,8 @@ This attribute is used to mark how a type is displayed by default when using '%A' printf formatting patterns and other two-dimensional text-based display layouts. - In this version of F# the only valid values are of the form PreText {PropertyName} PostText. - The property name indicates a property to evaluate and to display instead of the object itself. + In this version of F# valid values are of the form PreText {PropertyName1} PostText {PropertyName2} ... {PropertyNameX} PostText. + The property names indicate properties to evaluate and to display instead of the object itself. The type 'unit', which has only one value "()". This value is special and @@ -4640,66 +5877,175 @@ Adding this attribute to an F# mutable binding causes the "volatile" prefix to be used for all accesses to the field. - - Four dimensional arrays, typically zero-based. Non-zero-based arrays + + Thirty-two dimensional arrays, typically zero-based. Non-zero-based arrays can be created using methods on the System.Array type. - - Use the values in the Array4D module - to manipulate values of this type, or the notation arr.[x1,x2,x3,x4] to get and set array - values. - - Three dimensional arrays, typically zero-based. Non-zero-based arrays + + Thirty-one dimensional arrays, typically zero-based. Non-zero-based arrays can be created using methods on the System.Array type. - - Use the values in the Array3D module - to manipulate values of this type, or the notation arr.[x1,x2,x3] to get and set array - values. - - Two dimensional arrays, typically zero-based. - - Use the values in the Array2D module - to manipulate values of this type, or the notation arr.[x,y] to get/set array - values. - - Non-zero-based arrays can also be created using methods on the System.Array type. + + Thirty dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. - - Single dimensional, zero-based arrays, written int[], string[] etc. - Use the values in the Array module to manipulate values - of this type, or the notation arr.[x] to get/set array - values. + + Twenty-nine dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. - - Single dimensional, zero-based arrays, written int[], string[] etc. - - Use the values in the Array module to manipulate values - of this type, or the notation arr.[x] to get/set array - values. + + Twenty-eight dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. - - + + Twenty-seven dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. - - An abbreviation for the CLI type System.Boolean. + + Twenty-six dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. - - Represents a managed pointer in F# code. + + Twenty-five dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. - - An abbreviation for the CLI type System.Byte. + + Twenty-four dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. - - An abbreviation for the CLI type System.Char. + + Twenty-three dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. - - An abbreviation for the CLI type System.Decimal. + + Twenty-two dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. - - The type of decimal numbers, annotated with a unit of measure. The unit - of measure is erased in compiled code and when values of this type - are analyzed using reflection. The type is representationally equivalent to + + Twenty-one dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Twenty dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Nineteen dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Eighteen dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Seventeen dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Sixteen dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Fifteen dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Fourteen dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Thirteen dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Twelve dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Eleven dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Ten dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Nine dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Eight dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Seven dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Six dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Five dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + + Four dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + Use the values in the Array4D module + to manipulate values of this type, or the notation arr.[x1,x2,x3,x4] to get and set array + values. + + + Three dimensional arrays, typically zero-based. Non-zero-based arrays + can be created using methods on the System.Array type. + + Use the values in the Array3D module + to manipulate values of this type, or the notation arr.[x1,x2,x3] to get and set array + values. + + + Two dimensional arrays, typically zero-based. + + Use the values in the Array2D module + to manipulate values of this type, or the notation arr.[x,y] to get/set array + values. + + Non-zero-based arrays can also be created using methods on the System.Array type. + + + Single dimensional, zero-based arrays, written int[], string[] etc. + Use the values in the Array module to manipulate values + of this type, or the notation arr.[x] to get/set array + values. + + + Single dimensional, zero-based arrays, written int[], string[] etc. + + Use the values in the Array module to manipulate values + of this type, or the notation arr.[x] to get/set array + values. + + + An abbreviation for the CLI type System.Boolean. + + + Represents a managed pointer in F# code. + + + An abbreviation for the CLI type System.Byte. + + + An abbreviation for the CLI type System.Char. + + + An abbreviation for the CLI type System.Decimal. + + + The type of decimal numbers, annotated with a unit of measure. The unit + of measure is erased in compiled code and when values of this type + are analyzed using reflection. The type is representationally equivalent to System.Decimal. @@ -4826,15 +6172,6 @@ The type 'unit', which has only one value "()". This value is special and always uses the representation 'null'. - - - - - - - - - Non-exhaustive match failures will raise the MatchFailureException exception @@ -4868,19 +6205,244 @@ The F# compiler emits implementations of this type for compiled sequence expressions. - - + + + Namespace name the provider injects types into. + - - + + + Compilers call this method to query a type provider for a type name. + + Resolver should return a type called name in namespace NamespaceName or null if the type is unknown. + + + + + + The top-level types + + + + + + The sub-namespaces in this namespace. An optional member to prevent generation of namespaces until an outer namespace is explored. + - - + + + Represents a namespace provided by a type provider component. + + + + + Triggered when an assumption changes that invalidates the resolutions so far reported by the provider + + + + + Triggered when an assumption changes that invalidates the resolutions so far reported by the provider + + + + + Triggered when an assumption changes that invalidates the resolutions so far reported by the provider + + + + + Get the static parameters for a provided type. + + A type returned by GetTypes or ResolveTypeName + + + + + Namespace name the this TypeProvider injects types into. + + + + + Called by the compiler to ask for an Expression tree to replace the given MethodBase with. + + MethodBase that was given to the compiler by a type returned by a GetType(s) call. + Expressions that represent the parameters to this call. + An expression that the compiler will use in place of the given method base. + + + + Get the physical contents of the given logical provided assembly. + + + + + Apply static arguments to a provided type that accepts static arguments. + + The provider must return a type with the given mangled name. + the provided type definition which has static parameters + the full path of the type, including encoded representations of static parameters + the static parameters, indexed by name + + + + + Represents an instantiation of a type provider component. + + + + + Get the static parameters for a provided method. + + A method returned by GetMethod on a provided type + The static parameters of the provided method, if any + + + + Apply static arguments to a provided method that accepts static arguments. + + The provider must return a provided method with the given mangled name. + the provided method definition which has static parameters + the full name of the method that must be returned, including encoded representations of static parameters + the values of the static parameters, indexed by name + The provided method definition corresponding to the given static parameter values + + + + Represents additional, optional information for a type provider component + - - + + Represents the inverse of a measure expressions when returned as a generic argument of a provided type. + + + Represents the '1' measure expression when returned as a generic argument of a provided type. + + + Represents the product of two measure expressions when returned as a generic argument of a provided type. + + + Creates an instance of the attribute + TypeProviderAssemblyAttribute + The name of the design-time assembly for this type provider. + + + Creates an instance of the attribute + TypeProviderAssemblyAttribute + + + Place attribute on runtime assembly to indicate that there is a corresponding design-time + assembly that contains a type provider. Runtime and designer assembly may be the same. + + + Creates an instance of the attribute + TypeProviderAttribute + + + Place on a class that implements ITypeProvider to extend the compiler + + + + Get the full path to use for temporary files for the type provider instance. + + + + + version of referenced system runtime assembly + + + + + Get the full path to referenced assembly that caused this type provider instance to be created. + + + + + Get the full path to use to resolve relative paths in any file name arguments given to the type provider instance. + + + + + Get the referenced assemblies for the type provider instance. + + + + + Indicates if the type provider host responds to invalidation events for type provider instances. + + + + + Indicates if the type provider instance is used in an environment which executes provided code such as F# Interactive. + + + + + Get the full path to use for temporary files for the type provider instance. + + + + + version of referenced system runtime assembly + + + + + Get the full path to referenced assembly that caused this type provider instance to be created. + + + + + Get the full path to use to resolve relative paths in any file name arguments given to the type provider instance. + + + + + Get the referenced assemblies for the type provider instance. + + + + + Indicates if the type provider host responds to invalidation events for type provider instances. + + + + + Indicates if the type provider instance is used in an environment which executes provided code such as F# Interactive. + + + + + Checks if given type exists in target system runtime library + + + + + If the class that implements ITypeProvider has a constructor that accepts TypeProviderConfig + then it will be constructed with an instance of TypeProviderConfig. + + + + Creates an instance of the attribute + TypeProviderEditorHideMethodsAttribute + + + Indicates that a code editor should hide all System.Object methods from the intellisense menus for instances of a provided type - + + Additional type attribute flags related to provided types + + + Creates an instance of the attribute + TypeProviderXmlDocAttribute + + + + The TypeProviderXmlDocAttribute attribute can be added to types and members. + The language service will display the CommentText property from the attribute + in the appropriate place when the user hovers over a type or member. + + + Creates an anonymous event with the given handlers. A function to handle adding a delegate for the event to trigger. @@ -4889,7 +6451,7 @@ The initialized event. - + The F# compiler emits calls to this function to implement the use operator for F# sequence expressions. @@ -4898,7 +6460,7 @@ The result sequence. - + The F# compiler emits calls to this function to implement the compiler-intrinsic conversions from untyped System.Collections.IEnumerable sequences to typed sequences. @@ -4908,7 +6470,7 @@ The resulting typed sequence. - + The F# compiler emits calls to this function to implement the try/finally operator for F# sequence expressions. @@ -4917,7 +6479,7 @@ The result sequence. - + The F# compiler emits calls to this function to implement the while operator for F# sequence expressions. @@ -4929,6 +6491,9 @@ A group of functions used as part of the compiled representation of F# sequence expressions. + + Builds a query using query syntax and operators. + An active pattern to force the execution of values of type Lazy<_>. @@ -4941,7 +6506,7 @@ Builds a 2D array from a sequence of sequences of elements. - + Builds a read-only lookup table from a sequence of key/value pairs. The key objects are indexed using generic hashing and equality. @@ -4966,7 +6531,7 @@ primitive numeric types. For strings, the input is converted using Single.Parse() with InvariantCulture settings. Otherwise the operation requires and invokes a ToSingle method on the input type. - Builds an aysnchronous workflow using computation expression syntax. + Builds an asynchronous workflow using computation expression syntax. Builds a set from a sequence of objects. The objects are indexed using generic comparison. @@ -5016,20 +6581,25 @@ The formatter. The formatted result. - - + + Converts the argument to signed byte. + This is a direct, checked conversion for all + primitive numeric types. For strings, the input is converted using SByte.Parse() with InvariantCulture settings. + Otherwise the operation requires and invokes a ToSByte method on the input type. + + + Converts the argument to byte. + This is a direct, checked conversion for all + primitive numeric types. For strings, the input is converted using Byte.Parse() on strings and otherwise requires a ToByte method on the input type. Divides a value by an integer. The input value. The input int. The division result. - - - - Resolves to the one value for any primitive numeric type or any type with a static member called 'One' + Resolves to the value 'one' for any primitive numeric type or any type with a static member called 'One' Resolves to the zero value for any primitive numeric type or any type with a static member called 'Zero' @@ -5038,10 +6608,10 @@ A compiler intrinsic that implements dynamic invocations for the DivideByInt primitive. - A compiler intrinsic that implements dynamic invocations to the checked '+' operator. + A compiler intrinsic that implements dynamic invocations to the checked '*' operator. - A compiler intrinsic that implements dynamic invocations to the '+' operator. + A compiler intrinsic that implements dynamic invocations to the '*' operator. A compiler intrinsic that implements dynamic invocations to the checked '+' operator. @@ -5050,7 +6620,7 @@ A compiler intrinsic that implements dynamic invocations to the '+' operator. - Resolves to the zero value for any primitive numeric type or any type with a static member called 'Zero'. + Resolves to the value 'one' for any primitive numeric type or any type with a static member called 'One'. Resolves to the zero value for any primitive numeric type or any type with a static member called 'Zero'. @@ -5139,6 +6709,12 @@ The input object. The hashed value. + + Make an F# comparer object for the given type + + + Make an F# hash/equality object for the given type + Make an F# hash/equality object for the given type using node-limited hashing when hashing F# records, lists and union types. @@ -5176,9 +6752,7 @@ Reference/physical equality. - True if boxed versions of the inputs are reference-equal, OR if - both are primitive numeric types and the implementation of Object.Equals for the type - of the first argument returns true on the boxed versions of the inputs. + True if the inputs are reference-equal, false otherwise. The first value. The second value. The result of the comparison. @@ -5252,40 +6826,40 @@ The second value. The result of the comparison. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. - + A primitive entry point used by the F# compiler for optimization purposes. @@ -5376,7 +6950,7 @@ This function implements calls to default constructors - acccessed by 'new' constraints. + accessed by 'new' constraints. Primitive used by pattern match compilation @@ -5426,21 +7000,6 @@ The F# compiler emits calls to some of the functions in this module as part of the compiled form of some language constructs - - - - - - - - - - - - - - - For compiler use only @@ -5450,47 +7009,47 @@ - Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' - Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' - Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' - Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' - Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' - Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' - Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' - Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' - Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' @@ -5768,11 +7327,14 @@ input type is a generic type instantiation then return the generic type definition associated with all such instantiations. + + An internal, library-only compiler intrinsic for compile-time + generation of a RuntimeMethodHandle. + - Generate a System.Type runtime representation of a static type. - The static type is still maintained on the value returned. + Generate a System.Type runtime representation of a static type. - + Clean up resources associated with the input object after the completion of the given function. Cleanup occurs even when an exception is raised by the protected code. @@ -5780,7 +7342,7 @@ The action that accepts the resource. The resulting value. - + Execute the function as a mutual-exclusion region using the input value as a lock. The object to be locked. The action to perform during the lock. @@ -5871,33 +7433,44 @@ The same value. - Throw an System.InvalidOperationException exception + Throw a System.InvalidOperationException exception The exception message. The result value. - Throw an System.ArgumentNullException exception + Throw a System.ArgumentNullException exception The argument name. The result value. - Throw an System.ArgumentException exception + Throw a System.ArgumentException exception with + the given argument name and message. The argument name. The exception message. The result value. - Throw a System.Exception exception + Throw a System.Exception exception. The exception message. The result value. + + Determines whether the given value is null. + The value to check. + True when value is null, false otherwise. + + + Try to unbox a strongly typed value. + The boxed value. + The unboxed result as an option. + Boxes a strongly typed value. The value to box. The boxed object. - Unboxes a strongly typed value. This is the inverse of box, unbox<t>(box<t> a) equals a. + Unbox a strongly typed value. The boxed value. The unboxed result. @@ -5923,12 +7496,12 @@ The second value. The result of the comparison. - + Return the second element of a tuple, snd (a,b) = b. The input tuple. The second value. - + Return the first element of a tuple, fst (a,b) = a. The input tuple. The first value. @@ -5965,7 +7538,7 @@ The default value of the argument. The argument value. If it is None, the defaultValue is returned. - + Apply a function to three values, the values being a triple on the right, the function on the left The function. The first argument. @@ -5973,20 +7546,20 @@ The third argument. The function result. - + Apply a function to two values, the values being a pair on the right, the function on the left The function. The first argument. The second argument. The function result. - + Apply a function to a value, the value being on the right, the function on the left The function. The argument. The function result. - + Apply a function to three values, the values being a triple on the left, the function on the right The first argument. The second argument. @@ -5994,26 +7567,26 @@ The function. The function result. - + Apply a function to two values, the values being a pair on the left, the function on the right The first argument. The second argument. The function. The function result. - + Apply a function to a value, the value being on the left, the function on the right The argument. The function. The function result. - + Compose two functions, the function on the right being applied first The second function to apply. The first function to apply. The composition of the input functions. - + Compose two functions, the function on the left being applied first The first function to apply. The second function to apply. @@ -6056,12 +7629,12 @@ The result of the comparison. - Overloaded prefix=plus operator + Overloaded prefix-plus operator The input value. The result of the operation. - Overloaded logical-NOT operator + Overloaded bitwise-NOT operator The input value. The result of the operation. @@ -6078,19 +7651,19 @@ The result of the operation. - Overloaded logical-XOR operator + Overloaded bitwise-XOR operator The first parameter. The second parameter. The result of the operation. - Overloaded logical-OR operator + Overloaded bitwise-OR operator The first parameter. The second parameter. The result of the operation. - Overloaded logical-AND operator + Overloaded bitwise-AND operator The first parameter. The second parameter. The result of the operation. @@ -6250,6 +7823,69 @@ This module contains the basic arithmetic operations with overflow checks. + + Calls GetHashCode() on the value + The value. + The hash code. + + + Minimum of the two values + The first value. + The second value. + The minimum value. + + + Maximum of the two values + The first value. + The second value. + The maximum value. + + + Compares the two values + The first value. + The second value. + The result of the comparison. + + + Compares the two values for inequality + The first parameter. + The second parameter. + The result of the comparison. + + + Compares the two values for equality + The first parameter. + The second parameter. + The result of the comparison. + + + Compares the two values for less-than-or-equal + The first parameter. + The second parameter. + The result of the comparison. + + + Compares the two values for greater-than-or-equal + The first parameter. + The second parameter. + The result of the comparison. + + + Compares the two values for greater-than + The first parameter. + The second parameter. + The result of the comparison. + + + Compares the two values for less-than + The first parameter. + The second parameter. + The result of the comparison. + + + A module of comparison and equality operators that are statically resolved, but which are not fully generic and do not make structural comparison. Opening this + module may make code that relies on structural or generic comparison no longer compile. + Perform generic hashing on a value where the type of the value is not statically required to satisfy the 'equality' constraint. @@ -6270,10 +7906,15 @@ For structs, this is struct value where all fields have the default value. This function is unsafe in the sense that some F# values do not have proper null values. + + Unboxes a strongly typed value. This is the inverse of box, unbox<t>(box<t> a) equals a. + The boxed value. + The unboxed result. + This module contains basic operations which do not apply runtime and/or static checks - + This is a library intrinsic. Calls to this function may be generated by uses of the generic 'pown' operator @@ -6378,10 +8019,10 @@ This is a library intrinsic. Calls to this function may be generated by evaluating quotations. - + Generate a range of values using the given zero, add, start, step and stop values - + Generate a range of values using the given zero, add, start, step and stop values @@ -6478,17 +8119,49 @@ The end index of the third dimension. The three dimensional sub array from the given indices. - - Sets a slice of an array + + Sets a vector slice of a 2D array. The index of the second dimension is fixed. The target array. The start index of the first dimension. The end index of the first dimension. + The index of the second dimension. + The source array. + + + Sets a vector slice of a 2D array. The index of the first dimension is fixed. + The target array. + The index of the first dimension. The start index of the second dimension. The end index of the second dimension. The source array. - - Gets a slice of an array + + Sets a region slice of an array + The target array. + The start index of the first dimension. + The end index of the first dimension. + The start index of the second dimension. + The end index of the second dimension. + The source array. + + + Gets a vector slice of a 2D array. The index of the second dimension is fixed. + The source array. + The start index of the first dimension. + The end index of the first dimension. + The fixed index of the second dimension. + The sub array from the input indices. + + + Gets a vector slice of a 2D array. The index of the first dimension is fixed. + The source array. + The index of the first dimension. + The start index of the second dimension. + The end index of the second dimension. + The sub array from the input indices. + + + Gets a region slice of an array The source array. The start index of the first dimension. The end index of the first dimension. @@ -6527,7 +8200,7 @@ The fifth arg. The function result. - + Adapt an F# first class function value to be an optimized function value that can accept five curried arguments without intervening execution. The input function. @@ -6552,7 +8225,7 @@ The fourth arg. The function result. - + Adapt an F# first class function value to be an optimized function value that can accept four curried arguments without intervening execution. The input function. @@ -6576,7 +8249,7 @@ The third arg. The function result. - + Adapt an F# first class function value to be an optimized function value that can accept three curried arguments without intervening execution. The input function. @@ -6598,7 +8271,7 @@ The second arg. The function result. - + Adapt an F# first class function value to be an optimized function value that can accept two curried arguments without intervening execution. The input function. @@ -6618,6 +8291,26 @@ An implementation module used to hold some private implementations of function value invocation. + + Convert an option to a potentially null value. + The input value. + The result value, which is null if the input was None. + + + Convert a potentially null value to an option. + The input value. + The result option. + + + Convert a Nullable value to an option. + The input nullable value. + The result option. + + + Convert the option to a Nullable value. + The input option. + The result value. + Convert the option to a list of length 0 or 1. The input option. @@ -6628,41 +8321,47 @@ The input option. The result array. - + + filter f inp evaluates to match inp with None -> None | Some x -> if f x then Some x else None. + A function that evaluates whether the value contained in the option should remain, or be filtered out. + The input option. + The input if the predicate evaluates to true; otherwise, None. + + bind f inp evaluates to match inp with None -> None | Some x -> f x A function that takes the value of type T from an option and transforms it into an option containing a value of type U. The input option. An option of the output type of the binder. - + map f inp evaluates to match inp with None -> None | Some x -> Some (f x). A function to apply to the option value. The input option. An option of the input value after applying the mapping function, or None if the input is None. - + iter f inp executes match inp with None -> () | Some x -> f x. A function to apply to the option value. The input option. Unit if the option is None, otherwise it returns the result of applying the predicate to the option value. - - forall p inp" evaluates to "match inp with None -> true | Some x -> p x. + + forall p inp evaluates to match inp with None -> true | Some x -> p x. A function that evaluates to a boolean when given a value from the option type. The input option. True if the option is None, otherwise it returns the result of applying the predicate to the option value. - + exists p inp evaluates to match inp with None -> false | Some x -> p x. A function that evaluates to a boolean when given a value from the option type. The input option. False if the option is None, otherwise it returns the result of applying the predicate to the option value. - + fold f inp s evaluates to match inp with None -> s | Some x -> f x s. A function to update the state data when given a value from an option. The input option. @@ -6670,7 +8369,7 @@ The original state if the option is None, otherwise it returns the updated state with the folder and the option value. - + fold f s inp evaluates to match inp with None -> s | Some x -> f s x. A function to update the state data when given a value from an option. The initial state. @@ -6732,14 +8431,14 @@ The input formatter. The arguments of the formatter. - + sprintf, but call the given 'final' function to generate the result. See kprintf. The function called to generate a result from the formatted string. The input formatter. The arguments of the formatter. - + printf, but call the given 'final' function to generate the result. For example, these let the printing force a flush after all output has been entered onto the channel, but not before. @@ -6747,7 +8446,7 @@ The input formatter. The arguments of the formatter. - + fprintf, but call the given 'final' function to generate the result. See kprintf. The function called after formatting to generate the format result. @@ -6755,7 +8454,7 @@ The input formatter. The arguments of the formatter. - + bprintf, but call the given 'final' function to generate the result. See kprintf. The function called after formatting to generate the format result. @@ -6819,6 +8518,7 @@ %b: bool, formatted as "true" or "false" %s: string, formatted as its unescaped contents + %c: character literal %d, %i: any basic integer type formatted as a decimal integer, signed if the basic integer type is signed. %u: any basic integer type formatted as an unsigned decimal integer %x, %X, %o: any basic integer type formatted as an unsigned hexadecimal @@ -6889,516 +8589,1070 @@ The printf '#' flag is invalid and a compile-time error will be reported if it is used. - - - - - + + Returns the length of the string. + The input string. + The number of characters in the string. - - + + Returns a string by concatenating count instances of str. + The number of copies of the input string will be copied. + The input string. + The concatenated string. + Thrown when count is negative. - - + + Tests if any character of the string satisfies the given predicate. + The function to test each character of the string. + The input string. + True if any character returns true for the predicate and false otherwise. - - + + Tests if all characters in the string satisfy the given predicate. + The function to test each character of the string. + The input string. + True if all characters return true for the predicate and false otherwise. - - + + Builds a new string whose characters are the results of applying the function mapping + to each index from 0 to count-1 and concatenating the resulting + strings. + The number of strings to initialize. + The function to take an index and produce a string to + be concatenated with the others. + The constructed string. + Thrown when count is negative. - + + Builds a new string containing only the characters of the input string + for which the given predicate returns "true". - - + Returns an empty string if the input string is null + A function to test whether each character in the input sequence should be included in the output string. + The input string. + The resulting string. - - + + Builds a new string whose characters are the results of applying the function mapping + to each of the characters of the input string and concatenating the resulting + strings. + The function to produce a string from each character of the input string. + The input string. + The concatenated string. - - + + Builds a new string whose characters are the results of applying the function mapping + to each character and index of the input string. + The function to apply to each character and index of the string. + The input string. + The resulting string. - - + + Builds a new string whose characters are the results of applying the function mapping + to each of the characters of the input string. + The function to apply to the characters of the string. + The input string. + The resulting string. - - + + Applies the function action to the index of each character in the string and the + character itself. + The function to apply to each character and index of the string. + The input string. - - + + Applies the function action to each character in the string. + The function to be applied to each character of the string. + The input string. - - + + Returns a new string made by concatenating the given strings + with separator sep, that is a1 + sep + ... + sep + aN. + The separator string to be inserted between the strings + of the input sequence. + The sequence of strings to be concatenated. + A new string consisting of the concatenated strings separated by + the separation string. + Thrown when strings is null. - - + + Functional programming operators for string processing. Further string operations + are available via the member functions on strings and other functionality in + System.String + and System.Text.RegularExpressions types. - - + + + The SI unit of catalytic activity + - - + + + The SI unit of does equivalent + - - + + + The SI unit of absorbed dose + - - + + + The SI unit of activity referred to a radionuclide + - - + + + The SI unit of illuminance + - - + + + The SI unit of luminous flux + - - + + + The SI unit of inductance + - - + + + The SI unit of magnetic flux density + - - + + + The SI unit of magnetic flux + - - + + + The SI unit of electric conductance + - - + + + The SI unit of electric resistance + - - + + + The SI unit of capacitance + - - + + + The SI unit of electric potential difference, electromotive force + - - + + + The SI unit of electric charge, amount of electricity + - - + + + The SI unit of power, radiant flux + - - + + + The SI unit of energy, work, amount of heat + - - + + + The SI unit of pressure, stress + - - + + + The SI unit of force + - - + + + The SI unit of frequency + - - + + + The SI unit of luminous intensity + - - + + + The SI unit of amount of substance + - - + + + The SI unit of thermodynamic temperature + - - + + + The SI unit of electric current + - - + + + The SI unit of time + - - + + + The SI unit of mass + - - + + + The SI unit of length + - - + + + The SI unit of length + - - + + + A synonym for henry, the SI unit of inductance + - - + + + A synonym for katal, the SI unit of catalytic activity + - - + + + A synonym for sievert, the SI unit of does equivalent + - - + + + A synonym for gray, the SI unit of absorbed dose + - - + + + A synonym for becquerel, the SI unit of activity referred to a radionuclide + - - + + + A synonym for lux, the SI unit of illuminance + - - + + + A synonym for lumen, the SI unit of luminous flux + - - + + + A synonym for tesla, the SI unit of magnetic flux density + - - + + + A synonym for weber, the SI unit of magnetic flux + - - + + + A synonym for UnitNames.ohm, the SI unit of electric resistance. + - - + + + A synonym for siemens, the SI unit of electric conductance + - - + + + A synonym for farad, the SI unit of capacitance + - - + + + A synonym for volt, the SI unit of electric potential difference, electromotive force + - - + + + A synonym for coulomb, the SI unit of electric charge, amount of electricity + - - + + + A synonym for watt, the SI unit of power, radiant flux + - - + + + A synonym for joule, the SI unit of energy, work, amount of heat + - - + + + A synonym for pascal, the SI unit of pressure, stress + - - + + + A synonym for newton, the SI unit of force + - - + + + A synonym for hertz, the SI unit of frequency + - - + + + A synonym for candela, the SI unit of luminous intensity + - - + + + A synonym for mole, the SI unit of amount of substance + - - + + + A synonym for kelvin, the SI unit of thermodynamic temperature + - - + + + A synonym for ampere, the SI unit of electric current + - - + + + A synonym for second, the SI unit of time + - - + + + A synonym for kilogram, the SI unit of mass + - - + + + A synonym for Metre, the SI unit of length + - - + + + A method used to support the F# query syntax. Returns an empty sequence that has the specified type argument. + + + + + A method used to support the F# query syntax. Returns a sequence that contains the specified values. + + + + + A method used to support the F# query syntax. Returns a sequence of length one that contains the specified value. + + + + A query operator that selects those elements based on a specified predicate. + + + + A query operator that performs a subsequent ordering of the elements selected so far in descending order by the given nullable sorting key. + This operator may only be used immediately after a 'sortBy', 'sortByDescending', 'thenBy' or 'thenByDescending', or their nullable variants. + + + + A query operator that performs a subsequent ordering of the elements selected so far in ascending order by the given nullable sorting key. + This operator may only be used immediately after a 'sortBy', 'sortByDescending', 'thenBy' or 'thenByDescending', or their nullable variants. + + + + A query operator that performs a subsequent ordering of the elements selected so far in descending order by the given sorting key. + This operator may only be used immediately after a 'sortBy', 'sortByDescending', 'thenBy' or 'thenByDescending', or their nullable variants. + + + + A query operator that performs a subsequent ordering of the elements selected so far in ascending order by the given sorting key. + This operator may only be used immediately after a 'sortBy', 'sortByDescending', 'thenBy' or 'thenByDescending', or their nullable variants. + + + + A query operator that selects elements from a sequence as long as a specified condition is true, and then skips the remaining elements. + + + + A query operator that selects a specified number of contiguous elements from those selected so far. + + + + A query operator that selects a nullable value for each element selected so far and returns the sum of these values. + If any nullable does not have a value, it is ignored. + + + + A query operator that selects a value for each element selected so far and returns the sum of these values. + + + + + A method used to support the F# query syntax. Inputs to queries are implicitly wrapped by a call to one of the overloads of this method. + + + + + A method used to support the F# query syntax. Inputs to queries are implicitly wrapped by a call to one of the overloads of this method. + + + + A query operator that sorts the elements selected so far in descending order by the given nullable sorting key. + + + + A query operator that sorts the elements selected so far in ascending order by the given nullable sorting key. + + + + A query operator that sorts the elements selected so far in descending order by the given sorting key. + + + + A query operator that sorts the elements selected so far in ascending order by the given sorting key. + + + + A query operator that bypasses elements in a sequence as long as a specified condition is true and then selects the remaining elements. + + + + A query operator that bypasses a specified number of the elements selected so far and selects the remaining elements. + + + + A query operator that projects each of the elements selected so far. + + + + + A method used to support the F# query syntax. Runs the given quotation as a query using LINQ IQueryable rules. + + + + + A method used to support the F# query syntax. Indicates that the query should be passed as a quotation to the Run method. + + + + A query operator that selects the element at a specified index amongst those selected so far. + + + + A query operator that selects a nullable value for each element selected so far and returns the minimum of these values. + If any nullable does not have a value, it is ignored. + + + + A query operator that selects a value for each element selected so far and returns the minimum resulting value. + + + + A query operator that selects a nullable value for each element selected so far and returns the maximum of these values. + If any nullable does not have a value, it is ignored. + + + + A query operator that selects a value for each element selected so far and returns the maximum resulting value. + + + + A query operator that correlates two sets of selected values based on matching keys and groups the results. + If any group is empty, a group with a single default value is used instead. + Normal usage is 'leftOuterJoin y in elements2 on (key1 = key2) into group'. + + + + A query operator that selects the last element of those selected so far, or a default value if no element is found. + + + + A query operator that selects the last element of those selected so far. + + + + A query operator that correlates two sets of selected values based on matching keys. + Normal usage is 'join y in elements2 on (key1 = key2)'. + + + + A query operator that selects the first element of those selected so far, or a default value if the sequence contains no elements. + + + + A query operator that selects the first element from those selected so far. + + + + A query operator that selects a value for each element selected so far and groups the elements by the given key. + + + + A query operator that correlates two sets of selected values based on matching keys and groups the results. + Normal usage is 'groupJoin y in elements2 on (key1 = key2) into group'. + + + + A query operator that groups the elements selected so far according to a specified key selector. + + + + + A method used to support the F# query syntax. Projects each element of a sequence to another sequence and combines the resulting sequences into one sequence. + + + + A query operator that selects the first element selected so far that satisfies a specified condition. + + + + A query operator that determines whether any element selected so far satisfies a condition. + + + + A query operator that selects the single, specific element of those selected so far, or a default value if that element is not found. + + + + A query operator that selects the single, specific element selected so far + + + + A query operator that selects distinct elements from the elements selected so far. + + + + A query operator that returns the number of selected elements. + + + + A query operator that determines whether the selected elements contains a specified element. + + + + A query operator that selects a nullable value for each element selected so far and returns the average of these values. + If any nullable does not have a value, it is ignored. + + + + A query operator that selects a value for each element selected so far and returns the average of these values. + + + + A query operator that determines whether all elements selected so far satisfies a condition. + + + + Create an instance of this builder. Use 'query { ... }' to use the query syntax. + + + + The type used to support the F# query syntax. Use 'query { ... }' to use the query syntax. + - - + + + A property used to support the F# query syntax. + - - + + + A method used to support the F# query syntax. + - - + + + A partial input or result in an F# query. This type is used to support the F# query syntax. + - - + + Converts the argument to character. Numeric inputs are converted according to the UTF-16 + encoding for characters. The operation requires an appropriate static conversion method on the input type. + The input value. + The converted char. - - + + Converts the argument to System.Decimal using a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted decimal. - - + + Converts the argument to unsigned native integer using a direct conversion for all + primitive numeric types. Otherwise the operation requires an appropriate + static conversion method on the input type. + The input value. + The converted unativeint - - + + Converts the argument to signed native integer. This is a direct conversion for all + primitive numeric types. Otherwise the operation requires an appropriate + static conversion method on the input type. + The input value. + The converted nativeint - - + + Converts the argument to 64-bit float. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted float - - + + Converts the argument to 32-bit float. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted float32 - - + + Converts the argument to 64-bit float. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted float - - + + Converts the argument to 32-bit float. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted float32 - - + + Converts the argument to unsigned 64-bit integer. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted uint64 - - + + Converts the argument to signed 64-bit integer. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted int64 - - + + Converts the argument to unsigned 32-bit integer. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted uint32 - - + + Converts the argument to signed 32-bit integer. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted int32 - - + + Converts the argument to a particular enum type. + The input value. + The converted enum type. - - + + Converts the argument to signed 32-bit integer. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted int - - + + Converts the argument to unsigned 16-bit integer. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted uint16 - - + + Converts the argument to signed 16-bit integer. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted int16 - - + + Converts the argument to signed byte. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted sbyte - - + + Converts the argument to signed byte. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted sbyte - - + + Converts the argument to byte. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted byte - - + + Converts the argument to byte. This is a direct conversion for all + primitive numeric types. The operation requires an appropriate + static conversion method on the input type. + The input value. + The converted byte - - + + + Functions for converting nullable values + - - + + + The division operator where a nullable value appears on both left and right sides + - - + + + The division operator where a nullable value appears on the right + - - + + + The division operator where a nullable value appears on the left + - - + + + The modulus operator where a nullable value appears on both left and right sides + - - + + + The modulus operator where a nullable value appears on the right + - - + + + The modulus operator where a nullable value appears on the left + - - + + + The multiplication operator where a nullable value appears on both left and right sides + - - + + + The multiplication operator where a nullable value appears on the right + - - + + + The multiplication operator where a nullable value appears on the left + - - + + + The subtraction operator where a nullable value appears on both left and right sides + - - + + + The subtraction operator where a nullable value appears on the right + - - + + + The subtraction operator where a nullable value appears on the left + - - + + + The addition operator where a nullable value appears on both left and right sides + - - + + + The addition operator where a nullable value appears on the right + - - + + + The addition operator where a nullable value appears on the left + - - + + + The '<>' operator where a nullable value appears on both left and right sides + - - + + + The '=' operator where a nullable value appears on both left and right sides + - - + + + The '<' operator where a nullable value appears on both left and right sides + - - + + + The '<=' operator where a nullable value appears on both left and right sides + - - + + + The '>' operator where a nullable value appears on both left and right sides + - - + + + The '>=' operator where a nullable value appears on both left and right sides + - - + + + The '<>' operator where a nullable value appears on the right + - - + + + The '=' operator where a nullable value appears on the right + - - + + + The '<' operator where a nullable value appears on the right + - - + + + The '<=' operator where a nullable value appears on the right + - - + + + The '>' operator where a nullable value appears on the right + - - + + + The '>=' operator where a nullable value appears on the right + - - + + + The '<>' operator where a nullable value appears on the left + - - + + + The '=' operator where a nullable value appears on the left + - - + + + The '<' operator where a nullable value appears on the left + - - + + + The '<=' operator where a nullable value appears on the left + - - + + + The '>' operator where a nullable value appears on the left + - - + + + The '>=' operator where a nullable value appears on the left + - - + + + Operators for working with nullable values + - - + + + A method used to support the F# query syntax. Runs the given quotation as a query using LINQ IEnumerable rules. + - - + + + A method used to support the F# query syntax. Runs the given quotation as a query using LINQ rules. + - - + + + This type shouldn't be used directly from user code. + - - + + + This type shouldn't be used directly from user code. + - - + + + This type shouldn't be used directly from user code. + - - + + + This type shouldn't be used directly from user code. + - - + + + This type shouldn't be used directly from user code. + - - + + + This type shouldn't be used directly from user code. + - - + + + This type shouldn't be used directly from user code. + - - + + + This type shouldn't be used directly from user code. + - - + + + A type used to reconstruct a grouping after applying a mutable->immutable mapping transformation + on a result of a query. + - - + + + The generic MethodInfo for Select function + Describes how we got from productions of immutable objects to productions of anonymous objects, with enough information + that we can invert the process in final query results. + - - + + + Given the expression part of a "yield" or "select" which produces a result in terms of immutable tuples or immutable records, + generate an equivalent expression yielding anonymous objects. Also return the conversion for the immutable-to-mutable correspondence + so we can reverse this later. + - - Returns the length of the string. - The input string. - The number of characters in the string. - Thrown when the input string is null. + + + Simplify gets of tuples and gets of record fields. + - - Returns a string by concatenating count instances of str. - The number of copies of the input string will be copied. - The input string. - The concatenated string. - Thrown when the input string is null. + + + Cleanup the use of property-set object constructions in leaf expressions that form parts of F# queries. + - - Tests if any character of the string satisfies the given predicate. - The function to test each character of the string. - The input string. - True if any character returns true for the predicate and false otherwise. - Thrown when the input string is null. + + + Given an type involving immutable tuples and records, logically corresponding to the type produced at a + "yield" or "select", convert it to a type involving anonymous objects according to the conversion data. + - - Tests if all characters in the string satisfy the given predicate. - The function to test each character of the string. - The input string. - True if all characters return true for the predicate and false otherwise. - Thrown when the input string is null. + + + Recognize anonymous type construction written using 'new AnonymousObject(<e1>, <e2>, ...)' + - - Builds a new string whose characters are the results of applying the function mapping - to each index from 0 to count-1 and concatenating the resulting - strings. - The number of strings to initialize. - The function to take an index and produce a string to - be concatenated with the others. - The constructed string. - Thrown when count is negative. + + + Recognize object construction written using 'new O(Prop1 = <e>, Prop2 = <e>, ...)' + - - Builds a new string whose characters are the results of applying the function mapping - to each of the characters of the input string and concatenating the resulting - strings. - The function to produce a string from each character of the input string. - The input string. - The concatenated string. - Thrown when the input string is null. + + + Tests whether a list consists only of assignments of properties of the + given variable, null values (ignored) and ends by returning the given variable + (pattern returns only property assignments) + - - Builds a new string whose characters are the results of applying the function mapping - to each character and index of the input string. - The function to apply to each character and index of the string. - The input string. - The resulting string. - Thrown when the input string is null. + + + Recognize sequential series written as (... ((<e>; <e>); <e>); ...) + + + + + A runtime helper used to evaluate nested quotation literals. + - - Builds a new string whose characters are the results of applying the function mapping - to each of the characters of the input string. - The function to apply to the characters of the string. - The input string. - The resulting string. - Thrown when the input string is null. + + + A runtime helper used to evaluate nested quotation literals. + - - Applies the function action to the index of each character in the string and the - character itself. - The function to apply to each character and index of the string. - The input string. - Thrown when the input string is null. + + + Evaluates a subset of F# quotations by first converting to a LINQ expression, for the subset of LINQ expressions represented by the + expression syntax in the C# language. + - - Applies the function action to each character in the string. - The function to be applied to each character of the string. - The input string. - Thrown when the input string is null. + + + Converts a subset of F# quotations to a LINQ expression, for the subset of LINQ expressions represented by the + expression syntax in the C# language. + - - Returns a new string made by concatenating the given strings - with separator sep, that is a1 + sep + ... + sep + aN. - The separator string to be inserted between the strings - of the input sequence. - The sequence of strings to be concatenated. - A new string consisting of the concatenated strings separated by - the separation string. - Thrown when strings is null. + + + Converts a subset of F# quotations to a LINQ expression, for the subset of LINQ expressions represented by the + expression syntax in the C# language. + - - Functional programming operators for string processing. Further string operations - are available via the member functions on strings and other functionality in - System.String - and System.Text.RegularExpressions types. + + + When used in a quotation, this function indicates a specific conversion + should be performed when converting the quotation to a LINQ expression. + + This function should not be called directly. + + + + + When used in a quotation, this function indicates a specific conversion + should be performed when converting the quotation to a LINQ expression. + + This function should not be called directly. + + + + + When used in a quotation, this function indicates a specific conversion + should be performed when converting the quotation to a LINQ expression. + + This function should not be called directly. + Allocates a region of memory on the stack. @@ -7449,93 +9703,6 @@ Contains operations on native pointers. Use of these operators may result in the generation of unverifiable code. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gets the raw expression associated with this type-carrying expression @@ -7550,6 +9717,19 @@ Returns the custom attributes of an expression. + + Builds an expression that represents a value and its associated reflected definition as a quotation + The untyped object. + The type of the object. + The definition of the value being quoted. + The resulting expression. + + + Builds an expression that represents a value and its associated reflected definition as a quotation + The value being quoted. + The definition of the value being quoted. + The resulting expression. + Builds an expression that represents a while loop The predicate to control the loop iteration. @@ -7567,6 +9747,19 @@ The input variable. The resulting expression. + + Builds an expression that represents a constant value of a particular type, arising from a variable of the given name + The untyped object. + The type of the object. + The name of the variable. + The resulting expression. + + + Builds an expression that represents a constant value, arising from a variable of the given name + The typed value. + The name of the variable. + The resulting expression. + Builds an expression that represents a constant value The typed value. @@ -7617,7 +9810,12 @@ The final part of the expression to be evaluated. The resulting expression. - + + Format the expression as a string + Indicates if method, property, constructor and type objects should be printed in detail. If false, these are abbreviated to their name. + The formatted string. + + Substitutes through the given expression using the given functions to map variables to new values. The functions must give consistent results at each application. Variable renaming may occur on the target expression @@ -7631,17 +9829,35 @@ The second expression. The resulting expression. + + Permits interactive environments such as F# Interactive + to explicitly register new pickled resources that represent persisted + top level definitions. + The assembly associated with the resource. + The unique name for the resources being added. + The type definitions referenced. + The serialized resource to register with the environment. + Permits interactive environments such as F# Interactive to explicitly register new pickled resources that represent persisted - top level definitions. The string indicates a unique name for the resources - being added. The format for the bytes is the encoding generated by the F# compiler. + top level definitions. The assembly associated with the resource. The unique name for the resources being added. The serialized resource to register with the environment. + + Builds an expression that represents a nested typed quotation literal + The expression being quoted. + The resulting expression. + + + Builds an expression that represents a nested raw quotation literal + The expression being quoted. + The resulting expression. + - Builds an expression that represents a nested quotation literal + Builds an expression that represents a nested typed or raw quotation literal The expression being quoted. The resulting expression. @@ -7709,8 +9925,8 @@ The list of elements of the array. The resulting expression. - - Builds recursives expressions associated with 'let rec' constructs + + Builds recursive expressions associated with 'let rec' constructs The list of bindings for the let expression. The sub-expression where the bindings are in scope. The resulting expression. @@ -7723,7 +9939,7 @@ The resulting expression. - Builds an expression that represents the constrution of an F# function value + Builds an expression that represents the construction of an F# function value The parameter to the function. The body of the function. The resulting expression. @@ -7737,7 +9953,7 @@ Fetches or creates a new variable with the given name and type from a global pool of shared variables - indexed by name and type. The type is given by the expicit or inferred type parameter + indexed by name and type. The type is given by the explicit or inferred type parameter The variable name. The created of fetched typed global variable. @@ -7777,18 +9993,22 @@ The description of the field to access. The resulting expression. - - + + This function is called automatically when quotation syntax (<@ @>) and other sources of + quotations are used. + A type in the assembly where the quotation occurs. + The type definitions referenced. + The spliced types, to replace references to type variables. + The spliced expressions to replace references to spliced expressions. + The serialized form of the quoted expression. + The resulting expression. - This function is called automatically when quotation syntax (<@ @>) and related typed-expression - quotations are used. The bytes are a pickled binary representation of an unlinked form of the quoted expression, - and the System.Type argument is any type in the assembly where the quoted - expression occurs, i.e. it helps scope the interpretation of the cross-assembly - references in the bytes. + This function is called automatically when quotation syntax (<@ @>) and other sources of + quotations are used. A type in the assembly where the quotation occurs. - The list of spliced types. - The list of spliced expressions. + The spliced types, to replace references to type variables. + The spliced expressions to replace references to spliced expressions. The serialized form of the quoted expression. The resulting expression. @@ -7888,7 +10108,7 @@ The decomposed Var, Lambda, or ConstApp. - Active patterns for traversing, visiting, rebuilding and tranforming expressions in a generic way + Active patterns for traversing, visiting, rebuilding and transforming expressions in a generic way An active pattern to recognize property setters that have an associated ReflectedDefinition @@ -7908,13 +10128,18 @@ A parameterized active pattern to recognize calls to a specified function or method. The returned elements are the optional target object (present if the target is an - instance method), the generic type instantation (non-empty if the target is a generic + instance method), the generic type instantiation (non-empty if the target is a generic instantiation), and the arguments to the function or method. The input template expression to specify the method to call. The optional target object (present if the target is an - instance method), the generic type instantation (non-empty if the target is a generic + instance method), the generic type instantiation (non-empty if the target is a generic instantiation), and the arguments to the function or method. + + An active pattern to recognize constant decimal expressions + The input expression to match against. + decimal option + An active pattern to recognize constant unsigned int64 expressions The input expression to match against. @@ -8018,30 +10243,40 @@ The input expression to match against. Var option - + + An active pattern to recognize expressions that are a value with an associated definition + The input expression to match against. + The boxed value, its static type and its definition + + An active pattern to recognize expressions that represent a constant value The input expression to match against. - (obj * Type) option + The boxed value, its static type and its name + + + An active pattern to recognize expressions that represent a constant value. This also matches expressions matched by ValueWithName. + The input expression to match against. + The boxed value and its static type An active pattern to recognize expressions that represent a test if a value is of a particular union case The input expression to match against. - (Expr * UnionCaseInfo) option + The expression and union case being tested An active pattern to recognize expressions that represent a dynamic type test The input expression to match against. - (Expr * Type) option + The expression and type being tested An active pattern to recognize expressions that represent getting a tuple field The input expression to match against. - (Expr * int) option + The expression and tuple field being accessed An active pattern to recognize expressions that represent a try/finally construct The input expression to match against. - (Expr * Expr) option + The body and handler parts of the try/finally expression An active pattern to recognize expressions that represent a try/with construct for exception filtering and catching @@ -8049,10 +10284,20 @@ (Expr * Var * Expr * Var * Expr) option - An active pattern to recognize expressions that represent sequential exeuction of one expression followed by another + An active pattern to recognize expressions that represent sequential execution of one expression followed by another The input expression to match against. (Expr * Expr) option + + An active pattern to recognize expressions that represent a nested typed quotation literal + The input expression to match against. + Expr option + + + An active pattern to recognize expressions that represent a nested raw quotation literal + The input expression to match against. + Expr option + An active pattern to recognize expressions that represent a nested quotation literal The input expression to match against. @@ -8272,7 +10517,7 @@ The description of the union case reader. - Precomputes a function for reading all the fields for a particular discriminator case of a union type + Precompute a function for reading all the fields for a particular discriminator case of a union type Using the computed function will typically be faster than executing a corresponding call to GetFields The description of the union case to read. @@ -8286,13 +10531,13 @@ The description of the constructor of the given union case. - Precomputes a function for constructing a discriminated union value for a particular union case. + Precompute a function for constructing a discriminated union value for a particular union case. The description of the union case. Optional binding flags. A function for constructing values of the given union case. - Precomputes a function for reading the values of a particular tuple type + Precompute a function for reading the values of a particular tuple type Assumes the given type is a TupleType. If not, ArgumentException is raised during pre-computation. @@ -8321,7 +10566,7 @@ for large tuples. - Precomputes a function for reading the values of a particular tuple type + Precompute a function for reading the values of a particular tuple type Assumes the given type is a TupleType. If not, ArgumentException is raised during pre-computation. @@ -8399,7 +10644,7 @@ Thrown when the input type is not a record type. The created record. - + Builds a typed function from object from a dynamic function implementation The function type of the implementation. The untyped lambda of the function implementation. @@ -8479,6 +10724,10 @@ The fields associated with the case, represented by a PropertyInfo. The fields associated with the case. + + Returns the custom attributes data associated with the case. + An list of custom attribute data items. + Returns the custom attributes associated with the case matching the given attribute type. The type of attributes to return. @@ -8491,38 +10740,167 @@ Represents a case of a discriminated union type - + + Returns true if the typ is a representation of an F# exception declaration + The type to check. + Optional flag that denotes accessibility of the private representation. + True if the type check is an F# exception. + + + Reads all the fields from an F# exception declaration, in declaration order + Assumes exceptionType is an exception representation type. If not, ArgumentException is raised. + The exception type to read. + Optional flag that denotes accessibility of the private representation. + Thrown if the given type is not an exception. + An array containing the PropertyInfo of each field in the exception. + + + Returns true if the typ is a representation of an F# union type or the runtime type of a value of that type + The type to check. + Optional flag that denotes accessibility of the private representation. + True if the type check succeeds. + + + Return true if the typ is a representation of an F# record type + The type to check. + Optional flag that denotes accessibility of the private representation. + True if the type check succeeds. - + + Gets the cases of a union type. + Assumes the given type is a union type. If not, ArgumentException is raised during pre-computation. + The input union type. + Optional flag that denotes accessibility of the private representation. + Thrown when the input type is not a union type. + An array of descriptions of the cases of the given union type. - + + Reads all the fields from a record value, in declaration order + Assumes the given input is a record value. If not, ArgumentException is raised. + The input record type. + Optional flag that denotes accessibility of the private representation. + An array of descriptions of the properties of the record type. - + + Reads all the fields from a value built using an instance of an F# exception declaration + Assumes the given input is an F# exception value. If not, ArgumentException is raised. + The exception instance. + Optional flag that denotes accessibility of the private representation. + Thrown when the input type is not an F# exception. + The fields from the given exception. + + + A method that constructs objects of the given case + The description of the union case. + Optional flag that denotes accessibility of the private representation. + The description of the constructor of the given union case. + + + Precompute a function for constructing a discriminated union value for a particular union case. + The description of the union case. + Optional flag that denotes accessibility of the private representation. + A function for constructing values of the given union case. - + + Precompute a function for reading all the fields for a particular discriminator case of a union type + Using the computed function will typically be faster than executing a corresponding call to GetFields + The description of the union case to read. + Optional flag that denotes accessibility of the private representation. + A function to for reading the fields of the given union case. + + + Precompute a property or static method for reading an integer representing the case tag of a union type. + The type of union to read. + Optional flag that denotes accessibility of the private representation. + The description of the union case reader. - + + Assumes the given type is a union type. + If not, ArgumentException is raised during pre-computation. + Using the computed function is more efficient than calling GetUnionCase + because the path executed by the computed function is optimized given the knowledge that it will be + used to read values of the given type. + The type of union to optimize reading. + Optional flag that denotes accessibility of the private representation. + An optimized function to read the tags of the given union type. - + + Identify the union case and its fields for an object + + Assumes the given input is a union case value. If not, ArgumentException is raised. + If the type is not given, then the runtime type of the input object is used to identify the + relevant union type. The type should always be given if the input object may be null. For example, + option values may be represented using the 'null'. + The input union case. + The union type containing the value. + Optional flag that denotes accessibility of the private representation. + Thrown when the input type is not a union case value. + The description of the union case and its fields. + + + Create a union case value. + The description of the union case to create. + The array of arguments to construct the given case. + Optional flag that denotes accessibility of the private representation. + The constructed union case. + + + Get a ConstructorInfo for a record type + The record type. + Optional flag that denotes accessibility of the private representation. + A ConstructorInfo for the given record type. - + + Precompute a function for constructing a record value. + Assumes the given type is a RecordType. + If not, ArgumentException is raised during pre-computation. + The type of record to construct. + Optional flag that denotes accessibility of the private representation. + Thrown when the input type is not a record type. + A function to construct records of the given type. - + + Precompute a function for reading all the fields from a record. The fields are returned in the + same order as the fields reported by a call to Microsoft.FSharp.Reflection.Type.GetInfo for + this type. + Assumes the given type is a RecordType. + If not, ArgumentException is raised during pre-computation. + + Using the computed function will typically be faster than executing a corresponding call to Value.GetInfo + because the path executed by the computed function is optimized given the knowledge that it will be + used to read values of the given type. + The type of record to read. + Optional flag that denotes accessibility of the private representation. + Thrown when the input type is not a record type. + An optimized reader for the given record type. - + + Reads all the fields from a record value. + Assumes the given input is a record value. If not, ArgumentException is raised. + The record object. + Optional flag that denotes accessibility of the private representation. + Thrown when the input type is not a record type. + The array of fields from the record. - + + Creates an instance of a record type. + Assumes the given input is a record type. + The type of record to make. + The array of values to initialize the record. + Optional flags that denotes accessibility of the private representation. + Thrown when the input type is not a record type. + The created record. @@ -8536,7 +10914,7 @@ If ShowProperties is set the printing process will evaluate properties of the values being displayed. This may cause additional computation. - The ShowIEnumerable is set the printing process will force the evalution of IEnumerable objects + The ShowIEnumerable is set the printing process will force the evaluation of IEnumerable objects to a small, finite depth, as determined by the printing parameters. This may lead to additional computation being performed during printing. @@ -8561,13 +10939,10 @@ those in the LayoutOps module. any_to_string and output_any are built using any_to_layout with default format options. - - - - Ouput any value to a channel using the same set of formatting rules + Output any value to a channel using the same set of formatting rules as any_to_string @@ -8587,27 +10962,24 @@ call to Object.ToString() on the boxed version of the input. - - - - + - For limitting layout of list-like sequences (lists,arrays,etc). + For limiting layout of list-like sequences (lists,arrays,etc). unfold a list of items using (project and z) making layout list via itemL. If reach maxLength (before exhausting) then truncate. - + See tagL - + Layout like an F# list. - + Layout like an F# option. diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core/FSharp.Core.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core/FSharp.Core.dll similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.Core/FSharp.Core.dll rename to lkg/FSharp-14.0.23413.0/bin/FSharp.Core/FSharp.Core.dll diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core/FSharp.Core.pdb b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core/FSharp.Core.pdb similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.Core/FSharp.Core.pdb rename to lkg/FSharp-14.0.23413.0/bin/FSharp.Core/FSharp.Core.pdb diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core/FSharp.Core.xml b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core/FSharp.Core.xml similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.Core/FSharp.Core.xml rename to lkg/FSharp-14.0.23413.0/bin/FSharp.Core/FSharp.Core.xml diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core/README.txt b/lkg/FSharp-14.0.23413.0/bin/FSharp.Core/README.txt similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.Core/README.txt rename to lkg/FSharp-14.0.23413.0/bin/FSharp.Core/README.txt diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.LanguageService.Base.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.LanguageService.Base.dll similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.LanguageService.Base.dll rename to lkg/FSharp-14.0.23413.0/bin/FSharp.LanguageService.Base.dll diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.LanguageService.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.LanguageService.dll similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.LanguageService.dll rename to lkg/FSharp-14.0.23413.0/bin/FSharp.LanguageService.dll diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.PowerPack.Build.Tasks.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.PowerPack.Build.Tasks.dll similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.PowerPack.Build.Tasks.dll rename to lkg/FSharp-14.0.23413.0/bin/FSharp.PowerPack.Build.Tasks.dll diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.PowerPack.Build.Tasks.pdb b/lkg/FSharp-14.0.23413.0/bin/FSharp.PowerPack.Build.Tasks.pdb similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.PowerPack.Build.Tasks.pdb rename to lkg/FSharp-14.0.23413.0/bin/FSharp.PowerPack.Build.Tasks.pdb diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.PowerPack.Build.Tasks.xml b/lkg/FSharp-14.0.23413.0/bin/FSharp.PowerPack.Build.Tasks.xml similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.PowerPack.Build.Tasks.xml rename to lkg/FSharp-14.0.23413.0/bin/FSharp.PowerPack.Build.Tasks.xml diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.PowerPack.targets b/lkg/FSharp-14.0.23413.0/bin/FSharp.PowerPack.targets similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.PowerPack.targets rename to lkg/FSharp-14.0.23413.0/bin/FSharp.PowerPack.targets diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.ProjectSystem.Base.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.ProjectSystem.Base.dll similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.ProjectSystem.Base.dll rename to lkg/FSharp-14.0.23413.0/bin/FSharp.ProjectSystem.Base.dll diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.ProjectSystem.FSharp.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.ProjectSystem.FSharp.dll similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.ProjectSystem.FSharp.dll rename to lkg/FSharp-14.0.23413.0/bin/FSharp.ProjectSystem.FSharp.dll diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.ProjectSystem.PropertyPages.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.ProjectSystem.PropertyPages.dll similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.ProjectSystem.PropertyPages.dll rename to lkg/FSharp-14.0.23413.0/bin/FSharp.ProjectSystem.PropertyPages.dll diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.SRGen.Build.Tasks.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.SRGen.Build.Tasks.dll new file mode 100644 index 00000000000..9556f1b30ef Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/FSharp.SRGen.Build.Tasks.dll differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.SRGen.targets b/lkg/FSharp-14.0.23413.0/bin/FSharp.SRGen.targets similarity index 98% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.SRGen.targets rename to lkg/FSharp-14.0.23413.0/bin/FSharp.SRGen.targets index 4792caf4f78..5e9362cdd27 100644 --- a/lkg/FSharp-4.0.30319.1/bin/FSharp.SRGen.targets +++ b/lkg/FSharp-14.0.23413.0/bin/FSharp.SRGen.targets @@ -6,7 +6,7 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and created a backup copy. Incorrect changes to this file will make it impossible to load or build your projects from the command-line or the IDE. -Copyright (C) Microsoft Corporation. All rights reserved. +Copyright (C) Microsoft Corporation. Apache 2.0 License. *********************************************************************************************** --> @@ -59,7 +59,6 @@ Copyright (C) Microsoft Corporation. All rights reserved. - false diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.VS.FSI.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.VS.FSI.dll similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FSharp.VS.FSI.dll rename to lkg/FSharp-14.0.23413.0/bin/FSharp.VS.FSI.dll diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.VsSqmMulti.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.VsSqmMulti.dll new file mode 100644 index 00000000000..bafccbf4f92 Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/FSharp.VsSqmMulti.dll differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FindUnusedResources.exe b/lkg/FSharp-14.0.23413.0/bin/FindUnusedResources.exe similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FindUnusedResources.exe rename to lkg/FSharp-14.0.23413.0/bin/FindUnusedResources.exe diff --git a/lkg/FSharp-4.0.30319.1/bin/FsLex.exe b/lkg/FSharp-14.0.23413.0/bin/FsLex.exe similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FsLex.exe rename to lkg/FSharp-14.0.23413.0/bin/FsLex.exe diff --git a/lkg/FSharp-14.0.23413.0/bin/FsLex.exe.config b/lkg/FSharp-14.0.23413.0/bin/FsLex.exe.config new file mode 100644 index 00000000000..18a2d18726c --- /dev/null +++ b/lkg/FSharp-14.0.23413.0/bin/FsLex.exe.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/lkg/FSharp-4.0.30319.1/bin/FsLex.pdb b/lkg/FSharp-14.0.23413.0/bin/FsLex.pdb similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FsLex.pdb rename to lkg/FSharp-14.0.23413.0/bin/FsLex.pdb diff --git a/lkg/FSharp-4.0.30319.1/bin/FsLex.xml b/lkg/FSharp-14.0.23413.0/bin/FsLex.xml similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FsLex.xml rename to lkg/FSharp-14.0.23413.0/bin/FsLex.xml diff --git a/lkg/FSharp-14.0.23413.0/bin/FsSrGen.exe b/lkg/FSharp-14.0.23413.0/bin/FsSrGen.exe new file mode 100644 index 00000000000..d0cc465cf8b Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/FsSrGen.exe differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FsYacc.exe b/lkg/FSharp-14.0.23413.0/bin/FsYacc.exe similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FsYacc.exe rename to lkg/FSharp-14.0.23413.0/bin/FsYacc.exe diff --git a/lkg/FSharp-14.0.23413.0/bin/FsYacc.exe.config b/lkg/FSharp-14.0.23413.0/bin/FsYacc.exe.config new file mode 100644 index 00000000000..18a2d18726c --- /dev/null +++ b/lkg/FSharp-14.0.23413.0/bin/FsYacc.exe.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/lkg/FSharp-4.0.30319.1/bin/FsYacc.pdb b/lkg/FSharp-14.0.23413.0/bin/FsYacc.pdb similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FsYacc.pdb rename to lkg/FSharp-14.0.23413.0/bin/FsYacc.pdb diff --git a/lkg/FSharp-4.0.30319.1/bin/FsYacc.xml b/lkg/FSharp-14.0.23413.0/bin/FsYacc.xml similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/FsYacc.xml rename to lkg/FSharp-14.0.23413.0/bin/FsYacc.xml diff --git a/lkg/FSharp-14.0.23413.0/bin/Fsc.exe b/lkg/FSharp-14.0.23413.0/bin/Fsc.exe new file mode 100644 index 00000000000..39581542426 Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/Fsc.exe differ diff --git a/lkg/FSharp-14.0.23413.0/bin/Fsc.exe.config b/lkg/FSharp-14.0.23413.0/bin/Fsc.exe.config new file mode 100644 index 00000000000..a8879baed9d --- /dev/null +++ b/lkg/FSharp-14.0.23413.0/bin/Fsc.exe.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/lkg/FSharp-14.0.23413.0/bin/Fsi.exe b/lkg/FSharp-14.0.23413.0/bin/Fsi.exe new file mode 100644 index 00000000000..ac7a526773f Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/Fsi.exe differ diff --git a/lkg/FSharp-14.0.23413.0/bin/Fsi.exe.config b/lkg/FSharp-14.0.23413.0/bin/Fsi.exe.config new file mode 100644 index 00000000000..8735c678c34 --- /dev/null +++ b/lkg/FSharp-14.0.23413.0/bin/Fsi.exe.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe b/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe new file mode 100644 index 00000000000..8c74377bdcb Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe differ diff --git a/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe.config b/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe.config new file mode 100644 index 00000000000..8735c678c34 --- /dev/null +++ b/lkg/FSharp-14.0.23413.0/bin/FsiAnyCPU.exe.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/lkg/FSharp-14.0.23413.0/bin/Microsoft.Build.Utilities.dll b/lkg/FSharp-14.0.23413.0/bin/Microsoft.Build.Utilities.dll new file mode 100644 index 00000000000..507f9fe807d Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/Microsoft.Build.Utilities.dll differ diff --git a/lkg/FSharp-4.0.30319.1/bin/Microsoft.FSharp.targets b/lkg/FSharp-14.0.23413.0/bin/Microsoft.FSharp.targets similarity index 88% rename from lkg/FSharp-4.0.30319.1/bin/Microsoft.FSharp.targets rename to lkg/FSharp-14.0.23413.0/bin/Microsoft.FSharp.targets index 704277f6741..8d8aee9c5f9 100644 --- a/lkg/FSharp-4.0.30319.1/bin/Microsoft.FSharp.targets +++ b/lkg/FSharp-14.0.23413.0/bin/Microsoft.FSharp.targets @@ -31,7 +31,13 @@ Copyright (C) Microsoft Corporation. All rights reserved. $(MSBuildAllProjects);$(MSBuildThisFileFullPath) .fs F# + Managed $(Optimize) + Software\Microsoft\Microsoft SDKs\$(TargetFrameworkIdentifier) + + RootNamespace + false + $(Prefer32Bit) + + + + + + + + diff --git a/lkg/FSharp-14.0.23413.0/bin/SupportedRuntimes.xml b/lkg/FSharp-14.0.23413.0/bin/SupportedRuntimes.xml new file mode 100644 index 00000000000..7bbf34f3202 --- /dev/null +++ b/lkg/FSharp-14.0.23413.0/bin/SupportedRuntimes.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lkg/FSharp-4.0.30319.1/bin/policy.2.0.FSharp.Core.dll b/lkg/FSharp-14.0.23413.0/bin/policy.2.0.FSharp.Core.dll similarity index 100% rename from lkg/FSharp-4.0.30319.1/bin/policy.2.0.FSharp.Core.dll rename to lkg/FSharp-14.0.23413.0/bin/policy.2.0.FSharp.Core.dll diff --git a/lkg/FSharp-14.0.23413.0/bin/policy.4.4.0.0.FSharp.Core.dll b/lkg/FSharp-14.0.23413.0/bin/policy.4.4.0.0.FSharp.Core.dll new file mode 100644 index 00000000000..89a5207fc2f Binary files /dev/null and b/lkg/FSharp-14.0.23413.0/bin/policy.4.4.0.0.FSharp.Core.dll differ diff --git a/lkg/FSharp-14.0.23413.0/bin/pub.config b/lkg/FSharp-14.0.23413.0/bin/pub.config new file mode 100644 index 00000000000..6aa70c08050 --- /dev/null +++ b/lkg/FSharp-14.0.23413.0/bin/pub.config @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Build.dll b/lkg/FSharp-4.0.30319.1/bin/FSharp.Build.dll deleted file mode 100644 index a25892a0601..00000000000 Binary files a/lkg/FSharp-4.0.30319.1/bin/FSharp.Build.dll and /dev/null differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Compiler.Interactive.Settings.dll b/lkg/FSharp-4.0.30319.1/bin/FSharp.Compiler.Interactive.Settings.dll deleted file mode 100644 index c78468dcc18..00000000000 Binary files a/lkg/FSharp-4.0.30319.1/bin/FSharp.Compiler.Interactive.Settings.dll and /dev/null differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.dll b/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.dll deleted file mode 100644 index 371f11b4a7c..00000000000 Binary files a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.dll and /dev/null differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.optdata b/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.optdata deleted file mode 100644 index ed57214a7f7..00000000000 Binary files a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.optdata and /dev/null differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.sigdata b/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.sigdata deleted file mode 100644 index 0a985329818..00000000000 Binary files a/lkg/FSharp-4.0.30319.1/bin/FSharp.Core.sigdata and /dev/null differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FSharp.SRGen.Build.Tasks.dll b/lkg/FSharp-4.0.30319.1/bin/FSharp.SRGen.Build.Tasks.dll deleted file mode 100644 index e9bae5b1c34..00000000000 Binary files a/lkg/FSharp-4.0.30319.1/bin/FSharp.SRGen.Build.Tasks.dll and /dev/null differ diff --git a/lkg/FSharp-4.0.30319.1/bin/FsSrGen.exe b/lkg/FSharp-4.0.30319.1/bin/FsSrGen.exe deleted file mode 100644 index 1dce9d7e8c5..00000000000 Binary files a/lkg/FSharp-4.0.30319.1/bin/FsSrGen.exe and /dev/null differ diff --git a/lkg/FSharp-4.0.30319.1/bin/Fsc.exe b/lkg/FSharp-4.0.30319.1/bin/Fsc.exe deleted file mode 100644 index 48b138811d9..00000000000 Binary files a/lkg/FSharp-4.0.30319.1/bin/Fsc.exe and /dev/null differ diff --git a/lkg/FSharp-4.0.30319.1/bin/Fsi.exe b/lkg/FSharp-4.0.30319.1/bin/Fsi.exe deleted file mode 100644 index fdd3e33039e..00000000000 Binary files a/lkg/FSharp-4.0.30319.1/bin/Fsi.exe and /dev/null differ diff --git a/lkg/FSharp-4.0.30319.1/bin/Fsi.exe.config b/lkg/FSharp-4.0.30319.1/bin/Fsi.exe.config deleted file mode 100644 index 02f9ac5caa4..00000000000 --- a/lkg/FSharp-4.0.30319.1/bin/Fsi.exe.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/lkg/FSharp-4.0.30319.1/bin/pub.config b/lkg/FSharp-4.0.30319.1/bin/pub.config deleted file mode 100644 index 93a6c8786fb..00000000000 --- a/lkg/FSharp-4.0.30319.1/bin/pub.config +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/netci.groovy b/netci.groovy new file mode 100644 index 00000000000..79954a7cb1e --- /dev/null +++ b/netci.groovy @@ -0,0 +1,56 @@ +import jobs.generation.Utilities; + +def project = GithubProject + +def osList = ['Windows_NT'] //'Ubuntu', 'OSX', 'CentOS7.1' + +def machineLabelMap = ['Ubuntu':'ubuntu-doc', + 'OSX':'mac', + 'Windows_NT':'windows-elevated', + 'CentOS7.1' : 'centos-71'] + +def static getBuildJobName(def configuration, def os) { + return configuration.toLowerCase() + '_' + os.toLowerCase() +} + +[true, false].each { isPullRequest -> + ['Debug', 'Release'].each { configuration -> + osList.each { os -> + + def lowerConfiguration = configuration.toLowerCase() + + // Calculate job name + def jobName = getBuildJobName(configuration, os) + + def buildCommand = ''; + if (os == 'Windows_NT') { + buildCommand = ".\\jenkins-build.cmd ${lowerConfiguration}" + } + else { + buildCommand = "./jenkins-build.sh ${lowerConfiguration}" + } + + def newJobName = Utilities.getFullJobName(project, jobName, isPullRequest) + def newJob = job(newJobName) { + label(machineLabelMap[os]) + steps { + if (os == 'Windows_NT') { + // Batch + batchFile(buildCommand) + } + else { + // Shell + shell(buildCommand) + } + } + } + + // TODO: set to false after tests are fully enabled + def skipIfNoTestFiles = 'true' + + Utilities.simpleInnerLoopJobSetup(newJob, project, isPullRequest, "Jenkins ${os} ${configuration}") + Utilities.addXUnitDotNETResults(newJob, 'tests/TestResults/**/*_Xml.xml', skipIfNoTestFiles) + Utilities.addArchival(newJob, "${lowerConfiguration}/**") + } + } +} diff --git a/packages.config b/packages.config index a7462f84250..f311d7fb273 100644 --- a/packages.config +++ b/packages.config @@ -1,5 +1,7 @@ - + - - + + + + \ No newline at end of file diff --git a/src/FSharpSource.Settings.targets b/src/FSharpSource.Settings.targets index 75ceab8fd90..b0134839bc5 100644 --- a/src/FSharpSource.Settings.targets +++ b/src/FSharpSource.Settings.targets @@ -1,5 +1,5 @@  - + @@ -7,7 +7,7 @@ net40 net40 - 4.0.30319.1 + 14.0.23413.0 true FSharp true @@ -75,6 +75,8 @@ $(DefineConstants),VS_VERSION_DEV12=True $(DefineConstants);VS_VERSION_DEV12 + $(DefineConstants),VS_VERSION_DEV14=True + $(DefineConstants);VS_VERSION_DEV14 diff --git a/src/FSharpSource.targets b/src/FSharpSource.targets index 27b47b1c008..d987dd2cb21 100644 --- a/src/FSharpSource.targets +++ b/src/FSharpSource.targets @@ -1,22 +1,23 @@ - + + + true + 4.4.1.9055 + 2.4.1.9055 + 3.7.41.9055 + 3.47.41.9055 + 3.78.41.9055 + 3.259.41.9055 + - - true - - - $(OtherFlags) --version:4.4.0.9055 - $(OtherFlags) --version:2.4.0.9055 - $(OtherFlags) --version:3.7.4.9055 - $(OtherFlags) --version:3.47.4.9055 - $(OtherFlags) --version:3.78.4.9055 - $(OtherFlags) --version:3.259.4.9055 + + $(OtherFlags) --version:$(FSCoreVersion) $(OtherFlags) --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" STRONG_NAME_AND_DELAY_SIGN_FSHARP_COMPILER_WITH_MSFT_KEY;$(DefineConstants) true @@ -29,14 +30,20 @@ true + + + + $(OtherFlags) --version:4.4.1.9055 + + - $(OtherFlags) --version:4.4.0.9055 --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" + $(OtherFlags) --version:4.4.1.9055 --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" STRONG_NAME_AND_DELAY_SIGN_FSHARP_COMPILER_WITH_MSFT_KEY;$(DefineConstants) true - $(OtherFlags) --version:4.4.0.9055 --keyfile:"$(FSharpSourcesRoot)\fsharp\test.snk" + $(OtherFlags) --version:4.4.1.9055 --keyfile:"$(FSharpSourcesRoot)\fsharp\test.snk" STRONG_NAME_FSHARP_COMPILER_WITH_TEST_KEY;$(DefineConstants) true @@ -58,7 +65,7 @@ - $(OtherFlags) --version:4.4.0.9055 + $(OtherFlags) --version:4.4.1.9055 NO_STRONG_NAMES;$(DefineConstants) @@ -98,10 +105,13 @@ - 2.6.4 - 2.6.4.14350 - $(FSharpSourcesRoot)\..\packages\NUnit.$(NUnitVersion)\lib\ - $(FSharpSourcesRoot)\..\packages\NUnit.Runners.$(NUnitVersion)\tools\lib\ + 3.0.0 + 3.0.5797.27534 + $(FSharpSourcesRoot)\..\packages\NUnit.$(NUnitVersion)\lib\net45 + $(FSharpSourcesRoot)\..\packages\NUnit.Console.$(NUnitVersion)\tools\ + 2.0.3 + 2.0.3.0 + $(FSharpSourcesRoot)\..\packages\FsCheck.$(FsCheckVersion)\lib\ @@ -640,6 +650,13 @@ + + + ..\lkg\FSharp-$(LkgVersion)\bin\Microsoft.FSharp.Targets + $(FSharpSourcesRoot)\..\lkg\FSharp-$(LkgVersion)\bin + $(FSharpSourcesRoot)\..\lkg\FSharp-$(LkgVersion)\bin\FSharp.Core.dll + + ..\Proto\$(protoCLIDir)\bin\Microsoft.Portable.FSharp-proto.Targets @@ -655,6 +672,18 @@ ..\Proto\$(protoCLIDir)\bin\Microsoft.FSharp-proto.Targets + + + $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\4.1\Framework\v4.0\Microsoft.FSharp.Targets + $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.1.0\FSharp.Core.dll + + + + + $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\4.0\Framework\v4.0\Microsoft.FSharp.Targets + $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0\FSharp.Core.dll + + $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.1\Framework\v4.0\Microsoft.FSharp.Targets @@ -668,13 +697,6 @@ $(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll - - - ..\lkg\FSharp-$(LkgVersion)\bin\Microsoft.FSharp.Targets - $(FSharpSourcesRoot)\..\lkg\FSharp-$(LkgVersion)\bin - $(FSharpSourcesRoot)\..\lkg\FSharp-$(LkgVersion)\bin\FSharp.Core.dll - - $(MSBuildExtensionsPath32)\FSharp\1.0\Microsoft.FSharp.Targets @@ -729,7 +751,7 @@ Outputs="@(CustomCopyLocal->'$(OutDir)%(TargetFilename)')" Condition="'$(targetCLIDir)'!='Silverlight/4.0/'" > - + diff --git a/src/absil/bytes.fs b/src/absil/bytes.fs index 40e39e50326..87ea6c0c3c3 100644 --- a/src/absil/bytes.fs +++ b/src/absil/bytes.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Byte arrays namespace Microsoft.FSharp.Compiler.AbstractIL.Internal diff --git a/src/absil/bytes.fsi b/src/absil/bytes.fsi index 3d948121bb6..8aab687c2de 100644 --- a/src/absil/bytes.fsi +++ b/src/absil/bytes.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Blobs of bytes, cross-compiling namespace Microsoft.FSharp.Compiler.AbstractIL.Internal diff --git a/src/absil/il.fs b/src/absil/il.fs old mode 100644 new mode 100755 index 5fe7972f13c..c9a74a3789c --- a/src/absil/il.fs +++ b/src/absil/il.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.AbstractIL.IL @@ -13,8 +13,9 @@ open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics -open System.Collections.Generic open System.Collections +open System.Collections.Generic +open System.Collections.Concurrent let logging = false @@ -75,10 +76,10 @@ let rec splitNamespaceAux (nm:string) = /// Global State. All namespace splits ever seen // ++GLOBAL MUTABLE STATE -let memoizeNamespaceTable = new Dictionary(10) +let memoizeNamespaceTable = new ConcurrentDictionary() // ++GLOBAL MUTABLE STATE -let memoizeNamespaceRightTable = new Dictionary(100) +let memoizeNamespaceRightTable = new ConcurrentDictionary() let splitNamespace nm = @@ -92,7 +93,7 @@ let splitNamespaceMemoized nm = splitNamespace nm // ++GLOBAL MUTABLE STATE let memoizeNamespaceArrayTable = - Dictionary(10) + Concurrent.ConcurrentDictionary() let splitNamespaceToArray nm = let mutable res = Unchecked.defaultof<_> @@ -215,22 +216,18 @@ module SHA1 = else k60to79 - type chan = SHABytes of byte[] - type sha_instream = - { stream: chan; + type SHAStream = + { stream: byte[]; mutable pos: int; mutable eof: bool; } - let rot_left32 x n = (x <<< n) ||| (x >>>& (32-n)) + let rotLeft32 x n = (x <<< n) ||| (x >>>& (32-n)) - let inline sha_eof sha = sha.eof - - (* padding and length (in bits!) recorded at end *) - let sha_after_eof sha = + + // padding and length (in bits!) recorded at end + let shaAfterEof sha = let n = sha.pos - let len = - (match sha.stream with - | SHABytes s -> s.Length) + let len = sha.stream.Length if n = len then 0x80 else let padded_len = (((len + 9 + 63) / 64) * 64) - 8 @@ -245,22 +242,21 @@ module SHA1 = elif (n &&& 63) = 63 then (sha.eof <- true; int32 (int64 len * int64 8) &&& 0xff) else 0x0 - let sha_read8 sha = - let b = - match sha.stream with - | SHABytes s -> if sha.pos >= s.Length then sha_after_eof sha else int32 s.[sha.pos] - sha.pos <- sha.pos + 1; + let shaRead8 sha = + let s = sha.stream + let b = if sha.pos >= s.Length then shaAfterEof sha else int32 s.[sha.pos] + sha.pos <- sha.pos + 1 b - let sha_read32 sha = - let b0 = sha_read8 sha - let b1 = sha_read8 sha - let b2 = sha_read8 sha - let b3 = sha_read8 sha + let shaRead32 sha = + let b0 = shaRead8 sha + let b1 = shaRead8 sha + let b2 = shaRead8 sha + let b3 = shaRead8 sha let res = (b0 <<< 24) ||| (b1 <<< 16) ||| (b2 <<< 8) ||| b3 res - let sha1_hash sha = + let sha1Hash sha = let mutable h0 = 0x67452301 let mutable h1 = 0xEFCDAB89 let mutable h2 = 0x98BADCFE @@ -272,21 +268,21 @@ module SHA1 = let mutable d = 0 let mutable e = 0 let w = Array.create 80 0x00 - while (not (sha_eof sha)) do + while (not sha.eof) do for i = 0 to 15 do - w.[i] <- sha_read32 sha + w.[i] <- shaRead32 sha for t = 16 to 79 do - w.[t] <- rot_left32 (w.[t-3] ^^^ w.[t-8] ^^^ w.[t-14] ^^^ w.[t-16]) 1 + w.[t] <- rotLeft32 (w.[t-3] ^^^ w.[t-8] ^^^ w.[t-14] ^^^ w.[t-16]) 1 a <- h0 b <- h1 c <- h2 d <- h3 e <- h4 for t = 0 to 79 do - let temp = (rot_left32 a 5) + f(t,b,c,d) + e + w.[t] + k(t) + let temp = (rotLeft32 a 5) + f(t,b,c,d) + e + w.[t] + k(t) e <- d d <- c - c <- rot_left32 b 30 + c <- rotLeft32 b 30 b <- a a <- temp h0 <- h0 + a @@ -297,7 +293,7 @@ module SHA1 = h0,h1,h2,h3,h4 let sha1HashBytes s = - let (_h0,_h1,_h2,h3,h4) = sha1_hash { stream = SHABytes s; pos = 0; eof = false } // the result of the SHA algorithm is stored in registers 3 and 4 + let (_h0,_h1,_h2,h3,h4) = sha1Hash { stream = s; pos = 0; eof = false } // the result of the SHA algorithm is stored in registers 3 and 4 Array.map byte [| b0 h4; b1 h4; b2 h4; b3 h4; b0 h3; b1 h3; b2 h3; b3 h3; |] @@ -915,11 +911,11 @@ type ILAttribute = { Method: ILMethodSpec; Data: byte[] } -[] -type ILAttributes = - | CustomAttrsLazy of Lazy - | CustomAttrs of ILAttribute list - member x.AsList = match x with | CustomAttrsLazy l -> l.Force() | CustomAttrs l -> l +[] +type ILAttributes(f: unit -> ILAttribute[]) = + let mutable array = InlineDelayInit<_>(f) + member x.AsArray = array.Value + member x.AsList = x.AsArray |> Array.toList type ILCodeLabel = int @@ -1528,25 +1524,32 @@ type ILMethodDef = /// Index table by name and arity. type MethodDefMap = Map -[] -type ILMethodDefs = - | Methods of Lazy +[] +type ILMethodDefs(f : (unit -> ILMethodDef[])) = + + let mutable array = InlineDelayInit<_>(f) + let mutable dict = InlineDelayInit<_>(fun () -> + let arr = array.Value + let t = Dictionary<_,_>() + for i = arr.Length - 1 downto 0 do + let y = arr.[i] + let key = y.Name + if t.ContainsKey key then + t.[key] <- y :: t.[key] + else + t.[key] <- [ y ] + t) + interface IEnumerable with member x.GetEnumerator() = ((x :> IEnumerable).GetEnumerator() :> IEnumerator) - interface IEnumerable with - member x.GetEnumerator() = - let (Methods(lms)) = x - let ms,_ = lms.Force() - (ms :> IEnumerable).GetEnumerator() - member x.AsList = Seq.toList x - member x.FindByName nm = - let (Methods lpmap) = x - let t = snd (Lazy.force lpmap) - Map.tryFindMulti nm t + interface IEnumerable with + member x.GetEnumerator() = (array.Value :> IEnumerable).GetEnumerator() - member x.FindByNameAndArity (nm,arity) = - x.FindByName nm |> List.filter (fun x -> x.Parameters.Length = arity) + member x.AsArray = array.Value + member x.AsList = x.AsArray |> Array.toList + member x.FindByName nm = if dict.Value.ContainsKey nm then dict.Value.[nm] else [] + member x.FindByNameAndArity (nm,arity) = x.FindByName nm |> List.filter (fun x -> x.Parameters.Length = arity) [] @@ -1699,28 +1702,32 @@ type ILTypeDef = | _ -> false -and ILTypeDefs = - | TypeDefTable of Lazy<(string list * string * ILAttributes * Lazy) array> * Lazy +and [] ILTypeDefs(f : unit -> (string list * string * ILAttributes * Lazy)[]) = + + let mutable array = InlineDelayInit<_>(f) + let mutable dict = InlineDelayInit<_>(fun () -> + let arr = array.Value + let t = Dictionary<_,_>(HashIdentity.Structural) + for (nsp, nm, _attr, ltd) in arr do + let key = nsp, nm + t.[key] <- ltd + t) + + member x.AsArray = [| for (_,_,_,ltd) in array.Value -> ltd.Force() |] + member x.AsList = x.AsArray |> Array.toList + interface IEnumerable with member x.GetEnumerator() = ((x :> IEnumerable).GetEnumerator() :> IEnumerator) + interface IEnumerable with member x.GetEnumerator() = - let (TypeDefTable (larr,_tab)) = x - let tds = seq { for (_,_,_,td) in larr.Force() -> td.Force() } - tds.GetEnumerator() - member x.AsList = Seq.toList x + (seq { for (_,_,_,ltd) in array.Value -> ltd.Force() }).GetEnumerator() - member x.AsListOfLazyTypeDefs = let (TypeDefTable (larr,_tab)) = x in larr.Force() |> Array.toList + member x.AsArrayOfLazyTypeDefs = array.Value member x.FindByName nm = - let (TypeDefTable (_,m)) = x let ns,n = splitILTypeName nm - m.Force().[ns].[n].Force() - - -/// keyed first on namespace then on type name. The namespace is often a unique key for a given type map. -and ILTypeDefsMap = - Map>> + dict.Value.[(ns,n)].Force() type ILNestedExportedType = { Name: string; @@ -2023,10 +2030,11 @@ let mkILFieldSpec (tref,ty) = { FieldRef= tref; EnclosingType=ty } let mkILFieldSpecInTy (typ:ILType,nm,fty) = mkILFieldSpec (mkILFieldRef (typ.TypeRef,nm,fty), typ) -let emptyILCustomAttrs = CustomAttrs [] +let emptyILCustomAttrs = ILAttributes (fun () -> [| |]) -let mkILCustomAttrs l = match l with [] -> emptyILCustomAttrs | _ -> CustomAttrs l -let mkILComputedCustomAttrs l = CustomAttrsLazy (Lazy.Create l) +let mkILCustomAttrsFromArray (l: ILAttribute[]) = if l.Length = 0 then emptyILCustomAttrs else ILAttributes (fun () -> l) +let mkILCustomAttrs l = l |> List.toArray |> mkILCustomAttrsFromArray +let mkILComputedCustomAttrs f = ILAttributes f let andTailness x y = match x with Tailcall when y -> Tailcall | _ -> Normalcall @@ -2322,28 +2330,11 @@ let getName (ltd: Lazy) = let ns,n = splitILTypeName td.Name (ns,n,td.CustomAttrs,ltd) -let addILTypeDefToTable (ns,n,_cas,ltd) tab = - let prev = - (match Map.tryFind ns tab with - | None -> Dictionary<_,_>(1, HashIdentity.Structural) - | Some prev -> prev) - if prev.ContainsKey n then - let msg = sprintf "not unique type %s" (unsplitTypeName (ns,n)); - System.Diagnostics.Debug.Assert(false,msg) - failwith msg - prev.[n] <- ltd; - Map.add ns prev tab - -let addLazyTypeDefToTable ltd larr = lazyMap (fun arr -> Array.ofList (getName ltd :: Array.toList arr)) larr - -let buildTable larr = lazyMap (fun arr -> Array.foldBack addILTypeDefToTable arr Map.empty) larr -let buildTypes larr = TypeDefTable (larr, buildTable larr) - -(* this is not performance critical *) -let addILTypeDef td (TypeDefTable (larr,_ltab)) = buildTypes (addLazyTypeDefToTable (notlazy td) larr) -let mkILTypeDefs l = buildTypes (List.map (notlazy >> getName) l |> Array.ofList |> notlazy ) -let mkILTypeDefsLazy llist = buildTypes (lazyMap Array.ofList llist) -let emptyILTypeDefs = mkILTypeDefs [] +let addILTypeDef td (tdefs: ILTypeDefs) = ILTypeDefs (fun () -> [| yield getName (notlazy td); yield! tdefs.AsArrayOfLazyTypeDefs |]) +let mkILTypeDefsFromArray l = ILTypeDefs (fun () -> Array.map (notlazy >> getName) l) +let mkILTypeDefs l = mkILTypeDefsFromArray (Array.ofList l) +let mkILTypeDefsComputed f = ILTypeDefs f +let emptyILTypeDefs = mkILTypeDefsFromArray [| |] // -------------------------------------------------------------------- // Operations on method tables. @@ -2351,22 +2342,13 @@ let emptyILTypeDefs = mkILTypeDefs [] // REVIEW: this data structure looks substandard // -------------------------------------------------------------------- -let addILMethodToTable (y: ILMethodDef) tab = - let key = y.Name - let prev = Map.tryFindMulti key tab - Map.add key (y::prev) tab +let mkILMethodsFromArray xs = ILMethodDefs (fun () -> xs) +let mkILMethods xs = xs |> Array.ofList |> mkILMethodsFromArray +let mkILMethodsComputed f = ILMethodDefs f +let emptyILMethods = mkILMethodsFromArray [| |] -let addILMethod_to_pmap y (mds,tab) = y::mds,addILMethodToTable y tab -let addILMethod y (Methods lpmap) = Methods (lazyMap (addILMethod_to_pmap y) lpmap) - -let mkILMethods l = Methods (notlazy (List.foldBack addILMethod_to_pmap l ([],Map.empty))) -let mkILMethodsLazy l = Methods (lazy (List.foldBack addILMethod_to_pmap (Lazy.force l) ([],Map.empty))) -let emptyILMethods = mkILMethods [] - -let filterILMethodDefs f (Methods lpmap) = - Methods (lazyMap (fun (fs,_) -> - let l = List.filter f fs - (l, List.foldBack addILMethodToTable l Map.empty)) lpmap) +let filterILMethodDefs f (mdefs: ILMethodDefs) = + ILMethodDefs (fun () -> mdefs.AsArray |> Array.filter f) // -------------------------------------------------------------------- @@ -3258,16 +3240,17 @@ let prependInstrsToCode c1 c2 = let prependInstrsToMethod new_code md = mdef_code2code (prependInstrsToCode new_code) md -(* Creates cctor if needed *) +// Creates cctor if needed let cdef_cctorCode2CodeOrCreate tag f cd = let mdefs = cd.Methods - let md,mdefs = + let cctor = match mdefs.FindByName ".cctor" with - | [mdef] -> mdef,filterILMethodDefs (fun md -> md.Name <> ".cctor") mdefs - | [] -> mkILClassCtor (mkMethodBody (false,emptyILLocals,1,nonBranchingInstrsToCode [ ],tag)), mdefs + | [mdef] -> mdef + | [] -> mkILClassCtor (mkMethodBody (false,emptyILLocals,1,nonBranchingInstrsToCode [ ],tag)) | _ -> failwith "bad method table: more than one .cctor found" - let md' = f md - {cd with Methods = addILMethod md' mdefs} + + let methods = ILMethodDefs (fun () -> [| yield f cctor; for md in mdefs do if md.Name <> ".cctor" then yield md |]) + {cd with Methods = methods} let code_of_mdef (md:ILMethodDef) = @@ -3459,7 +3442,7 @@ let mkILTypeDefForGlobalFunctions ilg (methods,fields) = mkILSimpleClass ilg (ty let destTypeDefsWithGlobalFunctionsFirst ilg (tdefs: ILTypeDefs) = let l = tdefs.AsList let top,nontop = l |> List.partition (fun td -> td.Name = typeNameForGlobalFunctions) - let top2 = if isNil top then [mkILTypeDefForGlobalFunctions ilg (emptyILMethods, emptyILFields)] else top + let top2 = if top.Length = 0 then [ mkILTypeDefForGlobalFunctions ilg (emptyILMethods, emptyILFields) ] else top top2@nontop let mkILSimpleModule assname modname dll subsystemVersion useHighEntropyVA tdefs hashalg locale flags exportedTypes metadataVersion = @@ -4690,7 +4673,7 @@ type ILTypeSigParser(tstring : string) = let ilty = x.ParseType() ILAttribElem.Type(Some(ilty)) -let decodeILAttribData ilg (ca: ILAttribute) scope = +let decodeILAttribData ilg (ca: ILAttribute) = let bytes = ca.Data let sigptr = 0 let bb0,sigptr = sigptr_get_byte bytes sigptr @@ -4784,15 +4767,19 @@ let decodeILAttribData ilg (ca: ILAttribute) scope = let et,sigptr = sigptr_get_u8 bytes sigptr // We have a named value let ty,sigptr = - // REVIEW: Post-M3, consider removing the restriction for scope - it's unnecessary - // because you can reconstruct scope using the qualified name from the CA Blob - if (0x50 = (int et) || 0x55 = (int et)) && Option.isSome scope then + if (0x50 = (int et) || 0x55 = (int et)) then let qualified_tname,sigptr = sigptr_get_serstring bytes sigptr - // we're already getting the qualified name from the binary blob - // if we don't split out the unqualified name from the qualified name, - // we'll write the qualified assembly reference string twice to the binary blob - let unqualified_tname = qualified_tname.Split([|','|]).[0] - let scoref = Option.get scope + let unqualified_tname, rest = + let pieces = qualified_tname.Split(',') + if pieces.Length > 1 then + pieces.[0], Some (String.concat "," pieces.[1..]) + else + pieces.[0], None + let scoref = + match rest with + | Some aname -> ILScopeRef.Assembly(ILAssemblyRef.FromAssemblyName(System.Reflection.AssemblyName(aname))) + | None -> ilg.traits.ScopeRef + let tref = mkILTyRef (scoref,unqualified_tname) let tspec = mkILNonGenericTySpec tref ILType.Value(tspec),sigptr @@ -5083,7 +5070,7 @@ let compareILVersions (a1,a2,a3,a4) ((b1,b2,b3,b4) : ILVersionInfo) = 0 -let resolveILMethodRef td (mref:ILMethodRef) = +let resolveILMethodRefWithRescope r td (mref:ILMethodRef) = let args = mref.ArgTypes let nargs = args.Length let nm = mref.Name @@ -5093,15 +5080,15 @@ let resolveILMethodRef td (mref:ILMethodRef) = possibles |> List.filter (fun md -> mref.CallingConv = md.CallingConv && // REVIEW: this uses equality on ILType. For CMOD_OPTIONAL this is not going to be correct - (md.Parameters,mref.ArgTypes) ||> ILList.lengthsEqAndForall2 (fun p1 p2 -> p1.Type = p2) && + (md.Parameters,mref.ArgTypes) ||> ILList.lengthsEqAndForall2 (fun p1 p2 -> r p1.Type = p2) && // REVIEW: this uses equality on ILType. For CMOD_OPTIONAL this is not going to be correct - md.Return.Type = mref.ReturnType) with - | [] -> - failwith ("no method named "+nm+" with appropriate argument types found in type "+td.Name); + r md.Return.Type = mref.ReturnType) with + | [] -> failwith ("no method named "+nm+" with appropriate argument types found in type "+td.Name) | [mdef] -> mdef - | _ -> - failwith ("multiple methods named "+nm+" appear with identical argument types in type "+td.Name) + | _ -> failwith ("multiple methods named "+nm+" appear with identical argument types in type "+td.Name) +let resolveILMethodRef td mref = resolveILMethodRefWithRescope id td mref + let mkRefToILModule m = ILModuleRef.Create(m.Name, true, None) @@ -5121,17 +5108,15 @@ let ungenericizeTypeName n = String.sub n 0 pos else n -type ILEventRef = + +type ILEventRef = { erA: ILTypeRef; erB: string } static member Create(a,b) = {erA=a;erB=b} member x.EnclosingTypeRef = x.erA member x.Name = x.erB -type ILPropertyRef = +type ILPropertyRef = { prA: ILTypeRef; prB: string } static member Create (a,b) = {prA=a;prB=b} member x.EnclosingTypeRef = x.prA member x.Name = x.prB - - - diff --git a/src/absil/il.fsi b/src/absil/il.fsi index 6daef27de12..3cd6d6138ce 100644 --- a/src/absil/il.fsi +++ b/src/absil/il.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// The "unlinked" view of .NET metadata and code. Central to /// to Abstract IL library @@ -118,6 +118,7 @@ type PublicKey = member IsKeyToken: bool member Key: byte[] member KeyToken: byte[] + static member KeyAsToken: byte[] -> PublicKey type ILVersionInfo = uint16 * uint16 * uint16 * uint16 @@ -1268,6 +1269,7 @@ type ILMethodDef = [] type ILMethodDefs = interface IEnumerable + member AsArray : ILMethodDef[] member AsList : ILMethodDef list member FindByName : string -> ILMethodDef list @@ -1416,10 +1418,11 @@ type ILTypeDefKind = [] type ILTypeDefs = interface IEnumerable + member AsArray : ILTypeDef[] member AsList : ILTypeDef list /// Get some information about the type defs, but do not force the read of the type defs themselves - member AsListOfLazyTypeDefs : (string list * string * ILAttributes * Lazy) list + member AsArrayOfLazyTypeDefs : (string list * string * ILAttributes * Lazy) array /// Calls to [FindByName] will result in any laziness in the overall /// set of ILTypeDefs being read in in addition @@ -1621,6 +1624,7 @@ type ILModuleDef = /// or event. This is useful especially if your code is not using the Ilbind /// API to bind references. val resolveILMethodRef: ILTypeDef -> ILMethodRef -> ILMethodDef +val resolveILMethodRefWithRescope: (ILType -> ILType) -> ILTypeDef -> ILMethodRef -> ILMethodDef // ------------------------------------------------------------------ // Type Names @@ -1797,11 +1801,9 @@ val destTypeDefsWithGlobalFunctionsFirst: ILGlobals -> ILTypeDefs -> ILTypeDef l /// Note: not all custom attribute data can be decoded without binding types. In particular /// enums must be bound in order to discover the size of the underlying integer. /// The following assumes enums have size int32. -/// It also does not completely decode System.Type attributes val decodeILAttribData: ILGlobals -> ILAttribute -> - ILScopeRef option -> ILAttribElem list * (* fixed args *) ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) @@ -2025,7 +2027,8 @@ val mkILTypeForGlobalFunctions: ILScopeRef -> ILType /// Making tables of custom attributes, etc. val mkILCustomAttrs: ILAttribute list -> ILAttributes -val mkILComputedCustomAttrs: (unit -> ILAttribute list) -> ILAttributes +val mkILCustomAttrsFromArray: ILAttribute[] -> ILAttributes +val mkILComputedCustomAttrs: (unit -> ILAttribute[]) -> ILAttributes val emptyILCustomAttrs: ILAttributes val mkILSecurityDecls: ILPermission list -> ILPermissions @@ -2044,8 +2047,8 @@ val mkILPropertiesLazy: Lazy -> ILPropertyDefs val emptyILProperties: ILPropertyDefs val mkILMethods: ILMethodDef list -> ILMethodDefs -val mkILMethodsLazy: Lazy -> ILMethodDefs -val addILMethod: ILMethodDef -> ILMethodDefs -> ILMethodDefs +val mkILMethodsFromArray: ILMethodDef[] -> ILMethodDefs +val mkILMethodsComputed: (unit -> ILMethodDef[]) -> ILMethodDefs val emptyILMethods: ILMethodDefs val mkILFields: ILFieldDef list -> ILFieldDefs @@ -2056,7 +2059,8 @@ val mkILMethodImpls: ILMethodImplDef list -> ILMethodImplDefs val mkILMethodImplsLazy: Lazy -> ILMethodImplDefs val emptyILMethodImpls: ILMethodImplDefs -val mkILTypeDefs: ILTypeDef list -> ILTypeDefs +val mkILTypeDefs: ILTypeDef list -> ILTypeDefs +val mkILTypeDefsFromArray: ILTypeDef[] -> ILTypeDefs val emptyILTypeDefs: ILTypeDefs /// Create table of types which is loaded/computed on-demand, and whose individual @@ -2067,7 +2071,7 @@ val emptyILTypeDefs: ILTypeDefs /// /// Note that individual type definitions may contain further delays /// in their method, field and other tables. -val mkILTypeDefsLazy: Lazy<(string list * string * ILAttributes * Lazy) list> -> ILTypeDefs +val mkILTypeDefsComputed: (unit -> (string list * string * ILAttributes * Lazy) array) -> ILTypeDefs val addILTypeDef: ILTypeDef -> ILTypeDefs -> ILTypeDefs val mkILNestedExportedTypes: ILNestedExportedType list -> ILNestedExportedTypes @@ -2253,11 +2257,12 @@ val getTyOfILEnumInfo: ILEnumInfo -> ILType val computeILEnumInfo: string * ILFieldDefs -> ILEnumInfo -// -------------------------------------------------------------------- + +// -------------------------------------------------------------------- // For completeness. These do not occur in metadata but tools that // care about the existence of properties and events in the metadata // can benefit from them. -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- [] type ILEventRef = diff --git a/src/absil/ilascii.fs b/src/absil/ilascii.fs index f2bd0a4b2d3..695b0340f79 100644 --- a/src/absil/ilascii.fs +++ b/src/absil/ilascii.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.AbstractIL.Internal.AsciiConstants @@ -12,7 +12,7 @@ open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.Types open Microsoft.FSharp.Compiler.AbstractIL.IL -// set to the proper value at build.fs (BuildFrameworkTcImports) +// set to the proper value at CompileOps.fs (BuildFrameworkTcImports) let parseILGlobals = ref EcmaILGlobals // -------------------------------------------------------------------- diff --git a/src/absil/ilascii.fsi b/src/absil/ilascii.fsi index 6709085e449..91b4a288252 100644 --- a/src/absil/ilascii.fsi +++ b/src/absil/ilascii.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Various constants and utilities used when parsing the ILASM format for IL module internal Microsoft.FSharp.Compiler.AbstractIL.Internal.AsciiConstants diff --git a/src/absil/ilbinary.fs b/src/absil/ilbinary.fs index 7da256864bb..01aa8161eb2 100644 --- a/src/absil/ilbinary.fs +++ b/src/absil/ilbinary.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.AbstractIL.Internal.BinaryConstants diff --git a/src/absil/ilbinary.fsi b/src/absil/ilbinary.fsi index 7d7534367fc..1d7a1988322 100644 --- a/src/absil/ilbinary.fsi +++ b/src/absil/ilbinary.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Compiler use only. Code and constants shared between binary reader/writer. module internal Microsoft.FSharp.Compiler.AbstractIL.Internal.BinaryConstants diff --git a/src/absil/ildiag.fs b/src/absil/ildiag.fs index 8f32086c784..80151d339a7 100644 --- a/src/absil/ildiag.fs +++ b/src/absil/ildiag.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Configurable AppDomain-global diagnostics channel for the Abstract IL library /// diff --git a/src/absil/ildiag.fsi b/src/absil/ildiag.fsi index 5bef738cd52..1b4ff4dfdd7 100644 --- a/src/absil/ildiag.fsi +++ b/src/absil/ildiag.fsi @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Diagnostics from the AbsIL toolkit. You can reset the diagnostics /// stream to point elsewhere, or turn it -/// off altogether by setting it to 'None'. The logging channel initally +/// off altogether by setting it to 'None'. The logging channel initially /// points to stderr. All functions call flush() automatically. /// /// REVIEW: review if we should just switch to System.Diagnostics diff --git a/src/absil/illex.fsl b/src/absil/illex.fsl index a967970e586..ed6494092f2 100644 --- a/src/absil/illex.fsl +++ b/src/absil/illex.fsl @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. { diff --git a/src/absil/illib.fs b/src/absil/illib.fs index 7f2cb63dd4f..3fffe54fc73 100644 --- a/src/absil/illib.fs +++ b/src/absil/illib.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.AbstractIL.Internal.Library #nowarn "1178" // The struct, record or union type 'internal_instr_extension' is not structurally comparable because the type @@ -29,6 +29,24 @@ let (===) x y = LanguagePrimitives.PhysicalEquality x y // Library: projections //------------------------------------------------------------------------ +[] +/// An efficient lazy for inline storage in a class type. Results in fewer thunks. +type InlineDelayInit<'T when 'T : not struct> = + new (f: unit -> 'T) = {store = Unchecked.defaultof<'T>; func = System.Func<_>(f) } + val mutable store : 'T + val mutable func : System.Func<'T> + member x.Value = + match x.func with + | null -> x.store + | _ -> + let res = System.Threading.LazyInitializer.EnsureInitialized(&x.store, x.func) + x.func <- Unchecked.defaultof<_> + res + +//------------------------------------------------------------------------- +// Library: projections +//------------------------------------------------------------------------ + let foldOn p f z x = f z (p x) let notFound() = raise (KeyNotFoundException()) @@ -151,6 +169,11 @@ module Option = | None -> dflt | Some x -> x + let orElse dflt opt = + match opt with + | None -> dflt() + | res -> res + // REVIEW: systematically eliminate foldMap/mapFold duplication let foldMap f z l = match l with @@ -465,6 +488,7 @@ module Dictionary = // FUTURE CLEANUP: remove this adhoc collection type Hashset<'T> = Dictionary<'T,int> + [] module Hashset = let create (n:int) = new Hashset<'T>(n, HashIdentity.Structural) @@ -498,6 +522,28 @@ type ResultOrException<'TResult> = | Result of 'TResult | Exception of System.Exception +[] +module ResultOrException = + + let success a = Result a + let raze (b:exn) = Exception b + + // map + let (|?>) res f = + match res with + | Result x -> Result(f x ) + | Exception err -> Exception err + + let ForceRaise res = + match res with + | Result x -> x + | Exception err -> raise err + + let otherwise f x = + match x with + | Result x -> success x + | Exception _err -> f() + //------------------------------------------------------------------------- // Library: extensions to flat list (immutable arrays) @@ -597,7 +643,7 @@ module Eventually = let force e = Option.get (forceWhile (fun () -> true) e) - /// Keep running the computation bit by bit until a time limit is reached. + /// Keep running the computation bit by bit until a time limit is reached. /// The runner gets called each time the computation is restarted let repeatedlyProgressUntilDoneOrTimeShareOver timeShareInMilliseconds runner e = let sw = new System.Diagnostics.Stopwatch() @@ -744,7 +790,7 @@ type LazyWithContext<'T,'ctxt> = match x.funcOrException with | null -> x.value | _ -> - // Enter the lock in case another thread is in the process of evaluting the result + // Enter the lock in case another thread is in the process of evaluating the result System.Threading.Monitor.Enter(x); try x.UnsynchronizedForce(ctxt) @@ -919,26 +965,18 @@ type LayeredMultiMap<'Key,'Value when 'Key : equality and 'Key : comparison>(con module Shim = open System.IO - [] - type FileSystem() = - abstract ReadAllBytesShim: fileName:string -> byte[] - default this.ReadAllBytesShim (fileName:string) = - use stream = this.FileStreamReadShim fileName - let len = stream.Length - let buf = Array.zeroCreate (int len) - stream.Read(buf, 0, (int len)) |> ignore - buf + type IFileSystem = + abstract ReadAllBytesShim: fileName:string -> byte[] abstract FileStreamReadShim: fileName:string -> System.IO.Stream abstract FileStreamCreateShim: fileName:string -> System.IO.Stream - abstract GetFullPathShim: fileName:string -> string + abstract FileStreamWriteExistingShim: fileName:string -> System.IO.Stream /// Take in a filename with an absolute path, and return the same filename /// but canonicalized with respect to extra path separators (e.g. C:\\\\foo.txt) /// and '..' portions - abstract SafeGetFullPath: fileName:string -> string + abstract GetFullPathShim: fileName:string -> string abstract IsPathRootedShim: path:string -> bool - - abstract IsInvalidFilename: filename:string -> bool + abstract IsInvalidPathShim: filename:string -> bool abstract GetTempPathShim : unit -> string abstract GetLastWriteTimeShim: fileName:string -> System.DateTime abstract SafeExists: fileName:string -> bool @@ -946,37 +984,48 @@ module Shim = abstract AssemblyLoadFrom: fileName:string -> System.Reflection.Assembly abstract AssemblyLoad: assemblyName:System.Reflection.AssemblyName -> System.Reflection.Assembly - default this.AssemblyLoadFrom(fileName:string) = -#if FX_ATLEAST_40_COMPILER_LOCATION - System.Reflection.Assembly.UnsafeLoadFrom fileName -#else - System.Reflection.Assembly.LoadFrom fileName -#endif - default this.AssemblyLoad(assemblyName:System.Reflection.AssemblyName) = System.Reflection.Assembly.Load assemblyName + type DefaultFileSystem() = + interface IFileSystem with + member __.AssemblyLoadFrom(fileName:string) = + #if FX_ATLEAST_40_COMPILER_LOCATION + System.Reflection.Assembly.UnsafeLoadFrom fileName + #else + System.Reflection.Assembly.LoadFrom fileName + #endif + member __.AssemblyLoad(assemblyName:System.Reflection.AssemblyName) = System.Reflection.Assembly.Load assemblyName - let mutable FileSystem = - { new FileSystem() with - override __.ReadAllBytesShim (fileName:string) = File.ReadAllBytes fileName + member __.ReadAllBytesShim (fileName:string) = File.ReadAllBytes fileName member __.FileStreamReadShim (fileName:string) = new FileStream(fileName,FileMode.Open,FileAccess.Read,FileShare.ReadWrite) :> Stream member __.FileStreamCreateShim (fileName:string) = new FileStream(fileName,FileMode.Create,FileAccess.Write,FileShare.Read ,0x1000,false) :> Stream + member __.FileStreamWriteExistingShim (fileName:string) = new FileStream(fileName,FileMode.Open,FileAccess.Write,FileShare.Read ,0x1000,false) :> Stream member __.GetFullPathShim (fileName:string) = System.IO.Path.GetFullPath fileName - member __.SafeGetFullPath (fileName:string) = - //System.Diagnostics.Debug.Assert(Path.IsPathRooted(fileName), sprintf "SafeGetFullPath: '%s' is not absolute" fileName) - Path.GetFullPath fileName member __.IsPathRootedShim (path:string) = Path.IsPathRooted path - member __.IsInvalidFilename(filename:string) = - String.IsNullOrEmpty(filename) || filename.IndexOfAny(Path.GetInvalidFileNameChars()) <> -1 + member __.IsInvalidPathShim(path:string) = + let isInvalidPath(p:string) = + String.IsNullOrEmpty(p) || p.IndexOfAny(System.IO.Path.GetInvalidPathChars()) <> -1 + + let isInvalidFilename(p:string) = + String.IsNullOrEmpty(p) || p.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) <> -1 + + let isInvalidDirectory(d:string) = + d=null || d.IndexOfAny(Path.GetInvalidPathChars()) <> -1 + + isInvalidPath (path) || + let directory = Path.GetDirectoryName(path) + let filename = Path.GetFileName(path) + isInvalidDirectory(directory) || isInvalidFilename(filename) member __.GetTempPathShim() = System.IO.Path.GetTempPath() member __.GetLastWriteTimeShim (fileName:string) = File.GetLastWriteTime fileName member __.SafeExists (fileName:string) = System.IO.File.Exists fileName - member __.FileDelete (fileName:string) = System.IO.File.Delete fileName } + member __.FileDelete (fileName:string) = System.IO.File.Delete fileName type System.Text.Encoding with - static member GetEncodingShim(n:int) = - System.Text.Encoding.GetEncoding(n) + static member GetEncodingShim(n:int) = + System.Text.Encoding.GetEncoding(n) + let mutable FileSystem = DefaultFileSystem() :> IFileSystem diff --git a/src/absil/ilmorph.fs b/src/absil/ilmorph.fs index 8df078b7db6..9c2cd85ea86 100644 --- a/src/absil/ilmorph.fs +++ b/src/absil/ilmorph.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.AbstractIL.Morphs @@ -292,7 +292,7 @@ let cattr_typ2typ ilg f c = // dev11 M3 defensive coding: if anything goes wrong with attribute decoding or encoding, then back out. if morphCustomAttributeData then try - let elems,namedArgs = IL.decodeILAttribData ilg c (Some(meth.MethodRef.EnclosingTypeRef.Scope)) + let elems,namedArgs = IL.decodeILAttribData ilg c let elems = elems |> List.map (celem_typ2typ f) let namedArgs = namedArgs |> List.map (cnamedarg_typ2typ f) IL.mkILCustomAttribMethRef ilg (meth, elems, namedArgs) @@ -368,10 +368,10 @@ let morphILMethodDefs f (m:ILMethodDefs) = mkILMethods (List.map f m.AsList) let fdefs_fdef2fdef f (m:ILFieldDefs) = mkILFields (List.map f m.AsList) (* use this when the conversion produces just one type... *) -let morphILTypeDefs f (m: ILTypeDefs) = mkILTypeDefs (List.map f m.AsList) +let morphILTypeDefs f (m: ILTypeDefs) = mkILTypeDefsFromArray (Array.map f m.AsArray) let morphExpandILTypeDefs f (m:ILTypeDefs) = - mkILTypeDefs (List.foldBack (fun x y -> f x @ y) m.AsList []) + mkILTypeDefs (List.collect f m.AsList) let morphILTypeDefsInILModule typesf m = {m with TypeDefs=typesf m.TypeDefs} diff --git a/src/absil/ilmorph.fsi b/src/absil/ilmorph.fsi index 2a10f2c5984..3dd1355d5c0 100644 --- a/src/absil/ilmorph.fsi +++ b/src/absil/ilmorph.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// A set of "IL rewrites" ("morphs"). These map each sub-construct /// of particular ILTypeDefs. The morphing functions are passed diff --git a/src/absil/ilpars.fsy b/src/absil/ilpars.fsy index 1bfac0435e0..22b5460d5ea 100644 --- a/src/absil/ilpars.fsy +++ b/src/absil/ilpars.fsy @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. %{ diff --git a/src/absil/ilprint.fs b/src/absil/ilprint.fs index 1ff4559a33d..7b70513d858 100644 --- a/src/absil/ilprint.fs +++ b/src/absil/ilprint.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.AbstractIL.ILAsciiWriter diff --git a/src/absil/ilprint.fsi b/src/absil/ilprint.fsi index dad082380ff..2ad357cfbfe 100644 --- a/src/absil/ilprint.fsi +++ b/src/absil/ilprint.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Printer for the abstract syntax. module internal Microsoft.FSharp.Compiler.AbstractIL.ILAsciiWriter diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs index 11acfcee40c..42277cfd215 100644 --- a/src/absil/ilread.fs +++ b/src/absil/ilread.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. //--------------------------------------------------------------------- // The big binary reader @@ -44,48 +44,66 @@ let checking = false let logging = false let _ = if checking then dprintn "warning : Ilread.checking is on" -/// Read file into cached memory blocks to avoid taking any kind of a -/// lock on the file, and avoid needing any cleanup of files. -type MemChannel = - { mutable mcPos: int; - mcBlocks: byte[] } +let singleOfBits (x:int32) = System.BitConverter.ToSingle(System.BitConverter.GetBytes(x),0) +let doubleOfBits (x:int64) = System.BitConverter.Int64BitsToDouble(x) - static member OpenIn f = - let mcBlocks = FileSystem.ReadAllBytesShim f - { mcPos = 0; mcBlocks = mcBlocks } +//--------------------------------------------------------------------- +// Utilities. +//--------------------------------------------------------------------- - static member OpenBytes f = - let mcBlocks = f - { mcPos = 0; mcBlocks = mcBlocks } +let align alignment n = ((n + alignment - 0x1) / alignment) * alignment - member mc.InputByte() = - let p = mc.mcPos - let res = mc.mcBlocks.[p] - mc.mcPos <- p + 1; - res +let uncodedToken (tab:TableName) idx = ((tab.Index <<< 24) ||| idx) - member mc.InputBytes len = - let p = mc.mcPos - let res = Array.sub mc.mcBlocks p len - mc.mcPos <- p + len; - res +let i32ToUncodedToken tok = + let idx = tok &&& 0xffffff + let tab = tok >>>& 24 + (TableName.FromIndex tab, idx) - member mc.InputInt32() = - let b0 = mc.InputByte() - let b1 = mc.InputByte() - let b2 = mc.InputByte() - let b3 = mc.InputByte() - int b0 ||| (int b1 <<< 8) ||| (int b2 <<< 16) ||| (int b3 <<< 24) - member mc.InputUInt16() = - let b0 = mc.InputByte() - let b1 = mc.InputByte() - uint16 b0 ||| (uint16 b1 <<< 8) +[] +type TaggedIndex<'T> = + val tag: 'T + val index : int32 + new(tag,index) = { tag=tag; index=index } - member mc.Seek addr = - mc.mcPos <- addr +let uncodedTokenToTypeDefOrRefOrSpec (tab,tok) = + let tag = + if tab = TableNames.TypeDef then tdor_TypeDef + elif tab = TableNames.TypeRef then tdor_TypeRef + elif tab = TableNames.TypeSpec then tdor_TypeSpec + else failwith "bad table in uncodedTokenToTypeDefOrRefOrSpec" + TaggedIndex(tag,tok) - member mc.Close() = () +let uncodedTokenToMethodDefOrRef (tab,tok) = + let tag = + if tab = TableNames.Method then mdor_MethodDef + elif tab = TableNames.MemberRef then mdor_MemberRef + else failwith "bad table in uncodedTokenToMethodDefOrRef" + TaggedIndex(tag,tok) + +let (|TaggedIndex|) (x:TaggedIndex<'T>) = x.tag, x.index +let tokToTaggedIdx f nbits tok = + let tagmask = + if nbits = 1 then 1 + elif nbits = 2 then 3 + elif nbits = 3 then 7 + elif nbits = 4 then 15 + elif nbits = 5 then 31 + else failwith "too many nbits" + let tag = tok &&& tagmask + let idx = tok >>>& nbits + TaggedIndex(f tag, idx) + + +[] +type BinaryFile() = + abstract ReadByte : addr:int -> byte + abstract ReadBytes : addr:int -> int -> byte[] + abstract ReadInt32 : addr:int -> int + abstract ReadUInt16 : addr:int -> uint16 + abstract CountUtf8String : addr:int -> int + abstract ReadUTF8String : addr: int -> string /// Read file from memory mapped files module MemoryMapping = @@ -140,6 +158,7 @@ let derefByte (p:nativeint) = NativePtr.read (NativePtr.ofNativeInt p) type MemoryMappedFile(hMap: MemoryMapping.HANDLE, start:nativeint) = + inherit BinaryFile() static member Create fileName = //printf "fileName = %s\n" fileName; @@ -163,264 +182,132 @@ type MemoryMappedFile(hMap: MemoryMapping.HANDLE, start:nativeint) = member m.Addr (i:int) : nativeint = start + nativeint i - member m.ReadByte i = + override m.ReadByte i = derefByte (m.Addr i) - member m.ReadBytes i len = + override m.ReadBytes i len = let res = Bytes.zeroCreate len Marshal.Copy(m.Addr i, res, 0,len); res - member m.ReadInt32 i = + override m.ReadInt32 i = NativePtr.read (NativePtr.ofNativeInt (m.Addr i)) - member m.ReadUInt16 i = + override m.ReadUInt16 i = NativePtr.read (NativePtr.ofNativeInt (m.Addr i)) member m.Close() = ignore(MemoryMapping.UnmapViewOfFile start); ignore(MemoryMapping.CloseHandle hMap) - member m.CountUtf8String i = + override m.CountUtf8String i = let start = m.Addr i let mutable p = start while derefByte p <> 0uy do p <- p + 1n int (p - start) - member m.ReadUTF8String i = + override m.ReadUTF8String i = let n = m.CountUtf8String i new System.String(NativePtr.ofNativeInt (m.Addr i), 0, n, System.Text.Encoding.UTF8) -type MMapChannel = - { mutable mmPos: int; - mmMap: MemoryMappedFile } +//--------------------------------------------------------------------- +// Read file from memory blocks +//--------------------------------------------------------------------- - static member OpenIn f = - let mmap = MemoryMappedFile.Create f - { mmPos = 0; mmMap = mmap } - member mc.InputByte() = - let res = mc.mmMap.ReadByte mc.mmPos - mc.mmPos <- mc.mmPos + 1; - res +type ByteFile(bytes:byte[]) = + inherit BinaryFile() - member mc.InputInt32() = - let res = mc.mmMap.ReadInt32 mc.mmPos - mc.mmPos <- mc.mmPos + 4; - res + override mc.ReadByte addr = bytes.[addr] + override mc.ReadBytes addr len = Array.sub bytes addr len + override m.CountUtf8String addr = + let mutable p = addr + while bytes.[p] <> 0uy do + p <- p + 1 + p - addr - member mc.InputUInt16() = - let res = mc.mmMap.ReadUInt16 mc.mmPos - mc.mmPos <- mc.mmPos + 2; - res - - member mc.InputBytes len = - let res = mc.mmMap.ReadBytes mc.mmPos len - mc.mmPos <- mc.mmPos + len; - res + override m.ReadUTF8String addr = + let n = m.CountUtf8String addr + System.Text.Encoding.UTF8.GetString (bytes, addr, n) - member mc.PeekUTF8String () = - mc.mmMap.ReadUTF8String mc.mmPos + override is.ReadInt32 addr = + let b0 = is.ReadByte addr + let b1 = is.ReadByte (addr+1) + let b2 = is.ReadByte (addr+2) + let b3 = is.ReadByte (addr+3) + int b0 ||| (int b1 <<< 8) ||| (int b2 <<< 16) ||| (int b3 <<< 24) - member mc.Seek addr = mc.mmPos <- addr - - member mc.Close() = mc.mmMap.Close() - -//--------------------------------------------------------------------- -// Read file from cached memory blocks or via 'seek' -//--------------------------------------------------------------------- + override is.ReadUInt16 addr = + let b0 = is.ReadByte addr + let b1 = is.ReadByte (addr+1) + uint16 b0 ||| (uint16 b1 <<< 8) -type InputChannel = - | Chan of string * System.IO.BinaryReader option ref - | Mem of MemChannel - | MMap of MMapChannel - -let readByte is = - match is with - | Chan (_,{contents=Some ic}) -> ic.ReadByte() - | Chan (s,_) -> failwith ("readByte: input channel "+s+" was closed" ) - | Mem mc -> mc.InputByte() - | MMap mc -> mc.InputByte () - -let readByteAsInt32 is = int32 (readByte is) - -let seek is addr = - match is with - | Chan (_,{contents=Some ic}) -> ic.BaseStream.Seek(int64 addr,SeekOrigin.Begin) |> ignore - | Chan (s,_) -> failwith ("seek: input channel "+s+" was closed" ) - | Mem mc -> mc.Seek addr - | MMap mc -> mc.Seek addr - -let readBytes is len = - match is with - | Chan (_,{contents=Some ic}) -> ic.ReadBytes len - | Chan (s,_) -> failwith ("readBytes: input channel "+s+" was closed" ) - | Mem mc -> mc.InputBytes len - | MMap mc -> mc.InputBytes len - -let readInt64 is = - let b0 = readByte is - let b1 = readByte is - let b2 = readByte is - let b3 = readByte is - let b4 = readByte is - let b5 = readByte is - let b6 = readByte is - let b7 = readByte is +let seekReadByte (is:BinaryFile) addr = is.ReadByte addr +let seekReadBytes (is:BinaryFile) addr len = is.ReadBytes addr len +let seekReadInt32 (is:BinaryFile) addr = is.ReadInt32 addr +let seekReadUInt16 (is:BinaryFile) addr = is.ReadUInt16 addr + +let seekReadByteAsInt32 is addr = int32 (seekReadByte is addr) + +let seekReadInt64 is addr = + let b0 = seekReadByte is addr + let b1 = seekReadByte is (addr+1) + let b2 = seekReadByte is (addr+2) + let b3 = seekReadByte is (addr+3) + let b4 = seekReadByte is (addr+4) + let b5 = seekReadByte is (addr+5) + let b6 = seekReadByte is (addr+6) + let b7 = seekReadByte is (addr+7) int64 b0 ||| (int64 b1 <<< 8) ||| (int64 b2 <<< 16) ||| (int64 b3 <<< 24) ||| (int64 b4 <<< 32) ||| (int64 b5 <<< 40) ||| (int64 b6 <<< 48) ||| (int64 b7 <<< 56) -let readInt32 is = - match is with - | Chan (_,{contents=Some ic}) -> ic.ReadInt32() - | Chan (s,_) -> failwith ("readBytes: input channel "+s+" was closed" ) - | MMap mm -> mm.InputInt32() - | Mem mm -> mm.InputInt32() - +let seekReadUInt16AsInt32 is addr = int32 (seekReadUInt16 is addr) -//--------------------------------------------------------------------- -// Derived reading -//--------------------------------------------------------------------- - -let readUInt16 is = - match is with - | MMap mm -> mm.InputUInt16() - | _ -> - let b0 = readByte is - let b1 = readByte is - uint16 b0 ||| (uint16 b1 <<< 8) - -let readUInt16AsInt32 is = int32 (readUInt16 is) - -let readSByte is = sbyte (readByte is) - -let singleOfBits (x:int32) = System.BitConverter.ToSingle(System.BitConverter.GetBytes(x),0) -let doubleOfBits (x:int64) = System.BitConverter.Int64BitsToDouble(x) - -let readSingle is = singleOfBits (readInt32 is) -let readDouble is = doubleOfBits (readInt64 is) - -let readCompressedUInt32 is = - let b0 = readByte is - if b0 <= 0x7Fuy then int b0 +let seekReadCompressedUInt32 is addr = + let b0 = seekReadByte is addr + if b0 <= 0x7Fuy then int b0, addr+1 elif b0 <= 0xBFuy then let b0 = b0 &&& 0x7Fuy - let b1 = readByteAsInt32 is - (int b0 <<< 8) ||| int b1 + let b1 = seekReadByteAsInt32 is (addr+1) + (int b0 <<< 8) ||| int b1, addr+2 else let b0 = b0 &&& 0x3Fuy - let b1 = readByte is - let b2 = readByte is - let b3 = readByte is - (int b0 <<< 24) ||| (int b1 <<< 16) ||| (int b2 <<< 8) ||| int b3 - -let seekReadInt32 is addr = seek is addr; readInt32 is -let seekReadInt64 is addr = seek is addr; readInt64 is -let seekReadUInt16AsInt32 is addr = seek is addr; readUInt16AsInt32 is -let seekReadUInt16 is addr = seek is addr; readUInt16 is -let seekReadByte is addr = seek is addr; readByte is -let seekReadByteAsInt32 is addr = seek is addr; readByteAsInt32 is -let seekReadSByte is addr = seek is addr; readSByte is -let seekReadSingle is addr = seek is addr; readSingle is -let seekReadDouble is addr = seek is addr; readDouble is -let seekReadBytes is addr len = seek is addr; readBytes is len + let b1 = seekReadByteAsInt32 is (addr+1) + let b2 = seekReadByteAsInt32 is (addr+2) + let b3 = seekReadByteAsInt32 is (addr+3) + (int b0 <<< 24) ||| (int b1 <<< 16) ||| (int b2 <<< 8) ||| int b3, addr+4 + +let seekReadSByte is addr = sbyte (seekReadByte is addr) +let seekReadSingle is addr = singleOfBits (seekReadInt32 is addr) +let seekReadDouble is addr = doubleOfBits (seekReadInt64 is addr) -let rec countUtf8String is n = - let c = readByteAsInt32 is +let rec seekCountUtf8String is addr n = + let c = seekReadByteAsInt32 is addr if c = 0 then n - else countUtf8String is (n+1) + else seekCountUtf8String is (addr+1) (n+1) let seekReadUTF8String is addr = - seek is addr; - match is with - | MMap mc -> - // optimized implementation - mc.PeekUTF8String() - | _ -> - let n = countUtf8String is 0 - let bytes = seekReadBytes is addr (n) + let n = seekCountUtf8String is addr 0 + let bytes = seekReadBytes is addr n System.Text.Encoding.UTF8.GetString (bytes, 0, bytes.Length) -let readBlob is = - let len = readCompressedUInt32 is - readBytes is len - let seekReadBlob is addr = - seek is addr; - readBlob is - -let readUserString is = - let len = readCompressedUInt32 is - let bytes = readBytes is (len - 1) - System.Text.Encoding.Unicode.GetString(bytes, 0, bytes.Length) + let len, addr = seekReadCompressedUInt32 is addr + seekReadBytes is addr len let seekReadUserString is addr = - seek is addr; - readUserString is - -let readGuid is = - readBytes is 0x10 - -let seekReadGuid is addr = - seek is addr; - readGuid is + let len, addr = seekReadCompressedUInt32 is addr + let bytes = seekReadBytes is addr (len - 1) + System.Text.Encoding.Unicode.GetString(bytes, 0, bytes.Length) -//--------------------------------------------------------------------- -// Utilities. -//--------------------------------------------------------------------- - -let align alignment n = ((n + alignment - 0x1) / alignment) * alignment - -let uncodedToken (tab:TableName) idx = ((tab.Index <<< 24) ||| idx) - -let i32ToUncodedToken tok = - let idx = tok &&& 0xffffff - let tab = tok >>>& 24 - (TableName.FromIndex tab, idx) - -let readUncodedToken is = i32ToUncodedToken (readInt32 is) - -[] -type TaggedIndex<'T> = - val tag: 'T - val index : int32 - new(tag,index) = { tag=tag; index=index } - -let uncodedTokenToTypeDefOrRefOrSpec (tab,tok) = - let tag = - if tab = TableNames.TypeDef then tdor_TypeDef - elif tab = TableNames.TypeRef then tdor_TypeRef - elif tab = TableNames.TypeSpec then tdor_TypeSpec - else failwith "bad table in uncodedTokenToTypeDefOrRefOrSpec" - TaggedIndex(tag,tok) - -let uncodedTokenToMethodDefOrRef (tab,tok) = - let tag = - if tab = TableNames.Method then mdor_MethodDef - elif tab = TableNames.MemberRef then mdor_MemberRef - else failwith "bad table in uncodedTokenToMethodDefOrRef" - TaggedIndex(tag,tok) +let seekReadGuid is addr = seekReadBytes is addr 0x10 let seekReadUncodedToken is addr = - seek is addr; - readUncodedToken is + i32ToUncodedToken (seekReadInt32 is addr) -let (|TaggedIndex|) (x:TaggedIndex<'T>) = x.tag, x.index -let readTaggedIdx f nbits big is = - let tok = if big then readInt32 is else readUInt16AsInt32 is - let tagmask = - if nbits = 1 then 1 - elif nbits = 2 then 3 - elif nbits = 3 then 7 - elif nbits = 4 then 15 - elif nbits = 5 then 31 - else failwith "too many nbits" - let tag = tok &&& tagmask - let idx = tok >>>& nbits - TaggedIndex(f tag, idx) - + //--------------------------------------------------------------------- // Primitives to help read signatures. These do not use the file cursor //--------------------------------------------------------------------- @@ -1015,6 +902,8 @@ type ILModuleReader = dispose: unit -> unit } member x.ILModuleDef = x.modul member x.ILAssemblyRefs = x.ilAssemblyRefs.Force() + interface IDisposable with + member x.Dispose() = x.dispose() type MethodData = MethodData of ILType * ILCallingConv * string * ILTypes * ILType * ILTypes @@ -1044,11 +933,12 @@ type ILReaderContext = resourcesAddr:int32; strongnameAddr:int32; vtableFixupsAddr:int32; - is: InputChannel; + is: BinaryFile; infile:string; userStringsStreamPhysicalLoc: int32; stringsStreamPhysicalLoc: int32; blobsStreamPhysicalLoc: int32; + blobsStreamSize: int32; readUserStringHeap: (int32 -> string); memoizeString: string -> string; readStringHeap: (int32 -> string); @@ -1128,28 +1018,6 @@ type ILReaderContext = seekReadMethodDefAsMethodData : int -> MethodData; seekReadGenericParams : GenericParamsIdx -> ILGenericParameterDef list; seekReadFieldDefAsFieldSpec : int -> ILFieldSpec; } - -let readUntaggedIdx (tab:TableName) ctxt = - if ctxt.tableBigness.[tab.Index] - then readInt32 ctxt.is - else readUInt16AsInt32 ctxt.is - -let readResolutionScopeIdx ctxt = readTaggedIdx mkResolutionScopeTag 2 ctxt.rsBigness ctxt.is -let readTypeDefOrRefOrSpecIdx ctxt = readTaggedIdx mkTypeDefOrRefOrSpecTag 2 ctxt.tdorBigness ctxt.is -let readTypeOrMethodDefIdx ctxt = readTaggedIdx mkTypeOrMethodDefTag 1 ctxt.tomdBigness ctxt.is -let readHasConstantIdx ctxt = readTaggedIdx mkHasConstantTag 2 ctxt.hcBigness ctxt.is -let readHasCustomAttributeIdx ctxt = readTaggedIdx mkHasCustomAttributeTag 5 ctxt.hcaBigness ctxt.is -let readHasFieldMarshalIdx ctxt = readTaggedIdx mkHasFieldMarshalTag 1 ctxt.hfmBigness ctxt.is -let readHasDeclSecurityIdx ctxt = readTaggedIdx mkHasDeclSecurityTag 2 ctxt.hdsBigness ctxt.is -let readMemberRefParentIdx ctxt = readTaggedIdx mkMemberRefParentTag 3 ctxt.mrpBigness ctxt.is -let readHasSemanticsIdx ctxt = readTaggedIdx mkHasSemanticsTag 1 ctxt.hsBigness ctxt.is -let readMethodDefOrRefIdx ctxt = readTaggedIdx mkMethodDefOrRefTag 1 ctxt.mdorBigness ctxt.is -let readMemberForwardedIdx ctxt = readTaggedIdx mkMemberForwardedTag 1 ctxt.mfBigness ctxt.is -let readImplementationIdx ctxt = readTaggedIdx mkImplementationTag 2 ctxt.iBigness ctxt.is -let readCustomAttributeTypeIdx ctxt = readTaggedIdx mkILCustomAttributeTypeTag 3 ctxt.catBigness ctxt.is -let readStringIdx ctxt = if ctxt.stringsBigness then readInt32 ctxt.is else readUInt16AsInt32 ctxt.is -let readGuidIdx ctxt = if ctxt.guidsBigness then readInt32 ctxt.is else readUInt16AsInt32 ctxt.is -let readBlobIdx ctxt = if ctxt.blobsBigness then readInt32 ctxt.is else readUInt16AsInt32 ctxt.is let count c = #if DEBUG @@ -1159,25 +1027,68 @@ let count c = () #endif + +let seekReadUInt16Adv ctxt (addr: byref) = + let res = seekReadUInt16 ctxt.is addr + addr <- addr + 2 + res + +let seekReadInt32Adv ctxt (addr: byref) = + let res = seekReadInt32 ctxt.is addr + addr <- addr+4 + res + +let seekReadUInt16AsInt32Adv ctxt (addr: byref) = + let res = seekReadUInt16AsInt32 ctxt.is addr + addr <- addr+2 + res + +let seekReadTaggedIdx f nbits big is (addr: byref) = + let tok = if big then seekReadInt32Adv is &addr else seekReadUInt16AsInt32Adv is &addr + tokToTaggedIdx f nbits tok + + +let seekReadIdx big ctxt (addr: byref) = + if big then seekReadInt32Adv ctxt &addr else seekReadUInt16AsInt32Adv ctxt &addr + +let seekReadUntaggedIdx (tab:TableName) ctxt (addr: byref) = + seekReadIdx ctxt.tableBigness.[tab.Index] ctxt &addr + + +let seekReadResolutionScopeIdx ctxt (addr: byref) = seekReadTaggedIdx mkResolutionScopeTag 2 ctxt.rsBigness ctxt &addr +let seekReadTypeDefOrRefOrSpecIdx ctxt (addr: byref) = seekReadTaggedIdx mkTypeDefOrRefOrSpecTag 2 ctxt.tdorBigness ctxt &addr +let seekReadTypeOrMethodDefIdx ctxt (addr: byref) = seekReadTaggedIdx mkTypeOrMethodDefTag 1 ctxt.tomdBigness ctxt &addr +let seekReadHasConstantIdx ctxt (addr: byref) = seekReadTaggedIdx mkHasConstantTag 2 ctxt.hcBigness ctxt &addr +let seekReadHasCustomAttributeIdx ctxt (addr: byref) = seekReadTaggedIdx mkHasCustomAttributeTag 5 ctxt.hcaBigness ctxt &addr +let seekReadHasFieldMarshalIdx ctxt (addr: byref) = seekReadTaggedIdx mkHasFieldMarshalTag 1 ctxt.hfmBigness ctxt &addr +let seekReadHasDeclSecurityIdx ctxt (addr: byref) = seekReadTaggedIdx mkHasDeclSecurityTag 2 ctxt.hdsBigness ctxt &addr +let seekReadMemberRefParentIdx ctxt (addr: byref) = seekReadTaggedIdx mkMemberRefParentTag 3 ctxt.mrpBigness ctxt &addr +let seekReadHasSemanticsIdx ctxt (addr: byref) = seekReadTaggedIdx mkHasSemanticsTag 1 ctxt.hsBigness ctxt &addr +let seekReadMethodDefOrRefIdx ctxt (addr: byref) = seekReadTaggedIdx mkMethodDefOrRefTag 1 ctxt.mdorBigness ctxt &addr +let seekReadMemberForwardedIdx ctxt (addr: byref) = seekReadTaggedIdx mkMemberForwardedTag 1 ctxt.mfBigness ctxt &addr +let seekReadImplementationIdx ctxt (addr: byref) = seekReadTaggedIdx mkImplementationTag 2 ctxt.iBigness ctxt &addr +let seekReadCustomAttributeTypeIdx ctxt (addr: byref) = seekReadTaggedIdx mkILCustomAttributeTypeTag 3 ctxt.catBigness ctxt &addr +let seekReadStringIdx ctxt (addr: byref) = seekReadIdx ctxt.stringsBigness ctxt &addr +let seekReadGuidIdx ctxt (addr: byref) = seekReadIdx ctxt.guidsBigness ctxt &addr +let seekReadBlobIdx ctxt (addr: byref) = seekReadIdx ctxt.blobsBigness ctxt &addr + let seekReadModuleRow ctxt idx = if idx = 0 then failwith "cannot read Module table row 0"; - let addr = ctxt.rowAddr TableNames.Module idx - seek ctxt.is addr; - let generation = readUInt16 ctxt.is - let nameIdx = readStringIdx ctxt - let mvidIdx = readGuidIdx ctxt - let encidIdx = readGuidIdx ctxt - let encbaseidIdx = readGuidIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.Module idx + let generation = seekReadUInt16Adv ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let mvidIdx = seekReadGuidIdx ctxt &addr + let encidIdx = seekReadGuidIdx ctxt &addr + let encbaseidIdx = seekReadGuidIdx ctxt &addr (generation, nameIdx, mvidIdx, encidIdx, encbaseidIdx) /// Read Table ILTypeRef let seekReadTypeRefRow ctxt idx = count ctxt.countTypeRef; - let addr = ctxt.rowAddr TableNames.TypeRef idx - seek ctxt.is addr; - let scopeIdx = readResolutionScopeIdx ctxt - let nameIdx = readStringIdx ctxt - let namespaceIdx = readStringIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.TypeRef idx + let scopeIdx = seekReadResolutionScopeIdx ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let namespaceIdx = seekReadStringIdx ctxt &addr (scopeIdx,nameIdx,namespaceIdx) /// Read Table ILTypeDef @@ -1185,47 +1096,43 @@ let seekReadTypeDefRow ctxt idx = ctxt.seekReadTypeDefRow idx let seekReadTypeDefRowUncached ctxtH idx = let ctxt = getHole ctxtH count ctxt.countTypeDef; - let addr = ctxt.rowAddr TableNames.TypeDef idx - seek ctxt.is addr; - let flags = readInt32 ctxt.is - let nameIdx = readStringIdx ctxt - let namespaceIdx = readStringIdx ctxt - let extendsIdx = readTypeDefOrRefOrSpecIdx ctxt - let fieldsIdx = readUntaggedIdx TableNames.Field ctxt - let methodsIdx = readUntaggedIdx TableNames.Method ctxt + let mutable addr = ctxt.rowAddr TableNames.TypeDef idx + let flags = seekReadInt32Adv ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let namespaceIdx = seekReadStringIdx ctxt &addr + let extendsIdx = seekReadTypeDefOrRefOrSpecIdx ctxt &addr + let fieldsIdx = seekReadUntaggedIdx TableNames.Field ctxt &addr + let methodsIdx = seekReadUntaggedIdx TableNames.Method ctxt &addr (flags, nameIdx, namespaceIdx, extendsIdx, fieldsIdx, methodsIdx) /// Read Table Field let seekReadFieldRow ctxt idx = count ctxt.countField; - let addr = ctxt.rowAddr TableNames.Field idx - seek ctxt.is addr; - let flags = readUInt16AsInt32 ctxt.is - let nameIdx = readStringIdx ctxt - let typeIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.Field idx + let flags = seekReadUInt16AsInt32Adv ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let typeIdx = seekReadBlobIdx ctxt &addr (flags,nameIdx,typeIdx) /// Read Table Method let seekReadMethodRow ctxt idx = count ctxt.countMethod; - let addr = ctxt.rowAddr TableNames.Method idx - seek ctxt.is addr; - let codeRVA = readInt32 ctxt.is - let implflags = readUInt16AsInt32 ctxt.is - let flags = readUInt16AsInt32 ctxt.is - let nameIdx = readStringIdx ctxt - let typeIdx = readBlobIdx ctxt - let paramIdx = readUntaggedIdx TableNames.Param ctxt + let mutable addr = ctxt.rowAddr TableNames.Method idx + let codeRVA = seekReadInt32Adv ctxt &addr + let implflags = seekReadUInt16AsInt32Adv ctxt &addr + let flags = seekReadUInt16AsInt32Adv ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let typeIdx = seekReadBlobIdx ctxt &addr + let paramIdx = seekReadUntaggedIdx TableNames.Param ctxt &addr (codeRVA, implflags, flags, nameIdx, typeIdx, paramIdx) /// Read Table Param let seekReadParamRow ctxt idx = count ctxt.countParam; - let addr = ctxt.rowAddr TableNames.Param idx - seek ctxt.is addr; - let flags = readUInt16AsInt32 ctxt.is - let seq = (readUInt16AsInt32 ctxt.is) - let nameIdx = readStringIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.Param idx + let flags = seekReadUInt16AsInt32Adv ctxt &addr + let seq = seekReadUInt16AsInt32Adv ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr (flags,seq,nameIdx) /// Read Table InterfaceImpl @@ -1233,20 +1140,18 @@ let seekReadInterfaceImplRow ctxt idx = ctxt.seekReadInterfaceImplRow idx let seekReadInterfaceImplRowUncached ctxtH idx = let ctxt = getHole ctxtH count ctxt.countInterfaceImpl; - let addr = ctxt.rowAddr TableNames.InterfaceImpl idx - seek ctxt.is addr; - let tidx = readUntaggedIdx TableNames.TypeDef ctxt - let intfIdx = readTypeDefOrRefOrSpecIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.InterfaceImpl idx + let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt &addr + let intfIdx = seekReadTypeDefOrRefOrSpecIdx ctxt &addr (tidx,intfIdx) /// Read Table MemberRef let seekReadMemberRefRow ctxt idx = count ctxt.countMemberRef; - let addr = ctxt.rowAddr TableNames.MemberRef idx - seek ctxt.is addr; - let mrpIdx = readMemberRefParentIdx ctxt - let nameIdx = readStringIdx ctxt - let typeIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.MemberRef idx + let mrpIdx = seekReadMemberRefParentIdx ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let typeIdx = seekReadBlobIdx ctxt &addr (mrpIdx,nameIdx,typeIdx) /// Read Table Constant @@ -1254,21 +1159,19 @@ let seekReadConstantRow ctxt idx = ctxt.seekReadConstantRow idx let seekReadConstantRowUncached ctxtH idx = let ctxt = getHole ctxtH count ctxt.countConstant; - let addr = ctxt.rowAddr TableNames.Constant idx - seek ctxt.is addr; - let kind = readUInt16 ctxt.is - let parentIdx = readHasConstantIdx ctxt - let valIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.Constant idx + let kind = seekReadUInt16Adv ctxt &addr + let parentIdx = seekReadHasConstantIdx ctxt &addr + let valIdx = seekReadBlobIdx ctxt &addr (kind, parentIdx, valIdx) /// Read Table CustomAttribute let seekReadCustomAttributeRow ctxt idx = count ctxt.countCustomAttribute; - let addr = ctxt.rowAddr TableNames.CustomAttribute idx - seek ctxt.is addr; - let parentIdx = readHasCustomAttributeIdx ctxt - let typeIdx = readCustomAttributeTypeIdx ctxt - let valIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.CustomAttribute idx + let parentIdx = seekReadHasCustomAttributeIdx ctxt &addr + let typeIdx = seekReadCustomAttributeTypeIdx ctxt &addr + let valIdx = seekReadBlobIdx ctxt &addr (parentIdx, typeIdx, valIdx) /// Read Table FieldMarshal @@ -1276,66 +1179,59 @@ let seekReadFieldMarshalRow ctxt idx = ctxt.seekReadFieldMarshalRow idx let seekReadFieldMarshalRowUncached ctxtH idx = let ctxt = getHole ctxtH count ctxt.countFieldMarshal; - let addr = ctxt.rowAddr TableNames.FieldMarshal idx - seek ctxt.is addr; - let parentIdx = readHasFieldMarshalIdx ctxt - let typeIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.FieldMarshal idx + let parentIdx = seekReadHasFieldMarshalIdx ctxt &addr + let typeIdx = seekReadBlobIdx ctxt &addr (parentIdx, typeIdx) /// Read Table Permission let seekReadPermissionRow ctxt idx = count ctxt.countPermission; - let addr = ctxt.rowAddr TableNames.Permission idx - seek ctxt.is addr; - let action = readUInt16 ctxt.is - let parentIdx = readHasDeclSecurityIdx ctxt - let typeIdx = readBlobIdx ctxt - (action,parentIdx, typeIdx) + let mutable addr = ctxt.rowAddr TableNames.Permission idx + let action = seekReadUInt16Adv ctxt &addr + let parentIdx = seekReadHasDeclSecurityIdx ctxt &addr + let typeIdx = seekReadBlobIdx ctxt &addr + (action, parentIdx, typeIdx) /// Read Table ClassLayout let seekReadClassLayoutRow ctxt idx = count ctxt.countClassLayout; - let addr = ctxt.rowAddr TableNames.ClassLayout idx - seek ctxt.is addr; - let pack = readUInt16 ctxt.is - let size = readInt32 ctxt.is - let tidx = readUntaggedIdx TableNames.TypeDef ctxt + let mutable addr = ctxt.rowAddr TableNames.ClassLayout idx + let pack = seekReadUInt16Adv ctxt &addr + let size = seekReadInt32Adv ctxt &addr + let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt &addr (pack,size,tidx) /// Read Table FieldLayout let seekReadFieldLayoutRow ctxt idx = count ctxt.countFieldLayout; - let addr = ctxt.rowAddr TableNames.FieldLayout idx - seek ctxt.is addr; - let offset = readInt32 ctxt.is - let fidx = readUntaggedIdx TableNames.Field ctxt + let mutable addr = ctxt.rowAddr TableNames.FieldLayout idx + let offset = seekReadInt32Adv ctxt &addr + let fidx = seekReadUntaggedIdx TableNames.Field ctxt &addr (offset,fidx) //// Read Table StandAloneSig let seekReadStandAloneSigRow ctxt idx = count ctxt.countStandAloneSig; - let addr = ctxt.rowAddr TableNames.StandAloneSig idx - seek ctxt.is addr; - let sigIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.StandAloneSig idx + let sigIdx = seekReadBlobIdx ctxt &addr sigIdx /// Read Table EventMap let seekReadEventMapRow ctxt idx = count ctxt.countEventMap; - let addr = ctxt.rowAddr TableNames.EventMap idx - seek ctxt.is addr; - let tidx = readUntaggedIdx TableNames.TypeDef ctxt - let eventsIdx = readUntaggedIdx TableNames.Event ctxt + let mutable addr = ctxt.rowAddr TableNames.EventMap idx + let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt &addr + let eventsIdx = seekReadUntaggedIdx TableNames.Event ctxt &addr (tidx,eventsIdx) /// Read Table Event let seekReadEventRow ctxt idx = count ctxt.countEvent; - let addr = ctxt.rowAddr TableNames.Event idx - seek ctxt.is addr; - let flags = readUInt16AsInt32 ctxt.is - let nameIdx = readStringIdx ctxt - let typIdx = readTypeDefOrRefOrSpecIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.Event idx + let flags = seekReadUInt16AsInt32Adv ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let typIdx = seekReadTypeDefOrRefOrSpecIdx ctxt &addr (flags,nameIdx,typIdx) /// Read Table PropertyMap @@ -1343,20 +1239,18 @@ let seekReadPropertyMapRow ctxt idx = ctxt.seekReadPropertyMapRow idx let seekReadPropertyMapRowUncached ctxtH idx = let ctxt = getHole ctxtH count ctxt.countPropertyMap; - let addr = ctxt.rowAddr TableNames.PropertyMap idx - seek ctxt.is addr; - let tidx = readUntaggedIdx TableNames.TypeDef ctxt - let propsIdx = readUntaggedIdx TableNames.Property ctxt + let mutable addr = ctxt.rowAddr TableNames.PropertyMap idx + let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt &addr + let propsIdx = seekReadUntaggedIdx TableNames.Property ctxt &addr (tidx,propsIdx) /// Read Table Property let seekReadPropertyRow ctxt idx = count ctxt.countProperty; - let addr = ctxt.rowAddr TableNames.Property idx - seek ctxt.is addr; - let flags = readUInt16AsInt32 ctxt.is - let nameIdx = readStringIdx ctxt - let typIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.Property idx + let flags = seekReadUInt16AsInt32Adv ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let typIdx = seekReadBlobIdx ctxt &addr (flags,nameIdx,typIdx) /// Read Table MethodSemantics @@ -1364,122 +1258,111 @@ let seekReadMethodSemanticsRow ctxt idx = ctxt.seekReadMethodSemanticsRow idx let seekReadMethodSemanticsRowUncached ctxtH idx = let ctxt = getHole ctxtH count ctxt.countMethodSemantics; - let addr = ctxt.rowAddr TableNames.MethodSemantics idx - seek ctxt.is addr; - let flags = readUInt16AsInt32 ctxt.is - let midx = readUntaggedIdx TableNames.Method ctxt - let assocIdx = readHasSemanticsIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.MethodSemantics idx + let flags = seekReadUInt16AsInt32Adv ctxt &addr + let midx = seekReadUntaggedIdx TableNames.Method ctxt &addr + let assocIdx = seekReadHasSemanticsIdx ctxt &addr (flags,midx,assocIdx) /// Read Table MethodImpl let seekReadMethodImplRow ctxt idx = count ctxt.countMethodImpl; - let addr = ctxt.rowAddr TableNames.MethodImpl idx - seek ctxt.is addr; - let tidx = readUntaggedIdx TableNames.TypeDef ctxt - let mbodyIdx = readMethodDefOrRefIdx ctxt - let mdeclIdx = readMethodDefOrRefIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.MethodImpl idx + let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt &addr + let mbodyIdx = seekReadMethodDefOrRefIdx ctxt &addr + let mdeclIdx = seekReadMethodDefOrRefIdx ctxt &addr (tidx,mbodyIdx,mdeclIdx) /// Read Table ILModuleRef let seekReadModuleRefRow ctxt idx = count ctxt.countModuleRef; - let addr = ctxt.rowAddr TableNames.ModuleRef idx - seek ctxt.is addr; - let nameIdx = readStringIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.ModuleRef idx + let nameIdx = seekReadStringIdx ctxt &addr nameIdx /// Read Table ILTypeSpec let seekReadTypeSpecRow ctxt idx = count ctxt.countTypeSpec; - let addr = ctxt.rowAddr TableNames.TypeSpec idx - seek ctxt.is addr; - let blobIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.TypeSpec idx + let blobIdx = seekReadBlobIdx ctxt &addr blobIdx /// Read Table ImplMap let seekReadImplMapRow ctxt idx = count ctxt.countImplMap; - let addr = ctxt.rowAddr TableNames.ImplMap idx - seek ctxt.is addr; - let flags = readUInt16AsInt32 ctxt.is - let forwrdedIdx = readMemberForwardedIdx ctxt - let nameIdx = readStringIdx ctxt - let scopeIdx = readUntaggedIdx TableNames.ModuleRef ctxt + let mutable addr = ctxt.rowAddr TableNames.ImplMap idx + let flags = seekReadUInt16AsInt32Adv ctxt &addr + let forwrdedIdx = seekReadMemberForwardedIdx ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let scopeIdx = seekReadUntaggedIdx TableNames.ModuleRef ctxt &addr (flags, forwrdedIdx, nameIdx, scopeIdx) /// Read Table FieldRVA let seekReadFieldRVARow ctxt idx = count ctxt.countFieldRVA; - let addr = ctxt.rowAddr TableNames.FieldRVA idx - seek ctxt.is addr; - let rva = readInt32 ctxt.is - let fidx = readUntaggedIdx TableNames.Field ctxt + let mutable addr = ctxt.rowAddr TableNames.FieldRVA idx + let rva = seekReadInt32Adv ctxt &addr + let fidx = seekReadUntaggedIdx TableNames.Field ctxt &addr (rva,fidx) /// Read Table Assembly let seekReadAssemblyRow ctxt idx = count ctxt.countAssembly; - let addr = ctxt.rowAddr TableNames.Assembly idx - seek ctxt.is addr; - let hash = readInt32 ctxt.is - let v1 = readUInt16 ctxt.is - let v2 = readUInt16 ctxt.is - let v3 = readUInt16 ctxt.is - let v4 = readUInt16 ctxt.is - let flags = readInt32 ctxt.is - let publicKeyIdx = readBlobIdx ctxt - let nameIdx = readStringIdx ctxt - let localeIdx = readStringIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.Assembly idx + let hash = seekReadInt32Adv ctxt &addr + let v1 = seekReadUInt16Adv ctxt &addr + let v2 = seekReadUInt16Adv ctxt &addr + let v3 = seekReadUInt16Adv ctxt &addr + let v4 = seekReadUInt16Adv ctxt &addr + let flags = seekReadInt32Adv ctxt &addr + let publicKeyIdx = seekReadBlobIdx ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let localeIdx = seekReadStringIdx ctxt &addr (hash,v1,v2,v3,v4,flags,publicKeyIdx, nameIdx, localeIdx) /// Read Table ILAssemblyRef let seekReadAssemblyRefRow ctxt idx = count ctxt.countAssemblyRef; - let addr = ctxt.rowAddr TableNames.AssemblyRef idx - seek ctxt.is addr; - let v1 = readUInt16 ctxt.is - let v2 = readUInt16 ctxt.is - let v3 = readUInt16 ctxt.is - let v4 = readUInt16 ctxt.is - let flags = readInt32 ctxt.is - let publicKeyOrTokenIdx = readBlobIdx ctxt - let nameIdx = readStringIdx ctxt - let localeIdx = readStringIdx ctxt - let hashValueIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.AssemblyRef idx + let v1 = seekReadUInt16Adv ctxt &addr + let v2 = seekReadUInt16Adv ctxt &addr + let v3 = seekReadUInt16Adv ctxt &addr + let v4 = seekReadUInt16Adv ctxt &addr + let flags = seekReadInt32Adv ctxt &addr + let publicKeyOrTokenIdx = seekReadBlobIdx ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let localeIdx = seekReadStringIdx ctxt &addr + let hashValueIdx = seekReadBlobIdx ctxt &addr (v1,v2,v3,v4,flags,publicKeyOrTokenIdx, nameIdx, localeIdx,hashValueIdx) /// Read Table File let seekReadFileRow ctxt idx = count ctxt.countFile; - let addr = ctxt.rowAddr TableNames.File idx - seek ctxt.is addr; - let flags = readInt32 ctxt.is - let nameIdx = readStringIdx ctxt - let hashValueIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.File idx + let flags = seekReadInt32Adv ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let hashValueIdx = seekReadBlobIdx ctxt &addr (flags, nameIdx, hashValueIdx) /// Read Table ILExportedTypeOrForwarder let seekReadExportedTypeRow ctxt idx = count ctxt.countExportedType; - let addr = ctxt.rowAddr TableNames.ExportedType idx - seek ctxt.is addr; - let flags = readInt32 ctxt.is - let tok = readInt32 ctxt.is - let nameIdx = readStringIdx ctxt - let namespaceIdx = readStringIdx ctxt - let implIdx = readImplementationIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.ExportedType idx + let flags = seekReadInt32Adv ctxt &addr + let tok = seekReadInt32Adv ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let namespaceIdx = seekReadStringIdx ctxt &addr + let implIdx = seekReadImplementationIdx ctxt &addr (flags,tok,nameIdx,namespaceIdx,implIdx) /// Read Table ManifestResource let seekReadManifestResourceRow ctxt idx = count ctxt.countManifestResource; - let addr = ctxt.rowAddr TableNames.ManifestResource idx - seek ctxt.is addr; - let offset = readInt32 ctxt.is - let flags = readInt32 ctxt.is - let nameIdx = readStringIdx ctxt - let implIdx = readImplementationIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.ManifestResource idx + let offset = seekReadInt32Adv ctxt &addr + let flags = seekReadInt32Adv ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr + let implIdx = seekReadImplementationIdx ctxt &addr (offset,flags,nameIdx,implIdx) /// Read Table Nested @@ -1487,41 +1370,38 @@ let seekReadNestedRow ctxt idx = ctxt.seekReadNestedRow idx let seekReadNestedRowUncached ctxtH idx = let ctxt = getHole ctxtH count ctxt.countNested; - let addr = ctxt.rowAddr TableNames.Nested idx - seek ctxt.is addr; - let nestedIdx = readUntaggedIdx TableNames.TypeDef ctxt - let enclIdx = readUntaggedIdx TableNames.TypeDef ctxt + let mutable addr = ctxt.rowAddr TableNames.Nested idx + let nestedIdx = seekReadUntaggedIdx TableNames.TypeDef ctxt &addr + let enclIdx = seekReadUntaggedIdx TableNames.TypeDef ctxt &addr (nestedIdx,enclIdx) /// Read Table GenericParam let seekReadGenericParamRow ctxt idx = count ctxt.countGenericParam; - let addr = ctxt.rowAddr TableNames.GenericParam idx - seek ctxt.is addr; - let seq = readUInt16 ctxt.is - let flags = readUInt16 ctxt.is - let ownerIdx = readTypeOrMethodDefIdx ctxt - let nameIdx = readStringIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.GenericParam idx + let seq = seekReadUInt16Adv ctxt &addr + let flags = seekReadUInt16Adv ctxt &addr + let ownerIdx = seekReadTypeOrMethodDefIdx ctxt &addr + let nameIdx = seekReadStringIdx ctxt &addr (idx,seq,flags,ownerIdx,nameIdx) // Read Table GenericParamConstraint let seekReadGenericParamConstraintRow ctxt idx = count ctxt.countGenericParamConstraint; - let addr = ctxt.rowAddr TableNames.GenericParamConstraint idx - seek ctxt.is addr; - let pidx = readUntaggedIdx TableNames.GenericParam ctxt - let constraintIdx = readTypeDefOrRefOrSpecIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.GenericParamConstraint idx + let pidx = seekReadUntaggedIdx TableNames.GenericParam ctxt &addr + let constraintIdx = seekReadTypeDefOrRefOrSpecIdx ctxt &addr (pidx,constraintIdx) /// Read Table ILMethodSpec let seekReadMethodSpecRow ctxt idx = count ctxt.countMethodSpec; - let addr = ctxt.rowAddr TableNames.MethodSpec idx - seek ctxt.is addr; - let mdorIdx = readMethodDefOrRefIdx ctxt - let instIdx = readBlobIdx ctxt + let mutable addr = ctxt.rowAddr TableNames.MethodSpec idx + let mdorIdx = seekReadMethodDefOrRefIdx ctxt &addr + let instIdx = seekReadBlobIdx ctxt &addr (mdorIdx,instIdx) + let readUserStringHeapUncached ctxtH idx = let ctxt = getHole ctxtH seekReadUserString ctxt.is (ctxt.userStringsStreamPhysicalLoc + idx) @@ -1534,9 +1414,13 @@ let readStringHeapUncached ctxtH idx = let readStringHeap ctxt idx = ctxt.readStringHeap idx let readStringHeapOption ctxt idx = if idx = 0 then None else Some (readStringHeap ctxt idx) +let emptyByteArray: byte[] = [||] let readBlobHeapUncached ctxtH idx = let ctxt = getHole ctxtH - seekReadBlob ctxt.is (ctxt.blobsStreamPhysicalLoc + idx) + // valid index lies in range [1..streamSize) + // NOTE: idx cannot be 0 - Blob\String heap has first empty element that is one byte 0 + if idx <= 0 || idx >= ctxt.blobsStreamSize then emptyByteArray + else seekReadBlob ctxt.is (ctxt.blobsStreamPhysicalLoc + idx) let readBlobHeap ctxt idx = ctxt.readBlobHeap idx let readBlobHeapOption ctxt idx = if idx = 0 then None else Some (readBlobHeap ctxt idx) @@ -1660,7 +1544,7 @@ let rec seekReadModule ctxt (subsys,subsysversion,useHighEntropyVA, ilOnly,only3 CustomAttrs = seekReadCustomAttrs ctxt (TaggedIndex(hca_Module,idx)); Name = ilModuleName; NativeResources=nativeResources; - TypeDefs = mkILTypeDefsLazy (lazy (seekReadTopTypeDefs ctxt ())); + TypeDefs = mkILTypeDefsComputed (fun () -> seekReadTopTypeDefs ctxt ()); SubSystemFlags = int32 subsys; IsILOnly = ilOnly; SubsystemVersion = subsysversion @@ -1878,19 +1762,18 @@ and seekReadTypeDef ctxt toponly (idx:int) = Some (ns,n,cas,rest) and seekReadTopTypeDefs ctxt () = - [ for i = 1 to ctxt.getNumRows TableNames.TypeDef do + [| for i = 1 to ctxt.getNumRows TableNames.TypeDef do match seekReadTypeDef ctxt true i with | None -> () - | Some td -> yield td ] + | Some td -> yield td |] and seekReadNestedTypeDefs ctxt tidx = - mkILTypeDefsLazy - (lazy + mkILTypeDefsComputed (fun () -> let nestedIdxs = seekReadIndexedRows (ctxt.getNumRows TableNames.Nested,seekReadNestedRow ctxt,snd,simpleIndexCompare tidx,false,fst) - [ for i in nestedIdxs do + [| for i in nestedIdxs do match seekReadTypeDef ctxt false i with | None -> () - | Some td -> yield td ]) + | Some td -> yield td |]) and seekReadInterfaceImpls ctxt numtypars tidx = seekReadIndexedRows (ctxt.getNumRows TableNames.InterfaceImpl, @@ -2086,10 +1969,9 @@ and seekReadFields ctxt (numtypars, hasLayout) fidx1 fidx2 = yield seekReadField ctxt (numtypars, hasLayout) i ]) and seekReadMethods ctxt numtypars midx1 midx2 = - mkILMethodsLazy - (lazy - [ for i = midx1 to midx2 - 1 do - yield seekReadMethod ctxt numtypars i ]) + mkILMethodsComputed (fun () -> + [| for i = midx1 to midx2 - 1 do + yield seekReadMethod ctxt numtypars i |]) and sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr = let n, sigptr = sigptrGetZInt32 bytes sigptr @@ -2631,7 +2513,8 @@ and seekReadCustomAttrs ctxt idx = seekReadCustomAttributeRow ctxt,(fun (a,_,_) -> a), hcaCompare idx, isSorted ctxt TableNames.CustomAttribute, - (fun (_,b,c) -> seekReadCustomAttr ctxt (b,c)))) + (fun (_,b,c) -> seekReadCustomAttr ctxt (b,c))) + |> List.toArray) and seekReadCustomAttr ctxt (TaggedIndex(cat,idx),b) = ctxt.seekReadCustomAttr (CustomAttrIdx (cat,idx,b)) @@ -3973,6 +3856,7 @@ let rec genOpenBinaryReader infile is opts = userStringsStreamPhysicalLoc = userStringsStreamPhysicalLoc; stringsStreamPhysicalLoc = stringsStreamPhysicalLoc; blobsStreamPhysicalLoc = blobsStreamPhysicalLoc; + blobsStreamSize = blobsStreamSize; memoizeString = Tables.memoize id; readUserStringHeap = cacheUserStringHeap (readUserStringHeapUncached ctxtH); readStringHeap = cacheStringHeap (readStringHeapUncached ctxtH); @@ -4060,8 +3944,6 @@ let rec genOpenBinaryReader infile is opts = ilModule,ilAssemblyRefs,pdb -let CloseILModuleReader x = x.dispose() - let mkDefault ilg = { optimizeForMemory=false; pdbPath= None; @@ -4079,23 +3961,19 @@ let ClosePdbReader pdb = let OpenILModuleReader infile opts = try - let mmap = MMapChannel.OpenIn infile - let modul,ilAssemblyRefs,pdb = genOpenBinaryReader infile (MMap mmap) opts + let mmap = MemoryMappedFile.Create infile + let modul,ilAssemblyRefs,pdb = genOpenBinaryReader infile mmap opts { modul = modul; ilAssemblyRefs=ilAssemblyRefs; dispose = (fun () -> mmap.Close(); ClosePdbReader pdb) } - with :? System.DllNotFoundException -> - let stream = FileSystem.FileStreamReadShim infile - let is = new BinaryReader(stream) - let cell = ref (Some is) - let modul,ilAssemblyRefs,pdb = genOpenBinaryReader infile (Chan (infile,cell)) opts + with _ -> + let mc = ByteFile(infile |> FileSystem.ReadAllBytesShim) + let modul,ilAssemblyRefs,pdb = genOpenBinaryReader infile mc opts { modul = modul; ilAssemblyRefs = ilAssemblyRefs; dispose = (fun () -> - cell := None; - is.Close(); ClosePdbReader pdb) } // ++GLOBAL MUTABLE STATE @@ -4117,8 +3995,8 @@ let OpenILModuleReaderAfterReadingAllBytes infile opts = match cacheResult with | Some(ilModuleReader) -> ilModuleReader | None -> - let mc = MemChannel.OpenIn infile - let modul,ilAssemblyRefs,pdb = genOpenBinaryReader infile (Mem mc) opts + let mc = ByteFile(infile |> FileSystem.ReadAllBytesShim) + let modul,ilAssemblyRefs,pdb = genOpenBinaryReader infile mc opts let ilModuleReader = { modul = modul; ilAssemblyRefs = ilAssemblyRefs @@ -4129,8 +4007,8 @@ let OpenILModuleReaderAfterReadingAllBytes infile opts = let OpenILModuleReaderFromBytes fileNameForDebugOutput bytes opts = assert opts.pdbPath.IsNone - let mc = MemChannel.OpenBytes bytes - let modul,ilAssemblyRefs,pdb = genOpenBinaryReader fileNameForDebugOutput (Mem mc) opts + let mc = ByteFile(bytes) + let modul,ilAssemblyRefs,pdb = genOpenBinaryReader fileNameForDebugOutput mc opts let ilModuleReader = { modul = modul; ilAssemblyRefs = ilAssemblyRefs @@ -4140,4 +4018,3 @@ let OpenILModuleReaderFromBytes fileNameForDebugOutput bytes opts = - diff --git a/src/absil/ilread.fsi b/src/absil/ilread.fsi index 650745691f4..9a508de17b3 100644 --- a/src/absil/ilread.fsi +++ b/src/absil/ilread.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Binary reader. Read a .NET binary and concert it to Abstract IL data /// structures. @@ -41,16 +41,16 @@ type ILReaderOptions = val mkDefault : ILGlobals -> ILReaderOptions // The non-memory resources (i.e. the file handle) associated with -// the read can be recovered by calling CloseILModuleReader. Any reamining +// the read can be recovered by calling Dispose. Any remaining // lazily-computed items in the metadata graph returned by MetadataOfILModuleReader // will no longer be valid. [] type ILModuleReader = member ILModuleDef : ILModuleDef member ILAssemblyRefs : ILAssemblyRef list + interface System.IDisposable val OpenILModuleReader: string -> ILReaderOptions -> ILModuleReader -val CloseILModuleReader: ILModuleReader -> unit /// Open a binary reader, except first copy the entire contents of the binary into /// memory, close the file and ensure any subsequent reads happen from the in-memory store. diff --git a/src/absil/ilreflect.fs b/src/absil/ilreflect.fs index efc6b644d83..4f8f865f3ca 100644 --- a/src/absil/ilreflect.fs +++ b/src/absil/ilreflect.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. //---------------------------------------------------------------------------- // Write Abstract IL structures at runtime using Reflection.Emit @@ -336,11 +336,11 @@ let convTypeRefAux (cenv:cenv) (tref:ILTypeRef) = | None -> let asmName = convAssemblyRef asmref FileSystem.AssemblyLoad(asmName) - let typT = assembly.GetType(qualifiedName) + let typT = assembly.GetType(qualifiedName, throwOnError=true) typT |> nonNull "convTypeRefAux" | ILScopeRef.Module _ | ILScopeRef.Local _ -> - let typT = Type.GetType(qualifiedName,true) + let typT = Type.GetType(qualifiedName, throwOnError=true) typT |> nonNull "convTypeRefAux" @@ -1828,7 +1828,7 @@ let createTypeRef (visited : Dictionary<_,_>, created : Dictionary<_,_>) emEnv t if verbose2 then dprintf "buildTypeDefPass4: Doing type typar constraints of %s\n" tdef.Name; tdef.GenericParams |> List.iter (fun gp -> gp.Constraints |> ILList.iter (traverseType false 2)); if verbose2 then dprintf "buildTypeDefPass4: Doing method constraints of %s\n" tdef.Name; - tdef.Methods.AsList |> Seq.iter (fun md -> md.GenericParams |> List.iter (fun gp -> gp.Constraints |> ILList.iter (traverseType false 2))); + tdef.Methods.AsList |> List.iter (fun md -> md.GenericParams |> List.iter (fun gp -> gp.Constraints |> ILList.iter (traverseType false 2))); // We absolutely need the parent type... if priority >= 1 then @@ -1843,7 +1843,7 @@ let createTypeRef (visited : Dictionary<_,_>, created : Dictionary<_,_>) emEnv t // We have to define all struct types in all methods before a class is defined. This only has any effect when there is a struct type // being defined simultaneously with this type. if priority >= 1 then - if verbose2 then dprintf "buildTypeDefPass4: Doing value types in method signatures of %s, #mdefs = %d\n" tdef.Name tdef.Methods.AsList.Length; + if verbose2 then dprintf "buildTypeDefPass4: Doing value types in method signatures of %s\n" tdef.Name tdef.Methods |> Seq.iter (fun md -> md.Parameters |> ILList.iter (fun p -> p.Type |> (traverseType true 1)) md.Return.Type |> traverseType true 1); @@ -1918,18 +1918,18 @@ let buildModuleTypePass4 visited emEnv tdef = buildTypeDefPass4 visited [] emE //---------------------------------------------------------------------------- let buildModuleFragment cenv emEnv (asmB : AssemblyBuilder) (modB : ModuleBuilder) (m: ILModuleDef) = - let tdefs = m.TypeDefs.AsList + let tdefs = m.TypeDefs.AsList - let emEnv = List.fold (buildModuleTypePass1 cenv modB) emEnv tdefs + let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass1 cenv modB) tdefs |> List.iter (buildModuleTypePass1b cenv emEnv) - let emEnv = List.fold (buildModuleTypePass2 cenv) emEnv tdefs + let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass2 cenv) for delayedFieldInit in emEnv.delayedFieldInits do delayedFieldInit() let emEnv = { emEnv with delayedFieldInits = [] } - let emEnv = List.fold (buildModuleTypePass3 cenv modB) emEnv tdefs + let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass3 cenv modB) let visited = new Dictionary<_,_>(10) let created = new Dictionary<_,_>(10) tdefs |> List.iter (buildModuleTypePass4 (visited,created) emEnv) @@ -1950,13 +1950,14 @@ let buildModuleFragment cenv emEnv (asmB : AssemblyBuilder) (modB : ModuleBuilde // test hook //---------------------------------------------------------------------------- -let mkDynamicAssemblyAndModule (assemblyName, optimize, debugInfo) = +let mkDynamicAssemblyAndModule (assemblyName, optimize, debugInfo, collectible) = let filename = assemblyName ^ ".dll" let currentDom = System.AppDomain.CurrentDomain let asmDir = "." let asmName = new AssemblyName() asmName.Name <- assemblyName; - let asmB = currentDom.DefineDynamicAssemblyAndLog(asmName,AssemblyBuilderAccess.RunAndSave,asmDir) + let asmAccess = if collectible then AssemblyBuilderAccess.RunAndCollect else AssemblyBuilderAccess.RunAndSave + let asmB = currentDom.DefineDynamicAssemblyAndLog(asmName,asmAccess,asmDir) if not optimize then let daType = typeof; let daCtor = daType.GetConstructor [| typeof |] diff --git a/src/absil/ilsupp.fs b/src/absil/ilsupp.fs index e419537b66b..dbc8c784518 100644 --- a/src/absil/ilsupp.fs +++ b/src/absil/ilsupp.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.AbstractIL.Internal.Support @@ -676,10 +676,10 @@ let linkNativeResources (unlinkedResources:byte[] list) (ulLinkedResourceBaseRV // Conversion was successful, so read the object file objBytes <- FileSystem.ReadAllBytesShim(tempObjFileName) ; //Array.Copy(objBytes, pbUnlinkedResource, pbUnlinkedResource.Length) - System.IO.File.Delete(tempObjFileName) + FileSystem.FileDelete(tempObjFileName) finally // clean up the temp files - List.iter (fun tempResFileName -> System.IO.File.Delete(tempResFileName)) tempResFiles + List.iter (fun tempResFileName -> FileSystem.FileDelete(tempResFileName)) tempResFiles // Part 2: Read the COFF file held in pbUnlinkedResource, spit it out into pResBuffer and apply the COFF fixups // pResBuffer will become the .rsrc section of the PE file @@ -1013,7 +1013,7 @@ type PdbDocumentWriter = { symDocWriter : ISymUnmanagedDocumentWriter } (* poin type idd = { iddCharacteristics: int32; iddMajorVersion: int32; (* actually u16 in IMAGE_DEBUG_DIRECTORY *) - iddMinorVersion: int32; (* acutally u16 in IMAGE_DEBUG_DIRECTORY *) + iddMinorVersion: int32; (* actually u16 in IMAGE_DEBUG_DIRECTORY *) iddType: int32; iddData: byte[];} @@ -1090,7 +1090,7 @@ let hashSizeOfMD5 = 16 // In this case, catch the failure, and not set a checksum. let internal setCheckSum (url:string, writer:ISymUnmanagedDocumentWriter) = try - use file = new FileStream(url, FileMode.Open, FileAccess.Read, FileShare.Read) + use file = FileSystem.FileStreamReadShim(url) use md5 = System.Security.Cryptography.MD5.Create() let checkSum = md5.ComputeHash(file) if (checkSum.Length = hashSizeOfMD5) then diff --git a/src/absil/ilsupp.fsi b/src/absil/ilsupp.fsi index 5e54476a072..6b5ed5b1424 100644 --- a/src/absil/ilsupp.fsi +++ b/src/absil/ilsupp.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Functions associated with writing binaries which /// vary between supported implementations of the CLI Common Language @@ -87,7 +87,7 @@ type PdbDocumentWriter type idd = { iddCharacteristics: int32; iddMajorVersion: int32; (* actually u16 in IMAGE_DEBUG_DIRECTORY *) - iddMinorVersion: int32; (* acutally u16 in IMAGE_DEBUG_DIRECTORY *) + iddMinorVersion: int32; (* actually u16 in IMAGE_DEBUG_DIRECTORY *) iddType: int32; iddData: byte[];} diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index e206f3a7114..3eede5eb80a 100644 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.AbstractIL.ILBinaryWriter @@ -35,7 +35,7 @@ let reportTime = let t = System.Diagnostics.Process.GetCurrentProcess().UserProcessorTime.TotalSeconds let prev = match !tPrev with None -> 0.0 | Some t -> t let first = match !tFirst with None -> (tFirst := Some t; t) | Some t -> t - dprintf "ilwrite: TIME %10.3f (total) %10.3f (delta) - %s\n" (t - first) (t - prev) descr; + dprintf "ilwrite: TIME %10.3f (total) %10.3f (delta) - %s\n" (t - first) (t - prev) descr tPrev := Some t //--------------------------------------------------------------------- @@ -85,12 +85,12 @@ type ByteBuffer with if n >= 0 && n <= 0x7F then buf.EmitIntAsByte n elif n >= 0x80 && n <= 0x3FFF then - buf.EmitIntAsByte (0x80 ||| (n >>> 8)); + buf.EmitIntAsByte (0x80 ||| (n >>> 8)) buf.EmitIntAsByte (n &&& 0xFF) else - buf.EmitIntAsByte (0xc0l ||| ((n >>> 24) &&& 0xFF)); - buf.EmitIntAsByte ( (n >>> 16) &&& 0xFF); - buf.EmitIntAsByte ( (n >>> 8) &&& 0xFF); + buf.EmitIntAsByte (0xc0l ||| ((n >>> 24) &&& 0xFF)) + buf.EmitIntAsByte ( (n >>> 16) &&& 0xFF) + buf.EmitIntAsByte ( (n >>> 8) &&& 0xFF) buf.EmitIntAsByte ( n &&& 0xFF) member buf.EmitPadding n = @@ -142,15 +142,15 @@ let markerForUnicodeBytes (b:byte[]) = /// Check that the data held at a fixup is some special magic value, as a sanity check /// to ensure the fixup is being placed at a ood lcoation. let checkFixup32 (data: byte[]) offset exp = - if data.[offset + 3] <> b3 exp then failwith "fixup sanity check failed"; - if data.[offset + 2] <> b2 exp then failwith "fixup sanity check failed"; - if data.[offset + 1] <> b1 exp then failwith "fixup sanity check failed"; + if data.[offset + 3] <> b3 exp then failwith "fixup sanity check failed" + if data.[offset + 2] <> b2 exp then failwith "fixup sanity check failed" + if data.[offset + 1] <> b1 exp then failwith "fixup sanity check failed" if data.[offset] <> b0 exp then failwith "fixup sanity check failed" let applyFixup32 (data:byte[]) offset v = - data.[offset] <- b0 v; - data.[offset+1] <- b1 v; - data.[offset+2] <- b2 v; + data.[offset] <- b0 v + data.[offset+1] <- b1 v + data.[offset+2] <- b2 v data.[offset+3] <- b3 v // -------------------------------------------------------------------- @@ -160,39 +160,39 @@ let applyFixup32 (data:byte[]) offset v = type PdbDocumentData = ILSourceDocument type PdbLocalVar = - { Name: string; - Signature: byte[]; + { Name: string + Signature: byte[] /// the local index the name corresponds to Index: int32 } type PdbMethodScope = - { Children: PdbMethodScope array; - StartOffset: int; - EndOffset: int; - Locals: PdbLocalVar array; - (* REVIEW open_namespaces: pdb_namespace array; *) } + { Children: PdbMethodScope array + StartOffset: int + EndOffset: int + Locals: PdbLocalVar array + (* REVIEW open_namespaces: pdb_namespace array *) } type PdbSourceLoc = - { Document: int; - Line: int; - Column: int; } + { Document: int + Line: int + Column: int } type PdbSequencePoint = - { Document: int; - Offset: int; - Line: int; - Column: int; - EndLine: int; - EndColumn: int; } + { Document: int + Offset: int + Line: int + Column: int + EndLine: int + EndColumn: int } override x.ToString() = sprintf "(%d,%d)-(%d,%d)" x.Line x.Column x.EndLine x.EndColumn type PdbMethodData = - { MethToken: int32; - MethName:string; - Params: PdbLocalVar array; - RootScope: PdbMethodScope; - Range: (PdbSourceLoc * PdbSourceLoc) option; - SequencePoints: PdbSequencePoint array; } + { MethToken: int32 + MethName:string + Params: PdbLocalVar array + RootScope: PdbMethodScope + Range: (PdbSourceLoc * PdbSourceLoc) option + SequencePoints: PdbSequencePoint array } module SequencePoint = let orderBySource sp1 sp2 = @@ -210,10 +210,10 @@ let sizeof_IMAGE_DEBUG_DIRECTORY = 28 [] type PdbData = - { EntryPoint: int32 option; + { EntryPoint: int32 option // MVID of the generated .NET module (used by MDB files to identify debug info) - ModuleID: byte[]; - Documents: PdbDocumentData[]; + ModuleID: byte[] + Documents: PdbDocumentData[] Methods: PdbMethodData[] } //--------------------------------------------------------------------- @@ -222,7 +222,7 @@ type PdbData = //--------------------------------------------------------------------- let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = - (try FileSystem.FileDelete fpdb with _ -> ()); + (try FileSystem.FileDelete fpdb with _ -> ()) let pdbw = ref Unchecked.defaultof try @@ -235,12 +235,12 @@ let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = let docs = info.Documents |> Array.map (fun doc -> pdbDefineDocument !pdbw doc.File) let getDocument i = - if i < 0 || i > docs.Length then failwith "getDocument: bad doc number"; + if i < 0 || i > docs.Length then failwith "getDocument: bad doc number" docs.[i] - reportTime showTimes (sprintf "PDB: Defined %d documents" info.Documents.Length); - Array.sortInPlaceBy (fun x -> x.MethToken) info.Methods; + reportTime showTimes (sprintf "PDB: Defined %d documents" info.Documents.Length) + Array.sortInPlaceBy (fun x -> x.MethToken) info.Methods - reportTime showTimes (sprintf "PDB: Sorted %d methods" info.Methods.Length); + reportTime showTimes (sprintf "PDB: Sorted %d methods" info.Methods.Length) // This next bit is a workaround. The sequence points we get // from F# (which has nothing to do with this module) are actually expression @@ -258,7 +258,7 @@ let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = let allSps = Array.mapi (fun i sp -> (i,sp)) allSps if fixupOverlappingSequencePoints then // sort the sequence points into source order - Array.sortInPlaceWith (fun (_,sp1) (_,sp2) -> SequencePoint.orderBySource sp1 sp2) allSps; + Array.sortInPlaceWith (fun (_,sp1) (_,sp2) -> SequencePoint.orderBySource sp1 sp2) allSps // shorten the ranges of any that overlap with following sequence points // sort the sequence points back into offset order for i = 0 to Array.length allSps - 2 do @@ -269,9 +269,9 @@ let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = (sp1.EndLine = sp2.Line && sp1.EndColumn >= sp2.Column)) then let adjustToPrevLine = (sp1.Line < sp2.Line) - allSps.[i] <- n,{sp1 with EndLine = (if adjustToPrevLine then sp2.Line-1 else sp2.Line); - EndColumn = (if adjustToPrevLine then 80 else sp2.Column); } - Array.sortInPlaceBy fst allSps; + allSps.[i] <- n,{sp1 with EndLine = (if adjustToPrevLine then sp2.Line-1 else sp2.Line) + EndColumn = (if adjustToPrevLine then 80 else sp2.Column) } + Array.sortInPlaceBy fst allSps @@ -279,15 +279,15 @@ let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = info.Methods |> Array.iteri (fun i minfo -> let sps = Array.sub allSps !spOffset spCounts.[i] - spOffset := !spOffset + spCounts.[i]; + spOffset := !spOffset + spCounts.[i] begin match minfo.Range with | None -> () | Some (a,b) -> - pdbOpenMethod !pdbw minfo.MethToken; + pdbOpenMethod !pdbw minfo.MethToken pdbSetMethodRange !pdbw (getDocument a.Document) a.Line a.Column - (getDocument b.Document) b.Line b.Column; + (getDocument b.Document) b.Line b.Column // Partition the sequence points by document let spsets = @@ -304,34 +304,34 @@ let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = spsets |> List.iter (fun spset -> if spset.Length > 0 then - Array.sortInPlaceWith SequencePoint.orderByOffset spset; + Array.sortInPlaceWith SequencePoint.orderByOffset spset let sps = spset |> Array.map (fun sp -> - // Ildiag.dprintf "token 0x%08lx has an sp at offset 0x%08x\n" minfo.MethToken sp.Offset; + // Ildiag.dprintf "token 0x%08lx has an sp at offset 0x%08x\n" minfo.MethToken sp.Offset (sp.Offset, sp.Line, sp.Column,sp.EndLine, sp.EndColumn)) // Use of alloca in implementation of pdbDefineSequencePoints can give stack overflow here if sps.Length < 5000 then - pdbDefineSequencePoints !pdbw (getDocument spset.[0].Document) sps;); + pdbDefineSequencePoints !pdbw (getDocument spset.[0].Document) sps) // Write the scopes let rec writePdbScope top sco = if top || sco.Locals.Length <> 0 || sco.Children.Length <> 0 then - pdbOpenScope !pdbw sco.StartOffset; - sco.Locals |> Array.iter (fun v -> pdbDefineLocalVariable !pdbw v.Name v.Signature v.Index); - sco.Children |> Array.iter (writePdbScope false); - pdbCloseScope !pdbw sco.EndOffset; - writePdbScope true minfo.RootScope; + pdbOpenScope !pdbw sco.StartOffset + sco.Locals |> Array.iter (fun v -> pdbDefineLocalVariable !pdbw v.Name v.Signature v.Index) + sco.Children |> Array.iter (writePdbScope false) + pdbCloseScope !pdbw sco.EndOffset + writePdbScope true minfo.RootScope pdbCloseMethod !pdbw - end); - reportTime showTimes "PDB: Wrote methods"; + end) + reportTime showTimes "PDB: Wrote methods" let res = pdbGetDebugInfo !pdbw for pdbDoc in docs do pdbCloseDocument pdbDoc pdbClose !pdbw f fpdb; - reportTime showTimes "PDB: Closed"; + reportTime showTimes "PDB: Closed" res //--------------------------------------------------------------------- @@ -383,7 +383,7 @@ let createWriter (f:string) = let WriteMdbInfo fmdb f info = // Note, if we cant delete it code will fail later - (try FileSystem.FileDelete fmdb with _ -> ()); + (try FileSystem.FileDelete fmdb with _ -> ()) // Try loading the MDB symbol writer from an assembly available on Mono dynamically // Report an error if the assembly is not available. @@ -514,7 +514,7 @@ type ILStrongNameSigner = member s.SignatureSize = try Support.signerSignatureSize(s.PublicKey) with e -> - failwith ("A call to StrongNameSignatureSize failed ("+e.Message+")"); + failwith ("A call to StrongNameSignatureSize failed ("+e.Message+")") 0x80 member s.SignFile file = @@ -755,48 +755,48 @@ let envForOverrideSpec (ospec:ILOverridesSpec) = { EnclosingTyparCount=ospec.Enc [] type MetadataTable<'T> = - { name: string; - dict: Dictionary<'T, int>; // given a row, find its entry number + { name: string + dict: Dictionary<'T, int> // given a row, find its entry number #if DEBUG - mutable lookups: int; + mutable lookups: int #endif - mutable rows: ResizeArray<'T> ; } + mutable rows: ResizeArray<'T> } member x.Count = x.rows.Count static member New(nm,hashEq) = - { name=nm; + { name=nm #if DEBUG - lookups=0; + lookups=0 #endif - dict = new Dictionary<_,_>(100, hashEq); - rows= new ResizeArray<_>(); } + dict = new Dictionary<_,_>(100, hashEq) + rows= new ResizeArray<_>() } member tbl.EntriesAsArray = #if DEBUG - if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups; + if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups #endif tbl.rows |> ResizeArray.toArray member tbl.Entries = #if DEBUG - if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups; + if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups #endif tbl.rows |> ResizeArray.toList member tbl.AddSharedEntry x = let n = tbl.rows.Count + 1 - tbl.dict.[x] <- n; - tbl.rows.Add(x); + tbl.dict.[x] <- n + tbl.rows.Add(x) n member tbl.AddUnsharedEntry x = let n = tbl.rows.Count + 1 - tbl.rows.Add(x); + tbl.rows.Add(x) n member tbl.FindOrAddSharedEntry x = #if DEBUG - tbl.lookups <- tbl.lookups + 1; + tbl.lookups <- tbl.lookups + 1 #endif let mutable res = Unchecked.defaultof<_> let ok = tbl.dict.TryGetValue(x,&res) @@ -806,9 +806,9 @@ type MetadataTable<'T> = /// This is only used in one special place - see further below. member tbl.SetRowsOfTable t = - tbl.rows <- ResizeArray.ofArray t; + tbl.rows <- ResizeArray.ofArray t let h = tbl.dict - h.Clear(); + h.Clear() t |> Array.iteri (fun i x -> h.[x] <- (i+1)) member tbl.AddUniqueEntry nm geterr x = @@ -877,52 +877,52 @@ type TypeDefTableKey = TdKey of string list (* enclosing *) * string (* type nam [] type cenv = - { primaryAssembly: ILScopeRef; - ilg: ILGlobals; - emitTailcalls: bool; - showTimes: bool; - desiredMetadataVersion: ILVersionInfo; - requiredDataFixups: (int32 * (int * bool)) list ref; + { primaryAssembly: ILScopeRef + ilg: ILGlobals + emitTailcalls: bool + showTimes: bool + desiredMetadataVersion: ILVersionInfo + requiredDataFixups: (int32 * (int * bool)) list ref /// References to strings in codestreams: offset of code and a (fixup-location , string token) list) - mutable requiredStringFixups: (int32 * (int * int) list) list; - codeChunks: ByteBuffer; - mutable nextCodeAddr: int32; + mutable requiredStringFixups: (int32 * (int * int) list) list + codeChunks: ByteBuffer + mutable nextCodeAddr: int32 // Collected debug information mutable moduleGuid: byte[] - generatePdb: bool; - pdbinfo: ResizeArray; - documents: MetadataTable; + generatePdb: bool + pdbinfo: ResizeArray + documents: MetadataTable /// Raw data, to go into the data section - data: ByteBuffer; + data: ByteBuffer /// Raw resource data, to go into the data section - resources: ByteBuffer; - mutable entrypoint: (bool * int) option; + resources: ByteBuffer + mutable entrypoint: (bool * int) option /// Caches - trefCache: Dictionary; + trefCache: Dictionary /// The following are all used to generate unique items in the output - tables: array>; - AssemblyRefs: MetadataTable; - fieldDefs: MetadataTable; - methodDefIdxsByKey: MetadataTable; - methodDefIdxs: Dictionary; - propertyDefs: MetadataTable; - eventDefs: MetadataTable; - typeDefs: MetadataTable; - guids: MetadataTable; - blobs: MetadataTable; - strings: MetadataTable; - userStrings: MetadataTable; + tables: array> + AssemblyRefs: MetadataTable + fieldDefs: MetadataTable + methodDefIdxsByKey: MetadataTable + methodDefIdxs: Dictionary + propertyDefs: MetadataTable + eventDefs: MetadataTable + typeDefs: MetadataTable + guids: MetadataTable + blobs: MetadataTable + strings: MetadataTable + userStrings: MetadataTable } member cenv.GetTable (tab:TableName) = cenv.tables.[tab.Index] member cenv.AddCode ((reqdStringFixupsOffset,requiredStringFixups),code) = - if align 4 cenv.nextCodeAddr <> cenv.nextCodeAddr then dprintn "warning: code not 4-byte aligned"; - cenv.requiredStringFixups <- (cenv.nextCodeAddr + reqdStringFixupsOffset, requiredStringFixups) :: cenv.requiredStringFixups; - cenv.codeChunks.EmitBytes code; + if align 4 cenv.nextCodeAddr <> cenv.nextCodeAddr then dprintn "warning: code not 4-byte aligned" + cenv.requiredStringFixups <- (cenv.nextCodeAddr + reqdStringFixupsOffset, requiredStringFixups) :: cenv.requiredStringFixups + cenv.codeChunks.EmitBytes code cenv.nextCodeAddr <- cenv.nextCodeAddr + code.Length member cenv.GetCode() = cenv.codeChunks.Close() @@ -964,14 +964,14 @@ let peOptionalHeaderByteByCLRVersion v = // returned by writeBinaryAndReportMappings [] type ILTokenMappings = - { TypeDefTokenMap: ILTypeDef list * ILTypeDef -> int32; - FieldDefTokenMap: ILTypeDef list * ILTypeDef -> ILFieldDef -> int32; - MethodDefTokenMap: ILTypeDef list * ILTypeDef -> ILMethodDef -> int32; - PropertyTokenMap: ILTypeDef list * ILTypeDef -> ILPropertyDef -> int32; + { TypeDefTokenMap: ILTypeDef list * ILTypeDef -> int32 + FieldDefTokenMap: ILTypeDef list * ILTypeDef -> ILFieldDef -> int32 + MethodDefTokenMap: ILTypeDef list * ILTypeDef -> ILMethodDef -> int32 + PropertyTokenMap: ILTypeDef list * ILTypeDef -> ILPropertyDef -> int32 EventTokenMap: ILTypeDef list * ILTypeDef -> ILEventDef -> int32 } let recordRequiredDataFixup requiredDataFixups (buf: ByteBuffer) pos lab = - requiredDataFixups := (pos,lab) :: !requiredDataFixups; + requiredDataFixups := (pos,lab) :: !requiredDataFixups // Write a special value in that we check later when applying the fixup buf.EmitInt32 0xdeaddddd @@ -1007,12 +1007,11 @@ let GetTypeNameAsElemPair cenv n = //===================================================================== let rec GenTypeDefPass1 enc cenv (td:ILTypeDef) = - ignore (cenv.typeDefs.AddUniqueEntry "type index" (fun (TdKey (_,n)) -> n) (TdKey (enc,td.Name))); + ignore (cenv.typeDefs.AddUniqueEntry "type index" (fun (TdKey (_,n)) -> n) (TdKey (enc,td.Name))) GenTypeDefsPass1 (enc@[td.Name]) cenv td.NestedTypes.AsList and GenTypeDefsPass1 enc cenv tds = List.iter (GenTypeDefPass1 enc cenv) tds - //===================================================================== // Pass 2 - allocate indexes for methods and fields and write rows for types //===================================================================== @@ -1053,9 +1052,9 @@ and GetModuleRefAsRow cenv (mref:ILModuleRef) = and GetModuleRefAsFileRow cenv (mref:ILModuleRef) = SimpleSharedRow - [| ULong (if mref.HasMetadata then 0x0000 else 0x0001); - StringE (GetStringHeapIdx cenv mref.Name); - (match mref.Hash with None -> Blob 0 | Some s -> Blob (GetBytesAsBlobIdx cenv s)); |] + [| ULong (if mref.HasMetadata then 0x0000 else 0x0001) + StringE (GetStringHeapIdx cenv mref.Name) + (match mref.Hash with None -> Blob 0 | Some s -> Blob (GetBytesAsBlobIdx cenv s)) |] and GetModuleRefAsIdx cenv mref = FindOrAddRow cenv TableNames.ModuleRef (GetModuleRefAsRow cenv mref) @@ -1094,7 +1093,7 @@ and GetTypeRefAsTypeRefIdx cenv tref = let mutable res = 0 if cenv.trefCache.TryGetValue(tref,&res) then res else let res = FindOrAddRow cenv TableNames.TypeRef (GetTypeRefAsTypeRefRow cenv tref) - cenv.trefCache.[tref] <- res; + cenv.trefCache.[tref] <- res res and GetTypeDescAsTypeRefIdx cenv (scoref,enc,n) = @@ -1131,10 +1130,10 @@ let getTypeDefOrRefAsUncodedToken (tag,idx) = let EmitArrayShape (bb: ByteBuffer) (ILArrayShape shape) = let sized = List.filter (function (_,Some _) -> true | _ -> false) shape let lobounded = List.filter (function (Some _,_) -> true | _ -> false) shape - bb.EmitZ32 shape.Length; - bb.EmitZ32 sized.Length; - sized |> List.iter (function (_,Some sz) -> bb.EmitZ32 sz | _ -> failwith "?"); - bb.EmitZ32 lobounded.Length; + bb.EmitZ32 shape.Length + bb.EmitZ32 sized.Length + sized |> List.iter (function (_,Some sz) -> bb.EmitZ32 sz | _ -> failwith "?") + bb.EmitZ32 lobounded.Length lobounded |> List.iter (function (Some low,_) -> bb.EmitZ32 low | _ -> failwith "?") let hasthisToByte hasthis = @@ -1158,13 +1157,13 @@ let callconvToByte ntypars (Callconv (hasthis,bcc)) = // REVIEW: write into an accumuating buffer let rec EmitTypeSpec cenv env (bb: ByteBuffer) (et,tspec:ILTypeSpec) = if ILList.isEmpty tspec.GenericArgs then - bb.EmitByte et; + bb.EmitByte et emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tspec.Scope,tspec.Enclosing,tspec.Name) else - bb.EmitByte et_WITH; - bb.EmitByte et; - emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tspec.Scope,tspec.Enclosing,tspec.Name); - bb.EmitZ32 tspec.GenericArgs.Length; + bb.EmitByte et_WITH + bb.EmitByte et + emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tspec.Scope,tspec.Enclosing,tspec.Name) + bb.EmitZ32 tspec.GenericArgs.Length EmitTypes cenv env bb tspec.GenericArgs and GetTypeAsTypeDefOrRef cenv env (ty:ILType) = @@ -1218,41 +1217,41 @@ and EmitType cenv env bb ty = | ILType.TypeVar tv -> let cgparams = env.EnclosingTyparCount if int32 tv < cgparams then - bb.EmitByte et_VAR; + bb.EmitByte et_VAR bb.EmitZ32 (int32 tv) else - bb.EmitByte et_MVAR; + bb.EmitByte et_MVAR bb.EmitZ32 (int32 tv - cgparams) | ILType.Byref typ -> - bb.EmitByte et_BYREF; + bb.EmitByte et_BYREF EmitType cenv env bb typ | ILType.Ptr typ -> - bb.EmitByte et_PTR; + bb.EmitByte et_PTR EmitType cenv env bb typ | ILType.Void -> bb.EmitByte et_VOID | ILType.FunctionPointer x -> - bb.EmitByte et_FNPTR; + bb.EmitByte et_FNPTR EmitCallsig cenv env bb (x.CallingConv,x.ArgTypes,x.ReturnType,None,0) | ILType.Modified (req,tref,ty) -> - bb.EmitByte (if req then et_CMOD_REQD else et_CMOD_OPT); - emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tref.Scope, tref.Enclosing,tref.Name); + bb.EmitByte (if req then et_CMOD_REQD else et_CMOD_OPT) + emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tref.Scope, tref.Enclosing,tref.Name) EmitType cenv env bb ty | _ -> failwith "EmitType" and EmitCallsig cenv env bb (callconv,args:ILTypes,ret,varargs:ILVarArgs,genarity) = - bb.EmitByte (callconvToByte genarity callconv); - if genarity > 0 then bb.EmitZ32 genarity; - bb.EmitZ32 ((args.Length + (match varargs with None -> 0 | Some l -> l.Length))); - EmitType cenv env bb ret; - args |> ILList.iter (EmitType cenv env bb); + bb.EmitByte (callconvToByte genarity callconv) + if genarity > 0 then bb.EmitZ32 genarity + bb.EmitZ32 ((args.Length + (match varargs with None -> 0 | Some l -> l.Length))) + EmitType cenv env bb ret + args |> ILList.iter (EmitType cenv env bb) match varargs with | None -> ()// no extra arg = no sentinel | Some tys -> if ILList.isEmpty tys then () // no extra arg = no sentinel else - bb.EmitByte et_SENTINEL; + bb.EmitByte et_SENTINEL ILList.iter (EmitType cenv env bb) tys and GetCallsigAsBytes cenv env x = emitBytesViaBuffer (fun bb -> EmitCallsig cenv env bb x) @@ -1300,41 +1299,41 @@ and EmitNativeType bb ty = let u1 = System.Text.Encoding.UTF8.GetBytes nativeTypeName let u2 = System.Text.Encoding.UTF8.GetBytes custMarshallerName let u3 = cookieString - bb.EmitByte nt_CUSTOMMARSHALER; - bb.EmitZ32 guid.Length; - bb.EmitBytes guid; - bb.EmitZ32 u1.Length; bb.EmitBytes u1; - bb.EmitZ32 u2.Length; bb.EmitBytes u2; + bb.EmitByte nt_CUSTOMMARSHALER + bb.EmitZ32 guid.Length + bb.EmitBytes guid + bb.EmitZ32 u1.Length; bb.EmitBytes u1 + bb.EmitZ32 u2.Length; bb.EmitBytes u2 bb.EmitZ32 u3.Length; bb.EmitBytes u3 | ILNativeType.FixedSysString i -> - bb.EmitByte nt_FIXEDSYSSTRING; + bb.EmitByte nt_FIXEDSYSSTRING bb.EmitZ32 i | ILNativeType.FixedArray i -> - bb.EmitByte nt_FIXEDARRAY; + bb.EmitByte nt_FIXEDARRAY bb.EmitZ32 i | (* COM interop *) ILNativeType.SafeArray (vt,name) -> - bb.EmitByte nt_SAFEARRAY; - bb.EmitZ32 (GetVariantTypeAsInt32 vt); + bb.EmitByte nt_SAFEARRAY + bb.EmitZ32 (GetVariantTypeAsInt32 vt) match name with | None -> () | Some n -> let u1 = Bytes.stringAsUtf8NullTerminated n bb.EmitZ32 (Array.length u1) ; bb.EmitBytes u1 | ILNativeType.Array (nt,sizeinfo) -> (* REVIEW: check if this corresponds to the ECMA spec *) - bb.EmitByte nt_ARRAY; + bb.EmitByte nt_ARRAY match nt with | None -> bb.EmitZ32 (int nt_MAX) | Some ntt -> (if ntt = ILNativeType.Empty then bb.EmitZ32 (int nt_MAX) else - EmitNativeType bb ntt); + EmitNativeType bb ntt) match sizeinfo with | None -> () // chunk out with zeroes because some tools (e.g. asmmeta) read these poorly and expect further elements. | Some (pnum,additive) -> // ParamNum - bb.EmitZ32 pnum; + bb.EmitZ32 pnum (* ElemMul *) (* z_u32 0x1l *) match additive with | None -> () @@ -1450,11 +1449,11 @@ let rec GetTypeDefAsRow cenv env _enc (td:ILTypeDef) = let tdorTag, tdorRow = GetTypeOptionAsTypeDefOrRef cenv env td.Extends UnsharedRow - [| ULong flags ; - nelem; - nselem; - TypeDefOrRefOrSpec (tdorTag, tdorRow); - SimpleIndex (TableNames.Field, cenv.fieldDefs.Count + 1); + [| ULong flags + nelem + nselem + TypeDefOrRefOrSpec (tdorTag, tdorRow) + SimpleIndex (TableNames.Field, cenv.fieldDefs.Count + 1) SimpleIndex (TableNames.Method,cenv.methodDefIdxsByKey.Count + 1) |] and GetTypeOptionAsTypeDefOrRef cenv env tyOpt = @@ -1464,12 +1463,12 @@ and GetTypeOptionAsTypeDefOrRef cenv env tyOpt = and GetTypeDefAsPropertyMapRow cenv tidx = UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx); + [| SimpleIndex (TableNames.TypeDef, tidx) SimpleIndex (TableNames.Property, cenv.propertyDefs.Count + 1) |] and GetTypeDefAsEventMapRow cenv tidx = UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx); + [| SimpleIndex (TableNames.TypeDef, tidx) SimpleIndex (TableNames.Event, cenv.eventDefs.Count + 1) |] and GetKeyForFieldDef tidx (fd: ILFieldDef) = @@ -1486,10 +1485,10 @@ and GenMethodDefPass2 cenv tidx md = cenv.methodDefIdxsByKey.AddUniqueEntry "method" (fun (key:MethodDefKey) -> - dprintn "Duplicate in method table is:"; - dprintn (" Type index: "+string key.TypeIdx); - dprintn (" Method name: "+key.Name); - dprintn (" Method arity (num generic params): "+string key.GenericArity); + dprintn "Duplicate in method table is:" + dprintn (" Type index: "+string key.TypeIdx) + dprintn (" Method name: "+key.Name) + dprintn (" Method arity (num generic params): "+string key.GenericArity) key.Name ) (GetKeyForMethodDef tidx md) @@ -1505,7 +1504,7 @@ and GenPropertyDefPass2 cenv tidx x = and GetTypeAsImplementsRow cenv env tidx ty = let tdorTag,tdorRow = GetTypeAsTypeDefOrRef cenv env ty UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx); + [| SimpleIndex (TableNames.TypeDef, tidx) TypeDefOrRefOrSpec (tdorTag,tdorRow) |] and GenImplementsPass2 cenv env tidx ty = @@ -1522,33 +1521,33 @@ and GenTypeDefPass2 pidx enc cenv (td:ILTypeDef) = let env = envForTypeDef td let tidx = GetIdxForTypeDef cenv (TdKey(enc,td.Name)) let tidx2 = AddUnsharedRow cenv TableNames.TypeDef (GetTypeDefAsRow cenv env enc td) - if tidx <> tidx2 then failwith "index of typedef on second pass does not match index on first pass"; + if tidx <> tidx2 then failwith "index of typedef on second pass does not match index on first pass" // Add entries to auxiliary mapping tables, e.g. Nested, PropertyMap etc. // Note Nested is organised differntly to the others... if nonNil enc then AddUnsharedRow cenv TableNames.Nested (UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx); - SimpleIndex (TableNames.TypeDef, pidx) |]) |> ignore; + [| SimpleIndex (TableNames.TypeDef, tidx) + SimpleIndex (TableNames.TypeDef, pidx) |]) |> ignore let props = td.Properties.AsList if nonNil props then - AddUnsharedRow cenv TableNames.PropertyMap (GetTypeDefAsPropertyMapRow cenv tidx) |> ignore; + AddUnsharedRow cenv TableNames.PropertyMap (GetTypeDefAsPropertyMapRow cenv tidx) |> ignore let events = td.Events.AsList if nonNil events then - AddUnsharedRow cenv TableNames.EventMap (GetTypeDefAsEventMapRow cenv tidx) |> ignore; + AddUnsharedRow cenv TableNames.EventMap (GetTypeDefAsEventMapRow cenv tidx) |> ignore // Now generate or assign index numbers for tables referenced by the maps. // Don't yet generate contents of these tables - leave that to pass3, as // code may need to embed these entries. - td.Implements |> ILList.iter (GenImplementsPass2 cenv env tidx); - props |> List.iter (GenPropertyDefPass2 cenv tidx); - events |> List.iter (GenEventDefPass2 cenv tidx); - td.Fields.AsList |> List.iter (GenFieldDefPass2 cenv tidx); - td.Methods |> Seq.iter (GenMethodDefPass2 cenv tidx); + td.Implements |> ILList.iter (GenImplementsPass2 cenv env tidx) + props |> List.iter (GenPropertyDefPass2 cenv tidx) + events |> List.iter (GenEventDefPass2 cenv tidx) + td.Fields.AsList |> List.iter (GenFieldDefPass2 cenv tidx) + td.Methods |> Seq.iter (GenMethodDefPass2 cenv tidx) td.NestedTypes.AsList |> GenTypeDefsPass2 tidx (enc@[td.Name]) cenv with e -> - failwith ("Error in pass2 for type "+td.Name+", error: "+e.Message); + failwith ("Error in pass2 for type "+td.Name+", error: "+e.Message) and GenTypeDefsPass2 pidx enc cenv tds = List.iter (GenTypeDefPass2 pidx enc cenv) tds @@ -1575,14 +1574,14 @@ let FindMethodDefIdx cenv mdkey = | Some x -> x | None -> raise MethodDefNotFound let (TdKey (tenc,tname)) = typeNameOfIdx mdkey.TypeIdx - dprintn ("The local method '"+(String.concat "." (tenc@[tname]))+"'::'"+mdkey.Name+"' was referenced but not declared"); - dprintn ("generic arity: "+string mdkey.GenericArity); + dprintn ("The local method '"+(String.concat "." (tenc@[tname]))+"'::'"+mdkey.Name+"' was referenced but not declared") + dprintn ("generic arity: "+string mdkey.GenericArity) cenv.methodDefIdxsByKey.dict |> Seq.iter (fun (KeyValue(mdkey2,_)) -> if mdkey2.TypeIdx = mdkey.TypeIdx && mdkey.Name = mdkey2.Name then let (TdKey (tenc2,tname2)) = typeNameOfIdx mdkey2.TypeIdx - dprintn ("A method in '"+(String.concat "." (tenc2@[tname2]))+"' had the right name but the wrong signature:"); - dprintn ("generic arity: "+string mdkey2.GenericArity) ; - dprintn (sprintf "mdkey2: %A" mdkey2)) ; + dprintn ("A method in '"+(String.concat "." (tenc2@[tname2]))+"' had the right name but the wrong signature:") + dprintn ("generic arity: "+string mdkey2.GenericArity) + dprintn (sprintf "mdkey2: %A" mdkey2)) raise MethodDefNotFound @@ -1592,7 +1591,7 @@ let rec GetMethodDefIdx cenv md = and FindFieldDefIdx cenv fdkey = try cenv.fieldDefs.GetTableEntry fdkey with :? KeyNotFoundException -> - errorR(InternalError("The local field "+fdkey.Name+" was referenced but not declared",range0)); + errorR(InternalError("The local field "+fdkey.Name+" was referenced but not declared",range0)) 1 and GetFieldDefAsFieldDefIdx cenv tidx fd = @@ -1609,12 +1608,12 @@ let GetMethodRefAsMethodDefIdx cenv (mref:ILMethodRef) = let tref = mref.EnclosingTypeRef try if not (isTypeRefLocal tref) then - failwithf "method referred to by method impl, event or property is not in a type defined in this module, method ref is %A" mref; + failwithf "method referred to by method impl, event or property is not in a type defined in this module, method ref is %A" mref let tidx = GetIdxForTypeDef cenv (TdKey(tref.Enclosing,tref.Name)) let mdkey = MethodDefKey (tidx,mref.GenericArity, mref.Name, mref.ReturnType, mref.ArgTypes, mref.CallingConv.IsStatic) FindMethodDefIdx cenv mdkey with e -> - failwithf "Error in GetMethodRefAsMethodDefIdx for mref = %A, error: %s" (mref.Name, tref.Name) e.Message; + failwithf "Error in GetMethodRefAsMethodDefIdx for mref = %A, error: %s" (mref.Name, tref.Name) e.Message let rec MethodRefInfoAsMemberRefRow cenv env fenv (nm,typ,callconv,args,ret,varargs,genarity) = MemberRefRow(GetTypeAsMemberRefParent cenv env typ, @@ -1631,7 +1630,7 @@ let GetMethodRefInfoAsMemberRefIdx cenv env ((_,typ,_,_,_,_,_) as minfo) = let GetMethodRefInfoAsMethodRefOrDef isAlwaysMethodDef cenv env ((nm,typ:ILType,cc,args,ret,varargs,genarity) as minfo) = if isNone varargs && (isAlwaysMethodDef || isTypeLocal typ) then - if not typ.IsNominal then failwith "GetMethodRefInfoAsMethodRefOrDef: unexpected local tref-typ"; + if not typ.IsNominal then failwith "GetMethodRefInfoAsMethodRefOrDef: unexpected local tref-typ" try (mdor_MethodDef, GetMethodRefAsMethodDefIdx cenv (mkILMethRefRaw(typ.TypeRef, cc, nm, genarity, args,ret))) with MethodDefNotFound -> (mdor_MemberRef, GetMethodRefInfoAsMemberRefIdx cenv env minfo) else (mdor_MemberRef, GetMethodRefInfoAsMemberRefIdx cenv env minfo) @@ -1645,12 +1644,12 @@ let rec GetMethodSpecInfoAsMethodSpecIdx cenv env (nm,typ,cc,args,ret,varargs,mi let mdorTag,mdorRow = GetMethodRefInfoAsMethodRefOrDef false cenv env (nm,typ,cc,args,ret,varargs,minst.Length) let blob = emitBytesViaBuffer (fun bb -> - bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_GENERICINST; - bb.EmitZ32 minst.Length; + bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_GENERICINST + bb.EmitZ32 minst.Length minst |> ILList.iter (EmitType cenv env bb)) FindOrAddRow cenv TableNames.MethodSpec (SimpleSharedRow - [| MethodDefOrRef (mdorTag,mdorRow); + [| MethodDefOrRef (mdorTag,mdorRow) Blob (GetBytesAsBlobIdx cenv blob) |]) and GetMethodDefOrRefAsUncodedToken (tag,idx) = @@ -1709,7 +1708,7 @@ let rec GetOverridesSpecAsMemberRefIdx cenv env ospec = and GetOverridesSpecAsMethodDefOrRef cenv env (ospec:ILOverridesSpec) = let typ = ospec.EnclosingType if isTypeLocal typ then - if not typ.IsNominal then failwith "GetOverridesSpecAsMethodDefOrRef: unexpected local tref-typ"; + if not typ.IsNominal then failwith "GetOverridesSpecAsMethodDefOrRef: unexpected local tref-typ" try (mdor_MethodDef, GetMethodRefAsMethodDefIdx cenv ospec.MethodRef) with MethodDefNotFound -> (mdor_MemberRef, GetOverridesSpecAsMemberRefIdx cenv env ospec) else @@ -1752,9 +1751,9 @@ let rec GetCustomAttrDataAsBlobIdx cenv (data:byte[]) = and GetCustomAttrRow cenv hca attr = let cat = GetMethodRefAsCustomAttribType cenv attr.Method.MethodRef UnsharedRow - [| HasCustomAttribute (fst hca, snd hca); - CustomAttributeType (fst cat, snd cat); - Blob (GetCustomAttrDataAsBlobIdx cenv attr.Data); |] + [| HasCustomAttribute (fst hca, snd hca) + CustomAttributeType (fst cat, snd cat) + Blob (GetCustomAttrDataAsBlobIdx cenv attr.Data) |] and GenCustomAttrPass3Or4 cenv hca attr = AddUnsharedRow cenv TableNames.CustomAttribute (GetCustomAttrRow cenv hca attr) |> ignore @@ -1768,9 +1767,9 @@ and GenCustomAttrsPass3Or4 cenv hca (attrs: ILAttributes) = let rec GetSecurityDeclRow cenv hds (PermissionSet (action, s)) = UnsharedRow - [| UShort (uint16 (List.assoc action (Lazy.force ILSecurityActionMap))); - HasDeclSecurity (fst hds, snd hds); - Blob (GetBytesAsBlobIdx cenv s); |] + [| UShort (uint16 (List.assoc action (Lazy.force ILSecurityActionMap))) + HasDeclSecurity (fst hds, snd hds) + Blob (GetBytesAsBlobIdx cenv s) |] and GenSecurityDeclPass3 cenv hds attr = AddUnsharedRow cenv TableNames.Permission (GetSecurityDeclRow cenv hds attr) |> ignore @@ -1793,7 +1792,7 @@ and GetFieldSpecAsMemberRefIdx cenv env fspec = // REVIEW: write into an accumuating buffer and EmitFieldSpecSig cenv env (bb: ByteBuffer) (fspec:ILFieldSpec) = - bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD; + bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD EmitType cenv env bb fspec.FormalType and GetFieldSpecSigAsBytes cenv env x = @@ -1805,7 +1804,7 @@ and GetFieldSpecSigAsBlobIdx cenv env x = and GetFieldSpecAsFieldDefOrRef cenv env (fspec:ILFieldSpec) = let typ = fspec.EnclosingType if isTypeLocal typ then - if not typ.IsNominal then failwith "GetFieldSpecAsFieldDefOrRef: unexpected local tref-typ"; + if not typ.IsNominal then failwith "GetFieldSpecAsFieldDefOrRef: unexpected local tref-typ" let tref = typ.TypeRef let tidx = GetIdxForTypeDef cenv (TdKey(tref.Enclosing,tref.Name)) let fdkey = FieldDefKey (tidx,fspec.Name, fspec.FormalType) @@ -1838,8 +1837,8 @@ let GetCallsigAsStandAloneSigIdx cenv env info = // -------------------------------------------------------------------- let EmitLocalSig cenv env (bb: ByteBuffer) (locals: ILLocals) = - bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_LOCAL_SIG; - bb.EmitZ32 locals.Length; + bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_LOCAL_SIG + bb.EmitZ32 locals.Length locals |> ILList.iter (fun l -> EmitType cenv env bb l.Type) let GetLocalSigAsBlobHeapIdx cenv env locals = @@ -1867,21 +1866,21 @@ type CodeBuffer = // - locations of embedded handles into the string table // - the exception table // -------------------------------------------------------------------- - { code: ByteBuffer; + { code: ByteBuffer /// (instruction; optional short form); start of instr in code buffer; code loc for the end of the instruction the fixup resides in ; where is the destination of the fixup - mutable reqdBrFixups: ((int * int option) * int * ILCodeLabel list) list; - availBrFixups: Dictionary ; + mutable reqdBrFixups: ((int * int option) * int * ILCodeLabel list) list + availBrFixups: Dictionary /// code loc to fixup in code buffer - mutable reqdStringFixupsInMethod: (int * int) list; + mutable reqdStringFixupsInMethod: (int * int) list /// data for exception handling clauses - mutable seh: ExceptionClauseSpec list; - seqpoints: ResizeArray; } + mutable seh: ExceptionClauseSpec list + seqpoints: ResizeArray } static member Create _nm = - { seh = []; - code= ByteBuffer.Create 200; - reqdBrFixups=[]; - reqdStringFixupsInMethod=[]; + { seh = [] + code= ByteBuffer.Create 200 + reqdBrFixups=[] + reqdStringFixupsInMethod=[] availBrFixups = Dictionary<_,_>(10, HashIdentity.Structural) seqpoints = new ResizeArray<_>(10) } @@ -1893,12 +1892,12 @@ type CodeBuffer = // table indexes are 1-based, document array indexes are 0-based let doc = (cenv.documents.FindOrAddSharedEntry m.Document) - 1 codebuf.seqpoints.Add - { Document=doc; - Offset= codebuf.code.Position; - Line=m.Line; - Column=m.Column; - EndLine=m.EndLine; - EndColumn=m.EndColumn; } + { Document=doc + Offset= codebuf.code.Position + Line=m.Line + Column=m.Column + EndLine=m.EndLine + EndColumn=m.EndColumn } member codebuf.EmitByte x = codebuf.code.EmitIntAsByte x member codebuf.EmitUInt16 x = codebuf.code.EmitUInt16 x @@ -1908,17 +1907,17 @@ type CodeBuffer = member codebuf.EmitUncodedToken u = codebuf.EmitInt32 u member codebuf.RecordReqdStringFixup stringidx = - codebuf.reqdStringFixupsInMethod <- (codebuf.code.Position, stringidx) :: codebuf.reqdStringFixupsInMethod; + codebuf.reqdStringFixupsInMethod <- (codebuf.code.Position, stringidx) :: codebuf.reqdStringFixupsInMethod // Write a special value in that we check later when applying the fixup codebuf.EmitInt32 0xdeadbeef member codebuf.RecordReqdBrFixups i tgs = - codebuf.reqdBrFixups <- (i, codebuf.code.Position, tgs) :: codebuf.reqdBrFixups; + codebuf.reqdBrFixups <- (i, codebuf.code.Position, tgs) :: codebuf.reqdBrFixups // Write a special value in that we check later when applying the fixup // Value is 0x11 {deadbbbb}* where 11 is for the instruction and deadbbbb is for each target - codebuf.EmitByte 0x11; // for the instruction + codebuf.EmitByte 0x11 // for the instruction (if fst i = i_switch then - codebuf.EmitInt32 tgs.Length); + codebuf.EmitInt32 tgs.Length) List.iter (fun _ -> codebuf.EmitInt32 0xdeadbbbb) tgs member codebuf.RecordReqdBrFixup i tg = codebuf.RecordReqdBrFixups i [tg] @@ -1973,25 +1972,25 @@ module Codebuf = begin // Copy over a chunk of non-branching code let nobranch_len = origEndOfNoBranchBlock - origStartOfNoBranchBlock - newCode.EmitBytes origCode.[origStartOfNoBranchBlock..origStartOfNoBranchBlock+nobranch_len-1]; + newCode.EmitBytes origCode.[origStartOfNoBranchBlock..origStartOfNoBranchBlock+nobranch_len-1] // Record how to adjust addresses in this range, including the branch instruction // we write below, or the end of the method if we're doing the last bblock - adjustments := (origStartOfNoBranchBlock,origEndOfNoBranchBlock,newStartOfNoBranchBlock) :: !adjustments; + adjustments := (origStartOfNoBranchBlock,origEndOfNoBranchBlock,newStartOfNoBranchBlock) :: !adjustments // Increment locations to the branch instruction we're really interested in - origWhere := origEndOfNoBranchBlock; - newWhere := !newWhere + nobranch_len; + origWhere := origEndOfNoBranchBlock + newWhere := !newWhere + nobranch_len // Now do the branch instruction. Decide whether the fixup will be short or long in the new code if doingLast then doneLast := true else let (i,origStartOfInstr,tgs:ILCodeLabel list) = List.head !remainingReqdFixups - remainingReqdFixups := List.tail !remainingReqdFixups; - if origCode.[origStartOfInstr] <> 0x11uy then failwith "br fixup sanity check failed (1)"; + remainingReqdFixups := List.tail !remainingReqdFixups + if origCode.[origStartOfInstr] <> 0x11uy then failwith "br fixup sanity check failed (1)" let i_length = if fst i = i_switch then 5 else 1 - origWhere := !origWhere + i_length; + origWhere := !origWhere + i_length let origEndOfInstr = origStartOfInstr + i_length + 4 * tgs.Length let newEndOfInstrIfSmall = !newWhere + i_length + 1 @@ -2005,7 +2004,7 @@ module Codebuf = begin // Use the original offsets to compute if the branch is small or large. This is // a safe approximation because code only gets smaller. if not (origAvailBrFixups.ContainsKey tg) then - dprintn ("branch target " + formatCodeLabel tg + " not found in code"); + dprintn ("branch target " + formatCodeLabel tg + " not found in code") let origDest = if origAvailBrFixups.ContainsKey tg then origAvailBrFixups.[tg] else 666666 @@ -2013,33 +2012,33 @@ module Codebuf = begin -128 <= origRelOffset && origRelOffset <= 127 end -> - newCode.EmitIntAsByte i_short; + newCode.EmitIntAsByte i_short true | (i_long,_),_ -> - newCode.EmitIntAsByte i_long; + newCode.EmitIntAsByte i_long (if i_long = i_switch then - newCode.EmitInt32 tgs.Length); + newCode.EmitInt32 tgs.Length) false - newWhere := !newWhere + i_length; - if !newWhere <> newCode.Position then dprintn "mismatch between newWhere and newCode"; + newWhere := !newWhere + i_length + if !newWhere <> newCode.Position then dprintn "mismatch between newWhere and newCode" tgs |> List.iter (fun tg -> let origFixupLoc = !origWhere - checkFixup32 origCode origFixupLoc 0xdeadbbbb; + checkFixup32 origCode origFixupLoc 0xdeadbbbb if short then - newReqdBrFixups := (!newWhere, newEndOfInstrIfSmall, tg, true) :: !newReqdBrFixups; - newCode.EmitIntAsByte 0x98; (* sanity check *) - newWhere := !newWhere + 1; + newReqdBrFixups := (!newWhere, newEndOfInstrIfSmall, tg, true) :: !newReqdBrFixups + newCode.EmitIntAsByte 0x98 (* sanity check *) + newWhere := !newWhere + 1 else - newReqdBrFixups := (!newWhere, newEndOfInstrIfBig, tg, false) :: !newReqdBrFixups; - newCode.EmitInt32 0xf00dd00f; (* sanity check *) - newWhere := !newWhere + 4; - if !newWhere <> newCode.Position then dprintn "mismatch between newWhere and newCode"; - origWhere := !origWhere + 4); + newReqdBrFixups := (!newWhere, newEndOfInstrIfBig, tg, false) :: !newReqdBrFixups + newCode.EmitInt32 0xf00dd00f (* sanity check *) + newWhere := !newWhere + 4 + if !newWhere <> newCode.Position then dprintn "mismatch between newWhere and newCode" + origWhere := !origWhere + 4) - if !origWhere <> origEndOfInstr then dprintn "mismatch between origWhere and origEndOfInstr"; + if !origWhere <> origEndOfInstr then dprintn "mismatch between origWhere and origEndOfInstr" let adjuster = let arr = Array.ofList (List.rev !adjustments) @@ -2074,25 +2073,25 @@ module Codebuf = begin let newScopes = let rec remap scope = - {scope with StartOffset = adjuster scope.StartOffset; - EndOffset = adjuster scope.EndOffset; + {scope with StartOffset = adjuster scope.StartOffset + EndOffset = adjuster scope.EndOffset Children = Array.map remap scope.Children } List.map remap origScopes // Now apply the adjusted fixups in the new code newReqdBrFixups |> List.iter (fun (newFixupLoc,endOfInstr,tg, small) -> if not (newAvailBrFixups.ContainsKey tg) then - failwith ("target "+formatCodeLabel tg+" not found in new fixups"); + failwith ("target "+formatCodeLabel tg+" not found in new fixups") try let n = newAvailBrFixups.[tg] let relOffset = (n - endOfInstr) if small then - if Bytes.get newCode newFixupLoc <> 0x98 then failwith "br fixupsanity check failed"; - newCode.[newFixupLoc] <- b0 relOffset; + if Bytes.get newCode newFixupLoc <> 0x98 then failwith "br fixupsanity check failed" + newCode.[newFixupLoc] <- b0 relOffset else - checkFixup32 newCode newFixupLoc 0xf00dd00fl; + checkFixup32 newCode newFixupLoc 0xf00dd00fl applyFixup32 newCode newFixupLoc relOffset - with :? KeyNotFoundException -> ()); + with :? KeyNotFoundException -> ()) newCode, newReqdStringFixups, newExnClauses, newSeqPoints, newScopes @@ -2129,44 +2128,44 @@ module Codebuf = begin /// Emit the code for an instruction let emitInstrCode (codebuf: CodeBuffer) i = if i > 0xFF then - assert (i >>> 8 = 0xFE); - codebuf.EmitByte ((i >>> 8) &&& 0xFF); - codebuf.EmitByte (i &&& 0xFF); + assert (i >>> 8 = 0xFE) + codebuf.EmitByte ((i >>> 8) &&& 0xFF) + codebuf.EmitByte (i &&& 0xFF) else codebuf.EmitByte i let emitTypeInstr cenv codebuf env i ty = - emitInstrCode codebuf i; + emitInstrCode codebuf i codebuf.EmitUncodedToken (getTypeDefOrRefAsUncodedToken (GetTypeAsTypeDefOrRef cenv env ty)) let emitMethodSpecInfoInstr cenv codebuf env i mspecinfo = - emitInstrCode codebuf i; + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetMethodSpecInfoAsUncodedToken cenv env mspecinfo) let emitMethodSpecInstr cenv codebuf env i mspec = - emitInstrCode codebuf i; + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetMethodSpecAsUncodedToken cenv env mspec) let emitFieldSpecInstr cenv codebuf env i fspec = - emitInstrCode codebuf i; + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetFieldDefOrRefAsUncodedToken (GetFieldSpecAsFieldDefOrRef cenv env fspec)) let emitShortUInt16Instr codebuf (i_short,i) x = let n = int32 x if n <= 255 then - emitInstrCode codebuf i_short; - codebuf.EmitByte n; + emitInstrCode codebuf i_short + codebuf.EmitByte n else - emitInstrCode codebuf i; - codebuf.EmitUInt16 x; + emitInstrCode codebuf i + codebuf.EmitUInt16 x let emitShortInt32Instr codebuf (i_short,i) x = if x >= (-128) && x <= 127 then - emitInstrCode codebuf i_short; - codebuf.EmitByte (if x < 0x0 then x + 256 else x); + emitInstrCode codebuf i_short + codebuf.EmitByte (if x < 0x0 then x + 256 else x) else - emitInstrCode codebuf i; - codebuf.EmitInt32 x; + emitInstrCode codebuf i + codebuf.EmitInt32 x let emitTailness (cenv: cenv) codebuf tl = if tl = Tailcall && cenv.emitTailcalls then emitInstrCode codebuf i_tail @@ -2178,7 +2177,7 @@ module Codebuf = begin if tl = Volatile then emitInstrCode codebuf i_volatile let emitConstrained cenv codebuf env ty = - emitInstrCode codebuf i_constrained; + emitInstrCode codebuf i_constrained codebuf.EmitUncodedToken (getTypeDefOrRefAsUncodedToken (GetTypeAsTypeDefOrRef cenv env ty)) let emitAlignment codebuf tl = @@ -2198,17 +2197,17 @@ module Codebuf = begin | I_seqpoint s -> codebuf.EmitSeqPoint cenv s | I_leave tg -> codebuf.RecordReqdBrFixup (i_leave,Some i_leave_s) tg | I_call (tl,mspec,varargs) -> - emitTailness cenv codebuf tl; - emitMethodSpecInstr cenv codebuf env i_call (mspec,varargs); + emitTailness cenv codebuf tl + emitMethodSpecInstr cenv codebuf env i_call (mspec,varargs) emitAfterTailcall codebuf tl | I_callvirt (tl,mspec,varargs) -> - emitTailness cenv codebuf tl; - emitMethodSpecInstr cenv codebuf env i_callvirt (mspec,varargs); + emitTailness cenv codebuf tl + emitMethodSpecInstr cenv codebuf env i_callvirt (mspec,varargs) emitAfterTailcall codebuf tl | I_callconstraint (tl,ty,mspec,varargs) -> - emitTailness cenv codebuf tl; - emitConstrained cenv codebuf env ty; - emitMethodSpecInstr cenv codebuf env i_callvirt (mspec,varargs); + emitTailness cenv codebuf tl + emitConstrained cenv codebuf env ty + emitMethodSpecInstr cenv codebuf env i_callvirt (mspec,varargs) emitAfterTailcall codebuf tl | I_newobj (mspec,varargs) -> emitMethodSpecInstr cenv codebuf env i_newobj (mspec,varargs) @@ -2218,9 +2217,9 @@ module Codebuf = begin emitMethodSpecInstr cenv codebuf env i_ldvirtftn (mspec,None) | I_calli (tl,callsig,varargs) -> - emitTailness cenv codebuf tl; - emitInstrCode codebuf i_calli; - codebuf.EmitUncodedToken (getUncodedToken TableNames.StandAloneSig (GetCallsigAsStandAloneSigIdx cenv env (callsig,varargs))); + emitTailness cenv codebuf tl + emitInstrCode codebuf i_calli + codebuf.EmitUncodedToken (getUncodedToken TableNames.StandAloneSig (GetCallsigAsStandAloneSigIdx cenv env (callsig,varargs))) emitAfterTailcall codebuf tl | I_ldarg u16 -> emitShortUInt16Instr codebuf (i_ldarg_s,i_ldarg) u16 @@ -2231,29 +2230,29 @@ module Codebuf = begin | I_ldloca u16 -> emitShortUInt16Instr codebuf (i_ldloca_s,i_ldloca) u16 | I_cpblk (al,vol) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitInstrCode codebuf i_cpblk | I_initblk (al,vol) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitInstrCode codebuf i_initblk | (AI_ldc (DT_I4, ILConst.I4 x)) -> emitShortInt32Instr codebuf (i_ldc_i4_s,i_ldc_i4) x | (AI_ldc (DT_I8, ILConst.I8 x)) -> - emitInstrCode codebuf i_ldc_i8; - codebuf.EmitInt64 x; + emitInstrCode codebuf i_ldc_i8 + codebuf.EmitInt64 x | (AI_ldc (_, ILConst.R4 x)) -> - emitInstrCode codebuf i_ldc_r4; + emitInstrCode codebuf i_ldc_r4 codebuf.EmitInt32 (bitsOfSingle x) | (AI_ldc (_, ILConst.R8 x)) -> - emitInstrCode codebuf i_ldc_r8; + emitInstrCode codebuf i_ldc_r8 codebuf.EmitInt64 (bitsOfDouble x) | I_ldind (al,vol,dt) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitInstrCode codebuf (match dt with | DT_I -> i_ldind_i @@ -2299,8 +2298,8 @@ module Codebuf = begin | _ -> failwith "ldelem") | I_stind (al,vol,dt) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitInstrCode codebuf (match dt with | DT_U | DT_I -> i_stind_i @@ -2316,26 +2315,26 @@ module Codebuf = begin | I_switch (labs,_) -> codebuf.RecordReqdBrFixups (i_switch,None) labs | I_ldfld (al,vol,fspec) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_ldfld fspec | I_ldflda fspec -> emitFieldSpecInstr cenv codebuf env i_ldflda fspec | I_ldsfld (vol,fspec) -> - emitVolatility codebuf vol; + emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_ldsfld fspec | I_ldsflda fspec -> emitFieldSpecInstr cenv codebuf env i_ldsflda fspec | I_stfld (al,vol,fspec) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_stfld fspec | I_stsfld (vol,fspec) -> - emitVolatility codebuf vol; + emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_stsfld fspec | I_ldtoken tok -> - emitInstrCode codebuf i_ldtoken; + emitInstrCode codebuf i_ldtoken codebuf.EmitUncodedToken (match tok with | ILToken.ILType typ -> @@ -2355,7 +2354,7 @@ module Codebuf = begin | (true,idx) -> getUncodedToken TableNames.Field idx | (false,idx) -> getUncodedToken TableNames.MemberRef idx) | I_ldstr s -> - emitInstrCode codebuf i_ldstr; + emitInstrCode codebuf i_ldstr codebuf.RecordReqdStringFixup (GetUserStringHeapIdx cenv s) | I_box ty -> emitTypeInstr cenv codebuf env i_box ty @@ -2385,7 +2384,7 @@ module Codebuf = begin | I_ldelema (ro,_isNativePtr,shape,ty) -> if (ro = ReadonlyAddress) then - emitInstrCode codebuf i_readonly; + emitInstrCode codebuf i_readonly if (shape = ILArrayShape.SingleDimensional) then emitTypeInstr cenv codebuf env i_ldelema ty else @@ -2398,17 +2397,17 @@ module Codebuf = begin | I_mkrefany ty -> emitTypeInstr cenv codebuf env i_mkrefany ty | I_initobj ty -> emitTypeInstr cenv codebuf env i_initobj ty | I_ldobj (al,vol,ty) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitTypeInstr cenv codebuf env i_ldobj ty | I_stobj (al,vol,ty) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitTypeInstr cenv codebuf env i_stobj ty | I_cpobj ty -> emitTypeInstr cenv codebuf env i_cpobj ty | I_sizeof ty -> emitTypeInstr cenv codebuf env i_sizeof ty | EI_ldlen_multi (_,m) -> - emitShortInt32Instr codebuf (i_ldc_i4_s,i_ldc_i4) m; + emitShortInt32Instr codebuf (i_ldc_i4_s,i_ldc_i4) m emitInstr cenv codebuf env (mkNormalCall(mkILNonGenericMethSpecInTy(cenv.ilg.typ_Array, ILCallingConv.Instance, "GetLength", [(cenv.ilg.typ_int32)], (cenv.ilg.typ_int32)))) | _ -> failwith "an IL instruction cannot be emitted" @@ -2417,31 +2416,31 @@ module Codebuf = begin let mkScopeNode cenv (localSigs: _[]) (a,b,ls,ch) = if (isNil ls || not cenv.generatePdb) then ch else - [ { Children= Array.ofList ch; - StartOffset=a; - EndOffset=b; + [ { Children= Array.ofList ch + StartOffset=a + EndOffset=b Locals= Array.ofList (List.map - (fun x -> { Name=x.LocalName; - Signature= (try localSigs.[x.LocalIndex] with _ -> failwith ("local variable index "+string x.LocalIndex+"in debug info does not reference a valid local")); + (fun x -> { Name=x.LocalName + Signature= (try localSigs.[x.LocalIndex] with _ -> failwith ("local variable index "+string x.LocalIndex+"in debug info does not reference a valid local")) Index= x.LocalIndex } ) (List.filter (fun v -> v.LocalName <> "") ls)) } ] let rec emitCode cenv localSigs codebuf env (susp,code) = match code with | TryBlock (c,seh) -> - commitSusp codebuf susp (uniqueEntryOfCode c); + commitSusp codebuf susp (uniqueEntryOfCode c) let tryStart = codebuf.code.Position let susp,child1,scope1 = emitCode cenv localSigs codebuf env (None,c) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let tryFinish = codebuf.code.Position let exnBranches = match seh with | FaultBlock flt -> let handlerStart = codebuf.code.Position let susp,child2,scope2 = emitCode cenv localSigs codebuf env (None,flt) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let handlerFinish = codebuf.code.Position [ Some (tryStart,(tryFinish - tryStart), handlerStart,(handlerFinish - handlerStart), @@ -2451,7 +2450,7 @@ module Codebuf = begin | FinallyBlock flt -> let handlerStart = codebuf.code.Position let susp,child2,scope2 = emitCode cenv localSigs codebuf env (None,flt) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let handlerFinish = codebuf.code.Position [ Some (tryStart,(tryFinish - tryStart), handlerStart,(handlerFinish - handlerStart), @@ -2464,7 +2463,7 @@ module Codebuf = begin | TypeFilter typ -> let handlerStart = codebuf.code.Position let susp,child2,scope2 = emitCode cenv localSigs codebuf env (None,ctch) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let handlerFinish = codebuf.code.Position Some (tryStart,(tryFinish - tryStart), handlerStart,(handlerFinish - handlerStart), @@ -2474,10 +2473,10 @@ module Codebuf = begin let filterStart = codebuf.code.Position let susp,child2,scope2 = emitCode cenv localSigs codebuf env (None,fltcode) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let handlerStart = codebuf.code.Position let susp,child3,scope3 = emitCode cenv localSigs codebuf env (None,ctch) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let handlerFinish = codebuf.code.Position Some (tryStart, @@ -2506,8 +2505,8 @@ module Codebuf = begin let childScopes = ref [] // Push the results of collecting one sub-block into the reference cells let collect (susp,seh,scopes) = - newSusp := susp; - childSEH := seh :: !childSEH; + newSusp := susp + childSEH := seh :: !childSEH childScopes := scopes :: !childScopes // Close the collection by generating the (susp,node,scope-node) triple let close () = @@ -2520,12 +2519,12 @@ module Codebuf = begin | [c] -> // emitCodeLinear sequence of nested blocks emitCodeLinear (!newSusp,c) (fun results -> - collect results; + collect results cont (close())) | codes -> // Multiple blocks: leave the linear sequence and process each seperately - codes |> List.iter (fun c -> collect (emitCode cenv localSigs codebuf env (!newSusp,c))); + codes |> List.iter (fun c -> collect (emitCode cenv localSigs codebuf env (!newSusp,c))) cont(close()) | c -> // leave the linear sequence @@ -2536,11 +2535,11 @@ module Codebuf = begin | ILBasicBlock bb -> // Leaf case: one basic block - commitSusp codebuf susp bb.Label; - codebuf.RecordAvailBrFixup bb.Label; + commitSusp codebuf susp bb.Label + codebuf.RecordAvailBrFixup bb.Label let instrs = bb.Instructions for i = 0 to instrs.Length - 1 do - emitInstr cenv codebuf env instrs.[i]; + emitInstr cenv codebuf env instrs.[i] bb.Fallthrough, Tip, [] and brToSusp (codebuf: CodeBuffer) dest = codebuf.RecordReqdBrFixup (i_br,Some i_br_s) dest @@ -2562,7 +2561,7 @@ module Codebuf = begin | Node clauses -> List.iter (emitExceptionHandlerTree2 codebuf) clauses and emitExceptionHandlerTree2 (codebuf: CodeBuffer) (x,childSEH) = - List.iter (emitExceptionHandlerTree codebuf) childSEH; // internal first + List.iter (emitExceptionHandlerTree codebuf) childSEH // internal first match x with | None -> () | Some clause -> codebuf.EmitExceptionClause clause @@ -2571,8 +2570,8 @@ module Codebuf = begin let codebuf = CodeBuffer.Create nm let finalSusp, SEHTree, origScopes = emitCode cenv localSigs codebuf env (Some (uniqueEntryOfCode code),code) - (match finalSusp with Some dest -> brToSusp codebuf dest | _ -> ()); - emitExceptionHandlerTree codebuf SEHTree; + (match finalSusp with Some dest -> brToSusp codebuf dest | _ -> ()) + emitExceptionHandlerTree codebuf SEHTree let origCode = codebuf.code.Close() let origExnClauses = List.rev codebuf.seh let origReqdStringFixups = codebuf.reqdStringFixupsInMethod @@ -2584,10 +2583,10 @@ module Codebuf = begin applyBrFixups origCode origExnClauses origReqdStringFixups origAvailBrFixups origReqdBrFixups origSeqPoints origScopes let rootScope = - { Children= Array.ofList newScopes; - StartOffset=0; - EndOffset=newCode.Length; - Locals=[| |]; } + { Children= Array.ofList newScopes + StartOffset=0 + EndOffset=newCode.Length + Locals=[| |] } (newReqdStringFixups,newExnClauses, newCode, newSeqPoints, rootScope) @@ -2597,7 +2596,7 @@ end // ILMethodBody --> bytes // -------------------------------------------------------------------- let GetFieldDefTypeAsBlobIdx cenv env ty = - let bytes = emitBytesViaBuffer (fun bb -> bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD; + let bytes = emitBytesViaBuffer (fun bb -> bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD EmitType cenv env bb ty) GetBytesAsBlobIdx cenv bytes @@ -2606,7 +2605,7 @@ let GenILMethodBody mname cenv env (il: ILMethodBody) = if cenv.generatePdb then il.Locals |> ILList.toArray |> Array.map (fun l -> // Write a fake entry for the local signature headed by e_IMAGE_CEE_CS_CALLCONV_FIELD. This is referenced by the PDB file - ignore (FindOrAddRow cenv TableNames.StandAloneSig (SimpleSharedRow [| Blob (GetFieldDefTypeAsBlobIdx cenv env l.Type) |])); + ignore (FindOrAddRow cenv TableNames.StandAloneSig (SimpleSharedRow [| Blob (GetFieldDefTypeAsBlobIdx cenv env l.Type) |])) // Now write the type GetTypeAsBytes cenv env l.Type) else @@ -2621,9 +2620,9 @@ let GenILMethodBody mname cenv env (il: ILMethodBody) = let alignedCodeSize = align 4 (codeSize + 1) let codePadding = (alignedCodeSize - (codeSize + 1)) let requiredStringFixups' = (1,requiredStringFixups) - methbuf.EmitByte (byte codeSize <<< 2 ||| e_CorILMethod_TinyFormat); - methbuf.EmitBytes code; - methbuf.EmitPadding codePadding; + methbuf.EmitByte (byte codeSize <<< 2 ||| e_CorILMethod_TinyFormat) + methbuf.EmitBytes code + methbuf.EmitPadding codePadding (requiredStringFixups', methbuf.Close()), seqpoints, scopes else // Use Fat format @@ -2640,13 +2639,13 @@ let GenILMethodBody mname cenv env (il: ILMethodBody) = let alignedCodeSize = align 0x4 codeSize let codePadding = (alignedCodeSize - codeSize) - methbuf.EmitByte flags; - methbuf.EmitByte 0x30uy; // last four bits record size of fat header in 4 byte chunks - this is always 12 bytes = 3 four word chunks - methbuf.EmitUInt16 (uint16 il.MaxStack); - methbuf.EmitInt32 codeSize; - methbuf.EmitInt32 localToken; - methbuf.EmitBytes code; - methbuf.EmitPadding codePadding; + methbuf.EmitByte flags + methbuf.EmitByte 0x30uy // last four bits record size of fat header in 4 byte chunks - this is always 12 bytes = 3 four word chunks + methbuf.EmitUInt16 (uint16 il.MaxStack) + methbuf.EmitInt32 codeSize + methbuf.EmitInt32 localToken + methbuf.EmitBytes code + methbuf.EmitPadding codePadding if nonNil seh then // Can we use the small exception handling table format? @@ -2669,31 +2668,31 @@ let GenILMethodBody mname cenv env (il: ILMethodBody) = | TypeFilterClause uncoded -> uncoded if canUseSmall then - methbuf.EmitByte e_CorILMethod_Sect_EHTable; - methbuf.EmitByte (b0 smallSize); - methbuf.EmitByte 0x00uy; - methbuf.EmitByte 0x00uy; + methbuf.EmitByte e_CorILMethod_Sect_EHTable + methbuf.EmitByte (b0 smallSize) + methbuf.EmitByte 0x00uy + methbuf.EmitByte 0x00uy seh |> List.iter (fun (st1,sz1,st2,sz2,kind) -> let k32 = kindAsInt32 kind - methbuf.EmitInt32AsUInt16 k32; - methbuf.EmitInt32AsUInt16 st1; - methbuf.EmitByte (b0 sz1); - methbuf.EmitInt32AsUInt16 st2; - methbuf.EmitByte (b0 sz2); + methbuf.EmitInt32AsUInt16 k32 + methbuf.EmitInt32AsUInt16 st1 + methbuf.EmitByte (b0 sz1) + methbuf.EmitInt32AsUInt16 st2 + methbuf.EmitByte (b0 sz2) methbuf.EmitInt32 (kindAsExtraInt32 kind)) else let bigSize = (seh.Length * 24 + 4) - methbuf.EmitByte (e_CorILMethod_Sect_EHTable ||| e_CorILMethod_Sect_FatFormat); - methbuf.EmitByte (b0 bigSize); - methbuf.EmitByte (b1 bigSize); - methbuf.EmitByte (b2 bigSize); + methbuf.EmitByte (e_CorILMethod_Sect_EHTable ||| e_CorILMethod_Sect_FatFormat) + methbuf.EmitByte (b0 bigSize) + methbuf.EmitByte (b1 bigSize) + methbuf.EmitByte (b2 bigSize) seh |> List.iter (fun (st1,sz1,st2,sz2,kind) -> let k32 = kindAsInt32 kind - methbuf.EmitInt32 k32; - methbuf.EmitInt32 st1; - methbuf.EmitInt32 sz1; - methbuf.EmitInt32 st2; - methbuf.EmitInt32 sz2; + methbuf.EmitInt32 k32 + methbuf.EmitInt32 st1 + methbuf.EmitInt32 sz1 + methbuf.EmitInt32 st2 + methbuf.EmitInt32 sz2 methbuf.EmitInt32 (kindAsExtraInt32 kind)) let requiredStringFixups' = (12,requiredStringFixups) @@ -2717,21 +2716,21 @@ let rec GetFieldDefAsFieldDefRow cenv env (fd: ILFieldDef) = (if (fd.Marshal <> None) then 0x1000 else 0x0) ||| (if (fd.Data <> None) then 0x0100 else 0x0) UnsharedRow - [| UShort (uint16 flags); - StringE (GetStringHeapIdx cenv fd.Name); - Blob (GetFieldDefSigAsBlobIdx cenv env fd ); |] + [| UShort (uint16 flags) + StringE (GetStringHeapIdx cenv fd.Name) + Blob (GetFieldDefSigAsBlobIdx cenv env fd ) |] and GetFieldDefSigAsBlobIdx cenv env fd = GetFieldDefTypeAsBlobIdx cenv env fd.Type and GenFieldDefPass3 cenv env fd = let fidx = AddUnsharedRow cenv TableNames.Field (GetFieldDefAsFieldDefRow cenv env fd) - GenCustomAttrsPass3Or4 cenv (hca_FieldDef,fidx) fd.CustomAttrs; + GenCustomAttrsPass3Or4 cenv (hca_FieldDef,fidx) fd.CustomAttrs // Write FieldRVA table - fixups into data section done later match fd.Data with | None -> () | Some b -> let offs = cenv.data.Position - cenv.data.EmitBytes b; + cenv.data.EmitBytes b AddUnsharedRow cenv TableNames.FieldRVA (UnsharedRow [| Data (offs, false); SimpleIndex (TableNames.Field,fidx) |]) |> ignore // Write FieldMarshal table @@ -2739,7 +2738,7 @@ and GenFieldDefPass3 cenv env fd = | None -> () | Some ntyp -> AddUnsharedRow cenv TableNames.FieldMarshal - (UnsharedRow [| HasFieldMarshal (hfm_FieldDef, fidx); + (UnsharedRow [| HasFieldMarshal (hfm_FieldDef, fidx) Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore // Write Contant table match fd.LiteralValue with @@ -2747,16 +2746,15 @@ and GenFieldDefPass3 cenv env fd = | Some i -> AddUnsharedRow cenv TableNames.Constant (UnsharedRow - [| GetFieldInitFlags i; - HasConstant (hc_FieldDef, fidx); + [| GetFieldInitFlags i + HasConstant (hc_FieldDef, fidx) Blob (GetFieldInitAsBlobIdx cenv i) |]) |> ignore // Write FieldLayout table match fd.Offset with | None -> () | Some offset -> AddUnsharedRow cenv TableNames.FieldLayout - (UnsharedRow [| ULong offset; - SimpleIndex (TableNames.Field, fidx) |]) |> ignore + (UnsharedRow [| ULong offset; SimpleIndex (TableNames.Field, fidx) |]) |> ignore // -------------------------------------------------------------------- @@ -2776,22 +2774,22 @@ let rec GetGenericParamAsGenericParamRow cenv _env idx owner gp = let mdVersionMajor,_ = metadataSchemaVersionSupportedByCLRVersion cenv.desiredMetadataVersion if (mdVersionMajor = 1) then SimpleSharedRow - [| UShort (uint16 idx); - UShort (uint16 flags); - TypeOrMethodDef (fst owner, snd owner); - StringE (GetStringHeapIdx cenv gp.Name); - TypeDefOrRefOrSpec (tdor_TypeDef, 0); (* empty kind field in deprecated metadata *) |] + [| UShort (uint16 idx) + UShort (uint16 flags) + TypeOrMethodDef (fst owner, snd owner) + StringE (GetStringHeapIdx cenv gp.Name) + TypeDefOrRefOrSpec (tdor_TypeDef, 0) (* empty kind field in deprecated metadata *) |] else SimpleSharedRow - [| UShort (uint16 idx); - UShort (uint16 flags); - TypeOrMethodDef (fst owner, snd owner); + [| UShort (uint16 idx) + UShort (uint16 flags) + TypeOrMethodDef (fst owner, snd owner) StringE (GetStringHeapIdx cenv gp.Name) |] and GenTypeAsGenericParamConstraintRow cenv env gpidx ty = let tdorTag,tdorRow = GetTypeAsTypeDefOrRef cenv env ty UnsharedRow - [| SimpleIndex (TableNames.GenericParam, gpidx); + [| SimpleIndex (TableNames.GenericParam, gpidx) TypeDefOrRefOrSpec (tdorTag,tdorRow) |] and GenGenericParamConstraintPass4 cenv env gpidx ty = @@ -2822,8 +2820,8 @@ let rec GetParamAsParamRow cenv _env seq param = (if param.Marshal <> None then 0x2000 else 0x0000) UnsharedRow - [| UShort (uint16 flags); - UShort (uint16 seq); + [| UShort (uint16 flags) + UShort (uint16 seq) StringE (GetStringHeapIdxOption cenv param.Name) |] and GenParamPass3 cenv env seq param = @@ -2831,32 +2829,31 @@ and GenParamPass3 cenv env seq param = then () else let pidx = AddUnsharedRow cenv TableNames.Param (GetParamAsParamRow cenv env seq param) - GenCustomAttrsPass3Or4 cenv (hca_ParamDef,pidx) param.CustomAttrs; + GenCustomAttrsPass3Or4 cenv (hca_ParamDef,pidx) param.CustomAttrs // Write FieldRVA table - fixups into data section done later match param.Marshal with | None -> () | Some ntyp -> AddUnsharedRow cenv TableNames.FieldMarshal - (UnsharedRow [| HasFieldMarshal (hfm_ParamDef, pidx); - Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore + (UnsharedRow [| HasFieldMarshal (hfm_ParamDef, pidx); Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore let GenReturnAsParamRow (returnv : ILReturn) = let flags = (if returnv.Marshal <> None then 0x2000 else 0x0000) UnsharedRow - [| UShort (uint16 flags); - UShort 0us; (* sequence num. *) + [| UShort (uint16 flags) + UShort 0us (* sequence num. *) StringE 0 |] let GenReturnPass3 cenv (returnv: ILReturn) = if isSome returnv.Marshal || nonNil returnv.CustomAttrs.AsList then let pidx = AddUnsharedRow cenv TableNames.Param (GenReturnAsParamRow returnv) - GenCustomAttrsPass3Or4 cenv (hca_ParamDef,pidx) returnv.CustomAttrs; + GenCustomAttrsPass3Or4 cenv (hca_ParamDef,pidx) returnv.CustomAttrs match returnv.Marshal with | None -> () | Some ntyp -> AddUnsharedRow cenv TableNames.FieldMarshal (UnsharedRow - [| HasFieldMarshal (hfm_ParamDef, pidx); + [| HasFieldMarshal (hfm_ParamDef, pidx) Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore // -------------------------------------------------------------------- @@ -2865,10 +2862,10 @@ let GenReturnPass3 cenv (returnv: ILReturn) = let GetMethodDefSigAsBytes cenv env (mdef: ILMethodDef) = emitBytesViaBuffer (fun bb -> - bb.EmitByte (callconvToByte mdef.GenericParams.Length mdef.CallingConv); - if mdef.GenericParams.Length > 0 then bb.EmitZ32 mdef.GenericParams.Length; - bb.EmitZ32 mdef.Parameters.Length; - EmitType cenv env bb mdef.Return.Type; + bb.EmitByte (callconvToByte mdef.GenericParams.Length mdef.CallingConv) + if mdef.GenericParams.Length > 0 then bb.EmitZ32 mdef.GenericParams.Length + bb.EmitZ32 mdef.Parameters.Length + EmitType cenv env bb mdef.Return.Type mdef.ParameterTypes |> ILList.iter (EmitType cenv env bb)) let GenMethodDefSigAsBlobIdx cenv env mdef = @@ -2910,7 +2907,7 @@ let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = if md.IsEntryPoint then if cenv.entrypoint <> None then failwith "duplicate entrypoint" - else cenv.entrypoint <- Some (true, midx); + else cenv.entrypoint <- Some (true, midx) let codeAddr = (match md.mdBody.Contents with | MethodBody.IL ilmbody -> @@ -2920,37 +2917,37 @@ let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = // Now record the PDB record for this method - we write this out later. if cenv.generatePdb then cenv.pdbinfo.Add - { MethToken=getUncodedToken TableNames.Method midx; - MethName=md.Name; - Params= [| |]; (* REVIEW *) - RootScope = rootScope; + { MethToken=getUncodedToken TableNames.Method midx + MethName=md.Name + Params= [| |] (* REVIEW *) + RootScope = rootScope Range= match ilmbody.SourceMarker with | Some m when cenv.generatePdb -> // table indexes are 1-based, document array indexes are 0-based let doc = (cenv.documents.FindOrAddSharedEntry m.Document) - 1 - Some ({ Document=doc; - Line=m.Line; - Column=m.Column; }, - { Document=doc; - Line=m.EndLine; - Column=m.EndColumn; }) + Some ({ Document=doc + Line=m.Line + Column=m.Column }, + { Document=doc + Line=m.EndLine + Column=m.EndColumn }) | _ -> None - SequencePoints=seqpoints; }; + SequencePoints=seqpoints } - cenv.AddCode code; + cenv.AddCode code addr | MethodBody.Native -> - failwith "cannot write body of native method - Abstract IL cannot roundtrip mixed native/managed binaries"; + failwith "cannot write body of native method - Abstract IL cannot roundtrip mixed native/managed binaries" | _ -> 0x0000) UnsharedRow - [| ULong codeAddr ; - UShort (uint16 implflags); - UShort (uint16 flags); - StringE (GetStringHeapIdx cenv md.Name); - Blob (GenMethodDefSigAsBlobIdx cenv env md); + [| ULong codeAddr + UShort (uint16 implflags) + UShort (uint16 flags) + StringE (GetStringHeapIdx cenv md.Name) + Blob (GenMethodDefSigAsBlobIdx cenv env md) SimpleIndex(TableNames.Param,cenv.GetTable(TableNames.Param).Count + 1) |] let GenMethodImplPass3 cenv env _tgparams tidx mimpl = @@ -2958,19 +2955,19 @@ let GenMethodImplPass3 cenv env _tgparams tidx mimpl = let midx2Tag, midx2Row = GetOverridesSpecAsMethodDefOrRef cenv env mimpl.Overrides AddUnsharedRow cenv TableNames.MethodImpl (UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx); - MethodDefOrRef (midxTag, midxRow); + [| SimpleIndex (TableNames.TypeDef, tidx) + MethodDefOrRef (midxTag, midxRow) MethodDefOrRef (midx2Tag, midx2Row) |]) |> ignore let GenMethodDefPass3 cenv env (md:ILMethodDef) = let midx = GetMethodDefIdx cenv md let idx2 = AddUnsharedRow cenv TableNames.Method (GenMethodDefAsRow cenv env midx md) - if midx <> idx2 then failwith "index of method def on pass 3 does not match index on pass 2"; - GenReturnPass3 cenv md.Return; - md.Parameters |> ILList.iteri (fun n param -> GenParamPass3 cenv env (n+1) param) ; - md.CustomAttrs |> GenCustomAttrsPass3Or4 cenv (hca_MethodDef,midx) ; - md.SecurityDecls.AsList |> GenSecurityDeclsPass3 cenv (hds_MethodDef,midx); - md.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_MethodDef, midx) gp) ; + if midx <> idx2 then failwith "index of method def on pass 3 does not match index on pass 2" + GenReturnPass3 cenv md.Return + md.Parameters |> ILList.iteri (fun n param -> GenParamPass3 cenv env (n+1) param) + md.CustomAttrs |> GenCustomAttrsPass3Or4 cenv (hca_MethodDef,midx) + md.SecurityDecls.AsList |> GenSecurityDeclsPass3 cenv (hds_MethodDef,midx) + md.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_MethodDef, midx) gp) match md.mdBody.Contents with | MethodBody.PInvoke attr -> let flags = @@ -3002,10 +2999,10 @@ let GenMethodDefPass3 cenv env (md:ILMethodDef) = (if attr.LastError then 0x0040 else 0x0000) AddUnsharedRow cenv TableNames.ImplMap (UnsharedRow - [| UShort (uint16 flags); - MemberForwarded (mf_MethodDef,midx); - StringE (GetStringHeapIdx cenv attr.Name); - SimpleIndex (TableNames.ModuleRef, GetModuleRefAsIdx cenv attr.Where); |]) |> ignore + [| UShort (uint16 flags) + MemberForwarded (mf_MethodDef,midx) + StringE (GetStringHeapIdx cenv attr.Name) + SimpleIndex (TableNames.ModuleRef, GetModuleRefAsIdx cenv attr.Where) |]) |> ignore | _ -> () let GenMethodDefPass4 cenv env md = @@ -3017,8 +3014,8 @@ let GenPropertyMethodSemanticsPass3 cenv pidx kind mref = let midx = try GetMethodRefAsMethodDefIdx cenv mref with MethodDefNotFound -> 1 AddUnsharedRow cenv TableNames.MethodSemantics (UnsharedRow - [| UShort (uint16 kind); - SimpleIndex (TableNames.Method,midx); + [| UShort (uint16 kind) + SimpleIndex (TableNames.Method,midx) HasSemantics (hs_Property, pidx) |]) |> ignore let rec GetPropertySigAsBlobIdx cenv env prop = @@ -3027,9 +3024,9 @@ let rec GetPropertySigAsBlobIdx cenv env prop = and GetPropertySigAsBytes cenv env prop = emitBytesViaBuffer (fun bb -> let b = ((hasthisToByte prop.CallingConv) ||| e_IMAGE_CEE_CS_CALLCONV_PROPERTY) - bb.EmitByte b; - bb.EmitZ32 prop.Args.Length; - EmitType cenv env bb prop.Type; + bb.EmitByte b + bb.EmitZ32 prop.Args.Length + EmitType cenv env bb prop.Type prop.Args |> ILList.iter (EmitType cenv env bb)) and GetPropertyAsPropertyRow cenv env (prop:ILPropertyDef) = @@ -3038,23 +3035,23 @@ and GetPropertyAsPropertyRow cenv env (prop:ILPropertyDef) = (if prop.IsRTSpecialName then 0x0400 else 0x0) ||| (if prop.Init <> None then 0x1000 else 0x0) UnsharedRow - [| UShort (uint16 flags); - StringE (GetStringHeapIdx cenv prop.Name); - Blob (GetPropertySigAsBlobIdx cenv env prop); |] + [| UShort (uint16 flags) + StringE (GetStringHeapIdx cenv prop.Name) + Blob (GetPropertySigAsBlobIdx cenv env prop) |] /// ILPropertyDef --> Property Row + MethodSemantics entries and GenPropertyPass3 cenv env prop = let pidx = AddUnsharedRow cenv TableNames.Property (GetPropertyAsPropertyRow cenv env prop) - prop.SetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0001) ; - prop.GetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0002) ; + prop.SetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0001) + prop.GetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0002) // Write Constant table match prop.Init with | None -> () | Some i -> AddUnsharedRow cenv TableNames.Constant (UnsharedRow - [| GetFieldInitFlags i; - HasConstant (hc_Property, pidx); + [| GetFieldInitFlags i + HasConstant (hc_Property, pidx) Blob (GetFieldInitAsBlobIdx cenv i) |]) |> ignore GenCustomAttrsPass3Or4 cenv (hca_Property,pidx) prop.CustomAttrs @@ -3062,8 +3059,8 @@ let rec GenEventMethodSemanticsPass3 cenv eidx kind mref = let addIdx = try GetMethodRefAsMethodDefIdx cenv mref with MethodDefNotFound -> 1 AddUnsharedRow cenv TableNames.MethodSemantics (UnsharedRow - [| UShort (uint16 kind); - SimpleIndex (TableNames.Method,addIdx); + [| UShort (uint16 kind) + SimpleIndex (TableNames.Method,addIdx) HasSemantics (hs_Event, eidx) |]) |> ignore /// ILEventDef --> Event Row + MethodSemantics entries @@ -3073,8 +3070,8 @@ and GenEventAsEventRow cenv env (md: ILEventDef) = (if md.IsRTSpecialName then 0x0400 else 0x0) let tdorTag, tdorRow = GetTypeOptionAsTypeDefOrRef cenv env md.Type UnsharedRow - [| UShort (uint16 flags); - StringE (GetStringHeapIdx cenv md.Name); + [| UShort (uint16 flags) + StringE (GetStringHeapIdx cenv md.Name) TypeDefOrRefOrSpec (tdorTag,tdorRow) |] and GenEventPass3 cenv env (md: ILEventDef) = @@ -3082,7 +3079,7 @@ and GenEventPass3 cenv env (md: ILEventDef) = md.AddMethod |> GenEventMethodSemanticsPass3 cenv eidx 0x0008 md.RemoveMethod |> GenEventMethodSemanticsPass3 cenv eidx 0x0010 Option.iter (GenEventMethodSemanticsPass3 cenv eidx 0x0020) md.FireMethod - List.iter (GenEventMethodSemanticsPass3 cenv eidx 0x0004) md.OtherMethods; + List.iter (GenEventMethodSemanticsPass3 cenv eidx 0x0004) md.OtherMethods GenCustomAttrsPass3Or4 cenv (hca_Event,eidx) md.CustomAttrs @@ -3101,17 +3098,17 @@ let rec GetResourceAsManifestResourceRow cenv r = let alignedOffset = (align 0x8 offset) let pad = alignedOffset - offset let resourceSize = b.Length - cenv.resources.EmitPadding pad; - cenv.resources.EmitInt32 resourceSize; - cenv.resources.EmitBytes b; + cenv.resources.EmitPadding pad + cenv.resources.EmitInt32 resourceSize + cenv.resources.EmitBytes b Data (alignedOffset,true), (i_File, 0) | ILResourceLocation.File (mref,offset) -> ULong offset, (i_File, GetModuleRefAsFileIdx cenv mref) | ILResourceLocation.Assembly aref -> ULong 0x0, (i_AssemblyRef, GetAssemblyRefAsIdx cenv aref) UnsharedRow - [| data; - ULong (match r.Access with ILResourceAccess.Public -> 0x01 | ILResourceAccess.Private -> 0x02); - StringE (GetStringHeapIdx cenv r.Name); - Implementation (fst impl, snd impl); |] + [| data + ULong (match r.Access with ILResourceAccess.Public -> 0x01 | ILResourceAccess.Private -> 0x02) + StringE (GetStringHeapIdx cenv r.Name) + Implementation (fst impl, snd impl) |] and GenResourcePass3 cenv r = let idx = AddUnsharedRow cenv TableNames.ManifestResource (GetResourceAsManifestResourceRow cenv r) @@ -3125,11 +3122,11 @@ let rec GenTypeDefPass3 enc cenv (td:ILTypeDef) = try let env = envForTypeDef td let tidx = GetIdxForTypeDef cenv (TdKey(enc,td.Name)) - td.Properties.AsList |> List.iter (GenPropertyPass3 cenv env); - td.Events.AsList |> List.iter (GenEventPass3 cenv env); - td.Fields.AsList |> List.iter (GenFieldDefPass3 cenv env); - td.Methods |> Seq.iter (GenMethodDefPass3 cenv env); - td.MethodImpls.AsList |> List.iter (GenMethodImplPass3 cenv env td.GenericParams.Length tidx); + td.Properties.AsList |> List.iter (GenPropertyPass3 cenv env) + td.Events.AsList |> List.iter (GenEventPass3 cenv env) + td.Fields.AsList |> List.iter (GenFieldDefPass3 cenv env) + td.Methods |> Seq.iter (GenMethodDefPass3 cenv env) + td.MethodImpls.AsList |> List.iter (GenMethodImplPass3 cenv env td.GenericParams.Length tidx) // ClassLayout entry if needed match td.Layout with | ILTypeDefLayout.Auto -> () @@ -3137,16 +3134,16 @@ let rec GenTypeDefPass3 enc cenv (td:ILTypeDef) = if isSome layout.Pack || isSome layout.Size then AddUnsharedRow cenv TableNames.ClassLayout (UnsharedRow - [| UShort (match layout.Pack with None -> uint16 0x0 | Some p -> p); - ULong (match layout.Size with None -> 0x0 | Some p -> p); + [| UShort (match layout.Pack with None -> uint16 0x0 | Some p -> p) + ULong (match layout.Size with None -> 0x0 | Some p -> p) SimpleIndex (TableNames.TypeDef, tidx) |]) |> ignore - td.SecurityDecls.AsList |> GenSecurityDeclsPass3 cenv (hds_TypeDef,tidx); - td.CustomAttrs |> GenCustomAttrsPass3Or4 cenv (hca_TypeDef,tidx); - td.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_TypeDef,tidx) gp) ; - td.NestedTypes.AsList |> GenTypeDefsPass3 (enc@[td.Name]) cenv; + td.SecurityDecls.AsList |> GenSecurityDeclsPass3 cenv (hds_TypeDef,tidx) + td.CustomAttrs |> GenCustomAttrsPass3Or4 cenv (hca_TypeDef,tidx) + td.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_TypeDef,tidx) gp) + td.NestedTypes.AsList |> GenTypeDefsPass3 (enc@[td.Name]) cenv with e -> - failwith ("Error in pass3 for type "+td.Name+", error: "+e.Message); + failwith ("Error in pass3 for type "+td.Name+", error: "+e.Message) reraise() raise e @@ -3160,11 +3157,11 @@ let rec GenTypeDefPass4 enc cenv (td:ILTypeDef) = try let env = envForTypeDef td let tidx = GetIdxForTypeDef cenv (TdKey(enc,td.Name)) - td.Methods |> Seq.iter (GenMethodDefPass4 cenv env) ; - List.iteri (fun n gp -> GenGenericParamPass4 cenv env n (tomd_TypeDef,tidx) gp) td.GenericParams; - GenTypeDefsPass4 (enc@[td.Name]) cenv td.NestedTypes.AsList; + td.Methods |> Seq.iter (GenMethodDefPass4 cenv env) + List.iteri (fun n gp -> GenGenericParamPass4 cenv env n (tomd_TypeDef,tidx) gp) td.GenericParams + GenTypeDefsPass4 (enc@[td.Name]) cenv td.NestedTypes.AsList with e -> - failwith ("Error in pass4 for type "+td.Name+", error: "+e.Message); + failwith ("Error in pass4 for type "+td.Name+", error: "+e.Message) reraise() raise e @@ -3180,12 +3177,12 @@ let rec GenNestedExportedTypePass3 cenv cidx (ce: ILNestedExportedType) = let nidx = AddUnsharedRow cenv TableNames.ExportedType (UnsharedRow - [| ULong flags ; - ULong 0x0; - StringE (GetStringHeapIdx cenv ce.Name); - StringE 0; + [| ULong flags + ULong 0x0 + StringE (GetStringHeapIdx cenv ce.Name) + StringE 0 Implementation (i_ExportedType, cidx) |]) - GenCustomAttrsPass3Or4 cenv (hca_ExportedType,nidx) ce.CustomAttrs; + GenCustomAttrsPass3Or4 cenv (hca_ExportedType,nidx) ce.CustomAttrs GenNestedExportedTypesPass3 cenv nidx ce.Nested and GenNestedExportedTypesPass3 cenv nidx (nce: ILNestedExportedTypes) = @@ -3199,16 +3196,16 @@ and GenExportedTypePass3 cenv (ce: ILExportedTypeOrForwarder) = let cidx = AddUnsharedRow cenv TableNames.ExportedType (UnsharedRow - [| ULong flags ; - ULong 0x0; - nelem; - nselem; - Implementation (fst impl, snd impl); |]) - GenCustomAttrsPass3Or4 cenv (hca_ExportedType,cidx) ce.CustomAttrs; + [| ULong flags + ULong 0x0 + nelem + nselem + Implementation (fst impl, snd impl) |]) + GenCustomAttrsPass3Or4 cenv (hca_ExportedType,cidx) ce.CustomAttrs GenNestedExportedTypesPass3 cenv cidx ce.Nested and GenExportedTypesPass3 cenv (ce: ILExportedTypesAndForwarders) = - List.iter (GenExportedTypePass3 cenv) ce.AsList; + List.iter (GenExportedTypePass3 cenv) ce.AsList // -------------------------------------------------------------------- // manifest --> generate Assembly row @@ -3216,11 +3213,11 @@ and GenExportedTypesPass3 cenv (ce: ILExportedTypesAndForwarders) = and GetManifsetAsAssemblyRow cenv m = UnsharedRow - [|ULong m.AuxModuleHashAlgorithm; - UShort (match m.Version with None -> 0us | Some (x,_,_,_) -> x); - UShort (match m.Version with None -> 0us | Some (_,y,_,_) -> y); - UShort (match m.Version with None -> 0us | Some (_,_,z,_) -> z); - UShort (match m.Version with None -> 0us | Some (_,_,_,w) -> w); + [|ULong m.AuxModuleHashAlgorithm + UShort (match m.Version with None -> 0us | Some (x,_,_,_) -> x) + UShort (match m.Version with None -> 0us | Some (_,y,_,_) -> y) + UShort (match m.Version with None -> 0us | Some (_,_,z,_) -> z) + UShort (match m.Version with None -> 0us | Some (_,_,_,w) -> w) ULong ( (match m.AssemblyLongevity with | ILAssemblyLongevity.Unspecified -> 0x0000 @@ -3235,21 +3232,21 @@ and GetManifsetAsAssemblyRow cenv m = (if m.JitTracking then 0x8000 else 0x0) ||| (if m.DisableJitOptimizations then 0x4000 else 0x0) ||| (match m.PublicKey with None -> 0x0000 | Some _ -> 0x0001) ||| - 0x0000); - (match m.PublicKey with None -> Blob 0 | Some x -> Blob (GetBytesAsBlobIdx cenv x)); - StringE (GetStringHeapIdx cenv m.Name); - (match m.Locale with None -> StringE 0 | Some x -> StringE (GetStringHeapIdx cenv x)); |] + 0x0000) + (match m.PublicKey with None -> Blob 0 | Some x -> Blob (GetBytesAsBlobIdx cenv x)) + StringE (GetStringHeapIdx cenv m.Name) + (match m.Locale with None -> StringE 0 | Some x -> StringE (GetStringHeapIdx cenv x)) |] and GenManifestPass3 cenv m = let aidx = AddUnsharedRow cenv TableNames.Assembly (GetManifsetAsAssemblyRow cenv m) - GenSecurityDeclsPass3 cenv (hds_Assembly,aidx) m.SecurityDecls.AsList; - GenCustomAttrsPass3Or4 cenv (hca_Assembly,aidx) m.CustomAttrs; - GenExportedTypesPass3 cenv m.ExportedTypes; + GenSecurityDeclsPass3 cenv (hds_Assembly,aidx) m.SecurityDecls.AsList + GenCustomAttrsPass3Or4 cenv (hca_Assembly,aidx) m.CustomAttrs + GenExportedTypesPass3 cenv m.ExportedTypes // Record the entrypoint decl if needed. match m.EntrypointElsewhere with | Some mref -> if cenv.entrypoint <> None then failwith "duplicate entrypoint" - else cenv.entrypoint <- Some (false, GetModuleRefAsIdx cenv mref); + else cenv.entrypoint <- Some (false, GetModuleRefAsIdx cenv mref) | None -> () and newGuid (modul: ILModuleDef) = @@ -3263,10 +3260,10 @@ and GetModuleAsRow cenv (modul: ILModuleDef) = let modulGuid = newGuid modul cenv.moduleGuid <- modulGuid UnsharedRow - [| UShort (uint16 0x0); - StringE (GetStringHeapIdx cenv modul.Name); - Guid (GetGuidIdx cenv modulGuid); - Guid 0; + [| UShort (uint16 0x0) + StringE (GetStringHeapIdx cenv modul.Name) + Guid (GetGuidIdx cenv modulGuid) + Guid 0 Guid 0 |] @@ -3290,63 +3287,63 @@ let SortTableRows tab (rows:IGenericRow[]) = let GenModule (cenv : cenv) (modul: ILModuleDef) = let midx = AddUnsharedRow cenv TableNames.Module (GetModuleAsRow cenv modul) - List.iter (GenResourcePass3 cenv) modul.Resources.AsList; + List.iter (GenResourcePass3 cenv) modul.Resources.AsList let tds = destTypeDefsWithGlobalFunctionsFirst cenv.ilg modul.TypeDefs - reportTime cenv.showTimes "Module Generation Preparation"; - GenTypeDefsPass1 [] cenv tds; - reportTime cenv.showTimes "Module Generation Pass 1"; - GenTypeDefsPass2 0 [] cenv tds; - reportTime cenv.showTimes "Module Generation Pass 2"; - (match modul.Manifest with None -> () | Some m -> GenManifestPass3 cenv m); - GenTypeDefsPass3 [] cenv tds; - reportTime cenv.showTimes "Module Generation Pass 3"; - GenCustomAttrsPass3Or4 cenv (hca_Module,midx) modul.CustomAttrs; + reportTime cenv.showTimes "Module Generation Preparation" + GenTypeDefsPass1 [] cenv tds + reportTime cenv.showTimes "Module Generation Pass 1" + GenTypeDefsPass2 0 [] cenv tds + reportTime cenv.showTimes "Module Generation Pass 2" + (match modul.Manifest with None -> () | Some m -> GenManifestPass3 cenv m) + GenTypeDefsPass3 [] cenv tds + reportTime cenv.showTimes "Module Generation Pass 3" + GenCustomAttrsPass3Or4 cenv (hca_Module,midx) modul.CustomAttrs // GenericParam is the only sorted table indexed by Columns in other tables (GenericParamConstraint\CustomAttributes). // Hence we need to sort it before we emit any entries in GenericParamConstraint\CustomAttributes that are attached to generic params. // Note this mutates the rows in a table. 'SetRowsOfTable' clears // the key --> index map since it is no longer valid - cenv.GetTable(TableNames.GenericParam).SetRowsOfTable (SortTableRows TableNames.GenericParam (cenv.GetTable(TableNames.GenericParam).EntriesAsArray)); - GenTypeDefsPass4 [] cenv tds; + cenv.GetTable(TableNames.GenericParam).SetRowsOfTable (SortTableRows TableNames.GenericParam (cenv.GetTable(TableNames.GenericParam).EntriesAsArray)) + GenTypeDefsPass4 [] cenv tds reportTime cenv.showTimes "Module Generation Pass 4" let generateIL requiredDataFixups (desiredMetadataVersion,generatePdb, ilg : ILGlobals, emitTailcalls,showTimes) (m : ILModuleDef) noDebugData cilStartAddress = let isDll = m.IsDLL let cenv = - { primaryAssembly=ilg.traits.ScopeRef; - emitTailcalls=emitTailcalls; - showTimes=showTimes; - ilg = mkILGlobals ilg.traits None noDebugData; // assumes mscorlib is Scope_assembly _ ILScopeRef - desiredMetadataVersion=desiredMetadataVersion; - requiredDataFixups= requiredDataFixups; - requiredStringFixups = []; - codeChunks=ByteBuffer.Create 40000; - nextCodeAddr = cilStartAddress; - data = ByteBuffer.Create 200; - resources = ByteBuffer.Create 200; - tables= Array.init 64 (fun i -> MetadataTable<_>.New ("row table "+string i,System.Collections.Generic.EqualityComparer.Default)); - AssemblyRefs = MetadataTable<_>.New("ILAssemblyRef",System.Collections.Generic.EqualityComparer.Default); - documents=MetadataTable<_>.New("pdbdocs",System.Collections.Generic.EqualityComparer.Default); - trefCache=new Dictionary<_,_>(100); - pdbinfo= new ResizeArray<_>(200); - moduleGuid= Array.zeroCreate 16; - fieldDefs= MetadataTable<_>.New("field defs",System.Collections.Generic.EqualityComparer.Default); - methodDefIdxsByKey = MetadataTable<_>.New("method defs",System.Collections.Generic.EqualityComparer.Default); + { primaryAssembly=ilg.traits.ScopeRef + emitTailcalls=emitTailcalls + showTimes=showTimes + ilg = mkILGlobals ilg.traits None noDebugData // assumes mscorlib is Scope_assembly _ ILScopeRef + desiredMetadataVersion=desiredMetadataVersion + requiredDataFixups= requiredDataFixups + requiredStringFixups = [] + codeChunks=ByteBuffer.Create 40000 + nextCodeAddr = cilStartAddress + data = ByteBuffer.Create 200 + resources = ByteBuffer.Create 200 + tables= Array.init 64 (fun i -> MetadataTable<_>.New ("row table "+string i,System.Collections.Generic.EqualityComparer.Default)) + AssemblyRefs = MetadataTable<_>.New("ILAssemblyRef",System.Collections.Generic.EqualityComparer.Default) + documents=MetadataTable<_>.New("pdbdocs",System.Collections.Generic.EqualityComparer.Default) + trefCache=new Dictionary<_,_>(100) + pdbinfo= new ResizeArray<_>(200) + moduleGuid= Array.zeroCreate 16 + fieldDefs= MetadataTable<_>.New("field defs",System.Collections.Generic.EqualityComparer.Default) + methodDefIdxsByKey = MetadataTable<_>.New("method defs",System.Collections.Generic.EqualityComparer.Default) // This uses reference identity on ILMethodDef objects - methodDefIdxs = new Dictionary<_,_>(100, HashIdentity.Reference); - propertyDefs = MetadataTable<_>.New("property defs",System.Collections.Generic.EqualityComparer.Default); - eventDefs = MetadataTable<_>.New("event defs",System.Collections.Generic.EqualityComparer.Default); - typeDefs = MetadataTable<_>.New("type defs",System.Collections.Generic.EqualityComparer.Default); - entrypoint=None; - generatePdb=generatePdb; + methodDefIdxs = new Dictionary<_,_>(100, HashIdentity.Reference) + propertyDefs = MetadataTable<_>.New("property defs",System.Collections.Generic.EqualityComparer.Default) + eventDefs = MetadataTable<_>.New("event defs",System.Collections.Generic.EqualityComparer.Default) + typeDefs = MetadataTable<_>.New("type defs",System.Collections.Generic.EqualityComparer.Default) + entrypoint=None + generatePdb=generatePdb // These must use structural comparison since they are keyed by arrays - guids=MetadataTable<_>.New("guids",HashIdentity.Structural); - blobs= MetadataTable<_>.New("blobs",HashIdentity.Structural); - strings= MetadataTable<_>.New("strings",System.Collections.Generic.EqualityComparer.Default); - userStrings= MetadataTable<_>.New("user strings",System.Collections.Generic.EqualityComparer.Default); } + guids=MetadataTable<_>.New("guids",HashIdentity.Structural) + blobs= MetadataTable<_>.New("blobs",HashIdentity.Structural) + strings= MetadataTable<_>.New("strings",System.Collections.Generic.EqualityComparer.Default) + userStrings= MetadataTable<_>.New("user strings",System.Collections.Generic.EqualityComparer.Default) } // Now the main compilation step - GenModule cenv m; + GenModule cenv m // Fetch out some of the results let entryPointToken = @@ -3354,13 +3351,13 @@ let generateIL requiredDataFixups (desiredMetadataVersion,generatePdb, ilg : ILG | Some (epHere,tok) -> getUncodedToken (if epHere then TableNames.Method else TableNames.File) tok | None -> - if not isDll then dprintn "warning: no entrypoint specified in executable binary"; + if not isDll then dprintn "warning: no entrypoint specified in executable binary" 0x0 let pdbData = - { EntryPoint= (if isDll then None else Some entryPointToken); - ModuleID = cenv.moduleGuid; - Documents = cenv.documents.EntriesAsArray; + { EntryPoint= (if isDll then None else Some entryPointToken) + ModuleID = cenv.moduleGuid + Documents = cenv.documents.EntriesAsArray Methods= cenv.pdbinfo.ToArray() } let idxForNextedTypeDef (tds:ILTypeDef list, td:ILTypeDef) = @@ -3376,20 +3373,20 @@ let generateIL requiredDataFixups (desiredMetadataVersion,generatePdb, ilg : ILG // turn idx tbls into token maps let mappings = { TypeDefTokenMap = (fun t -> - getUncodedToken TableNames.TypeDef (idxForNextedTypeDef t)); + getUncodedToken TableNames.TypeDef (idxForNextedTypeDef t)) FieldDefTokenMap = (fun t fd -> let tidx = idxForNextedTypeDef t - getUncodedToken TableNames.Field (GetFieldDefAsFieldDefIdx cenv tidx fd)); + getUncodedToken TableNames.Field (GetFieldDefAsFieldDefIdx cenv tidx fd)) MethodDefTokenMap = (fun t md -> let tidx = idxForNextedTypeDef t - getUncodedToken TableNames.Method (FindMethodDefIdx cenv (GetKeyForMethodDef tidx md))); + getUncodedToken TableNames.Method (FindMethodDefIdx cenv (GetKeyForMethodDef tidx md))) PropertyTokenMap = (fun t pd -> let tidx = idxForNextedTypeDef t - getUncodedToken TableNames.Property (cenv.propertyDefs.GetTableEntry (GetKeyForPropertyDef tidx pd))); + getUncodedToken TableNames.Property (cenv.propertyDefs.GetTableEntry (GetKeyForPropertyDef tidx pd))) EventTokenMap = (fun t ed -> let tidx = idxForNextedTypeDef t getUncodedToken TableNames.Event (cenv.eventDefs.GetTableEntry (EventKey (tidx, ed.Name)))) } - reportTime cenv.showTimes "Finalize Module Generation Results"; + reportTime cenv.showTimes "Finalize Module Generation Results" // New return the results let data = cenv.data.Close() let resources = cenv.resources.Close() @@ -3401,7 +3398,7 @@ let generateIL requiredDataFixups (desiredMetadataVersion,generatePdb, ilg : ILG //===================================================================== type BinaryChunk = - { size: int32; + { size: int32 addr: int32 } let chunk sz next = ({addr=next; size=sz},next + sz) @@ -3418,14 +3415,14 @@ module FileSystemUtilites = if runningOnMono then try let monoPosix = Assembly.Load("Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756") - if progress then eprintf "loading type Mono.Unix.UnixFileInfo...\n"; + if progress then eprintf "loading type Mono.Unix.UnixFileInfo...\n" let monoUnixFileInfo = monoPosix.GetType("Mono.Unix.UnixFileSystemInfo") let fileEntry = monoUnixFileInfo.InvokeMember("GetFileSystemEntry", (BindingFlags.InvokeMethod ||| BindingFlags.Static ||| BindingFlags.Public), null, null, [| box filename |],System.Globalization.CultureInfo.InvariantCulture) let prevPermissions = monoUnixFileInfo.InvokeMember("get_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| |],System.Globalization.CultureInfo.InvariantCulture) |> unbox // Add 0x000001ED (UserReadWriteExecute, GroupReadExecute, OtherReadExecute) to the access permissions on Unix monoUnixFileInfo.InvokeMember("set_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| box (prevPermissions ||| 0x000001ED) |],System.Globalization.CultureInfo.InvariantCulture) |> ignore with e -> - if progress then eprintf "failure: %s...\n" (e.ToString()); + if progress then eprintf "failure: %s...\n" (e.ToString()) // Fail silently let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls,showTimes) modul noDebugData cilStartAddress = @@ -3439,7 +3436,7 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls let strings,userStrings,blobs,guids,tables,entryPointToken,code,requiredStringFixups,data,resources,pdbData,mappings = generateIL requiredDataFixups (desiredMetadataVersion,generatePdb,ilg,emitTailcalls,showTimes) modul noDebugData cilStartAddress - reportTime showTimes "Generated Tables and Code"; + reportTime showTimes "Generated Tables and Code" let tableSize (tab: TableName) = tables.[tab.Index].Length // Now place the code @@ -3512,7 +3509,7 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls (if tableSize (TableNames.GenericParamConstraint) > 0 then 0x00001000 else 0x00000000) ||| 0x00000200 - reportTime showTimes "Layout Header of Tables"; + reportTime showTimes "Layout Header of Tables" let guidAddress n = (if n = 0 then 0 else (n - 1) * 0x10 + 0x01) @@ -3520,48 +3517,48 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls let tab = Array.create (strings.Length + 1) 0 let pos = ref 1 for i = 1 to strings.Length do - tab.[i] <- !pos; + tab.[i] <- !pos let s = strings.[i - 1] pos := !pos + s.Length tab let stringAddress n = - if n >= Array.length stringAddressTable then failwith ("string index "+string n+" out of range"); + if n >= Array.length stringAddressTable then failwith ("string index "+string n+" out of range") stringAddressTable.[n] let userStringAddressTable = let tab = Array.create (Array.length userStrings + 1) 0 let pos = ref 1 for i = 1 to Array.length userStrings do - tab.[i] <- !pos; + tab.[i] <- !pos let s = userStrings.[i - 1] let n = s.Length + 1 pos := !pos + n + ByteBuffer.Z32Size n tab let userStringAddress n = - if n >= Array.length userStringAddressTable then failwith "userString index out of range"; + if n >= Array.length userStringAddressTable then failwith "userString index out of range" userStringAddressTable.[n] let blobAddressTable = let tab = Array.create (blobs.Length + 1) 0 let pos = ref 1 for i = 1 to blobs.Length do - tab.[i] <- !pos; + tab.[i] <- !pos let blob = blobs.[i - 1] pos := !pos + blob.Length + ByteBuffer.Z32Size blob.Length tab let blobAddress n = - if n >= blobAddressTable.Length then failwith "blob index out of range"; + if n >= blobAddressTable.Length then failwith "blob index out of range" blobAddressTable.[n] - reportTime showTimes "Build String/Blob Address Tables"; + reportTime showTimes "Build String/Blob Address Tables" let sortedTables = Array.init 64 (fun i -> tables.[i] |> SortTableRows (TableName.FromIndex i)) - reportTime showTimes "Sort Tables"; + reportTime showTimes "Sort Tables" let codedTables = @@ -3657,18 +3654,18 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls // Now the coded tables themselves - first the schemata header tablesBuf.EmitIntsAsBytes [| 0x00; 0x00; 0x00; 0x00; - mdtableVersionMajor; // major version of table schemata - mdtableVersionMinor; // minor version of table schemata + mdtableVersionMajor // major version of table schemata + mdtableVersionMinor // minor version of table schemata - ((if stringsBig then 0x01 else 0x00) ||| // bit vector for heap size - (if guidsBig then 0x02 else 0x00) ||| - (if blobsBig then 0x04 else 0x00)); - 0x01; (* reserved, always 1 *) |]; + ((if stringsBig then 0x01 else 0x00) ||| // bit vector for heap size + (if guidsBig then 0x02 else 0x00) ||| + (if blobsBig then 0x04 else 0x00)) + 0x01 (* reserved, always 1 *) |] - tablesBuf.EmitInt32 valid1; - tablesBuf.EmitInt32 valid2; - tablesBuf.EmitInt32 sorted1; - tablesBuf.EmitInt32 sorted2; + tablesBuf.EmitInt32 valid1 + tablesBuf.EmitInt32 valid2 + tablesBuf.EmitInt32 sorted1 + tablesBuf.EmitInt32 sorted2 // Numbers of rows in various tables for rows in sortedTables do @@ -3676,7 +3673,7 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls tablesBuf.EmitInt32 rows.Length - reportTime showTimes "Write Header of tablebuf"; + reportTime showTimes "Write Header of tablebuf" // The tables themselves for rows in sortedTables do @@ -3712,7 +3709,7 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls tablesBuf.Close() - reportTime showTimes "Write Tables to tablebuf"; + reportTime showTimes "Write Tables to tablebuf" let tablesStreamUnpaddedSize = codedTables.Length // QUERY: extra 4 empty bytes in array.exe - why? Include some extra padding after @@ -3729,7 +3726,7 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls let blobsChunk,_next = chunk blobsStreamPaddedSize next let blobsStreamPadding = blobsChunk.size - blobsStreamUnpaddedSize - reportTime showTimes "Layout Metadata"; + reportTime showTimes "Layout Metadata" let metadata = let mdbuf = ByteBuffer.Create 500000 @@ -4217,117 +4214,117 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: // Note that the defaults differ between x86 and x64 if modul.Is64Bit then let size = defaultArg modul.StackReserveSize 0x400000 |> int64 - writeInt64 os size; // Stack Reserve Size Always 0x400000 (4Mb) (see Section 23.1). - writeInt64 os 0x4000L; // Stack Commit Size Always 0x4000 (16Kb) (see Section 23.1). - writeInt64 os 0x100000L; // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). + writeInt64 os size // Stack Reserve Size Always 0x400000 (4Mb) (see Section 23.1). + writeInt64 os 0x4000L // Stack Commit Size Always 0x4000 (16Kb) (see Section 23.1). + writeInt64 os 0x100000L // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). writeInt64 os 0x2000L // Heap Commit Size Always 0x800 (8Kb) (see Section 23.1). else let size = defaultArg modul.StackReserveSize 0x100000 - writeInt32 os size; // Stack Reserve Size Always 0x100000 (1Mb) (see Section 23.1). - writeInt32 os 0x1000; // Stack Commit Size Always 0x1000 (4Kb) (see Section 23.1). - writeInt32 os 0x100000; // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). - writeInt32 os 0x1000; // Heap Commit Size Always 0x1000 (4Kb) (see Section 23.1). + writeInt32 os size // Stack Reserve Size Always 0x100000 (1Mb) (see Section 23.1). + writeInt32 os 0x1000 // Stack Commit Size Always 0x1000 (4Kb) (see Section 23.1). + writeInt32 os 0x100000 // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). + writeInt32 os 0x1000 // Heap Commit Size Always 0x1000 (4Kb) (see Section 23.1). // 000000f0 - x86 location, moving on, for x64, add 0x10 - writeInt32 os 0x00; // Loader Flags Always 0 (see Section 23.1) - writeInt32 os 0x10; // Number of Data Directories: Always 0x10 (see Section 23.1). - writeInt32 os 0x00; - writeInt32 os 0x00; // Export Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Loader Flags Always 0 (see Section 23.1) + writeInt32 os 0x10 // Number of Data Directories: Always 0x10 (see Section 23.1). + writeInt32 os 0x00 + writeInt32 os 0x00 // Export Table Always 0 (see Section 23.1). // 00000100 - writeDirectory os importTableChunk; // Import Table RVA of Import Table, (see clause 24.3.1). e.g. 0000b530 + writeDirectory os importTableChunk // Import Table RVA of Import Table, (see clause 24.3.1). e.g. 0000b530 // Native Resource Table: ECMA says Always 0 (see Section 23.1), but mscorlib and other files with resources bound into executable do not. For the moment assume the resources table is always the first resource in the file. - writeDirectory os nativeResourcesChunk; + writeDirectory os nativeResourcesChunk // 00000110 - writeInt32 os 0x00; // Exception Table Always 0 (see Section 23.1). - writeInt32 os 0x00; // Exception Table Always 0 (see Section 23.1). - writeInt32 os 0x00; // Certificate Table Always 0 (see Section 23.1). - writeInt32 os 0x00; // Certificate Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Exception Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Exception Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Certificate Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Certificate Table Always 0 (see Section 23.1). // 00000120 - writeDirectory os baseRelocTableChunk; - writeDirectory os debugDirectoryChunk; // Debug Directory + writeDirectory os baseRelocTableChunk + writeDirectory os debugDirectoryChunk // Debug Directory // 00000130 - writeInt32 os 0x00; // Copyright Always 0 (see Section 23.1). - writeInt32 os 0x00; // Copyright Always 0 (see Section 23.1). - writeInt32 os 0x00; // Global Ptr Always 0 (see Section 23.1). - writeInt32 os 0x00; // Global Ptr Always 0 (see Section 23.1). + writeInt32 os 0x00 // Copyright Always 0 (see Section 23.1). + writeInt32 os 0x00 // Copyright Always 0 (see Section 23.1). + writeInt32 os 0x00 // Global Ptr Always 0 (see Section 23.1). + writeInt32 os 0x00 // Global Ptr Always 0 (see Section 23.1). // 00000140 - writeInt32 os 0x00; // Load Config Table Always 0 (see Section 23.1). - writeInt32 os 0x00; // Load Config Table Always 0 (see Section 23.1). - writeInt32 os 0x00; // TLS Table Always 0 (see Section 23.1). - writeInt32 os 0x00; // TLS Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Load Config Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Load Config Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // TLS Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // TLS Table Always 0 (see Section 23.1). // 00000150 - writeInt32 os 0x00; // Bound Import Always 0 (see Section 23.1). - writeInt32 os 0x00; // Bound Import Always 0 (see Section 23.1). - writeDirectory os importAddrTableChunk; // Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 + writeInt32 os 0x00 // Bound Import Always 0 (see Section 23.1). + writeInt32 os 0x00 // Bound Import Always 0 (see Section 23.1). + writeDirectory os importAddrTableChunk // Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 // 00000160 - writeInt32 os 0x00; // Delay Import Descriptor Always 0 (see Section 23.1). - writeInt32 os 0x00; // Delay Import Descriptor Always 0 (see Section 23.1). - writeDirectory os cliHeaderChunk; + writeInt32 os 0x00 // Delay Import Descriptor Always 0 (see Section 23.1). + writeInt32 os 0x00 // Delay Import Descriptor Always 0 (see Section 23.1). + writeDirectory os cliHeaderChunk // 00000170 - writeInt32 os 0x00; // Reserved Always 0 (see Section 23.1). - writeInt32 os 0x00; // Reserved Always 0 (see Section 23.1). + writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). + writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). - write (Some textSectionHeaderChunk.addr) os "text section header" [| |]; + write (Some textSectionHeaderChunk.addr) os "text section header" [| |] // 00000178 - writeBytes os [| 0x2euy; 0x74uy; 0x65uy; 0x78uy; 0x74uy; 0x00uy; 0x00uy; 0x00uy; |]; // ".text\000\000\000" + writeBytes os [| 0x2euy; 0x74uy; 0x65uy; 0x78uy; 0x74uy; 0x00uy; 0x00uy; 0x00uy; |] // ".text\000\000\000" // 00000180 - writeInt32 os textSectionSize; // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x00009584 - writeInt32 os textSectionAddr; // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x00020000 - writeInt32 os textSectionPhysSize; // SizeOfRawData Size of the initialized data on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be 0. 0x00009600 - writeInt32 os textSectionPhysLoc; // PointerToRawData RVA to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized data, this field should be 0. e.g. 00000200 + writeInt32 os textSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x00009584 + writeInt32 os textSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x00020000 + writeInt32 os textSectionPhysSize // SizeOfRawData Size of the initialized data on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be 0. 0x00009600 + writeInt32 os textSectionPhysLoc // PointerToRawData RVA to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized data, this field should be 0. e.g. 00000200 // 00000190 - writeInt32 os 0x00; // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00; // PointerToLinenumbers Always 0 (see Section 23.1). + writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. + writeInt32 os 0x00 // PointerToLinenumbers Always 0 (see Section 23.1). // 00000198 - writeInt32AsUInt16 os 0x00;// NumberOfRelocations Number of relocations, set to 0 if unused. - writeInt32AsUInt16 os 0x00; // NumberOfLinenumbers Always 0 (see Section 23.1). - writeBytes os [| 0x20uy; 0x00uy; 0x00uy; 0x60uy |]; // Characteristics Flags describing sections characteristics, see below. IMAGE_SCN_CNT_CODE || IMAGE_SCN_MEM_EXECUTE || IMAGE_SCN_MEM_READ + writeInt32AsUInt16 os 0x00// NumberOfRelocations Number of relocations, set to 0 if unused. + writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). + writeBytes os [| 0x20uy; 0x00uy; 0x00uy; 0x60uy |] // Characteristics Flags describing sections characteristics, see below. IMAGE_SCN_CNT_CODE || IMAGE_SCN_MEM_EXECUTE || IMAGE_SCN_MEM_READ - write (Some dataSectionHeaderChunk.addr) os "data section header" [| |]; + write (Some dataSectionHeaderChunk.addr) os "data section header" [| |] // 000001a0 - writeBytes os [| 0x2euy; 0x72uy; 0x73uy; 0x72uy; 0x63uy; 0x00uy; 0x00uy; 0x00uy; |]; // ".rsrc\000\000\000" - // writeBytes os [| 0x2e; 0x73; 0x64; 0x61; 0x74; 0x61; 0x00; 0x00; |]; // ".sdata\000\000" - writeInt32 os dataSectionSize; // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x0000000c - writeInt32 os dataSectionAddr; // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x0000c000 + writeBytes os [| 0x2euy; 0x72uy; 0x73uy; 0x72uy; 0x63uy; 0x00uy; 0x00uy; 0x00uy; |] // ".rsrc\000\000\000" + // writeBytes os [| 0x2e; 0x73; 0x64; 0x61; 0x74; 0x61; 0x00; 0x00; |] // ".sdata\000\000" + writeInt32 os dataSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x0000000c + writeInt32 os dataSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x0000c000 // 000001b0 - writeInt32 os dataSectionPhysSize; // SizeOfRawData Size of the initialized data on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be 0. e.g. 0x00000200 - writeInt32 os dataSectionPhysLoc; // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized data, this field should be 0. e.g. 0x00009800 + writeInt32 os dataSectionPhysSize // SizeOfRawData Size of the initialized data on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be 0. e.g. 0x00000200 + writeInt32 os dataSectionPhysLoc // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized data, this field should be 0. e.g. 0x00009800 // 000001b8 - writeInt32 os 0x00; // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00; // PointerToLinenumbers Always 0 (see Section 23.1). + writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. + writeInt32 os 0x00 // PointerToLinenumbers Always 0 (see Section 23.1). // 000001c0 - writeInt32AsUInt16 os 0x00; // NumberOfRelocations Number of relocations, set to 0 if unused. - writeInt32AsUInt16 os 0x00; // NumberOfLinenumbers Always 0 (see Section 23.1). - writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x40uy |]; // Characteristics Flags: IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA + writeInt32AsUInt16 os 0x00 // NumberOfRelocations Number of relocations, set to 0 if unused. + writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). + writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x40uy |] // Characteristics Flags: IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA - write (Some relocSectionHeaderChunk.addr) os "reloc section header" [| |]; + write (Some relocSectionHeaderChunk.addr) os "reloc section header" [| |] // 000001a0 - writeBytes os [| 0x2euy; 0x72uy; 0x65uy; 0x6cuy; 0x6fuy; 0x63uy; 0x00uy; 0x00uy; |]; // ".reloc\000\000" - writeInt32 os relocSectionSize; // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x0000000c - writeInt32 os relocSectionAddr; // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x0000c000 + writeBytes os [| 0x2euy; 0x72uy; 0x65uy; 0x6cuy; 0x6fuy; 0x63uy; 0x00uy; 0x00uy; |] // ".reloc\000\000" + writeInt32 os relocSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x0000000c + writeInt32 os relocSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x0000c000 // 000001b0 - writeInt32 os relocSectionPhysSize; // SizeOfRawData Size of the initialized reloc on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized reloc, this field should be 0. e.g. 0x00000200 - writeInt32 os relocSectionPhysLoc; // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized reloc, this field should be 0. e.g. 0x00009800 + writeInt32 os relocSectionPhysSize // SizeOfRawData Size of the initialized reloc on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized reloc, this field should be 0. e.g. 0x00000200 + writeInt32 os relocSectionPhysLoc // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized reloc, this field should be 0. e.g. 0x00009800 // 000001b8 - writeInt32 os 0x00; // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00; // PointerToLinenumbers Always 0 (see Section 23.1). + writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. + writeInt32 os 0x00 // PointerToLinenumbers Always 0 (see Section 23.1). // 000001c0 - writeInt32AsUInt16 os 0x00; // NumberOfRelocations Number of relocations, set to 0 if unused. - writeInt32AsUInt16 os 0x00; // NumberOfLinenumbers Always 0 (see Section 23.1). - writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x42uy |]; // Characteristics Flags: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | + writeInt32AsUInt16 os 0x00 // NumberOfRelocations Number of relocations, set to 0 if unused. + writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). + writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x42uy |] // Characteristics Flags: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | - writePadding os "pad to text begin" (textSectionPhysLoc - headerSize); + writePadding os "pad to text begin" (textSectionPhysLoc - headerSize) // TEXT SECTION: e.g. 0x200 let textV2P v = v - textSectionAddr + textSectionPhysLoc // e.g. 0x0200 - write (Some (textV2P importAddrTableChunk.addr)) os "import addr table" [| |]; - writeInt32 os importNameHintTableChunk.addr; - writeInt32 os 0x00; // QUERY 4 bytes of zeros not 2 like ECMA 24.3.1 says + write (Some (textV2P importAddrTableChunk.addr)) os "import addr table" [| |] + writeInt32 os importNameHintTableChunk.addr + writeInt32 os 0x00 // QUERY 4 bytes of zeros not 2 like ECMA 24.3.1 says // e.g. 0x0208 @@ -4340,106 +4337,106 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: let headerVersionMajor,headerVersionMinor = headerVersionSupportedByCLRVersion desiredMetadataVersion writePadding os "pad to cli header" cliHeaderPadding - write (Some (textV2P cliHeaderChunk.addr)) os "cli header" [| |]; - writeInt32 os 0x48; // size of header - writeInt32AsUInt16 os headerVersionMajor; // Major part of minimum version of CLR reqd. - writeInt32AsUInt16 os headerVersionMinor; // Minor part of minimum version of CLR reqd. ... + write (Some (textV2P cliHeaderChunk.addr)) os "cli header" [| |] + writeInt32 os 0x48 // size of header + writeInt32AsUInt16 os headerVersionMajor // Major part of minimum version of CLR reqd. + writeInt32AsUInt16 os headerVersionMinor // Minor part of minimum version of CLR reqd. ... // e.g. 0x0210 - writeDirectory os metadataChunk; - writeInt32 os flags; + writeDirectory os metadataChunk + writeInt32 os flags - writeInt32 os entryPointToken; - write None os "rest of cli header" [| |]; + writeInt32 os entryPointToken + write None os "rest of cli header" [| |] // e.g. 0x0220 - writeDirectory os resourcesChunk; - writeDirectory os strongnameChunk; + writeDirectory os resourcesChunk + writeDirectory os strongnameChunk // e.g. 0x0230 - writeInt32 os 0x00; // code manager table, always 0 - writeInt32 os 0x00; // code manager table, always 0 - writeDirectory os vtfixupsChunk; + writeInt32 os 0x00 // code manager table, always 0 + writeInt32 os 0x00 // code manager table, always 0 + writeDirectory os vtfixupsChunk // e.g. 0x0240 - writeInt32 os 0x00; // export addr table jumps, always 0 - writeInt32 os 0x00; // export addr table jumps, always 0 - writeInt32 os 0x00; // managed native header, always 0 - writeInt32 os 0x00; // managed native header, always 0 + writeInt32 os 0x00 // export addr table jumps, always 0 + writeInt32 os 0x00 // export addr table jumps, always 0 + writeInt32 os 0x00 // managed native header, always 0 + writeInt32 os 0x00 // managed native header, always 0 - writeBytes os code; - write None os "code padding" codePadding; + writeBytes os code + write None os "code padding" codePadding - writeBytes os metadata; + writeBytes os metadata // write 0x80 bytes of empty space for encrypted SHA1 hash, written by SN.EXE or call to signing API if signer <> None then - write (Some (textV2P strongnameChunk.addr)) os "strongname" (Array.create strongnameChunk.size 0x0uy); + write (Some (textV2P strongnameChunk.addr)) os "strongname" (Array.create strongnameChunk.size 0x0uy) - write (Some (textV2P resourcesChunk.addr)) os "raw resources" [| |]; - writeBytes os resources; - write (Some (textV2P rawdataChunk.addr)) os "raw data" [| |]; - writeBytes os data; + write (Some (textV2P resourcesChunk.addr)) os "raw resources" [| |] + writeBytes os resources + write (Some (textV2P rawdataChunk.addr)) os "raw data" [| |] + writeBytes os data writePadding os "start of import table" importTableChunkPrePadding // vtfixups would go here - write (Some (textV2P importTableChunk.addr)) os "import table" [| |]; + write (Some (textV2P importTableChunk.addr)) os "import table" [| |] - writeInt32 os importLookupTableChunk.addr; - writeInt32 os 0x00; - writeInt32 os 0x00; - writeInt32 os mscoreeStringChunk.addr; - writeInt32 os importAddrTableChunk.addr; - writeInt32 os 0x00; - writeInt32 os 0x00; - writeInt32 os 0x00; - writeInt32 os 0x00; - writeInt32 os 0x00; + writeInt32 os importLookupTableChunk.addr + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os mscoreeStringChunk.addr + writeInt32 os importAddrTableChunk.addr + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os 0x00 - write (Some (textV2P importLookupTableChunk.addr)) os "import lookup table" [| |]; - writeInt32 os importNameHintTableChunk.addr; - writeInt32 os 0x00; - writeInt32 os 0x00; - writeInt32 os 0x00; - writeInt32 os 0x00; + write (Some (textV2P importLookupTableChunk.addr)) os "import lookup table" [| |] + writeInt32 os importNameHintTableChunk.addr + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os 0x00 - write (Some (textV2P importNameHintTableChunk.addr)) os "import name hint table" [| |]; + write (Some (textV2P importNameHintTableChunk.addr)) os "import name hint table" [| |] // Two zero bytes of hint, then Case sensitive, null-terminated ASCII string containing name to import. // Shall _CorExeMain a .exe file _CorDllMain for a .dll file. if isDll then writeBytes os [| 0x00uy; 0x00uy; 0x5fuy; 0x43uy ; 0x6fuy; 0x72uy; 0x44uy; 0x6cuy; 0x6cuy; 0x4duy; 0x61uy; 0x69uy; 0x6euy; 0x00uy |] else - writeBytes os [| 0x00uy; 0x00uy; 0x5fuy; 0x43uy; 0x6fuy; 0x72uy; 0x45uy; 0x78uy; 0x65uy; 0x4duy; 0x61uy; 0x69uy; 0x6euy; 0x00uy |]; + writeBytes os [| 0x00uy; 0x00uy; 0x5fuy; 0x43uy; 0x6fuy; 0x72uy; 0x45uy; 0x78uy; 0x65uy; 0x4duy; 0x61uy; 0x69uy; 0x6euy; 0x00uy |] write (Some (textV2P mscoreeStringChunk.addr)) os "mscoree string" - [| 0x6duy; 0x73uy; 0x63uy; 0x6fuy ; 0x72uy; 0x65uy ; 0x65uy; 0x2euy ; 0x64uy; 0x6cuy ; 0x6cuy; 0x00uy ; |]; + [| 0x6duy; 0x73uy; 0x63uy; 0x6fuy ; 0x72uy; 0x65uy ; 0x65uy; 0x2euy ; 0x64uy; 0x6cuy ; 0x6cuy; 0x00uy ; |] - writePadding os "end of import tab" importTableChunkPadding; + writePadding os "end of import tab" importTableChunkPadding - writePadding os "head of entrypoint" 0x03; + writePadding os "head of entrypoint" 0x03 let ep = (imageBaseReal + textSectionAddr) write (Some (textV2P entrypointCodeChunk.addr)) os " entrypoint code" - [| 0xFFuy; 0x25uy; (* x86 Instructions for entry *) b0 ep; b1 ep; b2 ep; b3 ep |]; + [| 0xFFuy; 0x25uy; (* x86 Instructions for entry *) b0 ep; b1 ep; b2 ep; b3 ep |] if isItanium then write (Some (textV2P globalpointerCodeChunk.addr)) os " itanium global pointer" - [| 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy |]; + [| 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy |] if pdbfile.IsSome then - write (Some (textV2P debugDirectoryChunk.addr)) os "debug directory" (Array.create sizeof_IMAGE_DEBUG_DIRECTORY 0x0uy); - write (Some (textV2P debugDataChunk.addr)) os "debug data" (Array.create debugDataChunk.size 0x0uy); + write (Some (textV2P debugDirectoryChunk.addr)) os "debug directory" (Array.create sizeof_IMAGE_DEBUG_DIRECTORY 0x0uy) + write (Some (textV2P debugDataChunk.addr)) os "debug data" (Array.create debugDataChunk.size 0x0uy) - writePadding os "end of .text" (dataSectionPhysLoc - textSectionPhysLoc - textSectionSize); + writePadding os "end of .text" (dataSectionPhysLoc - textSectionPhysLoc - textSectionSize) // DATA SECTION match nativeResources with | [||] -> () | resources -> - write (Some (dataSectionVirtToPhys nativeResourcesChunk.addr)) os "raw native resources" [| |]; - writeBytes os resources; + write (Some (dataSectionVirtToPhys nativeResourcesChunk.addr)) os "raw native resources" [| |] + writeBytes os resources if dummydatap.size <> 0x0 then - write (Some (dataSectionVirtToPhys dummydatap.addr)) os "dummy data" [| 0x0uy |]; + write (Some (dataSectionVirtToPhys dummydatap.addr)) os "dummy data" [| 0x0uy |] - writePadding os "end of .rsrc" (relocSectionPhysLoc - dataSectionPhysLoc - dataSectionSize); + writePadding os "end of .rsrc" (relocSectionPhysLoc - dataSectionPhysLoc - dataSectionSize) // RELOC SECTION @@ -4461,10 +4458,10 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: [| b0 entrypointFixupBlock; b1 entrypointFixupBlock; b2 entrypointFixupBlock; b3 entrypointFixupBlock; 0x0cuy; 0x00uy; 0x00uy; 0x00uy; b0 reloc; b1 reloc; - b0 reloc2; b1 reloc2; |]; - writePadding os "end of .reloc" (imageEndSectionPhysLoc - relocSectionPhysLoc - relocSectionSize); + b0 reloc2; b1 reloc2; |] + writePadding os "end of .reloc" (imageEndSectionPhysLoc - relocSectionPhysLoc - relocSectionSize) - os.Close(); + os.Close() try FileSystemUtilites.setExecutablePermission outfile @@ -4475,13 +4472,13 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: // Looks like a finally... with e -> (try - os.Close(); + os.Close() FileSystem.FileDelete outfile - with _ -> ()); + with _ -> ()) reraise() - reportTime showTimes "Writing Image"; + reportTime showTimes "Writing Image" if dumpDebugInfo then DumpDebugInfo outfile pdbData @@ -4495,113 +4492,74 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: | Some fpdb -> try let idd = WritePdbInfo fixupOverlappingSequencePoints showTimes outfile fpdb pdbData - reportTime showTimes "Generate PDB Info"; + reportTime showTimes "Generate PDB Info" // Now we have the debug data we can go back and fill in the debug directory in the image - let fs2 = new FileStream(outfile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read, 0x1000, false) + let fs2 = FileSystem.FileStreamWriteExistingShim(outfile) let os2 = new BinaryWriter(fs2) try // write the IMAGE_DEBUG_DIRECTORY - os2.BaseStream.Seek (int64 (textV2P debugDirectoryChunk.addr), SeekOrigin.Begin) |> ignore; - writeInt32 os2 idd.iddCharacteristics; // IMAGE_DEBUG_DIRECTORY.Characteristics - writeInt32 os2 timestamp; - writeInt32AsUInt16 os2 idd.iddMajorVersion; - writeInt32AsUInt16 os2 idd.iddMinorVersion; - writeInt32 os2 idd.iddType; - writeInt32 os2 idd.iddData.Length; // IMAGE_DEBUG_DIRECTORY.SizeOfData - writeInt32 os2 debugDataChunk.addr; // IMAGE_DEBUG_DIRECTORY.AddressOfRawData - writeInt32 os2 (textV2P debugDataChunk.addr);// IMAGE_DEBUG_DIRECTORY.PointerToRawData - - (* dprintf "idd.iddCharacteristics = %ld\n" idd.iddCharacteristics; - dprintf "iddMajorVersion = %ld\n" idd.iddMajorVersion; - dprintf "iddMinorVersion = %ld\n" idd.iddMinorVersion; - dprintf "iddType = %ld\n" idd.iddType; - dprintf "iddData = (%A) = %s\n" idd.iddData (System.Text.Encoding.UTF8.GetString idd.iddData); *) + os2.BaseStream.Seek (int64 (textV2P debugDirectoryChunk.addr), SeekOrigin.Begin) |> ignore + writeInt32 os2 idd.iddCharacteristics // IMAGE_DEBUG_DIRECTORY.Characteristics + writeInt32 os2 timestamp + writeInt32AsUInt16 os2 idd.iddMajorVersion + writeInt32AsUInt16 os2 idd.iddMinorVersion + writeInt32 os2 idd.iddType + writeInt32 os2 idd.iddData.Length // IMAGE_DEBUG_DIRECTORY.SizeOfData + writeInt32 os2 debugDataChunk.addr // IMAGE_DEBUG_DIRECTORY.AddressOfRawData + writeInt32 os2 (textV2P debugDataChunk.addr)// IMAGE_DEBUG_DIRECTORY.PointerToRawData + + (* dprintf "idd.iddCharacteristics = %ld\n" idd.iddCharacteristics + dprintf "iddMajorVersion = %ld\n" idd.iddMajorVersion + dprintf "iddMinorVersion = %ld\n" idd.iddMinorVersion + dprintf "iddType = %ld\n" idd.iddType + dprintf "iddData = (%A) = %s\n" idd.iddData (System.Text.Encoding.UTF8.GetString idd.iddData) *) // write the debug raw data as given us by the PDB writer - os2.BaseStream.Seek (int64 (textV2P debugDataChunk.addr), SeekOrigin.Begin) |> ignore; + os2.BaseStream.Seek (int64 (textV2P debugDataChunk.addr), SeekOrigin.Begin) |> ignore if debugDataChunk.size < idd.iddData.Length then - failwith "Debug data area is not big enough. Debug info may not be usable"; - writeBytes os2 idd.iddData; + failwith "Debug data area is not big enough. Debug info may not be usable" + writeBytes os2 idd.iddData os2.Close() with e -> - failwith ("Error while writing debug directory entry: "+e.Message); - (try os2.Close(); FileSystem.FileDelete outfile with _ -> ()); + failwith ("Error while writing debug directory entry: "+e.Message) + (try os2.Close(); FileSystem.FileDelete outfile with _ -> ()) reraise() with e -> reraise() - end; - reportTime showTimes "Finalize PDB"; + end + reportTime showTimes "Finalize PDB" /// Sign the binary. No further changes to binary allowed past this point! match signer with | None -> () | Some s -> try - s.SignFile outfile; + s.SignFile outfile s.Close() with e -> - failwith ("Warning: A call to StrongNameSignatureGeneration failed ("+e.Message+")"); - (try s.Close() with _ -> ()); - (try FileSystem.FileDelete outfile with _ -> ()); + failwith ("Warning: A call to StrongNameSignatureGeneration failed ("+e.Message+")") + (try s.Close() with _ -> ()) + (try FileSystem.FileDelete outfile with _ -> ()) () - reportTime showTimes "Signing Image"; + reportTime showTimes "Signing Image" //Finished writing and signing the binary and debug info... mappings type options = - { ilg: ILGlobals; - pdbfile: string option; - signer: ILStrongNameSigner option; - fixupOverlappingSequencePoints: bool; - emitTailcalls : bool; - showTimes: bool; + { ilg: ILGlobals + pdbfile: string option + signer: ILStrongNameSigner option + fixupOverlappingSequencePoints: bool + emitTailcalls : bool + showTimes: bool dumpDebugInfo:bool } -let WriteILBinary outfile (args: options) modul noDebugData = - ignore (writeBinaryAndReportMappings (outfile, args.ilg, args.pdbfile, args.signer, args.fixupOverlappingSequencePoints, args.emitTailcalls, args.showTimes, args.dumpDebugInfo) modul noDebugData) - - - -(****************************************************** -** Notes on supporting the Itanium ** -******************************************************* -IA64 codegen on the CLR isnt documented, and getting it working involved a certain amount of reverse-engineering -peverify.exe and various binaries generated by ILAsm and other managed compiles. Here are some lessons learned, -documented for posterity and the 0 other people writing managed compilers for the Itanium: - -- Even if youre not utilizing the global pointer in your Itanium binary, -you should be setting aside space for it in .text. (Preferably near the native stub.) -- PEVerify checks for two .reloc table entries on the Itanium - one for the native stub, and one -for the global pointer RVA. It doesnt matter what you set these values to - -their addresses can be zeroed out, but they must have IMAGE_REL_BASED_DIR64 set! -(So, yes, you may find yourself setting this flag on an empty, unnecessary table slot!) -- On the Itanium, its best to have your tables qword aligned. (Though, peverify checks for dword alignment.) -- A different, weird set of DLL characteristics are necessary for the Itanium. -I wont detail them here, but its interesting given that this field isnt supposed to vary between platforms, -and is supposedly marked as deprecated. -- There are two schools to generating CLR binaries on for the Itanium - Ill call them the ALink school -and the ILAsm school. - - The ALink school relies on some quirks in the CLR to omit a lot of stuff that, admittedly, isnt necessary. The binaries are basically IL-only, with some flags set to make them nominally Itanium: - - It omits the .reloc table - - It doesnt set aside memory for global pointer storage - - Theres no native stub - - Theres no import table, mscoree reference / startup symbol hint - - A manifest is inserted by default. - These omissions are understandable, given the platform/jitting/capabilities of the language, - but theyre basically relying on an idiosyncracy of the runtime to get away with creating a bad binary. - - - The ILAsm school actually writes everything out: - - It has a reloc table with the requisite two entries - - It sets aside memory for a global pointer, even if it doesnt utilize one - - It actually inserts a native stub for the Itanium! (Though, I have no idea what - instructions, specifically, are emitted, and I couldnt dig up the sources to ILAsm to - find out) - - Theres the requisite mscoree reference, etc. - - No manifest is inserted -*******************************************************) +let WriteILBinary (outfile, args, ilModule, noDebugData) = + ignore (writeBinaryAndReportMappings (outfile, args.ilg, args.pdbfile, args.signer, args.fixupOverlappingSequencePoints, args.emitTailcalls, args.showTimes, args.dumpDebugInfo) ilModule noDebugData) + diff --git a/src/absil/ilwrite.fsi b/src/absil/ilwrite.fsi index f63a65278ec..50ee012eebc 100644 --- a/src/absil/ilwrite.fsi +++ b/src/absil/ilwrite.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// The IL Binary writer module internal Microsoft.FSharp.Compiler.AbstractIL.ILBinaryWriter @@ -16,21 +16,16 @@ type ILStrongNameSigner = static member OpenKeyContainer: string -> ILStrongNameSigner type options = - { ilg: ILGlobals - pdbfile: string option; - signer : ILStrongNameSigner option; - fixupOverlappingSequencePoints : bool; - emitTailcalls: bool; - showTimes : bool; - dumpDebugInfo : bool } + { ilg: ILGlobals + pdbfile: string option + signer : ILStrongNameSigner option + fixupOverlappingSequencePoints : bool + emitTailcalls: bool + showTimes : bool + dumpDebugInfo : bool } /// Write a binary to the file system. Extra configuration parameters can also be specified. -val WriteILBinary: - filename: string -> - options: options -> - input: ILModuleDef -> - noDebugData: bool -> - unit +val WriteILBinary: filename: string * options: options * input: ILModuleDef * noDebugData: bool -> unit diff --git a/src/absil/ilx.fs b/src/absil/ilx.fs index 5277434984a..dffa456a39e 100644 --- a/src/absil/ilx.fs +++ b/src/absil/ilx.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Defines an extension of the IL algebra module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.Types diff --git a/src/absil/ilx.fsi b/src/absil/ilx.fsi index c624db6d941..2c03a75262d 100644 --- a/src/absil/ilx.fsi +++ b/src/absil/ilx.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// ILX extensions to Abstract IL types and instructions F# module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.Types @@ -89,7 +89,7 @@ type IlxClosureApps = | Apps_app of ILType * IlxClosureApps | Apps_done of ILType -/// ILX extensions to the intruction set +/// ILX extensions to the instruction set /// type IlxInstr = diff --git a/src/absil/zmap.fs b/src/absil/zmap.fs index 3b76f2f3a58..0e91c66eca0 100644 --- a/src/absil/zmap.fs +++ b/src/absil/zmap.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Compiler.AbstractIL.Internal diff --git a/src/absil/zmap.fsi b/src/absil/zmap.fsi index 1870ef80aad..667de856d05 100644 --- a/src/absil/zmap.fsi +++ b/src/absil/zmap.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Compiler.AbstractIL.Internal diff --git a/src/absil/zset.fs b/src/absil/zset.fs index 99f09ce993d..9d0faae67b8 100644 --- a/src/absil/zset.fs +++ b/src/absil/zset.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Compiler.AbstractIL.Internal diff --git a/src/absil/zset.fsi b/src/absil/zset.fsi index b1931a1ac59..90eba6dc159 100644 --- a/src/absil/zset.fsi +++ b/src/absil/zset.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Compiler.AbstractIL.Internal diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Build.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Build.dll.fs index 07f5e733639..f657209fc49 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Build.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Build.dll.fs @@ -1,6 +1,5 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#light namespace Microsoft.FSharp open System.Reflection [] @@ -11,15 +10,12 @@ open System.Reflection do() #if NO_STRONG_NAMES -[] -[] +[] #endif #if STRONG_NAME_AND_DELAY_SIGN_FSHARP_COMPILER_WITH_MSFT_KEY -[] -[] +[] #endif #if STRONG_NAME_FSHARP_COMPILER_WITH_TEST_KEY -[] -[] +[] #endif do() diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs index d61c245918f..c4a73c6815e 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs @@ -1,6 +1,5 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#light namespace Microsoft.FSharp open System.Reflection open System.Runtime.InteropServices diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Server.Shared.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Server.Shared.dll.fs index 9db04753d19..4544ec548ee 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Server.Shared.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Server.Shared.dll.fs @@ -1,6 +1,5 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#light namespace Microsoft.FSharp open System.Reflection open System.Runtime.InteropServices diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Silverlight.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Silverlight.dll.fs deleted file mode 100644 index 383f21d1433..00000000000 --- a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Silverlight.dll.fs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -#light -namespace Microsoft.FSharp -open System.Reflection - -[] -[] -[] -[] -[] - -// Note: internals visible to unit test DLLs in Retail (and all) builds. -[] -[] -[] -[] - -do() diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs index 3aec47e8c96..57e437d3c18 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs @@ -1,6 +1,5 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#light namespace Microsoft.FSharp open System.Reflection open System.Runtime.InteropServices @@ -26,9 +25,8 @@ open System.Runtime.InteropServices // Note: internals visible to unit test DLLs in Retail (and all) builds. [] [] -[] -[] -[] +[] +[] #if BUILDING_WITH_LKG [] #endif @@ -45,9 +43,8 @@ open System.Runtime.InteropServices [] [] [] -[] -[] -[] +[] +[] [] [] #endif @@ -63,9 +60,8 @@ open System.Runtime.InteropServices [] [] [] -[] -[] -[] +[] +[] [] [] #endif diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Core.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Core.dll.fs index c88d9d117b5..7767485731b 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Core.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Core.dll.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp open System.Reflection @@ -15,7 +15,7 @@ open System.Runtime.InteropServices #if PORTABLE [] -[] // ensure we replace any 4.0.30319.* or 4.0.31105.* versions in the GAC. These are the FileVersions for RTM VS2010 and SP1 VS2010 +[] #endif do() diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Data.TypeProviders.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Data.TypeProviders.dll.fs index f5a4f3d1ab1..593bd4ce6ab 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Data.TypeProviders.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Data.TypeProviders.dll.fs @@ -1,6 +1,5 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#light namespace Microsoft.FSharp open System.Reflection open System.Runtime.InteropServices @@ -14,11 +13,9 @@ open System.Runtime.InteropServices do() #if NO_STRONG_NAMES -[] -[] +[] #else -[] // ensure we replace any 4.0.30319.* or 4.0.31105.* versions in the GAC. These are the FileVersions for RTM VS2010 and SP1 VS2010 -[] -[] +[] +[] #endif do() diff --git a/src/assemblyinfo/assemblyinfo.fsc.exe.fs b/src/assemblyinfo/assemblyinfo.fsc.exe.fs index d74fb629294..353c1635ca4 100644 --- a/src/assemblyinfo/assemblyinfo.fsc.exe.fs +++ b/src/assemblyinfo/assemblyinfo.fsc.exe.fs @@ -1,6 +1,5 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#light namespace Microsoft.FSharp open System.Reflection open System.Runtime.InteropServices @@ -12,5 +11,5 @@ open System.Runtime.InteropServices [] [] -[] +[] do() diff --git a/src/assemblyinfo/assemblyinfo.fsi.exe.fs b/src/assemblyinfo/assemblyinfo.fsi.exe.fs index b28fdaf8858..3c906f88052 100644 --- a/src/assemblyinfo/assemblyinfo.fsi.exe.fs +++ b/src/assemblyinfo/assemblyinfo.fsi.exe.fs @@ -1,6 +1,5 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#light namespace Microsoft.FSharp open System.Reflection [] @@ -9,6 +8,3 @@ open System.Reflection [] [] do() - - -do() diff --git a/src/fsharp-compiler-build.proj b/src/fsharp-compiler-build.proj index a1db2680d4c..bc0c2a222ed 100644 --- a/src/fsharp-compiler-build.proj +++ b/src/fsharp-compiler-build.proj @@ -1,4 +1,4 @@ - + net40 diff --git a/src/fsharp-compiler-unittests-build.proj b/src/fsharp-compiler-unittests-build.proj index 200c883d9a0..b7fcc7629da 100644 --- a/src/fsharp-compiler-unittests-build.proj +++ b/src/fsharp-compiler-unittests-build.proj @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp-library-build.proj b/src/fsharp-library-build.proj index 956af271ed1..372f3a1ed2c 100644 --- a/src/fsharp-library-build.proj +++ b/src/fsharp-library-build.proj @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp-library-unittests-build.proj b/src/fsharp-library-unittests-build.proj index 202385b1fe3..b8018714007 100644 --- a/src/fsharp-library-unittests-build.proj +++ b/src/fsharp-library-unittests-build.proj @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp-proto-build.proj b/src/fsharp-proto-build.proj index 77c6e44d780..d6fb326a5e8 100644 --- a/src/fsharp-proto-build.proj +++ b/src/fsharp-proto-build.proj @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp-typeproviders-build.proj b/src/fsharp-typeproviders-build.proj index 8f149b1c765..c7786a0a42f 100644 --- a/src/fsharp-typeproviders-build.proj +++ b/src/fsharp-typeproviders-build.proj @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp.sln b/src/fsharp.sln index 0e9eb059b59..b7fbf07f332 100644 --- a/src/fsharp.sln +++ b/src/fsharp.sln @@ -33,6 +33,12 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsiAnyCPU", "fsharp\fsiAnyC EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Unittests", "fsharp\FSharp.Compiler.Unittests\FSharp.Compiler.Unittests.fsproj", "{A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{E49B77EA-64DE-451A-A5E6-A6632FC1F03C}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Tests", "..\tests\fsharp\FSharp.Tests.fsproj", "{C163E892-5BF7-4B59-AA99-B0E8079C67C4}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharpQA.Tests", "..\tests\fsharpqa\Source\FSharpQA.Tests.fsproj", "{21958DEB-133B-4760-A238-1293ED9687EC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -81,8 +87,22 @@ Global {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Debug|Any CPU.Build.0 = Debug|Any CPU {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Release|Any CPU.ActiveCfg = Release|Any CPU {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Release|Any CPU.Build.0 = Release|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C163E892-5BF7-4B59-AA99-B0E8079C67C4}.Release|Any CPU.Build.0 = Release|Any CPU + {21958DEB-133B-4760-A238-1293ED9687EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {21958DEB-133B-4760-A238-1293ED9687EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {21958DEB-133B-4760-A238-1293ED9687EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {21958DEB-133B-4760-A238-1293ED9687EC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {88E2D422-6852-46E3-A740-83E391DC7973} = {E49B77EA-64DE-451A-A5E6-A6632FC1F03C} + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5} = {E49B77EA-64DE-451A-A5E6-A6632FC1F03C} + {C163E892-5BF7-4B59-AA99-B0E8079C67C4} = {E49B77EA-64DE-451A-A5E6-A6632FC1F03C} + {21958DEB-133B-4760-A238-1293ED9687EC} = {E49B77EA-64DE-451A-A5E6-A6632FC1F03C} + EndGlobalSection EndGlobal diff --git a/src/fsharp/augment.fs b/src/fsharp/AugmentWithHashCompare.fs similarity index 98% rename from src/fsharp/augment.fs rename to src/fsharp/AugmentWithHashCompare.fs index 41c8e225d26..3b4031007c1 100644 --- a/src/fsharp/augment.fs +++ b/src/fsharp/AugmentWithHashCompare.fs @@ -1,7 +1,8 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Generate the hash/compare functions we add to user-defined types by default. -module internal Microsoft.FSharp.Compiler.Augment +module internal Microsoft.FSharp.Compiler.AugmentWithHashCompare + open Internal.Utilities open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL @@ -14,7 +15,7 @@ open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.PrettyNaming open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Infos let mkIComparableCompareToSlotSig g = @@ -189,7 +190,7 @@ let mkRecdCompare g tcref (tycon:Tycon) = let compe = mkILCallGetComparer g m let mkTest (fspec:RecdField) = let fty = fspec.FormalType - let fref = mkNestedRecdFieldRef tcref fspec + let fref = tcref.MakeNestedRecdFieldRef fspec let m = fref.Range mkCallGenericComparisonWithComparerOuter g m fty compe @@ -213,7 +214,7 @@ let mkRecdCompareWithComparer g tcref (tycon:Tycon) (_thisv,thise) (_,thate) com let mkTest (fspec:RecdField) = let fty = fspec.FormalType - let fref = mkNestedRecdFieldRef tcref fspec + let fref = tcref.MakeNestedRecdFieldRef fspec let m = fref.Range mkCallGenericComparisonWithComparerOuter g m fty compe @@ -237,7 +238,7 @@ let mkRecdEquality g tcref (tycon:Tycon) = let thisv,thatv,thise,thate = mkThisVarThatVar g m ty let mkTest (fspec:RecdField) = let fty = fspec.FormalType - let fref = mkNestedRecdFieldRef tcref fspec + let fref = tcref.MakeNestedRecdFieldRef fspec let m = fref.Range mkCallGenericEqualityEROuter g m fty (mkRecdFieldGetViaExprAddr(thise, fref, tinst, m)) @@ -258,7 +259,7 @@ let mkRecdEqualityWithComparer g tcref (tycon:Tycon) (_thisv,thise) thatobje (th let mkTest (fspec:RecdField) = let fty = fspec.FormalType - let fref = mkNestedRecdFieldRef tcref fspec + let fref = tcref.MakeNestedRecdFieldRef fspec let m = fref.Range mkCallGenericEqualityWithComparerOuter g m fty @@ -338,7 +339,7 @@ let mkUnionCompare g tcref (tycon:Tycon) = let expr = let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) let mkCase ucase = - let cref = mkNestedUnionCaseRef tcref ucase + let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range let thisucv,thisucve = mkCompGenLocal m "thisCast" (mkProvenUnionCaseTy cref tinst) let thatucv,thatucve = mkCompGenLocal m "objCast" (mkProvenUnionCaseTy cref tinst) @@ -395,7 +396,7 @@ let mkUnionCompareWithComparer g tcref (tycon:Tycon) (_thisv,thise) (thatv,thate let expr = let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) let mkCase ucase = - let cref = mkNestedUnionCaseRef tcref ucase + let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range let thisucv,thisucve = mkCompGenLocal m "thisCastu" (mkProvenUnionCaseTy cref tinst) let thatucv,thatucve = mkCompGenLocal m "thatCastu" (mkProvenUnionCaseTy cref tinst) @@ -454,7 +455,7 @@ let mkUnionEquality g tcref (tycon:Tycon) = let expr = let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) let mkCase ucase = - let cref = mkNestedUnionCaseRef tcref ucase + let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range let thisucv,thisucve = mkCompGenLocal m "thisCast" (mkProvenUnionCaseTy cref tinst) let thatucv,thatucve = mkCompGenLocal m "objCast" (mkProvenUnionCaseTy cref tinst) @@ -509,7 +510,7 @@ let mkUnionEqualityWithComparer g tcref (tycon:Tycon) (_thisv,thise) thatobje (t let expr = let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) let mkCase ucase = - let cref = mkNestedUnionCaseRef tcref ucase + let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range let thisucv,thisucve = mkCompGenLocal m "thisCastu" (mkProvenUnionCaseTy cref tinst) let thatucv,thatucve = mkCompGenLocal m "thatCastu" (mkProvenUnionCaseTy cref tinst) @@ -566,7 +567,7 @@ let mkRecdHashWithComparer g tcref (tycon:Tycon) compe = let thisv,thise = mkThisVar g m ty let mkFieldHash (fspec:RecdField) = let fty = fspec.FormalType - let fref = mkNestedRecdFieldRef tcref fspec + let fref = tcref.MakeNestedRecdFieldRef fspec let m = fref.Range let e = mkRecdFieldGetViaExprAddr(thise, fref, tinst, m) @@ -604,7 +605,7 @@ let mkUnionHashWithComparer g tcref (tycon:Tycon) compe = let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) let accv,acce = mkMutableCompGenLocal m "i" g.int_ty let mkCase i ucase1 = - let c1ref = mkNestedUnionCaseRef tcref ucase1 + let c1ref = tcref.MakeNestedUnionCaseRef ucase1 let ucv,ucve = mkCompGenLocal m "unionCase" (mkProvenUnionCaseTy c1ref tinst) let m = c1ref.Range let mkHash j (rfield:RecdField) = @@ -817,7 +818,7 @@ let TyconIsCandidateForAugmentationWithHash g tycon = TyconIsCandidateForAugment // IComparable semantics associated with F# types. //------------------------------------------------------------------------- -let slotImplMethod (final,c,slotsig) = +let slotImplMethod (final,c,slotsig) : ValMemberInfo = { ImplementedSlotSigs=[slotsig]; MemberFlags= { IsInstance=true; @@ -828,7 +829,7 @@ let slotImplMethod (final,c,slotsig) = IsImplemented=false; ApparentParent=c} -let nonVirtualMethod c = +let nonVirtualMethod c : ValMemberInfo = { ImplementedSlotSigs=[]; MemberFlags={ IsInstance=true; IsDispatchSlot=false; diff --git a/src/fsharp/augment.fsi b/src/fsharp/AugmentWithHashCompare.fsi similarity index 84% rename from src/fsharp/augment.fsi rename to src/fsharp/AugmentWithHashCompare.fsi index 602c0cc2bc0..87e0718e995 100644 --- a/src/fsharp/augment.fsi +++ b/src/fsharp/AugmentWithHashCompare.fsi @@ -1,7 +1,7 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Generate the hash/compare functions we add to user-defined types by default. -module internal Microsoft.FSharp.Compiler.Augment +module internal Microsoft.FSharp.Compiler.AugmentWithHashCompare open Internal.Utilities open Microsoft.FSharp.Compiler.AbstractIL @@ -9,7 +9,7 @@ open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Tast -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals val CheckAugmentationAttribs : bool -> TcGlobals -> Import.ImportMap -> Tycon -> unit val TyconIsCandidateForAugmentationWithCompare : TcGlobals -> Tycon -> bool diff --git a/src/fsharp/formats.fs b/src/fsharp/CheckFormatStrings.fs similarity index 56% rename from src/fsharp/formats.fs rename to src/fsharp/CheckFormatStrings.fs index 12e79af2674..5341822b09b 100644 --- a/src/fsharp/formats.fs +++ b/src/fsharp/CheckFormatStrings.fs @@ -1,6 +1,6 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Formats +module internal Microsoft.FSharp.Compiler.CheckFormatStrings open Internal.Utilities open Microsoft.FSharp.Compiler @@ -8,10 +8,11 @@ open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler.Ast +open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.ConstraintSolver type FormatItem = Simple of TType | FuncAndVal @@ -24,7 +25,7 @@ let lowestDefaultPriority = 0 (* See comment on TyparConstraint.DefaultsTo *) let mkFlexibleFormatTypar m tys dflt = let tp = NewTypar (TyparKind.Type,TyparRigidity.Rigid,Typar(mkSynId m "fmt",HeadTypeStaticReq,true),false,TyparDynamicReq.Yes,[],false,false) - tp.FixupConstraints [ TyparConstraint.SimpleChoice (tys,m); TyparConstraint.DefaultsTo (lowestDefaultPriority,dflt,m)]; + tp.FixupConstraints [ TyparConstraint.SimpleChoice (tys,m); TyparConstraint.DefaultsTo (lowestDefaultPriority,dflt,m)] copyAndFixupFormatTypar m tp let mkFlexibleIntFormatTypar g m = @@ -37,37 +38,61 @@ let mkFlexibleFloatFormatTypar g m = let isDigit c = ('0' <= c && c <= '9') type FormatInfoRegister = - { mutable leftJustify : bool; - mutable numPrefixIfPos : char option; - mutable addZeros : bool; + { mutable leftJustify : bool + mutable numPrefixIfPos : char option + mutable addZeros : bool mutable precision : bool} let newInfo ()= - { leftJustify = false; - numPrefixIfPos = None; - addZeros = false; + { leftJustify = false + numPrefixIfPos = None + addZeros = false precision = false} -let ParseFormatString m g fmt bty cty dty = +let parseFormatStringInternal (m:range) g (source: string option) fmt bty cty = + // Offset is used to adjust ranges depending on whether input string is regular, verbatim or triple-quote. + // We construct a new 'fmt' string since the current 'fmt' string doesn't distinguish between "\n" and escaped "\\n". + let (offset, fmt) = + match source with + | Some source -> + let source = source.Replace("\r\n", "\n").Replace("\r", "\n") + let positions = + source.Split('\n') + |> Seq.map (fun s -> String.length s + 1) + |> Seq.scan (+) 0 + |> Seq.toArray + let length = source.Length + if m.EndLine < positions.Length then + let startIndex = positions.[m.StartLine-1] + m.StartColumn + let endIndex = positions.[m.EndLine-1] + m.EndColumn - 1 + if startIndex < length-3 && source.[startIndex..startIndex+2] = "\"\"\"" then + (3, source.[startIndex+3..endIndex-3]) + elif startIndex < length-2 && source.[startIndex..startIndex+1] = "@\"" then + (2, source.[startIndex+2..endIndex-1]) + else (1, source.[startIndex+1..endIndex-1]) + else (1, fmt) + | None -> (1, fmt) + let len = String.length fmt - let rec parseLoop acc i = + let specifierLocations = ResizeArray() + + let rec parseLoop acc (i, relLine, relCol) = if i >= len then let argtys = if acc |> List.forall (fun (p, _) -> p = None) then // without positional specifiers acc |> List.map snd |> List.rev else failwithf "%s" <| FSComp.SR.forPositionalSpecifiersNotPermitted() - - let aty = List.foldBack (-->) argtys dty - let ety = mkTupledTy g argtys - aty,ety + argtys elif System.Char.IsSurrogatePair(fmt,i) then - parseLoop acc (i+2) + parseLoop acc (i+2, relLine, relCol+2) else let c = fmt.[i] match c with | '%' -> + let startCol = relCol + let relCol = relCol+1 let i = i+1 if i >= len then failwithf "%s" <| FSComp.SR.forMissingFormatSpecifier() let info = newInfo() @@ -76,58 +101,58 @@ let ParseFormatString m g fmt bty cty dty = if i >= len then failwithf "%s" <| FSComp.SR.forMissingFormatSpecifier() match fmt.[i] with | '-' -> - if info.leftJustify then failwithf "%s" <| FSComp.SR.forFlagSetTwice("-"); - info.leftJustify <- true; + if info.leftJustify then failwithf "%s" <| FSComp.SR.forFlagSetTwice("-") + info.leftJustify <- true flags(i+1) | '+' -> if info.numPrefixIfPos <> None then failwithf "%s" <| FSComp.SR.forPrefixFlagSpacePlusSetTwice() - info.numPrefixIfPos <- Some '+'; + info.numPrefixIfPos <- Some '+' flags(i+1) | '0' -> - if info.addZeros then failwithf "%s" <| FSComp.SR.forFlagSetTwice("0"); - info.addZeros <- true; + if info.addZeros then failwithf "%s" <| FSComp.SR.forFlagSetTwice("0") + info.addZeros <- true flags(i+1) | ' ' -> - if info.numPrefixIfPos <> None then failwithf "%s" <| FSComp.SR.forPrefixFlagSpacePlusSetTwice(); - info.numPrefixIfPos <- Some ' '; + if info.numPrefixIfPos <> None then failwithf "%s" <| FSComp.SR.forPrefixFlagSpacePlusSetTwice() + info.numPrefixIfPos <- Some ' ' flags(i+1) - | '#' -> failwithf "%s" <| FSComp.SR.forHashSpecifierIsInvalid(); + | '#' -> failwithf "%s" <| FSComp.SR.forHashSpecifierIsInvalid() | _ -> i let rec digitsPrecision i = - if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision(); + if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision() match fmt.[i] with | c when isDigit c -> digitsPrecision (i+1) | _ -> i let precision i = - if i >= len then failwithf "%s" <| FSComp.SR.forBadWidth(); + if i >= len then failwithf "%s" <| FSComp.SR.forBadWidth() match fmt.[i] with | c when isDigit c -> info.precision <- true; false,digitsPrecision (i+1) | '*' -> info.precision <- true; true,(i+1) | _ -> failwithf "%s" <| FSComp.SR.forPrecisionMissingAfterDot() let optionalDotAndPrecision i = - if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision(); + if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision() match fmt.[i] with | '.' -> precision (i+1) | _ -> false,i let rec digitsWidthAndPrecision i = - if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision(); + if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision() match fmt.[i] with | c when isDigit c -> digitsWidthAndPrecision (i+1) | _ -> optionalDotAndPrecision i let widthAndPrecision i = - if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision(); + if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision() match fmt.[i] with | c when isDigit c -> false,digitsWidthAndPrecision i | '*' -> true,optionalDotAndPrecision (i+1) | _ -> false,optionalDotAndPrecision i let rec digitsPosition n i = - if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision(); + if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision() match fmt.[i] with | c when isDigit c -> digitsPosition (n*10 + int c - int '0') (i+1) | '$' -> Some n, i+1 @@ -139,14 +164,20 @@ let ParseFormatString m g fmt bty cty dty = let p, i' = digitsPosition (int c - int '0') (i+1) if p = None then None, i else p, i' | _ -> None, i - + + let oldI = i let posi, i = position i + let relCol = relCol + i - oldI + let oldI = i let i = flags i + let relCol = relCol + i - oldI + let oldI = i let widthArg,(precisionArg,i) = widthAndPrecision i + let relCol = relCol + i - oldI - if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision(); + if i >= len then failwithf "%s" <| FSComp.SR.forBadPrecision() let acc = if precisionArg then (Option.map ((+)1) posi, g.int_ty) :: acc else acc @@ -158,20 +189,36 @@ let ParseFormatString m g fmt bty cty dty = failwithf "%s" <| FSComp.SR.forDoesNotSupportPrefixFlag(c.ToString(), (Option.get info.numPrefixIfPos).ToString()) let checkOtherFlags c = - checkNoPrecision c; - checkNoZeroFlag c; + checkNoPrecision c + checkNoZeroFlag c checkNoNumericPrefix c + let collectSpecifierLocation relLine relCol = + match relLine with + | 0 -> + specifierLocations.Add( + Range.mkFileIndexRange m.FileIndex + (Range.mkPos m.StartLine (startCol + offset)) + (Range.mkPos m.StartLine (relCol + offset))) + | _ -> + specifierLocations.Add( + Range.mkFileIndexRange m.FileIndex + (Range.mkPos (m.StartLine + relLine) startCol) + (Range.mkPos (m.StartLine + relLine) relCol)) + let ch = fmt.[i] match ch with - | '%' -> parseLoop acc (i+1) + | '%' -> + parseLoop acc (i+1, relLine, relCol+1) | ('d' | 'i' | 'o' | 'u' | 'x' | 'X') -> - if info.precision then failwithf "%s" <| FSComp.SR.forFormatDoesntSupportPrecision(ch.ToString()); - parseLoop ((posi, mkFlexibleIntFormatTypar g m) :: acc) (i+1) + if info.precision then failwithf "%s" <| FSComp.SR.forFormatDoesntSupportPrecision(ch.ToString()) + collectSpecifierLocation relLine relCol + parseLoop ((posi, mkFlexibleIntFormatTypar g m) :: acc) (i+1, relLine, relCol+1) | ('l' | 'L') -> - if info.precision then failwithf "%s" <| FSComp.SR.forFormatDoesntSupportPrecision(ch.ToString()); + if info.precision then failwithf "%s" <| FSComp.SR.forFormatDoesntSupportPrecision(ch.ToString()) + let relCol = relCol+1 let i = i+1 // "bad format specifier ... In F# code you can use %d, %x, %o or %u instead ..." @@ -181,52 +228,79 @@ let ParseFormatString m g fmt bty cty dty = failwithf "%s" <| FSComp.SR.forLIsUnnecessary() match fmt.[i] with | ('d' | 'i' | 'o' | 'u' | 'x' | 'X') -> - parseLoop ((posi, mkFlexibleIntFormatTypar g m) :: acc) (i+1) + collectSpecifierLocation relLine relCol + parseLoop ((posi, mkFlexibleIntFormatTypar g m) :: acc) (i+1, relLine, relCol+1) | _ -> failwithf "%s" <| FSComp.SR.forBadFormatSpecifier() | ('h' | 'H') -> failwithf "%s" <| FSComp.SR.forHIsUnnecessary() | 'M' -> - parseLoop ((posi, g.decimal_ty) :: acc) (i+1) + collectSpecifierLocation relLine relCol + parseLoop ((posi, g.decimal_ty) :: acc) (i+1, relLine, relCol+1) - | ('f' | 'F' | 'e' | 'E' | 'g' | 'G') -> - parseLoop ((posi, mkFlexibleFloatFormatTypar g m) :: acc) (i+1) + | ('f' | 'F' | 'e' | 'E' | 'g' | 'G') -> + collectSpecifierLocation relLine relCol + parseLoop ((posi, mkFlexibleFloatFormatTypar g m) :: acc) (i+1, relLine, relCol+1) | 'b' -> - checkOtherFlags ch; - parseLoop ((posi, g.bool_ty) :: acc) (i+1) + checkOtherFlags ch + collectSpecifierLocation relLine relCol + parseLoop ((posi, g.bool_ty) :: acc) (i+1, relLine, relCol+1) | 'c' -> - checkOtherFlags ch; - parseLoop ((posi, g.char_ty) :: acc) (i+1) + checkOtherFlags ch + collectSpecifierLocation relLine relCol + parseLoop ((posi, g.char_ty) :: acc) (i+1, relLine, relCol+1) | 's' -> - checkOtherFlags ch; - parseLoop ((posi, g.string_ty) :: acc) (i+1) + checkOtherFlags ch + collectSpecifierLocation relLine relCol + parseLoop ((posi, g.string_ty) :: acc) (i+1, relLine, relCol+1) | 'O' -> - checkOtherFlags ch; - parseLoop ((posi, NewInferenceType ()) :: acc) (i+1) + checkOtherFlags ch + collectSpecifierLocation relLine relCol + parseLoop ((posi, NewInferenceType ()) :: acc) (i+1, relLine, relCol+1) | 'A' -> match info.numPrefixIfPos with | None // %A has BindingFlags=Public, %+A has BindingFlags=Public | NonPublic - | Some '+' -> parseLoop ((posi, NewInferenceType ()) :: acc) (i+1) + | Some '+' -> + collectSpecifierLocation relLine relCol + parseLoop ((posi, NewInferenceType ()) :: acc) (i+1, relLine, relCol+1) | Some _ -> failwithf "%s" <| FSComp.SR.forDoesNotSupportPrefixFlag(ch.ToString(), (Option.get info.numPrefixIfPos).ToString()) | 'a' -> - checkOtherFlags ch; + checkOtherFlags ch let xty = NewInferenceType () let fty = bty --> (xty --> cty) - parseLoop ((Option.map ((+)1) posi, xty) :: (posi, fty) :: acc) (i+1) + collectSpecifierLocation relLine relCol + parseLoop ((Option.map ((+)1) posi, xty) :: (posi, fty) :: acc) (i+1, relLine, relCol+1) | 't' -> - checkOtherFlags ch; - parseLoop ((posi, bty --> cty) :: acc) (i+1) + checkOtherFlags ch + collectSpecifierLocation relLine relCol + parseLoop ((posi, bty --> cty) :: acc) (i+1, relLine, relCol+1) | c -> failwithf "%s" <| FSComp.SR.forBadFormatSpecifierGeneral(String.make 1 c) - - | _ -> parseLoop acc (i+1) - parseLoop [] 0 + + | '\n' -> parseLoop acc (i+1, relLine+1, 0) + | _ -> parseLoop acc (i+1, relLine, relCol+1) + + let results = parseLoop [] (0, 0, m.StartColumn) + results, Seq.toList specifierLocations + +let ParseFormatString m g source fmt bty cty dty = + let argtys, specifierLocations = parseFormatStringInternal m g source fmt bty cty + let aty = List.foldBack (-->) argtys dty + let ety = mkTupledTy g argtys + (aty, ety), specifierLocations + +let TryCountFormatStringArguments m g fmt bty cty = + try + let argtys, _specifierLocations = parseFormatStringInternal m g None fmt bty cty + Some argtys.Length + with _ -> + None diff --git a/src/fsharp/CheckFormatStrings.fsi b/src/fsharp/CheckFormatStrings.fsi new file mode 100644 index 00000000000..cd04c36d67b --- /dev/null +++ b/src/fsharp/CheckFormatStrings.fsi @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +/// Parse "printf-style" format specifiers at compile time, producing +/// a list of items that specify the types of the things that follow. +/// +/// Must be updated if the Printf runtime component is updated. + +module internal Microsoft.FSharp.Compiler.CheckFormatStrings + +open Internal.Utilities +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.AbstractIL.Internal + +val ParseFormatString : Range.range -> TcGlobals -> source: string option -> fmt: string -> bty: TType -> cty: TType -> dty: TType -> (TType * TType) * Range.range list + +val TryCountFormatStringArguments : m:Range.range -> g:TcGlobals -> fmt:string -> bty:TType -> cty:TType -> int option diff --git a/src/fsharp/build.fs b/src/fsharp/CompileOps.fs old mode 100644 new mode 100755 similarity index 86% rename from src/fsharp/build.fs rename to src/fsharp/CompileOps.fs index cda122e9a8d..83b1b7a8d8e --- a/src/fsharp/build.fs +++ b/src/fsharp/CompileOps.fs @@ -1,28 +1,28 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +/// Coordinating compiler operations - configuration, loading initial context, reporting errors etc. +module internal Microsoft.FSharp.Compiler.CompileOps -/// Loading initial context, reporting errors etc. -module internal Microsoft.FSharp.Compiler.Build open System open System.Text open System.IO open System.Collections.Generic open Internal.Utilities open Internal.Utilities.Text +open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics -open Microsoft.FSharp.Compiler.Pickle +open Microsoft.FSharp.Compiler.TastPickle open Microsoft.FSharp.Compiler.Range -open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.TypeChecker open Microsoft.FSharp.Compiler.SR open Microsoft.FSharp.Compiler.DiagnosticMessage module Tc = Microsoft.FSharp.Compiler.TypeChecker -module SR = Microsoft.FSharp.Compiler.SR open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Range @@ -31,16 +31,15 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lexhelp open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.ConstraintSolver open Microsoft.FSharp.Compiler.MSBuildResolver -open Microsoft.FSharp.Compiler.Typrelns -open Microsoft.FSharp.Compiler.Nameres +open Microsoft.FSharp.Compiler.TypeRelations +open Microsoft.FSharp.Compiler.NameResolution open Microsoft.FSharp.Compiler.PrettyNaming -open Internal.Utilities.FileSystem open Internal.Utilities.Collections open Internal.Utilities.Filename open Microsoft.FSharp.Compiler.Import @@ -71,13 +70,13 @@ open FullCompiler // Some Globals //-------------------------------------------------------------------------- -let sigSuffixes = [".mli";".fsi"] +let FSharpSigFileSuffixes = [".mli";".fsi"] let mlCompatSuffixes = [".mli";".ml"] -let implSuffixes = [".ml";".fs";".fsscript";".fsx"] +let FSharpImplFileSuffixes = [".ml";".fs";".fsscript";".fsx"] let resSuffixes = [".resx"] -let scriptSuffixes = [".fsscript";".fsx"] -let doNotRequireNamespaceOrModuleSuffixes = [".mli";".ml"] @ scriptSuffixes -let lightSyntaxDefaultExtensions : string list = [ ".fs";".fsscript";".fsx";".fsi" ] +let FSharpScriptFileSuffixes = [".fsscript";".fsx"] +let doNotRequireNamespaceOrModuleSuffixes = [".mli";".ml"] @ FSharpScriptFileSuffixes +let FSharpLightSyntaxFileSuffixes : string list = [ ".fs";".fsscript";".fsx";".fsi" ] //---------------------------------------------------------------------------- @@ -102,7 +101,7 @@ exception HashLoadedScriptConsideredSource of range exception InvalidInternalsVisibleToAssemblyName of (*badName*)string * (*fileName option*) string option -let RangeOfError(err:PhasedError) = +let GetRangeOfError(err:PhasedError) = let rec RangeFromException = function | ErrorFromAddingConstraint(_,err2,_) -> RangeFromException err2 #if EXTENSIONTYPING @@ -154,8 +153,8 @@ let RangeOfError(err:PhasedError) = | FullAbstraction(_,m) | InterfaceNotRevealed(_,_,m) | WrappedError (_,m) - | Patcompile.MatchIncomplete (_,_,m) - | Patcompile.RuleNeverMatched m + | PatternMatchCompilation.MatchIncomplete (_,_,m) + | PatternMatchCompilation.RuleNeverMatched m | ValNotMutable(_,_,m) | ValNotLocal(_,_,m) | MissingFields(_,m) @@ -191,7 +190,6 @@ let RangeOfError(err:PhasedError) = | UnresolvedOverloading(_,_,_,m) | UnresolvedConversionOperator (_,_,_,m) | PossibleOverload(_,_,_, m) - //| PossibleBestOverload(_,_,m) | VirtualAugmentationOnNullValuedType(m) | NonVirtualAugmentationOnNullValuedType(m) | NonRigidTypar(_,_,_,_,_,m) @@ -266,8 +264,8 @@ let GetErrorNumber(err:PhasedError) = | LetRecEvaluatedOutOfOrder _ -> 22 | NameClash _ -> 23 // 24 cannot be reused - | Patcompile.MatchIncomplete _ -> 25 - | Patcompile.RuleNeverMatched _ -> 26 + | PatternMatchCompilation.MatchIncomplete _ -> 25 + | PatternMatchCompilation.RuleNeverMatched _ -> 26 | ValNotMutable _ -> 27 | ValNotLocal _ -> 28 | MissingFields _ -> 29 @@ -723,13 +721,9 @@ let OutputPhasedErrorR (os:System.Text.StringBuilder) (err:PhasedError) = os.Append(Duplicate2E().Format k (DecompileOpName s)) |> ignore | UndefinedName(_,k,id,_) -> os.Append(k (DecompileOpName id.idText)) |> ignore - - | InternalUndefinedTyconItem(f,tcref,s) -> - let _, errs = f((fullDisplayTextOfTyconRef tcref), s) - os.Append(errs) |> ignore - | InternalUndefinedItemRef(f,smr,ccuName,s) -> - let _, errs = f(smr, ccuName, s) - os.Append(errs) |> ignore + | InternalUndefinedItemRef(f,smr,ccuName,s) -> + let _, errs = f(smr, ccuName, s) + os.Append(errs) |> ignore | FieldNotMutable _ -> os.Append(FieldNotMutableE().Format) |> ignore | FieldsFromDifferentTypes (_,fref1,fref2,_) -> @@ -1203,7 +1197,7 @@ let OutputPhasedErrorR (os:System.Text.StringBuilder) (err:PhasedError) = #endif | FullAbstraction(s,_) -> os.Append(FullAbstractionE().Format s) |> ignore | WrappedError (exn,_) -> OutputExceptionR os exn - | Patcompile.MatchIncomplete (isComp,cexOpt,_) -> + | PatternMatchCompilation.MatchIncomplete (isComp,cexOpt,_) -> os.Append(MatchIncomplete1E().Format) |> ignore match cexOpt with | None -> () @@ -1211,7 +1205,7 @@ let OutputPhasedErrorR (os:System.Text.StringBuilder) (err:PhasedError) = | Some (cex,true) -> os.Append(MatchIncomplete3E().Format cex) |> ignore if isComp then os.Append(MatchIncomplete4E().Format) |> ignore - | Patcompile.RuleNeverMatched _ -> os.Append(RuleNeverMatchedE().Format) |> ignore + | PatternMatchCompilation.RuleNeverMatched _ -> os.Append(RuleNeverMatchedE().Format) |> ignore | ValNotMutable _ -> os.Append(ValNotMutableE().Format) |> ignore | ValNotLocal _ -> os.Append(ValNotLocalE().Format) |> ignore | ObsoleteError (s, _) @@ -1350,6 +1344,7 @@ type ErrorStyle = | EmacsErrors | TestErrors | VSErrors + | GccErrors let SanitizeFileName fileName implicitIncludeDir = // The assert below is almost ok, but it fires in two cases: @@ -1357,7 +1352,7 @@ let SanitizeFileName fileName implicitIncludeDir = // - if you have a #line directive, e.g. // # 1000 "Line01.fs" // then it also asserts. But these are edge cases that can be fixed later, e.g. in bug 4651. - //System.Diagnostics.Debug.Assert(System.IO.Path.IsPathRooted(fileName), sprintf "filename should be absolute: '%s'" fileName) + //System.Diagnostics.Debug.Assert(FileSystem.IsPathRootedShim(fileName), sprintf "filename should be absolute: '%s'" fileName) try let fullPath = FileSystem.GetFullPathShim(fileName) let currentDir = implicitIncludeDir @@ -1371,35 +1366,33 @@ let SanitizeFileName fileName implicitIncludeDir = with _ -> fileName +[] type ErrorLocation = - { - Range : range - File : string - TextRepresentation : string - IsEmpty : bool - } + { Range : range + File : string + TextRepresentation : string + IsEmpty : bool } +[] type CanonicalInformation = - { - ErrorNumber : int - Subcategory : string - TextRepresentation : string - } + { ErrorNumber : int + Subcategory : string + TextRepresentation : string } +[] type DetailedIssueInfo = - { - Location : ErrorLocation option - Canonical : CanonicalInformation - Message : string - } + { Location : ErrorLocation option + Canonical : CanonicalInformation + Message : string } +[] type ErrorOrWarning = | Short of bool * string | Long of bool * DetailedIssueInfo /// returns sequence that contains ErrorOrWarning for the given error + ErrorOrWarning for all related errors let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorStyle,warn, err:PhasedError) = - let outputWhere (showFullPaths,errorStyle) m = + let outputWhere (showFullPaths,errorStyle) m : ErrorLocation = if m = rangeStartup || m = rangeCmdArgs then { Range = m; TextRepresentation = ""; IsEmpty = true; File = "" } else @@ -1426,6 +1419,11 @@ let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorS let m = mkRange m.FileName (mkPos m.StartLine (m.StartColumn + 1)) (mkPos m.EndLine (m.EndColumn + 1) ) sprintf "%s(%d,%d-%d,%d): " file m.StartLine m.StartColumn m.EndLine m.EndColumn, m, file + | ErrorStyle.GccErrors -> + let file = file.Replace('/',System.IO.Path.DirectorySeparatorChar) + let m = mkRange m.FileName (mkPos m.StartLine (m.StartColumn + 1)) (mkPos m.EndLine (m.EndColumn + 1) ) + sprintf "%s:%d:%d: " file m.StartLine m.StartColumn, m, file + // Here, we want the complete range information so Project Systems can generate proper squiggles | ErrorStyle.VSErrors -> // Show prefix only for real files. Otherise, we just want a truncated error like: @@ -1449,11 +1447,11 @@ let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorS let errors = ResizeArray() let report err = let OutputWhere(err) = - match RangeOfError err with + match GetRangeOfError err with | Some m -> Some(outputWhere (showFullPaths,errorStyle) m) | None -> None - let OutputCanonicalInformation(err:PhasedError,subcategory, errorNumber) = + let OutputCanonicalInformation(err:PhasedError,subcategory, errorNumber) : CanonicalInformation = let text = match errorStyle with // Show the subcategory for --vserrors so that we can fish it out in Visual Studio and use it to determine error stickiness. @@ -1469,7 +1467,7 @@ let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorS OutputPhasedError os mainError flattenErrors; os.ToString() - let entry = { Location = where; Canonical = canonical; Message = message } + let entry : DetailedIssueInfo = { Location = where; Canonical = canonical; Message = message } errors.Add ( ErrorOrWarning.Long( not warn, entry ) ) @@ -1484,7 +1482,7 @@ let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorS OutputPhasedError os err flattenErrors os.ToString() - let entry = { Location = relWhere; Canonical = relCanonical; Message = relMessage} + let entry : DetailedIssueInfo = { Location = relWhere; Canonical = relCanonical; Message = relMessage} errors.Add( ErrorOrWarning.Long (not warn, entry) ) | _ -> @@ -1514,9 +1512,9 @@ let rec OutputErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,err for e in errors do Printf.bprintf os "\n" match e with - | Short(_, txt) -> + | ErrorOrWarning.Short(_, txt) -> os.Append txt |> ignore - | Long(_, details) -> + | ErrorOrWarning.Long(_, details) -> match details.Location with | Some l when not l.IsEmpty -> os.Append(l.TextRepresentation) |> ignore | _ -> () @@ -1524,7 +1522,7 @@ let rec OutputErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,err os.Append( details.Message ) |> ignore let OutputErrorOrWarningContext prefix fileLineFn os err = - match RangeOfError err with + match GetRangeOfError err with | None -> () | Some m -> let filename = m.FileName @@ -1545,7 +1543,11 @@ let OutputErrorOrWarningContext prefix fileLineFn os err = let GetFSharpCoreLibraryName () = "FSharp.Core" type internal TypeInThisAssembly = class end -let GetFSharpCoreReferenceUsedByCompiler() = +let GetFSharpCoreReferenceUsedByCompiler(useMonoResolution) = + // On Mono, there is no good reference resolution + if useMonoResolution then + GetFSharpCoreLibraryName()+".dll" + else let fsCoreName = GetFSharpCoreLibraryName() typeof.Assembly.GetReferencedAssemblies() |> Array.pick (fun name -> @@ -1616,10 +1618,10 @@ let SystemAssemblies primaryAssemblyName = // // REVIEW: it isn't clear if there is any negative effect // of leaving an assembly off this list. -let BasicReferencesForScriptLoadClosure = - ["mscorlib"; GetFSharpCoreLibraryName () ] @ // Need to resolve these explicitly so they will be found in the reference assemblies directory which is where the .xml files are. +let BasicReferencesForScriptLoadClosure(useMonoResolution, useFsiAuxLib) = + ["mscorlib"; GetFSharpCoreReferenceUsedByCompiler(useMonoResolution) ] @ // Need to resolve these explicitly so they will be found in the reference assemblies directory which is where the .xml files are. DefaultBasicReferencesForOutOfProjectSources @ - [ GetFsiLibraryName () ] + [ if useFsiAuxLib then yield GetFsiLibraryName () ] let (++) x s = x @ [s] @@ -1681,6 +1683,7 @@ type CompilerTarget = type ResolveAssemblyReferenceMode = Speculative | ReportErrors +/// Represents the file or string used for the --version flag type VersionFlag = | VersionString of string | VersionFile of string @@ -1704,10 +1707,42 @@ type VersionFlag = | VersionNone -> "0.0.0.0" +/// Represents a reference to an assembly. May be backed by a real assembly on disk, or a cross-project +/// reference backed by information generated by the the compiler service. +type IRawFSharpAssemblyData = + /// The raw list AutoOpenAttribute attributes in the assembly + abstract GetAutoOpenAttributes : ILGlobals -> string list + /// The raw list InternalsVisibleToAttribute attributes in the assembly + abstract GetInternalsVisibleToAttributes : ILGlobals -> string list + /// The raw IL module definition in the assembly, if any. This is not present for cross-project references + /// in the language service + abstract TryGetRawILModule : unit -> ILModuleDef option + /// The raw F# signature data in the assembly, if any + abstract GetRawFSharpSignatureData : range * ilShortAssemName: string * fileName: string -> (string * byte[]) list + /// The raw F# optimization data in the assembly, if any + abstract GetRawFSharpOptimizationData : range * ilShortAssemName: string * fileName: string -> (string * (unit -> byte[])) list + /// The table of type forwarders in the assembly + abstract GetRawTypeForwarders : unit -> ILExportedTypesAndForwarders + /// The identity of the module + abstract ILScopeRef : ILScopeRef + abstract ILAssemblyRefs : ILAssemblyRef list + abstract ShortAssemblyName : string + abstract HasAnyFSharpSignatureDataAttribute : bool + abstract HasMatchingFSharpSignatureDataAttribute : ILGlobals -> bool + +type IProjectReference = + /// The name of the assembly file generated by the project + abstract FileName : string + /// Evaluate raw contents of the assembly file generated by the project + abstract EvaluateRawContents : unit -> IRawFSharpAssemblyData option + /// Get the logical timestamp that would be the timestamp of the assembly file generated by the project + abstract GetLogicalTimeStamp : unit -> System.DateTime option + type AssemblyReference = - | AssemblyReference of range * string - member x.Range = (let (AssemblyReference(m,_)) = x in m) - member x.Text = (let (AssemblyReference(_,text)) = x in text) + | AssemblyReference of range * string * IProjectReference option + member x.Range = (let (AssemblyReference(m,_,_)) = x in m) + member x.Text = (let (AssemblyReference(_,text,_)) = x in text) + member x.ProjectReference = (let (AssemblyReference(_,_,contents)) = x in contents) member x.SimpleAssemblyNameIs(name) = (String.Compare(fileNameWithoutExtension x.Text, name, StringComparison.OrdinalIgnoreCase) = 0) || (let text = x.Text.ToLowerInvariant() @@ -1723,7 +1758,7 @@ type ResolvedExtensionReference = ResolvedExtensionReference of string * Assembl type ImportedBinary = { FileName: string; - RawMetadata: ILModuleDef; + RawMetadata: IRawFSharpAssemblyData; #if EXTENSIONTYPING ProviderGeneratedAssembly: System.Reflection.Assembly option IsProviderGenerated: bool; @@ -1741,7 +1776,7 @@ type ImportedAssembly = IsProviderGenerated: bool mutable TypeProviders: Tainted list; #endif - FSharpOptimizationData : Microsoft.FSharp.Control.Lazy> } + FSharpOptimizationData : Microsoft.FSharp.Control.Lazy> } type AvailableImportedAssembly = | ResolvedImportedAssembly of ImportedAssembly @@ -1874,6 +1909,7 @@ type TcConfigBuilder = mutable conditionalCompilationDefines: string list; mutable loadedSources: (range * string) list; mutable referencedDLLs : AssemblyReference list; + mutable projectReferences : IProjectReference list; mutable knownUnresolvedReferences : UnresolvedAssemblyReference list; optimizeForMemory: bool; mutable subsystemVersion : int * int @@ -1941,7 +1977,6 @@ type TcConfigBuilder = mutable showFullPaths : bool mutable errorStyle : ErrorStyle - mutable validateTypeProviders: bool mutable utf8output : bool mutable flatErrors: bool @@ -1958,7 +1993,7 @@ type TcConfigBuilder = mutable doTLR : bool (* run TLR pass? *) mutable doFinalSimplify : bool (* do final simplification pass *) mutable optsOn : bool (* optimizations are turned on *) - mutable optSettings : Opt.OptimizationSettings + mutable optSettings : Optimizer.OptimizationSettings mutable emitTailcalls : bool mutable lcid : int option @@ -1978,9 +2013,6 @@ type TcConfigBuilder = /// pause between passes? mutable pause : bool - /// use reflection and indirect calls to call methods taking multidimensional generic arrays - mutable indirectCallArrayMethods : bool - /// whenever possible, emit callvirt instead of call mutable alwaysCallVirt : bool @@ -2000,6 +2032,11 @@ type TcConfigBuilder = /// if true - every expression in quotations will be augmented with full debug info (filename, location in file) mutable emitDebugInfoInQuotations : bool + mutable exename : string option + + // If true - the compiler will copy FSharp.Core.dll along the produced binaries + mutable copyFSharpCore : bool + /// When false FSI will lock referenced assemblies requiring process restart, false = disable Shadow Copy false (*default*) mutable shadowCopyReferences : bool } @@ -2031,6 +2068,7 @@ type TcConfigBuilder = implicitlyResolveAssemblies=true; addVersionSpecificFrameworkReferences=false; referencedDLLs = []; + projectReferences = []; knownUnresolvedReferences = []; loadedSources = []; globalWarnAsError=false; @@ -2101,11 +2139,6 @@ type TcConfigBuilder = linkResources = [] showFullPaths =false errorStyle = ErrorStyle.DefaultErrors -#if COMPILED_AS_LANGUAGE_SERVICE_DLL - validateTypeProviders = true -#else - validateTypeProviders = false -#endif utf8output = false flatErrors = false @@ -2121,7 +2154,7 @@ type TcConfigBuilder = doTLR = false doFinalSimplify = false optsOn = false - optSettings = Opt.OptimizationSettings.Defaults + optSettings = Optimizer.OptimizationSettings.Defaults emitTailcalls = true lcid = None // See bug 6071 for product banner spec @@ -2134,7 +2167,6 @@ type TcConfigBuilder = showExtensionTypeMessages = false #endif pause = false - indirectCallArrayMethods = false alwaysCallVirt = true noDebugData = false isInteractive = isInteractive @@ -2143,6 +2175,8 @@ type TcConfigBuilder = sqmNumOfSourceFiles = 0 sqmSessionStartedTime = System.DateTime.Now.Ticks emitDebugInfoInQuotations = false + exename = None + copyFSharpCore = true shadowCopyReferences = false } @@ -2155,7 +2189,7 @@ type TcConfigBuilder = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) if sourceFiles = [] then errorR(Error(FSComp.SR.buildNoInputsSpecified(),rangeCmdArgs)); let ext() = match tcConfigB.target with Dll -> ".dll" | Module -> ".netmodule" | ConsoleExe | WinExe -> ".exe" - let implFiles = sourceFiles |> List.filter (fun lower -> List.exists (Filename.checkSuffix (String.lowercase lower)) implSuffixes) + let implFiles = sourceFiles |> List.filter (fun lower -> List.exists (Filename.checkSuffix (String.lowercase lower)) FSharpImplFileSuffixes) let outfile = match tcConfigB.outputFile, List.rev implFiles with | None,[] -> "out" + ext() @@ -2228,7 +2262,7 @@ type TcConfigBuilder = tcConfigB.includes <- tcConfigB.includes ++ absolutePath member tcConfigB.AddLoadedSource(m,path,pathLoadedFrom) = - if Path.IsInvalidPath(path) then + if FileSystem.IsInvalidPathShim(path) then warning(Error(FSComp.SR.buildInvalidFilename(path),m)) else let path = @@ -2245,13 +2279,14 @@ type TcConfigBuilder = tcConfigB.embedResources <- tcConfigB.embedResources ++ filename member tcConfigB.AddReferencedAssemblyByPath (m,path) = - if Path.IsInvalidPath(path) then + if FileSystem.IsInvalidPathShim(path) then warning(Error(FSComp.SR.buildInvalidAssemblyName(path),m)) - elif not (List.mem (AssemblyReference(m,path)) tcConfigB.referencedDLLs) then // NOTE: We keep same paths if range is different. - tcConfigB.referencedDLLs <- tcConfigB.referencedDLLs ++ AssemblyReference(m,path) + elif not (tcConfigB.referencedDLLs |> List.exists (fun ar2 -> m=ar2.Range && path=ar2.Text)) then // NOTE: We keep same paths if range is different. + let projectReference = tcConfigB.projectReferences |> List.tryPick (fun pr -> if pr.FileName = path then Some pr else None) + tcConfigB.referencedDLLs <- tcConfigB.referencedDLLs ++ AssemblyReference(m,path,projectReference) member tcConfigB.RemoveReferencedAssemblyByPath (m,path) = - tcConfigB.referencedDLLs <- List.filter (fun (ar : AssemblyReference) -> ar <> AssemblyReference(m,path)) tcConfigB.referencedDLLs + tcConfigB.referencedDLLs <- tcConfigB.referencedDLLs |> List.filter (fun ar-> ar.Range <> m || ar.Text <> path) static member SplitCommandLineResourceInfo ri = if String.contains ri ',' then @@ -2313,18 +2348,30 @@ type AssemblyResolution = sysdir : bool ilAssemblyRef : ILAssemblyRef option ref } + member this.ProjectReference = this.originalReference.ProjectReference member this.ILAssemblyRef = match !this.ilAssemblyRef with | Some(assref) -> assref | None -> - let readerSettings : ILBinaryReader.ILReaderOptions = {pdbPath=None;ilGlobals = EcmaILGlobals;optimizeForMemory=false} // ?? - let reader = ILBinaryReader.OpenILModuleReader this.resolvedPath readerSettings - try - let assRef = mkRefToILAssembly reader.ILModuleDef.ManifestOfAssembly - this.ilAssemblyRef := Some(assRef) - assRef - finally - ILBinaryReader.CloseILModuleReader reader + let assRefOpt = + match this.ProjectReference with + | Some r -> + match r.EvaluateRawContents() with + | None -> None + | Some contents -> + match contents.ILScopeRef with + | ILScopeRef.Assembly aref -> Some aref + | _ -> None + | None -> None + let assRef = + match assRefOpt with + | Some aref -> aref + | None -> + let readerSettings : ILBinaryReader.ILReaderOptions = {pdbPath=None;ilGlobals = EcmaILGlobals;optimizeForMemory=false} // ?? + use reader = ILBinaryReader.OpenILModuleReaderAfterReadingAllBytes this.resolvedPath readerSettings + mkRefToILAssembly reader.ILModuleDef.ManifestOfAssembly + this.ilAssemblyRef := Some(assRef) + assRef //---------------------------------------------------------------------------- @@ -2367,14 +2414,14 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = let data = { data with pause = data.pause } let computeKnownDllReference(libraryName) = - let defaultCoreLibraryReference = AssemblyReference(range0,libraryName+".dll") - let nameOfDll(AssemblyReference(m,filename) as r) = - let filename = ComputeMakePathAbsolute data.implicitIncludeDir filename + let defaultCoreLibraryReference = AssemblyReference(range0,libraryName+".dll",None) + let nameOfDll(r:AssemblyReference) = + let filename = ComputeMakePathAbsolute data.implicitIncludeDir r.Text if FileSystem.SafeExists(filename) then r,Some(filename) else // If the file doesn't exist, let reference resolution logic report the error later... - defaultCoreLibraryReference, if m=rangeStartup then Some(filename) else None + defaultCoreLibraryReference, if r.Range =rangeStartup then Some(filename) else None match data.referencedDLLs |> List.filter(fun assemblyReference -> assemblyReference.SimpleAssemblyNameIs libraryName) with | [r] -> nameOfDll r | [] -> @@ -2391,7 +2438,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = match fileNameOpt with | None -> // if FSharp.Core was not provided explicitly - use version that was referenced by compiler - AssemblyReference(range0, GetFSharpCoreReferenceUsedByCompiler()), None + AssemblyReference(range0, GetFSharpCoreReferenceUsedByCompiler(data.useMonoResolution), None), None | _ -> res let primaryAssemblyCcuInitializer = getSystemRuntimeInitializer data.primaryAssembly (computeKnownDllReference >> fst) @@ -2407,21 +2454,18 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = let filename = ComputeMakePathAbsolute data.implicitIncludeDir primaryAssemblyFilename try - let ilReader = OpenILBinary(filename,data.optimizeForMemory,data.openBinariesInMemory,None,None, data.primaryAssembly.Name, data.noDebugData, data.shadowCopyReferences) - try - let ilModule = ilReader.ILModuleDef + use ilReader = OpenILBinary(filename,data.optimizeForMemory,data.openBinariesInMemory,None,None, data.primaryAssembly.Name, data.noDebugData, data.shadowCopyReferences) + let ilModule = ilReader.ILModuleDef - match ilModule.ManifestOfAssembly.Version with - | Some(v1,v2,v3,_) -> - if v1 = 1us then - warning(Error(FSComp.SR.buildRequiresCLI2(filename),rangeStartup)) - let clrRoot = Some(Path.GetDirectoryName(Path.GetFullPath(filename))) - - clrRoot, (int v1, sprintf "v%d.%d" v1 v2), (v1=5us && v2=0us && v3=5us) // SL5 mscorlib is 5.0.5.0 - | _ -> - failwith (FSComp.SR.buildCouldNotReadVersionInfoFromMscorlib()) - finally - ILBinaryReader.CloseILModuleReader ilReader + match ilModule.ManifestOfAssembly.Version with + | Some(v1,v2,v3,_) -> + if v1 = 1us then + warning(Error(FSComp.SR.buildRequiresCLI2(filename),rangeStartup)) + let clrRoot = Some(Path.GetDirectoryName(FileSystem.GetFullPathShim(filename))) + + clrRoot, (int v1, sprintf "v%d.%d" v1 v2), (v1=5us && v2=0us && v3=5us) // SL5 mscorlib is 5.0.5.0 + | _ -> + failwith (FSComp.SR.buildCouldNotReadVersionInfoFromMscorlib()) with _ -> error(Error(FSComp.SR.buildCannotReadAssembly(filename),rangeStartup)) | _ -> @@ -2469,13 +2513,10 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = | Some(fslibFilename) -> let filename = ComputeMakePathAbsolute data.implicitIncludeDir fslibFilename try - let ilReader = OpenILBinary(filename,data.optimizeForMemory,data.openBinariesInMemory,None,None, data.primaryAssembly.Name, data.noDebugData, data.shadowCopyReferences) - try - checkFSharpBinaryCompatWithMscorlib filename ilReader.ILAssemblyRefs ilReader.ILModuleDef.ManifestOfAssembly.Version rangeStartup; - let fslibRoot = Path.GetDirectoryName(FileSystem.GetFullPathShim(filename)) - fslibRoot (* , sprintf "v%d.%d" v1 v2 *) - finally - ILBinaryReader.CloseILModuleReader ilReader + use ilReader = OpenILBinary(filename,data.optimizeForMemory,data.openBinariesInMemory,None,None, data.primaryAssembly.Name, data.noDebugData, data.shadowCopyReferences) + checkFSharpBinaryCompatWithMscorlib filename ilReader.ILAssemblyRefs ilReader.ILModuleDef.ManifestOfAssembly.Version rangeStartup; + let fslibRoot = Path.GetDirectoryName(FileSystem.GetFullPathShim(filename)) + fslibRoot (* , sprintf "v%d.%d" v1 v2 *) with _ -> error(Error(FSComp.SR.buildCannotReadAssembly(filename),rangeStartup)) | _ -> @@ -2568,7 +2609,6 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member x.linkResources = data.linkResources member x.showFullPaths = data.showFullPaths member x.errorStyle = data.errorStyle - member x.validateTypeProviders = data.validateTypeProviders member x.utf8output = data.utf8output member x.flatErrors = data.flatErrors member x.maxErrors = data.maxErrors @@ -2595,7 +2635,6 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member x.showExtensionTypeMessages = data.showExtensionTypeMessages #endif member x.pause = data.pause - member x.indirectCallArrayMethods = data.indirectCallArrayMethods member x.alwaysCallVirt = data.alwaysCallVirt member x.noDebugData = data.noDebugData member x.isInteractive = data.isInteractive @@ -2604,6 +2643,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member x.sqmSessionGuid = data.sqmSessionGuid member x.sqmNumOfSourceFiles = data.sqmNumOfSourceFiles member x.sqmSessionStartedTime = data.sqmSessionStartedTime + member x.copyFSharpCore = data.copyFSharpCore member x.shadowCopyReferences = data.shadowCopyReferences static member Create(builder,validate) = @@ -2624,23 +2664,15 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = | Some x -> [tcConfig.MakePathAbsolute x] | None -> - // When running on Mono we lead everyone to believe we're doing .NET 2.0 compilation - // by default. if runningOnMono then - let mono10SysDir = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() - assert(mono10SysDir.EndsWith("1.0",StringComparison.Ordinal)); - let mono20SysDir = Path.Combine(Path.GetDirectoryName mono10SysDir, "2.0") - if Directory.Exists(mono20SysDir) then - [mono20SysDir] - else - [mono10SysDir] + [System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()] else try match tcConfig.resolutionEnvironment with | MSBuildResolver.RuntimeLike -> [System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()] | _ -> - let frameworkRoot = MSBuildResolver.DotNetFrameworkReferenceAssembliesRootDirectory + let frameworkRoot = MSBuildResolver.DotNetFrameworkReferenceAssembliesRootDirectoryOnWindows let frameworkRootVersion = Path.Combine(frameworkRoot,tcConfig.targetFrameworkVersionMajorMinor) [frameworkRootVersion] with e -> @@ -2649,7 +2681,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member tcConfig.ComputeLightSyntaxInitialStatus filename = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) let lower = String.lowercase filename - let lightOnByDefault = List.exists (Filename.checkSuffix lower) lightSyntaxDefaultExtensions + let lightOnByDefault = List.exists (Filename.checkSuffix lower) FSharpLightSyntaxFileSuffixes if lightOnByDefault then (tcConfig.light <> Some(false)) else (tcConfig.light = Some(true) ) member tcConfig.GetAvailableLoadedSources() = @@ -2701,12 +2733,30 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = #endif result - member tcConfig.TryResolveLibWithDirectories (AssemblyReference (m,nm) as r) = + member tcConfig.TryResolveLibWithDirectories (r:AssemblyReference) = + let m,nm = r.Range, r.Text use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) // Only want to resolve certain extensions (otherwise, 'System.Xml' is ambiguous). // MSBuild resolution is limitted to .exe and .dll so do the same here. let ext = System.IO.Path.GetExtension(nm) let isNetModule = String.Compare(ext,".netmodule",StringComparison.OrdinalIgnoreCase)=0 + + // See if the language service has already produced the contents of the assembly for us, virtually + match r.ProjectReference with + | Some _ -> + let resolved = r.Text + let sysdir = tcConfig.IsSystemAssembly resolved + let fusionName = resolved + Some + { originalReference = r; + resolvedPath = resolved; + resolvedFrom = Unknown; + fusionName = fusionName; + redist = null; + sysdir = sysdir; + ilAssemblyRef = ref None } + | None -> + if String.Compare(ext,".dll",StringComparison.OrdinalIgnoreCase)=0 || String.Compare(ext,".exe",StringComparison.OrdinalIgnoreCase)=0 || isNetModule then @@ -2730,12 +2780,9 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = else try let readerSettings : ILBinaryReader.ILReaderOptions = {pdbPath=None;ilGlobals = EcmaILGlobals;optimizeForMemory=false} - let reader = ILBinaryReader.OpenILModuleReader resolved readerSettings - try - let assRef = mkRefToILAssembly reader.ILModuleDef.ManifestOfAssembly - assRef.QualifiedName - finally - ILBinaryReader.CloseILModuleReader reader + use reader = ILBinaryReader.OpenILModuleReaderAfterReadingAllBytes resolved readerSettings + let assRef = mkRefToILAssembly reader.ILModuleDef.ManifestOfAssembly + assRef.QualifiedName with e -> "" Some @@ -2749,7 +2796,8 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = | None -> None else None - member tcConfig.ResolveLibWithDirectories ccuLoadFaulureAction (AssemblyReference (m,nm)) = + member tcConfig.ResolveLibWithDirectories ccuLoadFaulureAction (r:AssemblyReference) = + let m,nm = r.Range, r.Text use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) // test for both libraries and executables let ext = System.IO.Path.GetExtension(nm) @@ -2757,13 +2805,13 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = let isDLL = (String.Compare(ext,".dll",StringComparison.OrdinalIgnoreCase) = 0) let isNetModule = (String.Compare(ext,".netmodule",StringComparison.OrdinalIgnoreCase) = 0) - let nms = + let rs = if isExe || isDLL || isNetModule then - [nm] + [r] else - [nm+".dll";nm+".exe";nm+".netmodule"] + [AssemblyReference(m,nm+".dll",None);AssemblyReference(m,nm+".exe",None);AssemblyReference(m,nm+".netmodule",None)] - match (List.tryPick (fun nm -> tcConfig.TryResolveLibWithDirectories(AssemblyReference(m,nm))) nms) with + match rs |> List.tryPick tcConfig.TryResolveLibWithDirectories with | Some(res) -> Some res | None -> match ccuLoadFaulureAction with @@ -2940,17 +2988,15 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member tcConfig.CoreLibraryDllReference() = fslibReference -let warningMem n l = List.mem n l - -let ReportWarning (globalWarnLevel : int) (specificWarnOff : int list) (specificWarnOn : int list) err = +let ReportWarning (globalWarnLevel : int, specificWarnOff : int list, specificWarnOn : int list) err = let n = GetErrorNumber err - warningOn err globalWarnLevel specificWarnOn && not (warningMem n specificWarnOff) + warningOn err globalWarnLevel specificWarnOn && not (List.mem n specificWarnOff) -let ReportWarningAsError (globalWarnLevel : int) (specificWarnOff : int list) (specificWarnOn : int list) (specificWarnAsError : int list) (specificWarnAsWarn : int list) (globalWarnAsError : bool) err = - (warningOn err globalWarnLevel specificWarnOn) && - not(warningMem (GetErrorNumber err) specificWarnAsWarn) && - ((globalWarnAsError && not (warningMem (GetErrorNumber err) specificWarnOff)) || - warningMem (GetErrorNumber err) specificWarnAsError) +let ReportWarningAsError (globalWarnLevel : int, specificWarnOff : int list, specificWarnOn : int list, specificWarnAsError : int list, specificWarnAsWarn : int list, globalWarnAsError : bool) err = + warningOn err globalWarnLevel specificWarnOn && + not (List.mem (GetErrorNumber err) specificWarnAsWarn) && + ((globalWarnAsError && not (List.mem (GetErrorNumber err) specificWarnOff)) || + List.mem (GetErrorNumber err) specificWarnAsError) //---------------------------------------------------------------------------- // Scoped #nowarn pragmas @@ -2991,7 +3037,7 @@ type ErrorLoggerFilteringByScopedPragmas (checkFile,scopedPragmas,errorLogger:Er override x.WarnSinkImpl err = let report = let warningNum = GetErrorNumber err - match RangeOfError err with + match GetRangeOfError err with | Some m -> not (scopedPragmas |> List.exists (fun pragma -> match pragma with @@ -3033,7 +3079,7 @@ let CanonicalizeFilename filename = let IsScript filename = let lower = String.lowercase filename - scriptSuffixes |> List.exists (Filename.checkSuffix lower) + FSharpScriptFileSuffixes |> List.exists (Filename.checkSuffix lower) // Give a unique name to the different kinds of inputs. Used to correlate signature and implementation files // QualFileNameOfModuleName - files with a single module declaration or an anonymous module @@ -3041,7 +3087,7 @@ let QualFileNameOfModuleName m filename modname = QualifiedNameOfFile(mkSynId m let QualFileNameOfFilename m filename = QualifiedNameOfFile(mkSynId m (CanonicalizeFilename filename + (if IsScript filename then "$fsx" else ""))) // Interactive fragments -let QualFileNameOfUniquePath (m, p: string list) = QualifiedNameOfFile(mkSynId m (String.concat "_" p)) +let ComputeQualifiedNameOfFileFromUniquePath (m, p: string list) = QualifiedNameOfFile(mkSynId m (String.concat "_" p)) let QualFileNameOfSpecs filename specs = match specs with @@ -3053,7 +3099,7 @@ let QualFileNameOfImpls filename specs = | [SynModuleOrNamespace(modname,true,_,_,_,_,m)] -> QualFileNameOfModuleName m filename modname | _ -> QualFileNameOfFilename (rangeN filename 1) filename -let PrepandPathToQualFileName x (QualifiedNameOfFile(q)) = QualFileNameOfUniquePath (q.idRange,pathOfLid x@[q.idText]) +let PrepandPathToQualFileName x (QualifiedNameOfFile(q)) = ComputeQualifiedNameOfFileFromUniquePath (q.idRange,pathOfLid x@[q.idText]) let PrepandPathToImpl x (SynModuleOrNamespace(p,c,d,e,f,g,h)) = SynModuleOrNamespace(x@p,c,d,e,f,g,h) let PrepandPathToSpec x (SynModuleOrNamespaceSig(p,c,d,e,f,g,h)) = SynModuleOrNamespaceSig(x@p,c,d,e,f,g,h) @@ -3184,10 +3230,10 @@ let ParseInput (lexer,errorLogger:ErrorLogger,lexbuf:UnicodeLexing.Lexbuf,defaul if mlCompatSuffixes |> List.exists (Filename.checkSuffix lower) then mlCompatWarning (FSComp.SR.buildCompilingExtensionIsForML()) rangeStartup; - if implSuffixes |> List.exists (Filename.checkSuffix lower) then + if FSharpImplFileSuffixes |> List.exists (Filename.checkSuffix lower) then let impl = Parser.implementationFile lexer lexbuf PostParseModuleImpls (defaultNamespace,filename,isLastCompiland,impl) - elif sigSuffixes |> List.exists (Filename.checkSuffix lower) then + elif FSharpSigFileSuffixes |> List.exists (Filename.checkSuffix lower) then let intfs = Parser.signatureFile lexer lexbuf PostParseModuleSpecs (defaultNamespace,filename,isLastCompiland,intfs) else @@ -3213,7 +3259,7 @@ let ParseOneInputLexbuf (tcConfig:TcConfig,lexResourceManager,conditionalCompila let input = Lexhelp.usingLexbufForParsing (lexbuf,filename) (fun lexbuf -> if verbose then dprintn ("Parsing... "+shortFilename); - let tokenizer = Lexfilter.LexFilter(lightSyntaxStatus, tcConfig.compilingFslib, Lexer.token lexargs skip, lexbuf) + let tokenizer = LexFilter.LexFilter(lightSyntaxStatus, tcConfig.compilingFslib, Lexer.token lexargs skip, lexbuf) if tcConfig.tokenizeOnly then while true do @@ -3255,7 +3301,7 @@ let ParseOneInputLexbuf (tcConfig:TcConfig,lexResourceManager,conditionalCompila let ParseOneInputFile (tcConfig:TcConfig,lexResourceManager,conditionalCompilationDefines,filename,isLastCompiland,errorLogger,retryLocked) = try let lower = String.lowercase filename - if List.exists (Filename.checkSuffix lower) (sigSuffixes@implSuffixes) then + if List.exists (Filename.checkSuffix lower) (FSharpSigFileSuffixes@FSharpImplFileSuffixes) then if not(FileSystem.SafeExists(filename)) then error(Error(FSComp.SR.buildCouldNotFindSourceFile(filename),rangeStartup)) // bug 3155: if the file name is indirect, use a full path @@ -3287,7 +3333,17 @@ type TcAssemblyResolutions(results : AssemblyResolution list, unresolved : Unres static member Resolve (tcConfig:TcConfig,assemblyList:AssemblyReference list, knownUnresolved:UnresolvedAssemblyReference list) : TcAssemblyResolutions = let resolved,unresolved = if tcConfig.useMonoResolution then - assemblyList |> List.map ((tcConfig.ResolveLibWithDirectories CcuLoadFailureAction.RaiseError) >> Option.get), [] + let resolutions = + assemblyList + |> List.map (fun assemblyReference -> + try + Choice1Of2 (tcConfig.ResolveLibWithDirectories CcuLoadFailureAction.RaiseError assemblyReference |> Option.get) + with e -> + errorRecovery e assemblyReference.Range + Choice2Of2 assemblyReference) + let successes = resolutions |> List.choose (function Choice1Of2 x -> Some x | _ -> None) + let failures = resolutions |> List.choose (function Choice2Of2 x -> Some (UnresolvedAssemblyReference(x.Text,[x])) | _ -> None) + successes, failures else TcConfig.TryResolveLibsUsingMSBuildRules (tcConfig,assemblyList,rangeStartup,ReportErrors) TcAssemblyResolutions(resolved,unresolved @ knownUnresolved) @@ -3300,17 +3356,17 @@ type TcAssemblyResolutions(results : AssemblyResolution list, unresolved : Unres if tcConfig.framework then for s in DefaultBasicReferencesForOutOfProjectSources do - yield AssemblyReference(rangeStartup,s+".dll") + yield AssemblyReference(rangeStartup,s+".dll",None) if tcConfig.framework || tcConfig.addVersionSpecificFrameworkReferences then // For out-of-project context, then always reference some extra DLLs on .NET 4.0 if tcConfig.MscorlibMajorVersion >= 4 then for s in DefaultBasicReferencesForOutOfProjectSources40 do - yield AssemblyReference(rangeStartup,s+".dll") + yield AssemblyReference(rangeStartup,s+".dll",None) if tcConfig.useFsiAuxLib then let name = Path.Combine(tcConfig.fsharpBinariesDir, GetFsiLibraryName()+".dll") - yield AssemblyReference(rangeStartup,name) + yield AssemblyReference(rangeStartup,name,None) yield! tcConfig.referencedDLLs ] static member SplitNonFoundationalResolutions (tcConfig:TcConfig) = @@ -3330,7 +3386,7 @@ type TcAssemblyResolutions(results : AssemblyResolution list, unresolved : Unres #endif #if DEBUG let itFailed = ref false - let addedText = "\nIf you want to debug this right now, attach a debugger, and put a breakpoint in 'build.fs' near the text '!itFailed', and you can re-step through the assembly resolution logic." + let addedText = "\nIf you want to debug this right now, attach a debugger, and put a breakpoint in 'CompileOps.fs' near the text '!itFailed', and you can re-step through the assembly resolution logic." unresolved |> List.iter (fun (UnresolvedAssemblyReference(referenceText,_ranges)) -> if referenceText.Contains("mscorlib") then @@ -3363,7 +3419,6 @@ type TcAssemblyResolutions(results : AssemblyResolution list, unresolved : Unres //---------------------------------------------------------------------------- // Typecheck and optimization environments on disk //-------------------------------------------------------------------------- -open Pickle let IsSignatureDataResource (r: ILResource) = String.hasPrefix r.Name FSharpSignatureDataResourceName let IsOptimizationDataResource (r: ILResource) = String.hasPrefix r.Name FSharpOptimizationDataResourceName @@ -3393,40 +3448,93 @@ let PickleToResource file g scope rname p x = CustomAttrs = emptyILCustomAttrs } #endif -let GetSignatureData (file, ilScopeRef, ilModule, byteReader) : PickledDataWithReferences = - unpickleObjWithDanglingCcus file ilScopeRef ilModule unpickleModuleInfo (byteReader()) +let GetSignatureData (file, ilScopeRef, ilModule, byteReader) : PickledDataWithReferences = + unpickleObjWithDanglingCcus file ilScopeRef ilModule unpickleCcuInfo byteReader #if NO_COMPILER_BACKEND #else let WriteSignatureData (tcConfig:TcConfig,tcGlobals,exportRemapping,ccu:CcuThunk,file) : ILResource = let mspec = ccu.Contents -#if DEBUG - if !verboseStamps then - dprintf "Signature data before remap:\n%s\n" (Layout.showL (Layout.squashTo 192 (entityL mspec))); - dprintf "---------------------- START OF APPLYING EXPORT REMAPPING TO SIGNATURE DATA------------\n"; -#endif let mspec = ApplyExportRemappingToEntity tcGlobals exportRemapping mspec -#if DEBUG - if !verboseStamps then - dprintf "---------------------- END OF APPLYING EXPORT REMAPPING TO SIGNATURE DATA------------\n"; - dprintf "Signature data after remap:\n%s\n" (Layout.showL (Layout.squashTo 192 (entityL mspec))); -#endif - PickleToResource file tcGlobals ccu (FSharpSignatureDataResourceName+"."+ccu.AssemblyName) pickleModuleInfo + PickleToResource file tcGlobals ccu (FSharpSignatureDataResourceName+"."+ccu.AssemblyName) pickleCcuInfo { mspec=mspec; compileTimeWorkingDir=tcConfig.implicitIncludeDir; usesQuotations = ccu.UsesFSharp20PlusQuotations } #endif // NO_COMPILER_BACKEND let GetOptimizationData (file, ilScopeRef, ilModule, byteReader) = - unpickleObjWithDanglingCcus file ilScopeRef ilModule Opt.u_LazyModuleInfo (byteReader()) + unpickleObjWithDanglingCcus file ilScopeRef ilModule Optimizer.u_CcuOptimizationInfo (byteReader()) #if NO_COMPILER_BACKEND #else let WriteOptimizationData (tcGlobals, file, ccu,modulInfo) = - if verbose then dprintf "Optimization data after remap:\n%s\n" (Layout.showL (Layout.squashTo 192 (Opt.moduleInfoL tcGlobals modulInfo))); - PickleToResource file tcGlobals ccu (FSharpOptimizationDataResourceName+"."+ccu.AssemblyName) Opt.p_LazyModuleInfo modulInfo +#if DEBUG + if verbose then dprintf "Optimization data after remap:\n%s\n" (Layout.showL (Layout.squashTo 192 (Optimizer.moduleInfoL tcGlobals modulInfo))); +#endif + PickleToResource file tcGlobals ccu (FSharpOptimizationDataResourceName+"."+ccu.AssemblyName) Optimizer.p_CcuOptimizationInfo modulInfo #endif +//---------------------------------------------------------------------------- +// Abstraction for project reference + +type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyRefs) = + let externalSigAndOptData = ["FSharp.Core";"FSharp.LanguageService.Compiler"] + interface IRawFSharpAssemblyData with + member __.GetAutoOpenAttributes(ilg) = GetAutoOpenAttributes ilg ilModule + member __.GetInternalsVisibleToAttributes(ilg) = GetInternalsVisibleToAttributes ilg ilModule + member __.TryGetRawILModule() = Some ilModule + member __.GetRawFSharpSignatureData(m,ilShortAssemName,filename) = + let resources = ilModule.Resources.AsList + let sigDataReaders = + [ for iresource in resources do + if IsSignatureDataResource iresource then + let ccuName = GetSignatureDataResourceName iresource + let byteReader = iresource.GetByteReader(m) + yield (ccuName, byteReader()) ] + + let sigDataReaders = + if List.contains ilShortAssemName externalSigAndOptData then + let sigFileName = Path.ChangeExtension(filename, "sigdata") + if not sigDataReaders.IsEmpty then + error(Error(FSComp.SR.buildDidNotExpectSigdataResource(),m)); + if not (FileSystem.SafeExists sigFileName) then + error(Error(FSComp.SR.buildExpectedSigdataFile(), m)); + [ (ilShortAssemName, FileSystem.ReadAllBytesShim sigFileName)] + else + sigDataReaders + sigDataReaders + member __.GetRawFSharpOptimizationData(m,ilShortAssemName,filename) = + let optDataReaders = + ilModule.Resources.AsList + |> List.choose (fun r -> if IsOptimizationDataResource r then Some(GetOptimizationDataResourceName r,r.GetByteReader(m)) else None) + + // Look for optimization data in a file + let optDataReaders = + if List.contains ilShortAssemName externalSigAndOptData then + let optDataFile = Path.ChangeExtension(filename, "optdata") + if not optDataReaders.IsEmpty then + error(Error(FSComp.SR.buildDidNotExpectOptDataResource(),m)); + if not (FileSystem.SafeExists optDataFile) then + error(Error(FSComp.SR.buildExpectedFileAlongSideFSharpCore(optDataFile),m)); + [ (ilShortAssemName, (fun () -> FileSystem.ReadAllBytesShim optDataFile))] + else + optDataReaders + optDataReaders + member __.GetRawTypeForwarders() = + match ilModule.Manifest with + | Some manifest -> manifest.ExportedTypes + | None -> mkILExportedTypes [] + member __.ShortAssemblyName = GetNameOfILModule ilModule + member __.ILScopeRef = MakeScopeRefForIlModule ilModule + member __.ILAssemblyRefs = ilAssemblyRefs + member __.HasAnyFSharpSignatureDataAttribute = + let attrs = GetCustomAttributesOfIlModule ilModule + List.exists IsSignatureDataVersionAttr attrs + member __.HasMatchingFSharpSignatureDataAttribute(ilg) = + let attrs = GetCustomAttributesOfIlModule ilModule + List.exists (IsMatchingSignatureDataVersionAttr ilg (IL.parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision)) attrs + + //---------------------------------------------------------------------------- // Relink blobs of saved data by fixing up ccus. //-------------------------------------------------------------------------- @@ -3440,10 +3548,17 @@ let availableToOptionalCcu = function // TcConfigProvider //-------------------------------------------------------------------------- +/// Represents a computation to return a TcConfig. Normally this is just a constant immutable TcConfig, +/// but for F# Interactive it may be based on an underlying mutable TcConfigBuilder. type TcConfigProvider = | TcConfigProvider of (unit -> TcConfig) member x.Get() = (let (TcConfigProvider(f)) = x in f()) + + /// Get a TcConfigProvider which will return only the exact TcConfig. static member Constant(tcConfig) = TcConfigProvider(fun () -> tcConfig) + + /// Get a TcConfigProvider which will continue to respect changes in the underlying + /// TcConfigBuilder rather than delivering snapshots. static member BasedOnMutableBuilder(tcConfigB) = TcConfigProvider(fun () -> TcConfig.Create(tcConfigB,validate=false)) @@ -3452,7 +3567,7 @@ type TcConfigProvider = //-------------------------------------------------------------------------- -/// Tables of imported assemblies. +/// Repreesnts a table of imported assemblies with their resolutions. [] type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResolutions, importsBase:TcImports option, ilGlobalsOpt) = @@ -3613,7 +3728,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let theActualAssembly = assembly.PUntaint((fun x -> x.Handle),m) let dllinfo = - { RawMetadata=ilModule; + { RawMetadata= RawFSharpAssemblyDataBackedByFileOnDisk (ilModule, ilAssemblyRefs) FileName=fileName; ProviderGeneratedAssembly=Some theActualAssembly IsProviderGenerated=true; @@ -3621,16 +3736,16 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti ILScopeRef = ilScopeRef; ILAssemblyRefs = ilAssemblyRefs } tcImports.RegisterDll(dllinfo); - let ccuData = + let ccuData : CcuData = { IsFSharp=false; UsesFSharp20PlusQuotations=false; - InvalidateEvent=(new Event<_>()).Publish; + InvalidateEvent=(new Event<_>()).Publish IsProviderGenerated = true - QualifiedName= Some (assembly.PUntaint((fun a -> a.FullName), m)); - Contents = NewCcuContents ilScopeRef m ilShortAssemName (NewEmptyModuleOrNamespaceType Namespace) ; - ILScopeRef = ilScopeRef; - Stamp = newStamp(); - SourceCodeDirectory = ""; + QualifiedName= Some (assembly.PUntaint((fun a -> a.FullName), m)) + Contents = NewCcuContents ilScopeRef m ilShortAssemName (NewEmptyModuleOrNamespaceType Namespace) + ILScopeRef = ilScopeRef + Stamp = newStamp() + SourceCodeDirectory = "" FileName = Some fileName MemberSignatureEquality = (fun ty1 ty2 -> Tastops.typeEquivAux EraseAll g ty1 ty2) ImportProvidedType = (fun ty -> Import.ImportProvidedType (tcImports.GetImportMap()) m ty) @@ -3638,14 +3753,14 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let ccu = CcuThunk.Create(ilShortAssemName,ccuData) let ccuinfo = - { FSharpViewOfMetadata=ccu; - ILScopeRef = ilScopeRef; - AssemblyAutoOpenAttributes = []; - AssemblyInternalsVisibleToAttributes = []; - IsProviderGenerated = true; - TypeProviders=[]; + { FSharpViewOfMetadata=ccu + ILScopeRef = ilScopeRef + AssemblyAutoOpenAttributes = [] + AssemblyInternalsVisibleToAttributes = [] + IsProviderGenerated = true + TypeProviders=[] FSharpOptimizationData = notlazy None } - tcImports.RegisterCcu(ccuinfo); + tcImports.RegisterCcu(ccuinfo) // Yes, it is generative true, dllinfo.ProviderGeneratedStaticLinkMap @@ -3691,7 +3806,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let pdbDir = (try Filename.directoryName filename with _ -> ".") let pdbFile = (try Filename.chopExtension filename with _ -> filename)+".pdb" if FileSystem.SafeExists pdbFile then - if verbose then dprintf "reading PDB file %s from directory %s\n" pdbFile pdbDir; + if verbose then dprintf "reading PDB file %s from directory %s\n" pdbFile pdbDir Some pdbDir else None @@ -3700,7 +3815,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let ilILBinaryReader = OpenILBinary(filename,tcConfig.optimizeForMemory,tcConfig.openBinariesInMemory,ilGlobalsOpt,pdbPathOption, tcConfig.primaryAssembly.Name, tcConfig.noDebugData, tcConfig.shadowCopyReferences) - tcImports.AttachDisposeAction(fun _ -> ILBinaryReader.CloseILModuleReader ilILBinaryReader); + tcImports.AttachDisposeAction(fun _ -> (ilILBinaryReader :> IDisposable).Dispose()) ilILBinaryReader.ILModuleDef, ilILBinaryReader.ILAssemblyRefs with e -> error(Error(FSComp.SR.buildErrorOpeningBinaryFile(filename, e.Message),m)) @@ -3718,7 +3833,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti | ILScopeRef.Module modref -> let key = modref.Name if not (auxModTable.ContainsKey(key)) then - let resolution = tcConfig.ResolveLibWithDirectories CcuLoadFailureAction.RaiseError (AssemblyReference(m,key)) |> Option.get + let resolution = tcConfig.ResolveLibWithDirectories CcuLoadFailureAction.RaiseError (AssemblyReference(m,key,None)) |> Option.get let ilModule,_ = tcImports.OpenILBinaryModule(resolution.resolvedPath,m) auxModTable.[key] <- ilModule auxModTable.[key] @@ -3820,9 +3935,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti | _ -> failwith "Unexpected representation in namespace entity referred to by a type provider" member tcImports.ImportTypeProviderExtensions - (tpApprovals : ApprovalIO.TypeProviderApprovalStatus list, - displayPSTypeProviderSecurityDialogBlockingUI, - tcConfig:TcConfig, + (tcConfig:TcConfig, fileNameOfRuntimeAssembly, ilScopeRefOfRuntimeAssembly, runtimeAssemblyAttributes:ILAttribute list, @@ -3854,15 +3967,22 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti outputFile = tcConfig.outputFile showResolutionMessages = tcConfig.showExtensionTypeMessages referencedAssemblies = [| for r in resolutions.GetAssemblyResolutions() -> r.resolvedPath |] - temporaryFolder = Path.GetTempPath() } + temporaryFolder = FileSystem.GetTempPathShim() } + + // The type provider should not hold strong references to disposed + // TcImport objects. So the callbacks provided in the type provider config + // dispatch via a thunk which gets set to a non-resource-capturing + // failing function when the object is disposed. + let systemRuntimeContainsType = + let systemRuntimeContainsTypeRef = ref tcImports.SystemRuntimeContainsType + tcImports.AttachDisposeAction(fun () -> systemRuntimeContainsTypeRef := (fun _ -> raise (System.ObjectDisposedException("The type provider has been disposed")))) + fun arg -> systemRuntimeContainsTypeRef.Value arg let providers = [ for assemblyName in providerAssemblies do - yield ExtensionTyping.GetTypeProvidersOfAssembly(displayPSTypeProviderSecurityDialogBlockingUI, tcConfig.validateTypeProviders, tpApprovals, - fileNameOfRuntimeAssembly, ilScopeRefOfRuntimeAssembly, assemblyName, typeProviderEnvironment, - tcConfig.isInvalidationSupported, tcConfig.isInteractive, tcImports.SystemRuntimeContainsType, systemRuntimeAssemblyVersion, m) ] - let wasApproved = providers |> List.forall (fun (ok,_) -> ok) - let providers = providers |> List.map snd |> List.concat + yield ExtensionTyping.GetTypeProvidersOfAssembly(fileNameOfRuntimeAssembly, ilScopeRefOfRuntimeAssembly, assemblyName, typeProviderEnvironment, + tcConfig.isInvalidationSupported, tcConfig.isInteractive, systemRuntimeContainsType, systemRuntimeAssemblyVersion, m) ] + let providers = providers |> List.concat // Note, type providers are disposable objects. The TcImports owns the provider objects - when/if it is disposed, the providers are disposed. // We ignore all exceptions from provider disposal. @@ -3881,8 +4001,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti match providers with | [] -> - if wasApproved then - warning(Error(FSComp.SR.etHostingAssemblyFoundWithoutHosts(fileNameOfRuntimeAssembly,typeof.FullName),m)); + warning(Error(FSComp.SR.etHostingAssemblyFoundWithoutHosts(fileNameOfRuntimeAssembly,typeof.FullName),m)); | _ -> if typeProviderEnvironment.showResolutionMessages then @@ -3936,11 +4055,12 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti // Compact Framework binaries must use this. However it is not // clear when else it is required, e.g. for Mono. - member tcImports.PrepareToImportReferencedIlDll tpApprovals m filename displayPSTypeProviderSecurityDialogBlockingUI (dllinfo:ImportedBinary) = + member tcImports.PrepareToImportReferencedIlDll m filename (dllinfo:ImportedBinary) = CheckDisposed() let tcConfig = tcConfigP.Get() tcConfig.CheckFSharpBinary(filename,dllinfo.ILAssemblyRefs,m) - let ilModule = dllinfo.RawMetadata + assert dllinfo.RawMetadata.TryGetRawILModule().IsSome + let ilModule = dllinfo.RawMetadata.TryGetRawILModule().Value let ilScopeRef = dllinfo.ILScopeRef let aref = match ilScopeRef with @@ -3948,7 +4068,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti | _ -> error(InternalError("PrepareToImportReferencedIlDll: cannot reference .NET netmodules directly, reference the containing assembly instead",m)) let nm = aref.Name - if verbose then dprintn ("Converting IL assembly to F# data structures "+nm); + if verbose then dprintn ("Converting IL assembly to F# data structures "+nm) let auxModuleLoader = tcImports.MkLoaderForMultiModuleIlAssemblies m let invalidateCcu = new Event<_>() let ccu = Import.ImportILAssembly(tcImports.GetImportMap,m,auxModuleLoader,ilScopeRef,tcConfig.implicitIncludeDir, Some filename,ilModule,invalidateCcu.Publish) @@ -3956,28 +4076,24 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let ilg = defaultArg ilGlobalsOpt EcmaILGlobals let ccuinfo = - { FSharpViewOfMetadata=ccu; - ILScopeRef = ilScopeRef; - AssemblyAutoOpenAttributes = GetAutoOpenAttributes ilg ilModule; - AssemblyInternalsVisibleToAttributes = GetInternalsVisibleToAttributes ilg ilModule; + { FSharpViewOfMetadata=ccu + ILScopeRef = ilScopeRef + AssemblyAutoOpenAttributes = GetAutoOpenAttributes ilg ilModule + AssemblyInternalsVisibleToAttributes = GetInternalsVisibleToAttributes ilg ilModule #if EXTENSIONTYPING - IsProviderGenerated = false; - TypeProviders = []; + IsProviderGenerated = false + TypeProviders = [] #endif FSharpOptimizationData = notlazy None } - tcImports.RegisterCcu(ccuinfo); + tcImports.RegisterCcu(ccuinfo) let phase2 () = #if EXTENSIONTYPING - ccuinfo.TypeProviders <- tcImports.ImportTypeProviderExtensions (tpApprovals, displayPSTypeProviderSecurityDialogBlockingUI, tcConfig, filename, ilScopeRef, ilModule.ManifestOfAssembly.CustomAttrs.AsList, ccu.Contents, invalidateCcu, m) -#else - // to prevent unused parameter warning - ignore tpApprovals - ignore displayPSTypeProviderSecurityDialogBlockingUI + ccuinfo.TypeProviders <- tcImports.ImportTypeProviderExtensions (tcConfig, filename, ilScopeRef, ilModule.ManifestOfAssembly.CustomAttrs.AsList, ccu.Contents, invalidateCcu, m) #endif [ResolvedImportedAssembly(ccuinfo)] phase2 - member tcImports.PrepareToImportReferencedFSharpDll tpApprovals m filename displayPSTypeProviderSecurityDialogBlockingUI (dllinfo:ImportedBinary) = + member tcImports.PrepareToImportReferencedFSharpDll m filename (dllinfo:ImportedBinary) = CheckDisposed() let tcConfig = tcConfigP.Get() tcConfig.CheckFSharpBinary(filename,dllinfo.ILAssemblyRefs,m) @@ -3985,55 +4101,18 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let ilModule = dllinfo.RawMetadata let ilScopeRef = dllinfo.ILScopeRef let ilShortAssemName = getNameOfScopeRef ilScopeRef - if verbose then dprintn ("Converting F# assembly to F# data structures "+(getNameOfScopeRef ilScopeRef)); - let attrs = GetCustomAttributesOfIlModule ilModule - assert (List.exists IsSignatureDataVersionAttr attrs); - if verbose then dprintn ("Relinking interface info from F# assembly "+ilShortAssemName); - let resources = ilModule.Resources.AsList - let externalSigAndOptData = ["FSharp.Core";"FSharp.LanguageService.Compiler"] - if not(List.contains ilShortAssemName externalSigAndOptData) then - assert (List.exists IsSignatureDataResource resources); - let optDataReaders = - resources - |> List.choose (fun r -> if IsOptimizationDataResource r then Some(GetOptimizationDataResourceName r,r.GetByteReader(m)) else None) - + if verbose then dprintn ("Converting F# assembly to F# data structures "+(getNameOfScopeRef ilScopeRef)) + if verbose then dprintn ("Relinking interface info from F# assembly "+ilShortAssemName) + let optDataReaders = ilModule.GetRawFSharpOptimizationData(m, ilShortAssemName, filename) let ccuRawDataAndInfos = - let sigDataReaders = - [ for iresource in resources do - if IsSignatureDataResource iresource then - let ccuName = GetSignatureDataResourceName iresource - yield (ccuName, iresource.GetByteReader(m)) ] - - let sigDataReaders = - if List.contains ilShortAssemName externalSigAndOptData then - let sigFileName = Path.ChangeExtension(filename, "sigdata") - if not sigDataReaders.IsEmpty then - error(Error(FSComp.SR.buildDidNotExpectSigdataResource(),m)); - if not (FileSystem.SafeExists sigFileName) then - error(Error(FSComp.SR.buildExpectedSigdataFile(), m)); - [ (ilShortAssemName, (fun () -> FileSystem.ReadAllBytesShim sigFileName))] - else - sigDataReaders - sigDataReaders + ilModule.GetRawFSharpSignatureData(m, ilShortAssemName, filename) |> List.map (fun (ccuName, sigDataReader) -> - let data = GetSignatureData (filename, ilScopeRef, ilModule, sigDataReader) - - // Look for optimization data in a file - let optDataReaders = - if List.contains ilShortAssemName externalSigAndOptData then - let optDataFile = Path.ChangeExtension(filename, "optdata") - if not optDataReaders.IsEmpty then - error(Error(FSComp.SR.buildDidNotExpectOptDataResource(),m)); - if not (FileSystem.SafeExists optDataFile) then - error(Error(FSComp.SR.buildExpectedFileAlongSideFSharpCore(optDataFile),m)); - [ (ilShortAssemName, (fun () -> FileSystem.ReadAllBytesShim optDataFile))] - else - optDataReaders + let data = GetSignatureData (filename, ilScopeRef, ilModule.TryGetRawILModule(), sigDataReader) let optDatas = Map.ofList optDataReaders - let minfo : PickledModuleInfo = data.RawData + let minfo : PickledCcuInfo = data.RawData let mspec = minfo.mspec #if EXTENSIONTYPING @@ -4071,7 +4150,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti #endif UsesFSharp20PlusQuotations = minfo.usesQuotations MemberSignatureEquality= (fun ty1 ty2 -> Tastops.typeEquivAux EraseAll (tcImports.GetTcGlobals()) ty1 ty2) - TypeForwarders = match ilModule.Manifest with | Some manifest -> ImportILAssemblyTypeForwarders(tcImports.GetImportMap,m,manifest.ExportedTypes) | None -> Map.empty }) + TypeForwarders = ImportILAssemblyTypeForwarders(tcImports.GetImportMap,m, ilModule.GetRawTypeForwarders()) }) let optdata = lazy @@ -4080,15 +4159,15 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti if verbose then dprintf "*** no optimization data for CCU %s, was DLL compiled with --no-optimization-data??\n" ccuName None | Some info -> - let data = GetOptimizationData (filename, ilScopeRef, ilModule, info) + let data = GetOptimizationData (filename, ilScopeRef, ilModule.TryGetRawILModule(), info) let res = data.OptionalFixup(fun nm -> availableToOptionalCcu(tcImports.FindCcu(m,nm,lookupOnly=false))) if verbose then dprintf "found optimization data for CCU %s\n" ccuName Some res) let ilg = defaultArg ilGlobalsOpt EcmaILGlobals let ccuinfo = { FSharpViewOfMetadata=ccu - AssemblyAutoOpenAttributes = GetAutoOpenAttributes ilg ilModule - AssemblyInternalsVisibleToAttributes = GetInternalsVisibleToAttributes ilg ilModule + AssemblyAutoOpenAttributes = ilModule.GetAutoOpenAttributes(ilg) + AssemblyInternalsVisibleToAttributes = ilModule.GetInternalsVisibleToAttributes(ilg) FSharpOptimizationData=optdata #if EXTENSIONTYPING IsProviderGenerated = false @@ -4097,12 +4176,11 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti ILScopeRef = ilScopeRef } let phase2() = #if EXTENSIONTYPING - ccuinfo.TypeProviders <- tcImports.ImportTypeProviderExtensions (tpApprovals, displayPSTypeProviderSecurityDialogBlockingUI, tcConfig, filename, ilScopeRef, ilModule.ManifestOfAssembly.CustomAttrs.AsList, ccu.Contents, invalidateCcu, m) + match ilModule.TryGetRawILModule() with + | None -> () // no type providers can be used without a real IL Module present + | Some ilModule -> + ccuinfo.TypeProviders <- tcImports.ImportTypeProviderExtensions (tcConfig, filename, ilScopeRef, ilModule.ManifestOfAssembly.CustomAttrs.AsList, ccu.Contents, invalidateCcu, m) #else - // to prevent unused parameter warning - ignore tpApprovals - ignore displayPSTypeProviderSecurityDialogBlockingUI - () #endif data,ccuinfo,phase2) @@ -4112,7 +4190,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let phase2 () = (* Relink *) (* dprintf "Phase2: %s\n" filename; REMOVE DIAGNOSTICS *) - ccuRawDataAndInfos |> List.iter (fun (data,_,_) -> data.OptionalFixup(fun nm -> availableToOptionalCcu(tcImports.FindCcu(m,nm,lookupOnly=false))) |> ignore); + ccuRawDataAndInfos |> List.iter (fun (data,_,_) -> data.OptionalFixup(fun nm -> availableToOptionalCcu(tcImports.FindCcu(m,nm,lookupOnly=false))) |> ignore) #if EXTENSIONTYPING ccuRawDataAndInfos |> List.iter (fun (_,_,phase2) -> phase2()) #endif @@ -4120,20 +4198,32 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti phase2 - member tcImports.RegisterAndPrepareToImportReferencedDll tpApprovals displayPSTypeProviderSecurityDialogBlockingUI (r:AssemblyResolution) : _*(unit -> AvailableImportedAssembly list)= + member tcImports.RegisterAndPrepareToImportReferencedDll (r:AssemblyResolution) : _*(unit -> AvailableImportedAssembly list)= CheckDisposed() let m = r.originalReference.Range let filename = r.resolvedPath - let ilModule,ilAssemblyRefs = tcImports.OpenILBinaryModule(filename,m) + let contentsOpt = + match r.ProjectReference with + | Some ilb -> ilb.EvaluateRawContents() + | None -> None + + let assemblyData = + match contentsOpt with + | Some ilb -> ilb + | None -> + let ilModule,ilAssemblyRefs = tcImports.OpenILBinaryModule(filename,m) + RawFSharpAssemblyDataBackedByFileOnDisk (ilModule, ilAssemblyRefs) :> IRawFSharpAssemblyData + + + let ilShortAssemName = assemblyData.ShortAssemblyName + let ilScopeRef = assemblyData.ILScopeRef - let ilShortAssemName = GetNameOfILModule ilModule if tcImports.IsAlreadyRegistered ilShortAssemName then let dllinfo = tcImports.FindDllInfo(m,ilShortAssemName) - let phase2() = [tcImports.FindCcuInfo(m,ilShortAssemName,lookupOnly=false)] + let phase2() = [tcImports.FindCcuInfo(m,ilShortAssemName,lookupOnly=true)] dllinfo,phase2 else - let ilScopeRef = MakeScopeRefForIlModule ilModule - let dllinfo = {RawMetadata=ilModule + let dllinfo = {RawMetadata=assemblyData FileName=filename #if EXTENSIONTYPING ProviderGeneratedAssembly=None @@ -4141,45 +4231,40 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti ProviderGeneratedStaticLinkMap = None #endif ILScopeRef = ilScopeRef - ILAssemblyRefs = ilAssemblyRefs } + ILAssemblyRefs = assemblyData.ILAssemblyRefs } tcImports.RegisterDll(dllinfo) - let attrs = GetCustomAttributesOfIlModule ilModule let ilg = defaultArg ilGlobalsOpt EcmaILGlobals let phase2 = - if (List.exists IsSignatureDataVersionAttr attrs) then - if not (List.exists (IsMatchingSignatureDataVersionAttr ilg (IL.parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision)) attrs) then + if assemblyData.HasAnyFSharpSignatureDataAttribute then + if not (assemblyData.HasMatchingFSharpSignatureDataAttribute(ilg)) then errorR(Error(FSComp.SR.buildDifferentVersionMustRecompile(filename),m)) - tcImports.PrepareToImportReferencedIlDll tpApprovals m filename displayPSTypeProviderSecurityDialogBlockingUI dllinfo + tcImports.PrepareToImportReferencedIlDll m filename dllinfo else try - tcImports.PrepareToImportReferencedFSharpDll tpApprovals m filename displayPSTypeProviderSecurityDialogBlockingUI dllinfo + tcImports.PrepareToImportReferencedFSharpDll m filename dllinfo with e -> error(Error(FSComp.SR.buildErrorOpeningBinaryFile(filename, e.Message),m)) else - tcImports.PrepareToImportReferencedIlDll tpApprovals m filename displayPSTypeProviderSecurityDialogBlockingUI dllinfo + tcImports.PrepareToImportReferencedIlDll m filename dllinfo dllinfo,phase2 - member tcImports.RegisterAndImportReferencedAssemblies (displayPSTypeProviderSecurityDialogBlockingUI, nms:AssemblyResolution list) = + member tcImports.RegisterAndImportReferencedAssemblies (nms:AssemblyResolution list) = CheckDisposed() -#if EXTENSIONTYPING - let tpApprovals = ExtensionTyping.ApprovalIO.ReadApprovalsFile(None) -#else - let tpApprovals = [] -#endif let dllinfos,phase2s = - nms |> List.map + nms |> List.choose (fun nm -> try - tcImports.RegisterAndPrepareToImportReferencedDll tpApprovals displayPSTypeProviderSecurityDialogBlockingUI nm + Some(tcImports.RegisterAndPrepareToImportReferencedDll nm) with e -> - error(Error(FSComp.SR.buildProblemReadingAssembly(nm.fusionName, e.Message),nm.originalReference.Range))) + errorR(Error(FSComp.SR.buildProblemReadingAssembly(nm.fusionName, e.Message),nm.originalReference.Range)) + None) |> List.unzip let ccuinfos = (List.collect (fun phase2 -> phase2()) phase2s) dllinfos,ccuinfos - member tcImports.DoRegisterAndImportReferencedAssemblies(displayPSTypeProviderSecurityDialogBlockingUI,nms) = + member tcImports.DoRegisterAndImportReferencedAssemblies(nms) = CheckDisposed() - tcImports.RegisterAndImportReferencedAssemblies(displayPSTypeProviderSecurityDialogBlockingUI,nms) |> ignore + tcImports.RegisterAndImportReferencedAssemblies(nms) |> ignore member tcImports.ImplicitLoadIfAllowed (m, assemblyName, lookupOnly) = CheckDisposed() @@ -4188,11 +4273,11 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let tcConfig = tcConfigP.Get() if not lookupOnly && tcConfig.implicitlyResolveAssemblies then let tryFile speculativeFileName = - let foundFile = tcImports.TryResolveAssemblyReference (AssemblyReference (m, speculativeFileName), ResolveAssemblyReferenceMode.Speculative) + let foundFile = tcImports.TryResolveAssemblyReference (AssemblyReference (m, speculativeFileName, None), ResolveAssemblyReferenceMode.Speculative) match foundFile with | OkResult (warns, res) -> ReportWarnings warns - tcImports.DoRegisterAndImportReferencedAssemblies(None,res) + tcImports.DoRegisterAndImportReferencedAssemblies(res) true | ErrorResult (_warns, _err) -> // Throw away warnings and errors - this is speculative loading @@ -4242,7 +4327,16 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti | None -> if tcConfigP.Get().useMonoResolution then - ResultD [(tcConfig.ResolveLibWithDirectories CcuLoadFailureAction.RaiseError assemblyReference) |> Option.get] + let action = + match mode with + | ResolveAssemblyReferenceMode.ReportErrors -> CcuLoadFailureAction.RaiseError + | ResolveAssemblyReferenceMode.Speculative -> CcuLoadFailureAction.ReturnNone + match tcConfig.ResolveLibWithDirectories action assemblyReference with + | Some resolved -> + resolutions <- resolutions.AddResolutionResults [resolved] + ResultD [resolved] + | None -> + ErrorD(AssemblyNotResolved(assemblyReference.Text,assemblyReference.Range)) else // This is a previously unencounterd assembly. Resolve it and add it to the list. // But don't cache resolution failures because the assembly may appear on the disk later. @@ -4288,7 +4382,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti | None -> tcConfig.ResolveLibWithDirectories loadFailureAction r match resolution with | Some resolution -> - match frameworkTcImports.RegisterAndImportReferencedAssemblies(None, [resolution]) with + match frameworkTcImports.RegisterAndImportReferencedAssemblies([resolution]) with | (_, [ResolvedImportedAssembly(ccu)]) -> Some ccu | _ -> match loadFailureAction with @@ -4302,7 +4396,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let sysCcu = ccuInitializer.EndLoadingSystemRuntime(state, resolveAssembly) // Load the rest of the framework DLLs all at once (they may be mutually recursive) - frameworkTcImports.DoRegisterAndImportReferencedAssemblies (None, tcResolutions.GetAssemblyResolutions()) + frameworkTcImports.DoRegisterAndImportReferencedAssemblies (tcResolutions.GetAssemblyResolutions()) let fslibCcu = if tcConfig.compilingFslib then @@ -4325,7 +4419,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti match resolvedAssemblyRef with | Some coreLibraryResolution -> //printfn "coreLibraryResolution = '%s'" coreLibraryResolution.resolvedPath - match frameworkTcImports.RegisterAndImportReferencedAssemblies(None, [coreLibraryResolution]) with + match frameworkTcImports.RegisterAndImportReferencedAssemblies([coreLibraryResolution]) with | (_, [ResolvedImportedAssembly(fslibCcuInfo) ]) -> fslibCcuInfo | _ -> error(InternalError("BuildFrameworkTcImports: no successful import of "+coreLibraryResolution.resolvedPath,coreLibraryResolution.originalReference.Range)) @@ -4344,7 +4438,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti sysCcu.FSharpViewOfMetadata else let search = - seq { yield sysCcu.FSharpViewOfMetadata; + seq { yield sysCcu.FSharpViewOfMetadata yield! frameworkTcImports.GetCcusInDeclOrder() for dllName in SystemAssemblies tcConfig.primaryAssembly.Name do match frameworkTcImports.CcuTable.TryFind dllName with @@ -4365,7 +4459,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti // OK, now we have both mscorlib.dll and FSharp.Core.dll we can create TcGlobals let tcGlobals = mkTcGlobals(tcConfig.compilingFslib,sysCcu.FSharpViewOfMetadata,ilGlobals,fslibCcu, - tcConfig.implicitIncludeDir,tcConfig.mlCompatibility,using40environment,tcConfig.indirectCallArrayMethods, + tcConfig.implicitIncludeDir,tcConfig.mlCompatibility,using40environment, tcConfig.isInteractive,getTypeCcu, tcConfig.emitDebugInfoInQuotations) #if DEBUG @@ -4391,12 +4485,12 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti // Note: This returns a TcImports object. TcImports are disposable - the caller owns the returned TcImports object // and when hosted in Visual Studio or another long-running process must dispose this object. - static member BuildNonFrameworkTcImports (displayPSTypeProviderSecurityDialogBlockingUI : (string->unit) option, tcConfigP:TcConfigProvider, tcGlobals:TcGlobals, baseTcImports, nonFrameworkReferences, knownUnresolved) = + static member BuildNonFrameworkTcImports (tcConfigP:TcConfigProvider, tcGlobals:TcGlobals, baseTcImports, nonFrameworkReferences, knownUnresolved) = let tcConfig = tcConfigP.Get() let tcResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(tcConfig,nonFrameworkReferences,knownUnresolved) let references = tcResolutions.GetAssemblyResolutions() let tcImports = new TcImports(tcConfigP,tcResolutions,Some baseTcImports, Some tcGlobals.ilg) - tcImports.DoRegisterAndImportReferencedAssemblies(displayPSTypeProviderSecurityDialogBlockingUI, references) + tcImports.DoRegisterAndImportReferencedAssemblies(references) tcImports.ReportUnresolvedAssemblyReferences(knownUnresolved) tcImports @@ -4409,7 +4503,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti //let foundationalTcImports,tcGlobals = TcImports.BuildFoundationalTcImports(tcConfigP) let frameworkDLLs,nonFrameworkReferences,knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) let tcGlobals,frameworkTcImports = TcImports.BuildFrameworkTcImports (tcConfigP,frameworkDLLs,nonFrameworkReferences) - let tcImports = TcImports.BuildNonFrameworkTcImports(None, tcConfigP,tcGlobals,frameworkTcImports,nonFrameworkReferences,knownUnresolved) + let tcImports = TcImports.BuildNonFrameworkTcImports(tcConfigP,tcGlobals,frameworkTcImports,nonFrameworkReferences,knownUnresolved) tcGlobals,tcImports interface System.IDisposable with @@ -4423,17 +4517,14 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti disposeActions <- [] for action in actions do action() -//---------------------------------------------------------------------------- -// Add "#r" and "#I" declarations to the tcConfig -//-------------------------------------------------------------------------- - -// Add the reference and add the ccu to the type checking environment . Only used by F# Interactive +/// Process #r in F# Interactive. +/// Adds the reference to the tcImports and add the ccu to the type checking environment. let RequireDLL (tcImports:TcImports) tcEnv m file = let RequireResolved = function | ResolvedImportedAssembly(ccuinfo) -> ccuinfo | UnresolvedImportedAssembly(assemblyName) -> error(Error(FSComp.SR.buildCouldNotResolveAssemblyRequiredByFile(assemblyName,file),m)) - let resolutions = CommitOperationResult(tcImports.TryResolveAssemblyReference(AssemblyReference(m,file),ResolveAssemblyReferenceMode.ReportErrors)) - let dllinfos,ccuinfos = tcImports.RegisterAndImportReferencedAssemblies(None, resolutions) + let resolutions = CommitOperationResult(tcImports.TryResolveAssemblyReference(AssemblyReference(m,file,None),ResolveAssemblyReferenceMode.ReportErrors)) + let dllinfos,ccuinfos = tcImports.RegisterAndImportReferencedAssemblies(resolutions) let ccuinfos = ccuinfos |> List.map RequireResolved let g = tcImports.GetTcGlobals() let amap = tcImports.GetImportMap() @@ -4573,29 +4664,34 @@ let ApplyMetaCommandsFromInputToTcConfig (tcConfig:TcConfig) (inp:ParsedInput,pa ProcessMetaCommandsFromInput (getWarningNumber, addReferencedAssemblyByPath, addLoadedSource) tcConfigB inp pathOfMetaCommandSource () TcConfig.Create(tcConfigB,validate=false) -let GetAssemblyResolutionInformation(tcConfig : TcConfig) : AssemblyResolution list * UnresolvedAssemblyReference list = +//---------------------------------------------------------------------------- +// Compute the load closure of a set of script files +//-------------------------------------------------------------------------- + +let GetAssemblyResolutionInformation(tcConfig : TcConfig) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) let assemblyList = TcAssemblyResolutions.GetAllDllReferences(tcConfig) let resolutions = TcAssemblyResolutions.Resolve(tcConfig,assemblyList,[]) resolutions.GetAssemblyResolutions(),resolutions.GetUnresolvedReferences() -type LoadClosure = { - /// The source files along with the ranges of the #load positions in each file. - SourceFiles: (string * range list) list - /// The resolved references along with the ranges of the #r positions in each file. - References: (string * AssemblyResolution list) list - /// The list of references that were not resolved during load closure. These may still be extension references. - UnresolvedReferences : UnresolvedAssemblyReference list - /// The list of all sources in the closure with inputs when available - Inputs: (string * ParsedInput option) list - /// The #nowarns - NoWarns: (string * range list) list - /// Errors seen while parsing root of closure - RootErrors : PhasedError list - /// Warnings seen while parsing root of closure - RootWarnings : PhasedError list - } - +[] +type LoadClosure = + { /// The source files along with the ranges of the #load positions in each file. + SourceFiles: (string * range list) list + /// The resolved references along with the ranges of the #r positions in each file. + References: (string * AssemblyResolution list) list + /// The list of references that were not resolved during load closure. These may still be extension references. + UnresolvedReferences : UnresolvedAssemblyReference list + /// The list of all sources in the closure with inputs when available + Inputs: (string * ParsedInput option) list + /// The #nowarns + NoWarns: (string * range list) list + /// Errors seen while parsing root of closure + RootErrors : PhasedError list + /// Warnings seen while parsing root of closure + RootWarnings : PhasedError list } + + [] type CodeContext = | Evaluation // in fsi.exe @@ -4606,11 +4702,11 @@ type CodeContext = module private ScriptPreprocessClosure = open Internal.Utilities.Text.Lexing - type private ClosureDirective = + type ClosureDirective = | SourceFile of string * range * string // filename, range, source text | ClosedSourceFile of string * range * ParsedInput option * PhasedError list * PhasedError list * (string * range) list // filename, range, errors, warnings, nowarns - type private Observed() = + type Observed() = let seen = System.Collections.Generic.Dictionary<_,bool>() member ob.SetSeen(check) = if not(seen.ContainsKey(check)) then @@ -4638,13 +4734,17 @@ module private ScriptPreprocessClosure = ParseOneInputLexbuf (tcConfig,lexResourceManager,defines,lexbuf,filename,isLastCompiland,errorLogger) /// Create a TcConfig for load closure starting from a single .fsx file - let CreateScriptSourceTcConfig(filename:string,codeContext) = + let CreateScriptSourceTcConfig (filename:string, codeContext, useMonoResolution, useFsiAuxLib, basicReferences, applyCommandLineArgs) = let projectDir = Path.GetDirectoryName(filename) let isInteractive = (codeContext = CodeContext.Evaluation) let isInvalidationSupported = (codeContext = CodeContext.Editing) // always use primary assembly = mscorlib for scripts let tcConfigB = TcConfigBuilder.CreateNew(Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler.Value, true (* optimize for memory *), projectDir, isInteractive, isInvalidationSupported) - BasicReferencesForScriptLoadClosure |> List.iter(fun f->tcConfigB.AddReferencedAssemblyByPath(range0,f)) // Add script references + applyCommandLineArgs tcConfigB + match basicReferences with + | None -> BasicReferencesForScriptLoadClosure(useMonoResolution, useFsiAuxLib) |> List.iter(fun f->tcConfigB.AddReferencedAssemblyByPath(range0,f)) // Add script references + | Some rs -> for m,r in rs do tcConfigB.AddReferencedAssemblyByPath(m,r) + tcConfigB.resolutionEnvironment <- match codeContext with | CodeContext.Editing -> MSBuildResolver.DesigntimeLike @@ -4656,9 +4756,9 @@ module private ScriptPreprocessClosure = tcConfigB.implicitlyResolveAssemblies <- false TcConfig.Create(tcConfigB,validate=true) - let private SourceFileOfFilename(filename,m,inputCodePage:int option) : ClosureDirective list = + let SourceFileOfFilename(filename,m,inputCodePage:int option) : ClosureDirective list = try - let filename = FileSystem.SafeGetFullPath(filename) + let filename = FileSystem.GetFullPathShim(filename) use stream = FileSystem.FileStreamReadShim filename use reader = match inputCodePage with @@ -4689,7 +4789,7 @@ module private ScriptPreprocessClosure = let tcConfigB = tcConfig.CloneOfOriginalBuilder TcConfig.Create(tcConfigB,validate=false),nowarns - let private FindClosureDirectives(closureDirectives,tcConfig:TcConfig,codeContext,lexResourceManager:Lexhelp.LexResourceManager) = + let FindClosureDirectives(closureDirectives,tcConfig:TcConfig,codeContext,lexResourceManager:Lexhelp.LexResourceManager) = let tcConfig = ref tcConfig let observedSources = Observed() @@ -4697,7 +4797,7 @@ module private ScriptPreprocessClosure = match closureDirective with | ClosedSourceFile _ as csf -> [csf] | SourceFile(filename,m,source) -> - let filename = FileSystem.SafeGetFullPath(filename) + let filename = FileSystem.GetFullPathShim(filename) if observedSources.HaveSeen(filename) then [] else observedSources.SetSeen(filename) @@ -4732,7 +4832,7 @@ module private ScriptPreprocessClosure = closureDirectives |> List.map FindClosure |> List.concat, !tcConfig /// Reduce the full directive closure into LoadClosure - let private GetLoadClosure(rootFilename,closureDirectives,tcConfig,codeContext) = + let GetLoadClosure(rootFilename,closureDirectives,tcConfig,codeContext) = // Mark the last file as isLastCompiland. closureDirectives is currently reversed. let closureDirectives = @@ -4745,15 +4845,14 @@ module private ScriptPreprocessClosure = let sourceFiles = ref [] let sourceInputs = ref [] let globalNoWarns = ref [] - let ExtractOne = function + for directive in closureDirectives do + match directive with | ClosedSourceFile(filename,m,input,_,_,noWarns) -> - let filename = FileSystem.SafeGetFullPath(filename) + let filename = FileSystem.GetFullPathShim(filename) sourceFiles := (filename,m) :: !sourceFiles globalNoWarns := (!globalNoWarns @ noWarns) sourceInputs := (filename,input) :: !sourceInputs | _ -> failwith "Unexpected" - - closureDirectives |> List.iter ExtractOne // This unreverses the list of sources // Resolve all references. let resolutionErrors = ref [] @@ -4776,7 +4875,7 @@ module private ScriptPreprocessClosure = | _ -> [],[] // When no file existed. let isRootRange exn = - match RangeOfError exn with + match GetRangeOfError exn with | Some m -> // Return true if the error was *not* from a #load-ed file. let isArgParameterWhileNotEditing = (codeContext <> CodeContext.Editing) && (m = range0 || m = rangeStartup || m = rangeCmdArgs) @@ -4788,19 +4887,31 @@ module private ScriptPreprocessClosure = let rootErrors = rootErrors |> List.filter isRootRange let rootWarnings = rootWarnings |> List.filter isRootRange - let result = {SourceFiles = List.groupByFirst !sourceFiles - References = List.groupByFirst references - UnresolvedReferences = unresolvedReferences - Inputs = !sourceInputs - NoWarns = List.groupByFirst !globalNoWarns - RootErrors = rootErrors - RootWarnings = rootWarnings} + let result : LoadClosure = + { SourceFiles = List.groupByFirst !sourceFiles + References = List.groupByFirst references + UnresolvedReferences = unresolvedReferences + Inputs = !sourceInputs + NoWarns = List.groupByFirst !globalNoWarns + RootErrors = rootErrors + RootWarnings = rootWarnings} + result - - /// Given source text, find the full load closure - /// Used from service.fs, when editing a script file - let GetFullClosureOfScriptSource(filename,source,codeContext,lexResourceManager:Lexhelp.LexResourceManager) = - let tcConfig = CreateScriptSourceTcConfig(filename,codeContext) + + /// Given source text, find the full load closure. Used from service.fs, when editing a script file + let GetFullClosureOfScriptSource(filename,source,codeContext,useMonoResolution,useFsiAuxLib,lexResourceManager:Lexhelp.LexResourceManager,applyCommmandLineArgs) = + // Resolve the basic references such as FSharp.Core.dll first, before processing any #I directives in the script + // + // This is tries to mimic the action of running the script in F# Interactive - the initial context for scripting is created + // first, then #I and other directives are processed. + let references0 = + let tcConfig = CreateScriptSourceTcConfig(filename,codeContext,useMonoResolution,useFsiAuxLib,None,applyCommmandLineArgs) + let resolutions0,_unresolvedReferences = GetAssemblyResolutionInformation(tcConfig) + let references0 = resolutions0 |> List.map (fun r->r.originalReference.Range,r.resolvedPath) |> Seq.distinct |> List.ofSeq + references0 + + let tcConfig = CreateScriptSourceTcConfig(filename,codeContext,useMonoResolution,useFsiAuxLib,Some references0,applyCommmandLineArgs) + let protoClosure = [SourceFile(filename,range0,source)] let finalClosure,tcConfig = FindClosureDirectives(protoClosure,tcConfig,codeContext,lexResourceManager) GetLoadClosure(filename,finalClosure,tcConfig,codeContext) @@ -4815,30 +4926,27 @@ module private ScriptPreprocessClosure = type LoadClosure with // Used from service.fs, when editing a script file - static member ComputeClosureOfSourceText(filename:string,source:string,codeContext,lexResourceManager:Lexhelp.LexResourceManager) : LoadClosure = + static member ComputeClosureOfSourceText(filename:string, source:string, codeContext, useMonoResolution:bool, useFsiAuxLib, lexResourceManager:Lexhelp.LexResourceManager, applyCommmandLineArgs) : LoadClosure = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) - ScriptPreprocessClosure.GetFullClosureOfScriptSource(filename,source,codeContext,lexResourceManager) + ScriptPreprocessClosure.GetFullClosureOfScriptSource(filename,source,codeContext,useMonoResolution,useFsiAuxLib, lexResourceManager, applyCommmandLineArgs) /// Used from fsi.fs and fsc.fs, for #load and command line. /// The resulting references are then added to a TcConfig. - static member ComputeClosureOfSourceFiles(tcConfig:TcConfig,files:(string*range) list,codeContext,useDefaultScriptingReferences:bool,lexResourceManager:Lexhelp.LexResourceManager) : LoadClosure = + static member ComputeClosureOfSourceFiles (tcConfig:TcConfig, files:(string*range) list, codeContext, useDefaultScriptingReferences:bool, lexResourceManager:Lexhelp.LexResourceManager) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) - ScriptPreprocessClosure.GetFullClosureOfScriptFiles(tcConfig,files,codeContext,useDefaultScriptingReferences,lexResourceManager) + ScriptPreprocessClosure.GetFullClosureOfScriptFiles (tcConfig, files, codeContext, useDefaultScriptingReferences, lexResourceManager) //---------------------------------------------------------------------------- -// Build the initial type checking environment +// Initial type checking environment //-------------------------------------------------------------------------- -let implicitOpen tcGlobals amap m tcEnv p = - if verbose then dprintf "opening %s\n" p - Tc.TcOpenDecl TcResultsSink.NoSink tcGlobals amap m m tcEnv (pathToSynLid m (splitNamespace p)) - -let GetInitialTypecheckerEnv (assemblyName:string option) (initm:range) (tcConfig:TcConfig) (tcImports:TcImports) tcGlobals = +/// Build the initial type checking environment +let GetInitialTcEnv (assemblyName:string option, initm:range, tcConfig:TcConfig, tcImports:TcImports, tcGlobals) = let initm = initm.StartRange - if verbose then dprintf "--- building initial tcEnv\n" - let internalsAreVisibleHere (ccuinfo:ImportedAssembly) = + + let internalsAreVisibleHere (asm:ImportedAssembly) = match assemblyName with | None -> false | Some assemblyName -> @@ -4846,30 +4954,56 @@ let GetInitialTypecheckerEnv (assemblyName:string option) (initm:range) (tcConfi try System.Reflection.AssemblyName(visibleTo).Name = assemblyName with e -> - warning(InvalidInternalsVisibleToAssemblyName(visibleTo,ccuinfo.FSharpViewOfMetadata.FileName)) + warning(InvalidInternalsVisibleToAssemblyName(visibleTo,asm.FSharpViewOfMetadata.FileName)) false - let internalsVisibleTos = ccuinfo.AssemblyInternalsVisibleToAttributes + let internalsVisibleTos = asm.AssemblyInternalsVisibleToAttributes List.exists isTargetAssemblyName internalsVisibleTos - let ccus = tcImports.GetImportedAssemblies() |> List.map (fun ccuinfo -> ccuinfo.FSharpViewOfMetadata, - ccuinfo.AssemblyAutoOpenAttributes, - ccuinfo |> internalsAreVisibleHere) + + let ccus = + tcImports.GetImportedAssemblies() + |> List.map (fun asm -> asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm |> internalsAreVisibleHere) + let amap = tcImports.GetImportMap() - let tcEnv = Tc.CreateInitialTcEnv(tcGlobals,amap,initm,ccus) |> (fun tce -> - if tcConfig.checkOverflow then - List.fold (implicitOpen tcGlobals amap initm) tce [FSharpLib.CoreOperatorsCheckedName] - else - tce) - if verbose then dprintf "--- opening implicit paths\n" - if verbose then dprintf "--- GetInitialTypecheckerEnv, top modules = %s\n" (String.concat ";" (NameMap.domainL tcEnv.NameEnv.eModulesAndNamespaces)) - if verbose then dprintf "<-- GetInitialTypecheckerEnv\n" + + let tcEnv = Tc.CreateInitialTcEnv(tcGlobals, amap, initm, ccus) + + let tcEnv = + if tcConfig.checkOverflow then + Tc.TcOpenDecl TcResultsSink.NoSink tcGlobals amap initm initm tcEnv (pathToSynLid initm (splitNamespace FSharpLib.CoreOperatorsCheckedName)) + else + tcEnv tcEnv //---------------------------------------------------------------------------- -// TYPECHECK -//-------------------------------------------------------------------------- +// Fault injection -(* The incremental state of type checking files *) -(* REVIEW: clean this up *) +/// Inject faults into checking +let CheckSimulateException(tcConfig:TcConfig) = + match tcConfig.simulateException with + | Some("tc-oom") -> raise(System.OutOfMemoryException()) + | Some("tc-an") -> raise(System.ArgumentNullException("simulated")) + | Some("tc-invop") -> raise(System.InvalidOperationException()) + | Some("tc-av") -> raise(System.AccessViolationException()) + | Some("tc-aor") -> raise(System.ArgumentOutOfRangeException()) + | Some("tc-dv0") -> raise(System.DivideByZeroException()) + | Some("tc-nfn") -> raise(System.NotFiniteNumberException()) + | Some("tc-oe") -> raise(System.OverflowException()) + | Some("tc-atmm") -> raise(System.ArrayTypeMismatchException()) + | Some("tc-bif") -> raise(System.BadImageFormatException()) + | Some("tc-knf") -> raise(System.Collections.Generic.KeyNotFoundException()) + | Some("tc-ior") -> raise(System.IndexOutOfRangeException()) + | Some("tc-ic") -> raise(System.InvalidCastException()) + | Some("tc-ip") -> raise(System.InvalidProgramException()) + | Some("tc-ma") -> raise(System.MemberAccessException()) + | Some("tc-ni") -> raise(System.NotImplementedException()) + | Some("tc-nr") -> raise(System.NullReferenceException()) + | Some("tc-oc") -> raise(System.OperationCanceledException()) + | Some("tc-fail") -> failwith "simulated" + | _ -> () + +//---------------------------------------------------------------------------- +// Type-check sets of files +//-------------------------------------------------------------------------- type RootSigs = Zmap type RootImpls = Zset @@ -4883,21 +5017,23 @@ type TcState = tcsNiceNameGen: NiceNameGenerator tcsTcSigEnv: TcEnv tcsTcImplEnv: TcEnv - (* The accumulated results of type checking for this assembly *) + /// The accumulated results of type checking for this assembly tcsRootSigsAndImpls : TypecheckerSigsAndImpls } member x.NiceNameGenerator = x.tcsNiceNameGen member x.TcEnvFromSignatures = x.tcsTcSigEnv member x.TcEnvFromImpls = x.tcsTcImplEnv member x.Ccu = x.tcsCcu + member x.PartialAssemblySignature = + let (RootSigsAndImpls(_rootSigs,_rootImpls,_allSigModulTyp,allImplementedSigModulTyp)) = x.tcsRootSigsAndImpls + allImplementedSigModulTyp member x.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) = { x with tcsTcSigEnv = tcEnvAtEndOfLastInput tcsTcImplEnv = tcEnvAtEndOfLastInput } -let TypecheckInitialState(m,ccuName,tcConfig:TcConfig,tcGlobals,tcImports:TcImports,niceNameGen,tcEnv0) = +let GetInitialTcState(m,ccuName,tcConfig:TcConfig,tcGlobals,tcImports:TcImports,niceNameGen,tcEnv0) = ignore tcImports - if verbose then dprintf "Typecheck (constructing initial state)....\n" // Create a ccu to hold all the results of compilation let ccuType = NewCcuContents ILScopeRef.Local m ccuName (NewEmptyModuleOrNamespaceType Namespace) let ccu = @@ -4917,7 +5053,7 @@ let TypecheckInitialState(m,ccuName,tcConfig:TcConfig,tcGlobals,tcImports:TcImpo MemberSignatureEquality= (Tastops.typeEquivAux EraseAll tcGlobals) TypeForwarders=Map.empty }) - (* OK, is this is the F# library CCU then fix it up. *) + // OK, is this is the FSharp.Core CCU then fix it up. if tcConfig.compilingFslib then tcGlobals.fslibCcu.Fixup(ccu) @@ -4932,32 +5068,9 @@ let TypecheckInitialState(m,ccuName,tcConfig:TcConfig,tcGlobals,tcImports:TcImpo tcsTcImplEnv=tcEnv0 tcsRootSigsAndImpls = RootSigsAndImpls (rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp) } -let CheckSimulateException(tcConfig:TcConfig) = - match tcConfig.simulateException with - | Some("tc-oom") -> raise(System.OutOfMemoryException()) - | Some("tc-an") -> raise(System.ArgumentNullException("simulated")) - | Some("tc-invop") -> raise(System.InvalidOperationException()) - | Some("tc-av") -> raise(System.AccessViolationException()) - | Some("tc-aor") -> raise(System.ArgumentOutOfRangeException()) - | Some("tc-dv0") -> raise(System.DivideByZeroException()) - | Some("tc-nfn") -> raise(System.NotFiniteNumberException()) - | Some("tc-oe") -> raise(System.OverflowException()) - | Some("tc-atmm") -> raise(System.ArrayTypeMismatchException()) - | Some("tc-bif") -> raise(System.BadImageFormatException()) - | Some("tc-knf") -> raise(System.Collections.Generic.KeyNotFoundException()) - | Some("tc-ior") -> raise(System.IndexOutOfRangeException()) - | Some("tc-ic") -> raise(System.InvalidCastException()) - | Some("tc-ip") -> raise(System.InvalidProgramException()) - | Some("tc-ma") -> raise(System.MemberAccessException()) - | Some("tc-ni") -> raise(System.NotImplementedException()) - | Some("tc-nr") -> raise(System.NullReferenceException()) - | Some("tc-oc") -> raise(System.OperationCanceledException()) - | Some("tc-fail") -> failwith "simulated" - | _ -> () - -(* Typecheck a single file or interactive entry into F# Interactive *) -let TypecheckOneInputEventually +/// Typecheck a single file or interactive entry into F# Interactive +let TypeCheckOneInputEventually (checkForErrors , tcConfig:TcConfig, tcImports:TcImports, tcGlobals, prefixPathOpt, tcSink, tcState: TcState, inp: ParsedInput) = eventually { @@ -4969,31 +5082,19 @@ let TypecheckOneInputEventually let! (topAttrs, mimpls,tcEnvAtEnd,tcSigEnv,tcImplEnv,topSigsAndImpls,ccuType) = eventually { match inp with - | ParsedInput.SigFile (ParsedSigFileInput(filename,qualNameOfFile, _,_,_) as file) -> + | ParsedInput.SigFile (ParsedSigFileInput(_, qualNameOfFile, _, _, _) as file) -> // Check if we've seen this top module signature before. if Zmap.mem qualNameOfFile rootSigs then errorR(Error(FSComp.SR.buildSignatureAlreadySpecified(qualNameOfFile.Text),m.StartRange)) - (* Check if the implementation came first in compilation order *) + // Check if the implementation came first in compilation order if Zset.contains qualNameOfFile rootImpls then errorR(Error(FSComp.SR.buildImplementationAlreadyGivenDetail(qualNameOfFile.Text),m)) // Typecheck the signature file -#if DEBUG - if !verboseStamps then - dprintf "---------------------- START CHECK %A ------------\n" filename -#else - filename |> ignore -#endif let! (tcEnvAtEnd,tcEnv,smodulTypeRoot) = - Tc.TypecheckOneSigFile (tcGlobals,tcState.tcsNiceNameGen,amap,tcState.tcsCcu,checkForErrors,tcConfig.conditionalCompilationDefines,tcSink) tcState.tcsTcSigEnv file - -#if DEBUG - if !verboseStamps then - dprintf "Type-checked signature:\n%s\n" (Layout.showL (Layout.squashTo 192 (entityTypeL smodulTypeRoot))) - dprintf "---------------------- END CHECK %A ------------\n" filename -#endif + Tc.TypeCheckOneSigFile (tcGlobals,tcState.tcsNiceNameGen,amap,tcState.tcsCcu,checkForErrors,tcConfig.conditionalCompilationDefines,tcSink) tcState.tcsTcSigEnv file let rootSigs = Zmap.add qualNameOfFile smodulTypeRoot rootSigs @@ -5005,7 +5106,7 @@ let TypecheckOneInputEventually let m = qualNameOfFile.Range TcOpenDecl tcSink tcGlobals amap m m tcEnv prefixPath - let res = (EmptyTopAttrs, [],tcEnvAtEnd,tcEnv,tcState.tcsTcImplEnv,RootSigsAndImpls(rootSigs,rootImpls, allSigModulTyp, allImplementedSigModulTyp ),tcState.tcsCcuType) + let res = (EmptyTopAttrs, [], tcEnvAtEnd, tcEnv, tcState.tcsTcImplEnv, RootSigsAndImpls(rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp), tcState.tcsCcuType) return res | ParsedInput.ImplFile (ParsedImplFileInput(filename,_,qualNameOfFile,_,_,_,_) as file) -> @@ -5021,24 +5122,14 @@ let TypecheckOneInputEventually let tcImplEnv = tcState.tcsTcImplEnv -#if DEBUG - if !verboseStamps then - dprintf "---------------------- START CHECK %A ------------\n" filename -#endif // Typecheck the implementation file let! topAttrs,implFile,tcEnvAtEnd = - Tc.TypecheckOneImplFile (tcGlobals,tcState.tcsNiceNameGen,amap,tcState.tcsCcu,checkForErrors,tcConfig.conditionalCompilationDefines,tcSink) tcImplEnv rootSigOpt file + Tc.TypeCheckOneImplFile (tcGlobals,tcState.tcsNiceNameGen,amap,tcState.tcsCcu,checkForErrors,tcConfig.conditionalCompilationDefines,tcSink) tcImplEnv rootSigOpt file let hadSig = isSome rootSigOpt let implFileSigType = SigTypeOfImplFile implFile -#if DEBUG - if !verboseStamps then - dprintf "Implementation signature:\n%s\n" (Layout.showL (Layout.squashTo 192 (entityTypeL implFileSigType))) - dprintf "---------------------- END CHECK %A ------------\n" filename -#endif - - if verbose then dprintf "done TypecheckOneImplFile...\n" + if verbose then dprintf "done TypeCheckOneImplFile...\n" let rootImpls = Zset.add qualNameOfFile rootImpls // Only add it to the environment if it didn't have a signature @@ -5064,7 +5155,7 @@ let TypecheckOneInputEventually | Some prefixPath when not hadSig -> TcOpenDecl tcSink tcGlobals amap m m tcSigEnv prefixPath | _ -> tcSigEnv - let allImplementedSigModulTyp = combineModuleOrNamespaceTypeList [] m [implFileSigType; allImplementedSigModulTyp] + let allImplementedSigModulTyp = CombineCcuContentFragments m [implFileSigType; allImplementedSigModulTyp] // Add it to the CCU let ccuType = @@ -5072,7 +5163,7 @@ let TypecheckOneInputEventually // [CHECK: Why? This seriously degraded performance] NewCcuContents ILScopeRef.Local m tcState.tcsCcu.AssemblyName allImplementedSigModulTyp - if verbose then dprintf "done TypecheckOneInputEventually...\n" + if verbose then dprintf "done TypeCheckOneInputEventually...\n" let topSigsAndImpls = RootSigsAndImpls(rootSigs,rootImpls,allSigModulTyp,allImplementedSigModulTyp) let res = (topAttrs,[implFile], tcEnvAtEnd, tcSigEnv, tcImplEnv, topSigsAndImpls, ccuType) @@ -5089,34 +5180,33 @@ let TypecheckOneInputEventually return (tcState.TcEnvFromSignatures,EmptyTopAttrs,[]),tcState } -let TypecheckOneInput (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt) tcState inp = +let TypeCheckOneInput (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt) tcState inp = // 'use' ensures that the warning handler is restored at the end use unwindEL = PushErrorLoggerPhaseUntilUnwind(fun oldLogger -> GetErrorLoggerFilteringByScopedPragmas(false,GetScopedPragmasForInput(inp),oldLogger) ) use unwindBP = PushThreadBuildPhaseUntilUnwind (BuildPhase.TypeCheck) - TypecheckOneInputEventually (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, inp) |> Eventually.force + TypeCheckOneInputEventually (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, inp) |> Eventually.force -let TypecheckMultipleInputsFinish(results,tcState: TcState) = +let TypeCheckMultipleInputsFinish(results,tcState: TcState) = let tcEnvsAtEndFile,topAttrs,mimpls = List.unzip3 results let topAttrs = List.foldBack CombineTopAttrs topAttrs EmptyTopAttrs let mimpls = List.concat mimpls // This is the environment required by fsi.exe when incrementally adding definitions let tcEnvAtEndOfLastFile = (match tcEnvsAtEndFile with h :: _ -> h | _ -> tcState.TcEnvFromSignatures) - if verbose then dprintf "done TypecheckMultipleInputs...\n" (tcEnvAtEndOfLastFile,topAttrs,mimpls),tcState -let TypecheckMultipleInputs(checkForErrors,tcConfig:TcConfig,tcImports,tcGlobals,prefixPathOpt,tcState,inputs) = - let results,tcState = List.mapFold (TypecheckOneInput (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt)) tcState inputs - TypecheckMultipleInputsFinish(results,tcState) +let TypeCheckMultipleInputs (checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) = + let results,tcState = (tcState, inputs) ||> List.mapFold (TypeCheckOneInput (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt)) + TypeCheckMultipleInputsFinish(results,tcState) -let TypecheckSingleInputAndFinishEventually(checkForErrors,tcConfig:TcConfig,tcImports,tcGlobals,prefixPathOpt,tcSink,tcState,input) = +let TypeCheckSingleInputAndFinishEventually(checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input) = eventually { - let! results,tcState = TypecheckOneInputEventually(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input) - return TypecheckMultipleInputsFinish([results],tcState) + let! results,tcState = TypeCheckOneInputEventually(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input) + return TypeCheckMultipleInputsFinish([results],tcState) } -let TypecheckClosedInputSetFinish(mimpls,tcState) = +let TypeCheckClosedInputSetFinish (mimpls, tcState) = // Publish the latest contents to the CCU tcState.tcsCcu.Deref.Contents <- tcState.tcsCcuType @@ -5125,292 +5215,16 @@ let TypecheckClosedInputSetFinish(mimpls,tcState) = rootSigs |> Zmap.iter (fun qualNameOfFile _ -> if not (Zset.contains qualNameOfFile rootImpls) then errorR(Error(FSComp.SR.buildSignatureWithoutImplementation(qualNameOfFile.Text), qualNameOfFile.Range))) - if verbose then dprintf "done TypecheckClosedInputSet...\n" + let tassembly = TAssembly(mimpls) tcState, tassembly -let TypecheckClosedInputSet(checkForErrors,tcConfig,tcImports,tcGlobals,prefixPathOpt,tcState,inputs) = +let TypeCheckClosedInputSet (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) = // tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions - let (tcEnvAtEndOfLastFile,topAttrs,mimpls),tcState = TypecheckMultipleInputs (checkForErrors,tcConfig,tcImports,tcGlobals,prefixPathOpt,tcState,inputs) - let tcState,tassembly = TypecheckClosedInputSetFinish (mimpls, tcState) + let (tcEnvAtEndOfLastFile, topAttrs, mimpls),tcState = TypeCheckMultipleInputs (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) + let tcState,tassembly = TypeCheckClosedInputSetFinish (mimpls, tcState) tcState, topAttrs, tassembly, tcEnvAtEndOfLastFile -type OptionSwitch = - | On - | Off - -type OptionSpec = - | OptionClear of bool ref - | OptionFloat of (float -> unit) - | OptionInt of (int -> unit) - | OptionSwitch of (OptionSwitch -> unit) - | OptionIntList of (int -> unit) - | OptionIntListSwitch of (int -> OptionSwitch -> unit) - | OptionRest of (string -> unit) - | OptionSet of bool ref - | OptionString of (string -> unit) - | OptionStringList of (string -> unit) - | OptionStringListSwitch of (string -> OptionSwitch -> unit) - | OptionUnit of (unit -> unit) - | OptionHelp of (CompilerOptionBlock list -> unit) // like OptionUnit, but given the "options" - | OptionGeneral of (string list -> bool) * (string list -> string list) // Applies? * (ApplyReturningResidualArgs) - -and CompilerOption = CompilerOption of string * string * OptionSpec * Option * string option -and CompilerOptionBlock = PublicOptions of string * CompilerOption list | PrivateOptions of CompilerOption list -let blockOptions = function PublicOptions (_,opts) -> opts | PrivateOptions opts -> opts - -let filterCompilerOptionBlock pred block = - match block with - | PublicOptions(heading,opts) -> PublicOptions(heading,List.filter pred opts) - | PrivateOptions(opts) -> PrivateOptions(List.filter pred opts) - -let compilerOptionUsage (CompilerOption(s,tag,spec,_,_)) = - let s = if s="--" then "" else s (* s="flag" for "--flag" options. s="--" for "--" option. Adjust printing here for "--" case. *) - match spec with - | (OptionUnit _ | OptionSet _ | OptionClear _ | OptionHelp _) -> sprintf "--%s" s - | OptionStringList _ -> sprintf "--%s:%s" s tag - | OptionIntList _ -> sprintf "--%s:%s" s tag - | OptionSwitch _ -> sprintf "--%s[+|-]" s - | OptionStringListSwitch _ -> sprintf "--%s[+|-]:%s" s tag - | OptionIntListSwitch _ -> sprintf "--%s[+|-]:%s" s tag - | OptionString _ -> sprintf "--%s:%s" s tag - | OptionInt _ -> sprintf "--%s:%s" s tag - | OptionFloat _ -> sprintf "--%s:%s" s tag - | OptionRest _ -> sprintf "--%s ..." s - | OptionGeneral _ -> if tag="" then sprintf "%s" s else sprintf "%s:%s" s tag (* still being decided *) - -let printCompilerOption (CompilerOption(_s,_tag,_spec,_,help) as compilerOption) = - let flagWidth = 30 // fixed width for printing of flags, e.g. --warnaserror: - let defaultLineWidth = 80 // the fallback width - let lineWidth = try System.Console.BufferWidth with e -> defaultLineWidth - let lineWidth = if lineWidth=0 then defaultLineWidth else lineWidth (* Have seen BufferWidth=0 on Linux/Mono *) - // Lines have this form: - // flagWidth chars - for flags description or padding on continuation lines. - // single space - space. - // description - words upto but excluding the final character of the line. - assert(flagWidth = 30) - printf "%-30s" (compilerOptionUsage compilerOption) - let printWord column (word:string) = - // Have printed upto column. - // Now print the next word including any preceeding whitespace. - // Returns the column printed to (suited to folding). - if column + 1 (*space*) + word.Length >= lineWidth then // NOTE: "equality" ensures final character of the line is never printed - printfn "" (* newline *) - assert(flagWidth = 30) - printf "%-30s %s" ""(*<--flags*) word - flagWidth + 1 + word.Length - else - printf " %s" word - column + 1 + word.Length - let words = match help with None -> [| |] | Some s -> s.Split [| ' ' |] - let _finalColumn = Array.fold printWord flagWidth words - printfn "" (* newline *) - -let printPublicOptions (heading,opts) = - if nonNil opts then - printfn "" - printfn "" - printfn "\t\t%s" heading - List.iter printCompilerOption opts - -let printCompilerOptionBlocks blocks = - let equals x y = x=y - let publicBlocks = List.choose (function PrivateOptions _ -> None | PublicOptions (heading,opts) -> Some (heading,opts)) blocks - let consider doneHeadings (heading, _opts) = - if Set.contains heading doneHeadings then - doneHeadings - else - let headingOptions = List.filter (fst >> equals heading) publicBlocks |> List.map snd |> List.concat - printPublicOptions (heading,headingOptions) - Set.add heading doneHeadings - List.fold consider Set.empty publicBlocks |> ignore> - -(* For QA *) -let dumpCompilerOption prefix (CompilerOption(str, _, spec, _, _)) = - printf "section='%-25s' ! option=%-30s kind=" prefix str - match spec with - | OptionUnit _ -> printf "OptionUnit" - | OptionSet _ -> printf "OptionSet" - | OptionClear _ -> printf "OptionClear" - | OptionHelp _ -> printf "OptionHelp" - | OptionStringList _ -> printf "OptionStringList" - | OptionIntList _ -> printf "OptionIntList" - | OptionSwitch _ -> printf "OptionSwitch" - | OptionStringListSwitch _ -> printf "OptionStringListSwitch" - | OptionIntListSwitch _ -> printf "OptionIntListSwitch" - | OptionString _ -> printf "OptionString" - | OptionInt _ -> printf "OptionInt" - | OptionFloat _ -> printf "OptionFloat" - | OptionRest _ -> printf "OptionRest" - | OptionGeneral _ -> printf "OptionGeneral" - printf "\n" -let dumpCompilerOptionBlock = function - | PublicOptions (heading,opts) -> List.iter (dumpCompilerOption heading) opts - | PrivateOptions opts -> List.iter (dumpCompilerOption "NoSection") opts -let dumpCompilerOptionBlocks blocks = List.iter dumpCompilerOptionBlock blocks - -let isSlashOpt (opt:string) = - opt.[0] = '/' && (opt.Length = 1 || not (opt.[1..].Contains "/")) - -//---------------------------------------------------------------------------- -// The argument parser is used by both the VS plug-in and the fsc.exe to -// parse the include file path and other front-end arguments. -// -// The language service uses this function too. It's important to continue -// processing flags even if an error is seen in one so that the best possible -// intellisense can be show. -//-------------------------------------------------------------------------- -let ParseCompilerOptions (collectOtherArgument : string -> unit) (blocks: CompilerOptionBlock list) args = - use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) - - let specs : CompilerOption list = List.collect blockOptions blocks - - // returns a tuple - the option token, the option argument string - let parseOption (s : string) = - // grab the option token - let opts = s.Split([|':'|]) - let mutable opt = opts.[0] - if opt = "" then - () - // if it doesn't start with a '-' or '/', reject outright - elif opt.[0] <> '-' && opt.[0] <> '/' then - opt <- "" - elif opt <> "--" then - // is it an abbreviated or MSFT-style option? - // if so, strip the first character and move on with your life - if opt.Length = 2 || isSlashOpt opt then - opt <- opt.[1 ..] - // else, it should be a non-abbreviated option starting with "--" - elif opt.Length > 3 && opt.StartsWith("--") then - opt <- opt.[2 ..] - else - opt <- "" - - // get the argument string - let optArgs = if opts.Length > 1 then String.Join(":",opts.[1 ..]) else "" - opt, optArgs - - let getOptionArg compilerOption (argString : string) = - if argString = "" then - errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption),rangeCmdArgs)) - argString - - let getOptionArgList compilerOption (argString : string) = - if argString = "" then - errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption),rangeCmdArgs)) - [] - else - argString.Split([|',';';'|]) |> List.ofArray - - let getSwitchOpt (opt : string) = - // if opt is a switch, strip the '+' or '-' - if opt <> "--" && opt.Length > 1 && (opt.EndsWith("+",StringComparison.Ordinal) || opt.EndsWith("-",StringComparison.Ordinal)) then - opt.[0 .. opt.Length - 2] - else - opt - - let getSwitch (s: string) = - let s = (s.Split([|':'|])).[0] - if s <> "--" && s.EndsWith("-",StringComparison.Ordinal) then Off else On - - let rec processArg args = - match args with - | [] -> () - | opt :: t -> - - let optToken, argString = parseOption opt - - let reportDeprecatedOption errOpt = - match errOpt with - | Some(e) -> warning(e) - | None -> () - - let rec attempt l = - match l with - | (CompilerOption(s, _, OptionHelp f, d, _) :: _) when optToken = s && argString = "" -> - reportDeprecatedOption d - f blocks; t - | (CompilerOption(s, _, OptionUnit f, d, _) :: _) when optToken = s && argString = "" -> - reportDeprecatedOption d - f (); t - | (CompilerOption(s, _, OptionSwitch f, d, _) :: _) when getSwitchOpt(optToken) = s && argString = "" -> - reportDeprecatedOption d - f (getSwitch opt); t - | (CompilerOption(s, _, OptionSet f, d, _) :: _) when optToken = s && argString = "" -> - reportDeprecatedOption d - f := true; t - | (CompilerOption(s, _, OptionClear f, d, _) :: _) when optToken = s && argString = "" -> - reportDeprecatedOption d - f := false; t - | (CompilerOption(s, _, OptionString f, d, _) as compilerOption :: _) when optToken = s -> - reportDeprecatedOption d - let oa = getOptionArg compilerOption argString - if oa <> "" then - f (getOptionArg compilerOption oa) - t - | (CompilerOption(s, _, OptionInt f, d, _) as compilerOption :: _) when optToken = s -> - reportDeprecatedOption d - let oa = getOptionArg compilerOption argString - if oa <> "" then - f (try int32 (oa) with _ -> - errorR(Error(FSComp.SR.buildArgInvalidInt(getOptionArg compilerOption argString),rangeCmdArgs)); 0) - t - | (CompilerOption(s, _, OptionFloat f, d, _) as compilerOption :: _) when optToken = s -> - reportDeprecatedOption d - let oa = getOptionArg compilerOption argString - if oa <> "" then - f (try float (oa) with _ -> - errorR(Error(FSComp.SR.buildArgInvalidFloat(getOptionArg compilerOption argString), rangeCmdArgs)); 0.0) - t - | (CompilerOption(s, _, OptionRest f, d, _) :: _) when optToken = s -> - reportDeprecatedOption d - List.iter f t; [] - | (CompilerOption(s, _, OptionIntList f, d, _) as compilerOption :: _) when optToken = s -> - reportDeprecatedOption d - let al = getOptionArgList compilerOption argString - if al <> [] then - List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt(i),rangeCmdArgs)); 0)) al ; - t - | (CompilerOption(s, _, OptionIntListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt(optToken) = s -> - reportDeprecatedOption d - let al = getOptionArgList compilerOption argString - if al <> [] then - let switch = getSwitch(opt) - List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt(i),rangeCmdArgs)); 0) switch) al - t - // here - | (CompilerOption(s, _, OptionStringList f, d, _) as compilerOption :: _) when optToken = s -> - reportDeprecatedOption d - let al = getOptionArgList compilerOption argString - if al <> [] then - List.iter (fun s -> f s) (getOptionArgList compilerOption argString) - t - | (CompilerOption(s, _, OptionStringListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt(optToken) = s -> - reportDeprecatedOption d - let al = getOptionArgList compilerOption argString - if al <> [] then - let switch = getSwitch(opt) - List.iter (fun s -> f s switch) (getOptionArgList compilerOption argString) - t - | (CompilerOption(_, _, OptionGeneral (pred,exec), d, _) :: _) when pred args -> - reportDeprecatedOption d - let rest = exec args in rest // arguments taken, rest remaining - | (_ :: more) -> attempt more - | [] -> - if opt.Length = 0 || opt.[0] = '-' || isSlashOpt opt - then - // want the whole opt token - delimiter and all - let unrecOpt = (opt.Split([|':'|]).[0]) - errorR(Error(FSComp.SR.buildUnrecognizedOption(unrecOpt),rangeCmdArgs)) - t - else - (collectOtherArgument opt; t) - let rest = attempt specs - processArg rest - - let result = processArg args - result -do() diff --git a/src/fsharp/build.fsi b/src/fsharp/CompileOps.fsi old mode 100644 new mode 100755 similarity index 61% rename from src/fsharp/build.fsi rename to src/fsharp/CompileOps.fsi index cbdfe10e5ce..902caa22f5a --- a/src/fsharp/build.fsi +++ b/src/fsharp/CompileOps.fsi @@ -1,7 +1,7 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -/// Loading initial context, reporting errors etc. -module internal Microsoft.FSharp.Compiler.Build +/// Coordinating compiler operations - configuration, loading initial context, reporting errors etc. +module internal Microsoft.FSharp.Compiler.CompileOps open System.Text open Internal.Utilities @@ -19,7 +19,7 @@ open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.MSBuildResolver -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Core.CompilerServices #if EXTENSIONTYPING open Microsoft.FSharp.Compiler.ExtensionTyping @@ -37,73 +37,88 @@ module internal FullCompiler = #endif +//---------------------------------------------------------------------------- +// File names and known file suffixes +//-------------------------------------------------------------------------- + /// Signature file suffixes -val sigSuffixes : string list +val FSharpSigFileSuffixes : string list /// Implementation file suffixes -val implSuffixes : string list +val FSharpImplFileSuffixes : string list /// Script file suffixes -val scriptSuffixes : string list +val FSharpScriptFileSuffixes : string list val IsScript : string -> bool /// File suffixes where #light is the default -val lightSyntaxDefaultExtensions : string list +val FSharpLightSyntaxFileSuffixes : string list + + +/// Get the name used for FSharp.Core +val GetFSharpCoreLibraryName : unit -> string //---------------------------------------------------------------------------- // Parsing inputs //-------------------------------------------------------------------------- -val QualFileNameOfUniquePath : range * string list -> Ast.QualifiedNameOfFile +val ComputeQualifiedNameOfFileFromUniquePath : range * string list -> Ast.QualifiedNameOfFile val PrependPathToInput : Ast.Ident list -> Ast.ParsedInput -> Ast.ParsedInput val ParseInput : (UnicodeLexing.Lexbuf -> Parser.token) * ErrorLogger * UnicodeLexing.Lexbuf * string option * string * isLastCompiland: bool -> Ast.ParsedInput - - //---------------------------------------------------------------------------- -// Errors +// Error and warnings //-------------------------------------------------------------------------- +/// Represents the style being used to format errros type ErrorStyle = | DefaultErrors | EmacsErrors | TestErrors | VSErrors - + | GccErrors -val RangeOfError : PhasedError -> range option +/// Get the location associated with an error +val GetRangeOfError : PhasedError -> range option + +/// Get the number associated with an error val GetErrorNumber : PhasedError -> int + +/// Split errors into a "main" error and a set of associated errors val SplitRelatedErrors : PhasedError -> PhasedError * PhasedError list + +/// Output an error to a buffer val OutputPhasedError : StringBuilder -> PhasedError -> bool -> unit -val SanitizeFileName : filename:string -> implicitIncludeDir:string -> string + +/// Output an error or warning to a buffer val OutputErrorOrWarning : implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * warning:bool -> StringBuilder -> PhasedError -> unit + +/// Output extra context information for an error or warning to a buffer val OutputErrorOrWarningContext : prefix:string -> fileLineFunction:(string -> int -> string) -> StringBuilder -> PhasedError -> unit +[] type ErrorLocation = - { - Range : range - File : string - TextRepresentation : string - IsEmpty : bool - } + { Range : range + File : string + TextRepresentation : string + IsEmpty : bool } +[] type CanonicalInformation = - { - ErrorNumber : int - Subcategory : string - TextRepresentation : string - } + { ErrorNumber : int + Subcategory : string + TextRepresentation : string } +[] type DetailedIssueInfo = - { - Location : ErrorLocation option - Canonical : CanonicalInformation - Message : string - } + { Location : ErrorLocation option + Canonical : CanonicalInformation + Message : string } +[] type ErrorOrWarning = | Short of bool * string | Long of bool * DetailedIssueInfo @@ -111,40 +126,9 @@ type ErrorOrWarning = val CollectErrorOrWarning : implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * warning:bool * PhasedError -> seq //---------------------------------------------------------------------------- -// Options and configuration +// Resolve assembly references //-------------------------------------------------------------------------- -// For command-line options that can be suffixed with +/- -type OptionSwitch = - | On - | Off - -/// The spec value describes the action of the argument, -/// and whether it expects a following parameter. -type OptionSpec = - | OptionClear of bool ref - | OptionFloat of (float -> unit) - | OptionInt of (int -> unit) - | OptionSwitch of (OptionSwitch -> unit) - | OptionIntList of (int -> unit) - | OptionIntListSwitch of (int -> OptionSwitch -> unit) - | OptionRest of (string -> unit) - | OptionSet of bool ref - | OptionString of (string -> unit) - | OptionStringList of (string -> unit) - | OptionStringListSwitch of (string -> OptionSwitch -> unit) - | OptionUnit of (unit -> unit) - | OptionHelp of (CompilerOptionBlock list -> unit) // like OptionUnit, but given the "options" - | OptionGeneral of (string list -> bool) * (string list -> string list) // Applies? * (ApplyReturningResidualArgs) -and CompilerOption = - /// CompilerOption(name, argumentDescriptionString, actionSpec, exceptionOpt, helpTextOpt - CompilerOption of string * string * OptionSpec * Option * string option -and CompilerOptionBlock = PublicOptions of string * CompilerOption list | PrivateOptions of CompilerOption list - -val printCompilerOptionBlocks : CompilerOptionBlock list -> unit // for printing usage -val dumpCompilerOptionBlocks : CompilerOptionBlock list -> unit // for QA -val filterCompilerOptionBlock : (CompilerOption -> bool) -> CompilerOptionBlock -> CompilerOptionBlock - exception AssemblyNotResolved of (*originalName*) string * range exception FileNameNotResolved of (*filename*) string * (*description of searched locations*) string * range exception DeprecatedCommandLineOptionFull of string * range @@ -155,10 +139,44 @@ exception InternalCommandLineOption of string * range exception HashLoadedSourceHasIssues of (*warnings*) exn list * (*errors*) exn list * range exception HashLoadedScriptConsideredSource of range +//---------------------------------------------------------------------------- + +/// Represents a reference to an F# assembly. May be backed by a real assembly on disk (read by Abstract IL), or a cross-project +/// reference in FSharp.Compiler.Service. +type IRawFSharpAssemblyData = + /// The raw list AutoOpenAttribute attributes in the assembly + abstract GetAutoOpenAttributes : ILGlobals -> string list + /// The raw list InternalsVisibleToAttribute attributes in the assembly + abstract GetInternalsVisibleToAttributes : ILGlobals -> string list + /// The raw IL module definition in the assembly, if any. This is not present for cross-project references + /// in the language service + abstract TryGetRawILModule : unit -> ILModuleDef option + abstract HasAnyFSharpSignatureDataAttribute : bool + abstract HasMatchingFSharpSignatureDataAttribute : ILGlobals -> bool + /// The raw F# signature data in the assembly, if any + abstract GetRawFSharpSignatureData : range * ilShortAssemName: string * fileName: string -> (string * byte[]) list + /// The raw F# optimization data in the assembly, if any + abstract GetRawFSharpOptimizationData : range * ilShortAssemName: string * fileName: string -> (string * (unit -> byte[])) list + /// The table of type forwarders in the assembly + abstract GetRawTypeForwarders : unit -> ILExportedTypesAndForwarders + /// The identity of the module + abstract ILScopeRef : ILScopeRef + abstract ILAssemblyRefs : ILAssemblyRef list + abstract ShortAssemblyName : string + +type IProjectReference = + /// The name of the assembly file generated by the project + abstract FileName : string + /// Evaluate raw contents of the assembly file generated by the project + abstract EvaluateRawContents : unit -> IRawFSharpAssemblyData option + /// Get the logical timestamp that would be the timestamp of the assembly file generated by the project + abstract GetLogicalTimeStamp : unit -> System.DateTime option + type AssemblyReference = - | AssemblyReference of range * string + | AssemblyReference of range * string * IProjectReference option member Range : range member Text : string + member ProjectReference : IProjectReference option type AssemblyResolution = {/// The original reference to the assembly. @@ -193,60 +211,66 @@ type ResolveAssemblyReferenceMode = | Speculative | ReportErrors +//---------------------------------------------------------------------------- +// TcConfig +//-------------------------------------------------------------------------- + +/// Represents the file or string used for the --version flag type VersionFlag = | VersionString of string | VersionFile of string | VersionNone - member GetVersionInfo : (*implicitIncludeDir:*)string -> ILVersionInfo - member GetVersionString : (*implicitIncludeDir:*)string -> string + member GetVersionInfo : implicitIncludeDir:string -> ILVersionInfo + member GetVersionString : implicitIncludeDir:string -> string type TcConfigBuilder = - { mutable primaryAssembly : PrimaryAssembly; - mutable autoResolveOpenDirectivesToDlls: bool; - mutable noFeedback: bool; - mutable stackReserveSize: int32 option; - mutable implicitIncludeDir: string; - mutable openBinariesInMemory: bool; - mutable openDebugInformationForLaterStaticLinking: bool; - defaultFSharpBinariesDir: string; - mutable compilingFslib: bool; - mutable compilingFslib20: string option; - mutable compilingFslib40: bool; - mutable useIncrementalBuilder: bool; - mutable includes: string list; - mutable implicitOpens: string list; - mutable useFsiAuxLib: bool; - mutable framework: bool; + { mutable primaryAssembly : PrimaryAssembly + mutable autoResolveOpenDirectivesToDlls: bool + mutable noFeedback: bool + mutable stackReserveSize: int32 option + mutable implicitIncludeDir: string + mutable openBinariesInMemory: bool + mutable openDebugInformationForLaterStaticLinking: bool + defaultFSharpBinariesDir: string + mutable compilingFslib: bool + mutable compilingFslib20: string option + mutable compilingFslib40: bool + mutable useIncrementalBuilder: bool + mutable includes: string list + mutable implicitOpens: string list + mutable useFsiAuxLib: bool + mutable framework: bool mutable resolutionEnvironment : Microsoft.FSharp.Compiler.MSBuildResolver.ResolutionEnvironment mutable implicitlyResolveAssemblies : bool mutable addVersionSpecificFrameworkReferences : bool /// Set if the user has explicitly turned indentation-aware syntax on/off - mutable light: bool option; - mutable conditionalCompilationDefines: string list; + mutable light: bool option + mutable conditionalCompilationDefines: string list /// Sources added into the build with #load - mutable loadedSources: (range * string) list; + mutable loadedSources: (range * string) list - mutable referencedDLLs: AssemblyReference list; - mutable knownUnresolvedReferences : UnresolvedAssemblyReference list; - optimizeForMemory: bool; + mutable referencedDLLs: AssemblyReference list + mutable projectReferences : IProjectReference list + mutable knownUnresolvedReferences : UnresolvedAssemblyReference list + optimizeForMemory: bool mutable subsystemVersion : int * int mutable useHighEntropyVA : bool - mutable inputCodePage: int option; - mutable embedResources : string list; - mutable globalWarnAsError: bool; - mutable globalWarnLevel: int; - mutable specificWarnOff: int list; - mutable specificWarnOn: int list; + mutable inputCodePage: int option + mutable embedResources : string list + mutable globalWarnAsError: bool + mutable globalWarnLevel: int + mutable specificWarnOff: int list + mutable specificWarnOn: int list mutable specificWarnAsError: int list mutable specificWarnAsWarn : int list - mutable mlCompatibility:bool; - mutable checkOverflow:bool; - mutable showReferenceResolutions:bool; - mutable outputFile : string option; - mutable resolutionFrameworkRegistryBase : string; - mutable resolutionAssemblyFoldersSuffix : string; - mutable resolutionAssemblyFoldersConditions : string; + mutable mlCompatibility:bool + mutable checkOverflow:bool + mutable showReferenceResolutions:bool + mutable outputFile : string option + mutable resolutionFrameworkRegistryBase : string + mutable resolutionAssemblyFoldersSuffix : string + mutable resolutionAssemblyFoldersConditions : string mutable platform : ILPlatform option mutable prefer32Bit : bool mutable useMonoResolution : bool @@ -289,7 +313,6 @@ type TcConfigBuilder = mutable linkResources : string list mutable showFullPaths : bool mutable errorStyle : ErrorStyle - mutable validateTypeProviders : bool mutable utf8output : bool mutable flatErrors : bool mutable maxErrors : int @@ -305,7 +328,7 @@ type TcConfigBuilder = mutable doTLR : bool mutable doFinalSimplify : bool mutable optsOn : bool - mutable optSettings : Opt.OptimizationSettings + mutable optSettings : Optimizer.OptimizationSettings mutable emitTailcalls : bool mutable lcid : int option mutable productNameForBannerText : string @@ -317,7 +340,6 @@ type TcConfigBuilder = mutable showExtensionTypeMessages : bool #endif mutable pause : bool - mutable indirectCallArrayMethods : bool mutable alwaysCallVirt : bool mutable noDebugData : bool @@ -328,6 +350,8 @@ type TcConfigBuilder = mutable sqmNumOfSourceFiles : int sqmSessionStartedTime : int64 mutable emitDebugInfoInQuotations : bool + mutable exename : string option + mutable copyFSharpCore : bool mutable shadowCopyReferences : bool } @@ -354,44 +378,44 @@ type TcConfigBuilder = // Immutable TcConfig type TcConfig = member primaryAssembly: PrimaryAssembly - member autoResolveOpenDirectivesToDlls: bool; - member noFeedback: bool; - member stackReserveSize: int32 option; - member implicitIncludeDir: string; - member openBinariesInMemory: bool; - member openDebugInformationForLaterStaticLinking: bool; - member fsharpBinariesDir: string; - member compilingFslib: bool; - member compilingFslib20: string option; - member compilingFslib40: bool; - member useIncrementalBuilder: bool; - member includes: string list; - member implicitOpens: string list; - member useFsiAuxLib: bool; - member framework: bool; + member autoResolveOpenDirectivesToDlls: bool + member noFeedback: bool + member stackReserveSize: int32 option + member implicitIncludeDir: string + member openBinariesInMemory: bool + member openDebugInformationForLaterStaticLinking: bool + member fsharpBinariesDir: string + member compilingFslib: bool + member compilingFslib20: string option + member compilingFslib40: bool + member useIncrementalBuilder: bool + member includes: string list + member implicitOpens: string list + member useFsiAuxLib: bool + member framework: bool member implicitlyResolveAssemblies : bool /// Set if the user has explicitly turned indentation-aware syntax on/off - member light: bool option; - member conditionalCompilationDefines: string list; + member light: bool option + member conditionalCompilationDefines: string list member subsystemVersion : int * int member useHighEntropyVA : bool - member referencedDLLs: AssemblyReference list; - member optimizeForMemory: bool; - member inputCodePage: int option; - member embedResources : string list; - member globalWarnAsError: bool; - member globalWarnLevel: int; - member specificWarnOn: int list; - member specificWarnOff: int list; + member referencedDLLs: AssemblyReference list + member optimizeForMemory: bool + member inputCodePage: int option + member embedResources : string list + member globalWarnAsError: bool + member globalWarnLevel: int + member specificWarnOn: int list + member specificWarnOff: int list member specificWarnAsError: int list member specificWarnAsWarn : int list - member mlCompatibility:bool; - member checkOverflow:bool; - member showReferenceResolutions:bool; - member outputFile : string option; - member resolutionFrameworkRegistryBase : string; - member resolutionAssemblyFoldersSuffix : string; - member resolutionAssemblyFoldersConditions : string; + member mlCompatibility:bool + member checkOverflow:bool + member showReferenceResolutions:bool + member outputFile : string option + member resolutionFrameworkRegistryBase : string + member resolutionAssemblyFoldersSuffix : string + member resolutionAssemblyFoldersConditions : string member platform : ILPlatform option member prefer32Bit : bool member useMonoResolution : bool @@ -434,7 +458,6 @@ type TcConfig = member linkResources : string list member showFullPaths : bool member errorStyle : ErrorStyle - member validateTypeProviders : bool member utf8output : bool member flatErrors : bool @@ -449,7 +472,7 @@ type TcConfig = member doDetuple : bool member doTLR : bool member doFinalSimplify : bool - member optSettings : Opt.OptimizationSettings + member optSettings : Optimizer.OptimizationSettings member emitTailcalls : bool member lcid : int option member optsOn : bool @@ -462,7 +485,6 @@ type TcConfig = member showExtensionTypeMessages : bool #endif member pause : bool - member indirectCallArrayMethods : bool member alwaysCallVirt : bool member noDebugData : bool @@ -487,18 +509,34 @@ type TcConfig = member sqmSessionGuid : System.Guid option member sqmNumOfSourceFiles : int member sqmSessionStartedTime : int64 + member copyFSharpCore : bool member shadowCopyReferences : bool static member Create : TcConfigBuilder * validate: bool -> TcConfig +/// Represents a computation to return a TcConfig. Normally this is just a constant immutable TcConfig, +/// but for F# Interactive it may be based on an underlying mutable TcConfigBuilder. +[] +type TcConfigProvider = + + member Get : unit -> TcConfig + + /// Get a TcConfigProvider which will return only the exact TcConfig. + static member Constant : TcConfig -> TcConfigProvider + + /// Get a TcConfigProvider which will continue to respect changes in the underlying + /// TcConfigBuilder rather than delivering snapshots. + static member BasedOnMutableBuilder : TcConfigBuilder -> TcConfigProvider //---------------------------------------------------------------------------- // Tables of referenced DLLs //-------------------------------------------------------------------------- +/// Represents a resolved imported binary +[] type ImportedBinary = - { FileName: string; - RawMetadata: ILModuleDef + { FileName: string + RawMetadata: IRawFSharpAssemblyData #if EXTENSIONTYPING ProviderGeneratedAssembly: System.Reflection.Assembly option IsProviderGenerated: bool @@ -507,16 +545,18 @@ type ImportedBinary = ILAssemblyRefs : ILAssemblyRef list ILScopeRef: ILScopeRef} +/// Represents a resolved imported assembly +[] type ImportedAssembly = - { ILScopeRef: ILScopeRef; - FSharpViewOfMetadata: CcuThunk; - AssemblyAutoOpenAttributes: string list; - AssemblyInternalsVisibleToAttributes: string list; + { ILScopeRef: ILScopeRef + FSharpViewOfMetadata: CcuThunk + AssemblyAutoOpenAttributes: string list + AssemblyInternalsVisibleToAttributes: string list #if EXTENSIONTYPING - IsProviderGenerated: bool; - mutable TypeProviders: Tainted list; + IsProviderGenerated: bool + mutable TypeProviders: Tainted list #endif - FSharpOptimizationData : Lazy> } + FSharpOptimizationData : Lazy> } [] @@ -527,11 +567,8 @@ type TcAssemblyResolutions = static member BuildFromPriorResolutions : TcConfig * AssemblyResolution list * UnresolvedAssemblyReference list -> TcAssemblyResolutions -[] -type TcConfigProvider = - static member Constant : TcConfig -> TcConfigProvider - static member BasedOnMutableBuilder : TcConfigBuilder -> TcConfigProvider +/// Repreesnts a table of imported assemblies with their resolutions. [] type TcImports = interface System.IDisposable @@ -566,124 +603,166 @@ type TcImports = member SystemRuntimeContainsType : string -> bool static member BuildFrameworkTcImports : TcConfigProvider * AssemblyResolution list * AssemblyResolution list -> TcGlobals * TcImports - static member BuildNonFrameworkTcImports : (string->unit) option * TcConfigProvider * TcGlobals * TcImports * AssemblyResolution list * UnresolvedAssemblyReference list -> TcImports + static member BuildNonFrameworkTcImports : TcConfigProvider * TcGlobals * TcImports * AssemblyResolution list * UnresolvedAssemblyReference list -> TcImports static member BuildTcImports : TcConfigProvider -> TcGlobals * TcImports //---------------------------------------------------------------------------- // Special resources in DLLs //-------------------------------------------------------------------------- +/// Determine if an IL resource attached to an F# assemnly is an F# signature data resource val IsSignatureDataResource : ILResource -> bool + +/// Determine if an IL resource attached to an F# assemnly is an F# optimization data resource val IsOptimizationDataResource : ILResource -> bool + +/// Determine if an IL resource attached to an F# assemnly is an F# quotation data resource for reflected definitions val IsReflectedDefinitionsResource : ILResource -> bool +val GetSignatureDataResourceName : ILResource -> string #if NO_COMPILER_BACKEND #else +/// Write F# signature data as an IL resource val WriteSignatureData : TcConfig * TcGlobals * Tastops.Remap * CcuThunk * string -> ILResource -val WriteOptimizationData : TcGlobals * string * CcuThunk * Opt.LazyModuleInfo -> ILResource -#endif -val GetNameOfILModule : ILModuleDef -> string +/// Write F# optimization data as an IL resource +val WriteOptimizationData : TcGlobals * string * CcuThunk * Optimizer.LazyModuleInfo -> ILResource +#endif -val GetFSharpCoreLibraryName : unit -> string //---------------------------------------------------------------------------- -// Finding and requiring DLLs +// #r and other directives //-------------------------------------------------------------------------- +/// Process #r in F# Interactive. +/// Adds the reference to the tcImports and add the ccu to the type checking environment. val RequireDLL : TcImports -> TcEnv -> range -> string -> TcEnv * (ImportedBinary list * ImportedAssembly list) -//---------------------------------------------------------------------------- -// Processing # commands -//-------------------------------------------------------------------------- - +/// Processing # commands val ProcessMetaCommandsFromInput : ('T -> range * string -> 'T) * ('T -> range * string -> 'T) * ('T -> range * string -> unit) -> TcConfigBuilder -> Ast.ParsedInput -> string -> 'T -> 'T +/// Process all the #r, #I etc. in an input +val ApplyMetaCommandsFromInputToTcConfig : TcConfig -> (Ast.ParsedInput * string) -> TcConfig -val GetScopedPragmasForInput : Ast.ParsedInput -> ScopedPragma list -val GetErrorLoggerFilteringByScopedPragmas : checkFile:bool * ScopedPragma list * ErrorLogger -> ErrorLogger - +/// Process the #nowarn in an input val ApplyNoWarnsToTcConfig : TcConfig -> (Ast.ParsedInput*string) -> TcConfig -val ApplyMetaCommandsFromInputToTcConfig : TcConfig -> (Ast.ParsedInput * string) -> TcConfig -val GetAssemblyResolutionInformation : TcConfig -> AssemblyResolution list * UnresolvedAssemblyReference list + //---------------------------------------------------------------------------- -// Loading the default library sets +// Scoped pragmas //-------------------------------------------------------------------------- - + +/// Find the scoped #nowarn pragmas with their range information +val GetScopedPragmasForInput : Ast.ParsedInput -> ScopedPragma list + +/// Get an error logger that filters the reporting of warnings based on scoped pragma information +val GetErrorLoggerFilteringByScopedPragmas : checkFile:bool * ScopedPragma list * ErrorLogger -> ErrorLogger + +/// This list is the default set of references for "non-project" files. val DefaultBasicReferencesForOutOfProjectSources : string list //---------------------------------------------------------------------------- -// Parsing inputs +// Parsing //-------------------------------------------------------------------------- + +/// Parse one input file val ParseOneInputFile : TcConfig * Lexhelp.LexResourceManager * string list * string * isLastCompiland: bool * ErrorLogger * (*retryLocked*) bool -> ParsedInput option //---------------------------------------------------------------------------- // Type checking and querying the type checking state //-------------------------------------------------------------------------- -val GetInitialTypecheckerEnv : string option -> range -> TcConfig -> TcImports -> TcGlobals -> TcEnv +/// Get the initial type checking environment including the loading of mscorlib/System.Core, FSharp.Core +/// applying the InternalsVisibleTo in referenced assemblies and opening 'Checked' if requested. +val GetInitialTcEnv : string option * range * TcConfig * TcImports * TcGlobals -> TcEnv [] +/// Represents the incremental type checking state for a set of inputs type TcState = member NiceNameGenerator : Ast.NiceNameGenerator + + /// The CcuThunk for the current assembly being checked member Ccu : CcuThunk + + /// Get the typing environment implied by the set of signature files and/or inferred signatures of implementation files checked so far member TcEnvFromSignatures : TcEnv - member NextStateAfterIncrementalFragment : TcEnv -> TcState + + /// Get the typing environment implied by the set of implemetation files checked so far member TcEnvFromImpls : TcEnv + /// The inferred contents of the assembly, containing the signatures of all implemented files. + member PartialAssemblySignature : ModuleOrNamespaceType -val TypecheckInitialState : + member NextStateAfterIncrementalFragment : TcEnv -> TcState + +/// Get the initial type checking state for a set of inputs +val GetInitialTcState : range * string * TcConfig * TcGlobals * TcImports * Ast.NiceNameGenerator * TcEnv -> TcState -val TypecheckOneInputEventually : - (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * Nameres.TcResultsSink * TcState * Ast.ParsedInput +/// Check one input, returned as an Eventually computation +val TypeCheckOneInputEventually : + (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * NameResolution.TcResultsSink * TcState * Ast.ParsedInput -> Eventually<(TcEnv * TopAttribs * Tast.TypedImplFile list) * TcState> -val TypecheckMultipleInputsFinish : - (TcEnv * TopAttribs * 'T list) list * TcState - -> (TcEnv * TopAttribs * 'T list) * TcState +/// Finish the checking of multiple inputs +val TypeCheckMultipleInputsFinish : (TcEnv * TopAttribs * 'T list) list * TcState -> (TcEnv * TopAttribs * 'T list) * TcState -val TypecheckClosedInputSetFinish : - TypedImplFile list * TcState - -> TcState * TypedAssembly +/// Finish the checking of a closed set of inputs +val TypeCheckClosedInputSetFinish : TypedImplFile list * TcState -> TcState * TypedAssembly -val TypecheckClosedInputSet : +/// Check a closed set of inputs +val TypeCheckClosedInputSet : (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * TcState * Ast.ParsedInput list -> TcState * TopAttribs * Tast.TypedAssembly * TcEnv -val TypecheckSingleInputAndFinishEventually : - (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * Nameres.TcResultsSink * TcState * Ast.ParsedInput +/// Check a single input and finish the checking +val TypeCheckSingleInputAndFinishEventually : + (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * NameResolution.TcResultsSink * TcState * Ast.ParsedInput -> Eventually<(TcEnv * TopAttribs * Tast.TypedImplFile list) * TcState> -val ParseCompilerOptions : (string -> unit) -> CompilerOptionBlock list -> string list -> unit -val ReportWarning : int -> int list -> int list -> PhasedError -> bool -val ReportWarningAsError : int -> int list -> int list -> int list -> int list -> bool -> PhasedError -> bool +/// Indicates if we should report a warning +val ReportWarning : globalWarnLevel: int * specificWarnOff: int list * specificWarnOn: int list -> PhasedError -> bool + +/// Indicates if we should report a warning as an error +val ReportWarningAsError : globalWarnLevel: int * specificWarnOff: int list * specificWarnOn: int list * specificWarnAsError: int list * specificWarnAsWarn: int list * globalWarnAsError: bool -> PhasedError -> bool //---------------------------------------------------------------------------- // #load closure //-------------------------------------------------------------------------- + +[] type CodeContext = | Evaluation | Compilation | Editing +[] type LoadClosure = { /// The source files along with the ranges of the #load positions in each file. - SourceFiles: (string * range list) list - /// The resolved references along with the ranges of the #r positions in each file. - References: (string * AssemblyResolution list) list - /// The list of references that were not resolved during load closure. These may still be extension references. - UnresolvedReferences : UnresolvedAssemblyReference list - /// The list of all sources in the closure with inputs when available - Inputs: (string * ParsedInput option) list - /// The #nowarns - NoWarns: (string * range list) list - /// *Parse* errors seen while parsing root of closure - RootErrors : PhasedError list - /// *Parse* warnings seen while parsing root of closure - RootWarnings : PhasedError list } - static member ComputeClosureOfSourceText : filename : string * source : string * implicitDefines:CodeContext * lexResourceManager : Lexhelp.LexResourceManager -> LoadClosure + SourceFiles: (string * range list) list + + /// The resolved references along with the ranges of the #r positions in each file. + References: (string * AssemblyResolution list) list + + /// The list of references that were not resolved during load closure. These may still be extension references. + UnresolvedReferences : UnresolvedAssemblyReference list + + /// The list of all sources in the closure with inputs when available + Inputs: (string * ParsedInput option) list + + /// The #nowarns + NoWarns: (string * range list) list + + /// *Parse* errors seen while parsing root of closure + RootErrors : PhasedError list + + /// *Parse* warnings seen while parsing root of closure + RootWarnings : PhasedError list } + + // Used from service.fs, when editing a script file + static member ComputeClosureOfSourceText : filename: string * source: string * implicitDefines:CodeContext * useMonoResolution: bool * useFsiAuxLib: bool * lexResourceManager: Lexhelp.LexResourceManager * applyCompilerOptions: (TcConfigBuilder -> unit) -> LoadClosure + + /// Used from fsi.fs and fsc.fs, for #load and command line. The resulting references are then added to a TcConfig. static member ComputeClosureOfSourceFiles : tcConfig:TcConfig * (string * range) list * implicitDefines:CodeContext * useDefaultScriptingReferences : bool * lexResourceManager : Lexhelp.LexResourceManager -> LoadClosure diff --git a/src/fsharp/fscopts.fs b/src/fsharp/CompileOptions.fs similarity index 73% rename from src/fsharp/fscopts.fs rename to src/fsharp/CompileOptions.fs index c91875fd3b4..23d80532efd 100644 --- a/src/fsharp/fscopts.fs +++ b/src/fsharp/CompileOptions.fs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // # FSComp.SR.opts -module internal Microsoft.FSharp.Compiler.Fscopts +module internal Microsoft.FSharp.Compiler.CompileOptions open Internal.Utilities open System @@ -14,8 +14,8 @@ open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics -open Microsoft.FSharp.Compiler.Build -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.CompileOps +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.TypeChecker open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops @@ -28,7 +28,7 @@ open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Lexhelp #if NO_COMPILER_BACKEND #else -open Microsoft.FSharp.Compiler.Ilxgen +open Microsoft.FSharp.Compiler.IlxGen #endif @@ -39,6 +39,350 @@ module Attributes = [] do() +//---------------------------------------------------------------------------- +// Compiler option parser +// +// The argument parser is used by both the VS plug-in and the fsc.exe to +// parse the include file path and other front-end arguments. +// +// The language service uses this function too. It's important to continue +// processing flags even if an error is seen in one so that the best possible +// intellisense can be show. +//-------------------------------------------------------------------------- + +[] +type OptionSwitch = + | On + | Off + +type OptionSpec = + | OptionClear of bool ref + | OptionFloat of (float -> unit) + | OptionInt of (int -> unit) + | OptionSwitch of (OptionSwitch -> unit) + | OptionIntList of (int -> unit) + | OptionIntListSwitch of (int -> OptionSwitch -> unit) + | OptionRest of (string -> unit) + | OptionSet of bool ref + | OptionString of (string -> unit) + | OptionStringList of (string -> unit) + | OptionStringListSwitch of (string -> OptionSwitch -> unit) + | OptionUnit of (unit -> unit) + | OptionHelp of (CompilerOptionBlock list -> unit) // like OptionUnit, but given the "options" + | OptionGeneral of (string list -> bool) * (string list -> string list) // Applies? * (ApplyReturningResidualArgs) + +and CompilerOption = CompilerOption of string * string * OptionSpec * Option * string option +and CompilerOptionBlock = PublicOptions of string * CompilerOption list | PrivateOptions of CompilerOption list + +let GetOptionsOfBlock block = + match block with + | PublicOptions (_,opts) -> opts + | PrivateOptions opts -> opts + +let FilterCompilerOptionBlock pred block = + match block with + | PublicOptions(heading,opts) -> PublicOptions(heading,List.filter pred opts) + | PrivateOptions(opts) -> PrivateOptions(List.filter pred opts) + +let compilerOptionUsage (CompilerOption(s,tag,spec,_,_)) = + let s = if s="--" then "" else s (* s="flag" for "--flag" options. s="--" for "--" option. Adjust printing here for "--" case. *) + match spec with + | (OptionUnit _ | OptionSet _ | OptionClear _ | OptionHelp _) -> sprintf "--%s" s + | OptionStringList _ -> sprintf "--%s:%s" s tag + | OptionIntList _ -> sprintf "--%s:%s" s tag + | OptionSwitch _ -> sprintf "--%s[+|-]" s + | OptionStringListSwitch _ -> sprintf "--%s[+|-]:%s" s tag + | OptionIntListSwitch _ -> sprintf "--%s[+|-]:%s" s tag + | OptionString _ -> sprintf "--%s:%s" s tag + | OptionInt _ -> sprintf "--%s:%s" s tag + | OptionFloat _ -> sprintf "--%s:%s" s tag + | OptionRest _ -> sprintf "--%s ..." s + | OptionGeneral _ -> if tag="" then sprintf "%s" s else sprintf "%s:%s" s tag (* still being decided *) + +let PrintCompilerOption (CompilerOption(_s,_tag,_spec,_,help) as compilerOption) = + let flagWidth = 30 // fixed width for printing of flags, e.g. --warnaserror: + let defaultLineWidth = 80 // the fallback width + let lineWidth = try System.Console.BufferWidth with e -> defaultLineWidth + let lineWidth = if lineWidth=0 then defaultLineWidth else lineWidth (* Have seen BufferWidth=0 on Linux/Mono *) + // Lines have this form: + // flagWidth chars - for flags description or padding on continuation lines. + // single space - space. + // description - words upto but excluding the final character of the line. + assert(flagWidth = 30) + printf "%-30s" (compilerOptionUsage compilerOption) + let printWord column (word:string) = + // Have printed upto column. + // Now print the next word including any preceeding whitespace. + // Returns the column printed to (suited to folding). + if column + 1 (*space*) + word.Length >= lineWidth then // NOTE: "equality" ensures final character of the line is never printed + printfn "" (* newline *) + assert(flagWidth = 30) + printf "%-30s %s" ""(*<--flags*) word + flagWidth + 1 + word.Length + else + printf " %s" word + column + 1 + word.Length + let words = match help with None -> [| |] | Some s -> s.Split [| ' ' |] + let _finalColumn = Array.fold printWord flagWidth words + printfn "" (* newline *) + +let PrintPublicOptions (heading,opts) = + if nonNil opts then + printfn "" + printfn "" + printfn "\t\t%s" heading + List.iter PrintCompilerOption opts + +let PrintCompilerOptionBlocks blocks = + let equals x y = x=y + let publicBlocks = List.choose (function PrivateOptions _ -> None | PublicOptions (heading,opts) -> Some (heading,opts)) blocks + let consider doneHeadings (heading, _opts) = + if Set.contains heading doneHeadings then + doneHeadings + else + let headingOptions = List.filter (fst >> equals heading) publicBlocks |> List.map snd |> List.concat + PrintPublicOptions (heading,headingOptions) + Set.add heading doneHeadings + List.fold consider Set.empty publicBlocks |> ignore> + +(* For QA *) +let dumpCompilerOption prefix (CompilerOption(str, _, spec, _, _)) = + printf "section='%-25s' ! option=%-30s kind=" prefix str + match spec with + | OptionUnit _ -> printf "OptionUnit" + | OptionSet _ -> printf "OptionSet" + | OptionClear _ -> printf "OptionClear" + | OptionHelp _ -> printf "OptionHelp" + | OptionStringList _ -> printf "OptionStringList" + | OptionIntList _ -> printf "OptionIntList" + | OptionSwitch _ -> printf "OptionSwitch" + | OptionStringListSwitch _ -> printf "OptionStringListSwitch" + | OptionIntListSwitch _ -> printf "OptionIntListSwitch" + | OptionString _ -> printf "OptionString" + | OptionInt _ -> printf "OptionInt" + | OptionFloat _ -> printf "OptionFloat" + | OptionRest _ -> printf "OptionRest" + | OptionGeneral _ -> printf "OptionGeneral" + printf "\n" +let dumpCompilerOptionBlock = function + | PublicOptions (heading,opts) -> List.iter (dumpCompilerOption heading) opts + | PrivateOptions opts -> List.iter (dumpCompilerOption "NoSection") opts +let DumpCompilerOptionBlocks blocks = List.iter dumpCompilerOptionBlock blocks + +let isSlashOpt (opt:string) = + opt.[0] = '/' && (opt.Length = 1 || not (opt.[1..].Contains "/")) + +module ResponseFile = + + type ResponseFileData = ResponseFileLine list + and ResponseFileLine = + | CompilerOptionSpec of string + | Comment of string + + let parseFile path : Choice = + let parseLine (l: string) = + match l with + | s when String.IsNullOrWhiteSpace(s) -> None + | s when l.StartsWith("#") -> Some (ResponseFileLine.Comment (s.TrimStart('#'))) + | s -> Some (ResponseFileLine.CompilerOptionSpec (s.Trim())) + + try + use stream = FileSystem.FileStreamReadShim path + use reader = new System.IO.StreamReader(stream, true) + let data = + seq { while not reader.EndOfStream do yield reader.ReadLine () } + |> Seq.choose parseLine + |> List.ofSeq + Choice1Of2 data + with e -> + Choice2Of2 e + + +let ParseCompilerOptions (collectOtherArgument : string -> unit, blocks: CompilerOptionBlock list, args) = + use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) + + let specs = List.collect GetOptionsOfBlock blocks + + // returns a tuple - the option token, the option argument string + let parseOption (s : string) = + // grab the option token + let opts = s.Split([|':'|]) + let mutable opt = opts.[0] + if opt = "" then + () + // if it doesn't start with a '-' or '/', reject outright + elif opt.[0] <> '-' && opt.[0] <> '/' then + opt <- "" + elif opt <> "--" then + // is it an abbreviated or MSFT-style option? + // if so, strip the first character and move on with your life + if opt.Length = 2 || isSlashOpt opt then + opt <- opt.[1 ..] + // else, it should be a non-abbreviated option starting with "--" + elif opt.Length > 3 && opt.StartsWith("--") then + opt <- opt.[2 ..] + else + opt <- "" + + // get the argument string + let optArgs = if opts.Length > 1 then String.Join(":",opts.[1 ..]) else "" + opt, optArgs + + let getOptionArg compilerOption (argString : string) = + if argString = "" then + errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption),rangeCmdArgs)) + argString + + let getOptionArgList compilerOption (argString : string) = + if argString = "" then + errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption),rangeCmdArgs)) + [] + else + argString.Split([|',';';'|]) |> List.ofArray + + let getSwitchOpt (opt : string) = + // if opt is a switch, strip the '+' or '-' + if opt <> "--" && opt.Length > 1 && (opt.EndsWith("+",StringComparison.Ordinal) || opt.EndsWith("-",StringComparison.Ordinal)) then + opt.[0 .. opt.Length - 2] + else + opt + + let getSwitch (s: string) = + let s = (s.Split([|':'|])).[0] + if s <> "--" && s.EndsWith("-",StringComparison.Ordinal) then OptionSwitch.Off else OptionSwitch.On + + let rec processArg args = + match args with + | [] -> () + | ((rsp: string) :: t) when rsp.StartsWith("@") -> + let responseFileOptions = + let fullpath = + try + Some (rsp.TrimStart('@') |> FileSystem.GetFullPathShim) + with _ -> + None + + match fullpath with + | None -> + errorR(Error(FSComp.SR.optsResponseFileNameInvalid(rsp),rangeCmdArgs)) + [] + | Some(path) when not (FileSystem.SafeExists path) -> + errorR(Error(FSComp.SR.optsResponseFileNotFound(rsp, path),rangeCmdArgs)) + [] + | Some path -> + match ResponseFile.parseFile path with + | Choice2Of2 _ -> + errorR(Error(FSComp.SR.optsInvalidResponseFile(rsp, path),rangeCmdArgs)) + [] + | Choice1Of2 rspData -> + let onlyOptions l = + match l with + | ResponseFile.ResponseFileLine.Comment _ -> None + | ResponseFile.ResponseFileLine.CompilerOptionSpec opt -> Some opt + rspData |> List.choose onlyOptions + + processArg (responseFileOptions @ t) + + | opt :: t -> + + let optToken, argString = parseOption opt + + let reportDeprecatedOption errOpt = + match errOpt with + | Some(e) -> warning(e) + | None -> () + + let rec attempt l = + match l with + | (CompilerOption(s, _, OptionHelp f, d, _) :: _) when optToken = s && argString = "" -> + reportDeprecatedOption d + f blocks; t + | (CompilerOption(s, _, OptionUnit f, d, _) :: _) when optToken = s && argString = "" -> + reportDeprecatedOption d + f (); t + | (CompilerOption(s, _, OptionSwitch f, d, _) :: _) when getSwitchOpt(optToken) = s && argString = "" -> + reportDeprecatedOption d + f (getSwitch opt); t + | (CompilerOption(s, _, OptionSet f, d, _) :: _) when optToken = s && argString = "" -> + reportDeprecatedOption d + f := true; t + | (CompilerOption(s, _, OptionClear f, d, _) :: _) when optToken = s && argString = "" -> + reportDeprecatedOption d + f := false; t + | (CompilerOption(s, _, OptionString f, d, _) as compilerOption :: _) when optToken = s -> + reportDeprecatedOption d + let oa = getOptionArg compilerOption argString + if oa <> "" then + f (getOptionArg compilerOption oa) + t + | (CompilerOption(s, _, OptionInt f, d, _) as compilerOption :: _) when optToken = s -> + reportDeprecatedOption d + let oa = getOptionArg compilerOption argString + if oa <> "" then + f (try int32 (oa) with _ -> + errorR(Error(FSComp.SR.buildArgInvalidInt(getOptionArg compilerOption argString),rangeCmdArgs)); 0) + t + | (CompilerOption(s, _, OptionFloat f, d, _) as compilerOption :: _) when optToken = s -> + reportDeprecatedOption d + let oa = getOptionArg compilerOption argString + if oa <> "" then + f (try float (oa) with _ -> + errorR(Error(FSComp.SR.buildArgInvalidFloat(getOptionArg compilerOption argString), rangeCmdArgs)); 0.0) + t + | (CompilerOption(s, _, OptionRest f, d, _) :: _) when optToken = s -> + reportDeprecatedOption d + List.iter f t; [] + | (CompilerOption(s, _, OptionIntList f, d, _) as compilerOption :: _) when optToken = s -> + reportDeprecatedOption d + let al = getOptionArgList compilerOption argString + if al <> [] then + List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt(i),rangeCmdArgs)); 0)) al ; + t + | (CompilerOption(s, _, OptionIntListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt(optToken) = s -> + reportDeprecatedOption d + let al = getOptionArgList compilerOption argString + if al <> [] then + let switch = getSwitch(opt) + List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt(i),rangeCmdArgs)); 0) switch) al + t + // here + | (CompilerOption(s, _, OptionStringList f, d, _) as compilerOption :: _) when optToken = s -> + reportDeprecatedOption d + let al = getOptionArgList compilerOption argString + if al <> [] then + List.iter (fun s -> f s) (getOptionArgList compilerOption argString) + t + | (CompilerOption(s, _, OptionStringListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt(optToken) = s -> + reportDeprecatedOption d + let al = getOptionArgList compilerOption argString + if al <> [] then + let switch = getSwitch(opt) + List.iter (fun s -> f s switch) (getOptionArgList compilerOption argString) + t + | (CompilerOption(_, _, OptionGeneral (pred,exec), d, _) :: _) when pred args -> + reportDeprecatedOption d + let rest = exec args in rest // arguments taken, rest remaining + | (_ :: more) -> attempt more + | [] -> + if opt.Length = 0 || opt.[0] = '-' || isSlashOpt opt + then + // want the whole opt token - delimiter and all + let unrecOpt = (opt.Split([|':'|]).[0]) + errorR(Error(FSComp.SR.buildUnrecognizedOption(unrecOpt),rangeCmdArgs)) + t + else + (collectOtherArgument opt; t) + let rest = attempt specs + processArg rest + + let result = processArg args + result + + +//---------------------------------------------------------------------------- +// Compiler options +//-------------------------------------------------------------------------- + let lexFilterVerbose = false let mutable enableConsoleColoring = true // global state @@ -70,28 +414,28 @@ let SetOptimizeOn(tcConfigB : TcConfigBuilder) = tcConfigB.doFinalSimplify <- true; let SetOptimizeSwitch (tcConfigB : TcConfigBuilder) switch = - if (switch = On) then SetOptimizeOn(tcConfigB) else SetOptimizeOff(tcConfigB) + if (switch = OptionSwitch.On) then SetOptimizeOn(tcConfigB) else SetOptimizeOff(tcConfigB) let SetTailcallSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.emitTailcalls <- (switch = On) + tcConfigB.emitTailcalls <- (switch = OptionSwitch.On) let jitoptimizeSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some (switch = On) } + tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some (switch = OptionSwitch.On) } let localoptimizeSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some (switch = On) } + tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some (switch = OptionSwitch.On) } let crossOptimizeSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some (switch = On) } + tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some (switch = OptionSwitch.On) } let splittingSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.optSettings <- { tcConfigB.optSettings with abstractBigTargets = switch = On } + tcConfigB.optSettings <- { tcConfigB.optSettings with abstractBigTargets = switch = OptionSwitch.On } let callVirtSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.alwaysCallVirt <- switch = On + tcConfigB.alwaysCallVirt <- switch = OptionSwitch.On let useHighEntropyVASwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.useHighEntropyVA <- switch = On + tcConfigB.useHighEntropyVA <- switch = OptionSwitch.On let subSystemVersionSwitch (tcConfigB : TcConfigBuilder) (text : string) = let fail() = error(Error(FSComp.SR.optsInvalidSubSystemVersion(text), rangeCmdArgs)) @@ -123,14 +467,14 @@ let SetDebugSwitch (tcConfigB : TcConfigBuilder) (dtype : string option) (s : Op | "pdbonly" -> tcConfigB.jitTracking <- false | "full" -> tcConfigB.jitTracking <- true | _ -> error(Error(FSComp.SR.optsUnrecognizedDebugType(s), rangeCmdArgs)) - | None -> tcConfigB.jitTracking <- s = On - tcConfigB.debuginfo <- s = On ; + | None -> tcConfigB.jitTracking <- s = OptionSwitch.On + tcConfigB.debuginfo <- s = OptionSwitch.On let setOutFileName tcConfigB s = tcConfigB.outputFile <- Some s let setSignatureFile tcConfigB s = - tcConfigB.printSignature <- true ; + tcConfigB.printSignature <- true tcConfigB.printSignatureFile <- s // option tags @@ -169,6 +513,7 @@ let PrintOptionInfo (tcConfigB:TcConfigBuilder) = printfn " debuginfo . . . . . . : %+A" tcConfigB.debuginfo printfn " resolutionEnvironment : %+A" tcConfigB.resolutionEnvironment printfn " product . . . . . . . : %+A" tcConfigB.productNameForBannerText + printfn " copyFSharpCore . . . . : %+A" tcConfigB.copyFSharpCore tcConfigB.includes |> List.sort |> List.iter (printfn " include . . . . . . . : %A") @@ -194,11 +539,11 @@ let inputFileFlagsFsc tcConfigB = inputFileFlagsBoth tcConfigB let errorsAndWarningsFlags (tcConfigB : TcConfigBuilder) = [ - CompilerOption("warnaserror", tagNone, OptionSwitch(fun switch -> tcConfigB.globalWarnAsError <- switch <> Off), None, + CompilerOption("warnaserror", tagNone, OptionSwitch(fun switch -> tcConfigB.globalWarnAsError <- switch <> OptionSwitch.Off), None, Some (FSComp.SR.optsWarnaserrorPM())); CompilerOption("warnaserror", tagWarnList, OptionIntListSwitch (fun n switch -> - if switch = Off then + if switch = OptionSwitch.Off then tcConfigB.specificWarnAsError <- ListSet.remove (=) n tcConfigB.specificWarnAsError ; tcConfigB.specificWarnAsWarn <- ListSet.insert (=) n tcConfigB.specificWarnAsWarn else @@ -218,7 +563,7 @@ let errorsAndWarningsFlags (tcConfigB : TcConfigBuilder) = CompilerOption("warnon", tagWarnList, OptionStringList (fun n -> tcConfigB.TurnWarningOn(rangeCmdArgs,n)), None, Some(FSComp.SR.optsWarnOn())); - CompilerOption("consolecolors", tagNone, OptionSwitch (fun switch -> enableConsoleColoring <- switch=On), None, + CompilerOption("consolecolors", tagNone, OptionSwitch (fun switch -> enableConsoleColoring <- switch = OptionSwitch.On), None, Some (FSComp.SR.optsConsoleColors())) ] @@ -244,7 +589,7 @@ let outputFileFlagsFsc (tcConfigB : TcConfigBuilder) = CompilerOption("target", tagModule, OptionString (SetTarget tcConfigB), None, Some (FSComp.SR.optsBuildModule())); - CompilerOption("delaysign", tagNone, OptionSwitch (fun s -> tcConfigB.delaysign <- (s = On)), None, + CompilerOption("delaysign", tagNone, OptionSwitch (fun s -> tcConfigB.delaysign <- (s = OptionSwitch.On)), None, Some (FSComp.SR.optsDelaySign())); CompilerOption("doc", tagFile, OptionString (fun s -> tcConfigB.xmlDocOutputFile <- Some s), None, @@ -267,6 +612,8 @@ let outputFileFlagsFsc (tcConfigB : TcConfigBuilder) = CompilerOption("sig", tagFile, OptionString (setSignatureFile tcConfigB), None, Some (FSComp.SR.optsSig())); + + CompilerOption("nocopyfsharpcore", tagNone, OptionUnit (fun () -> tcConfigB.copyFSharpCore <- false), None, Some (FSComp.SR.optsNoCopyFsharpCore())); ] @@ -301,7 +648,7 @@ let codeGenerationFlags (tcConfigB : TcConfigBuilder) = CompilerOption("debug", tagNone, OptionSwitch (SetDebugSwitch tcConfigB None), None, Some (FSComp.SR.optsDebugPM())); - CompilerOption("debug", tagFullPDBOnly, OptionString (fun s -> SetDebugSwitch tcConfigB (Some(s)) On), None, + CompilerOption("debug", tagFullPDBOnly, OptionString (fun s -> SetDebugSwitch tcConfigB (Some(s)) OptionSwitch.On), None, Some (FSComp.SR.optsDebug())); CompilerOption("optimize", tagNone, OptionSwitch (SetOptimizeSwitch tcConfigB) , None, @@ -326,7 +673,7 @@ let mlCompatibilityFlag (tcConfigB : TcConfigBuilder) = Some (FSComp.SR.optsMlcompatibility())) let languageFlags tcConfigB = [ - CompilerOption("checked", tagNone, OptionSwitch (fun switch -> tcConfigB.checkOverflow <- (switch = On)), None, + CompilerOption("checked", tagNone, OptionSwitch (fun switch -> tcConfigB.checkOverflow <- (switch = OptionSwitch.On)), None, Some (FSComp.SR.optsChecked())); CompilerOption("define", tagString, OptionString (defineSymbol tcConfigB), None, Some (FSComp.SR.optsDefine())); @@ -417,7 +764,7 @@ let advancedFlagsFsc tcConfigB = yield CompilerOption("highentropyva", tagNone, OptionSwitch (useHighEntropyVASwitch tcConfigB), None, Some (FSComp.SR.optsUseHighEntropyVA())) yield CompilerOption("subsystemversion", tagString, OptionString (subSystemVersionSwitch tcConfigB), None, Some (FSComp.SR.optsSubSystemVersion())) yield CompilerOption("targetprofile", tagString, OptionString (setTargetProfile tcConfigB), None, Some(FSComp.SR.optsTargetProfile())) - yield CompilerOption("quotations-debug", tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = On), None, Some(FSComp.SR.optsEmitDebugInfoInQuotations())) + yield CompilerOption("quotations-debug", tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = OptionSwitch.On), None, Some(FSComp.SR.optsEmitDebugInfoInQuotations())) ] // OptionBlock: Internal options (test use only) @@ -427,7 +774,7 @@ let testFlag tcConfigB = CompilerOption("test", tagString, OptionString (fun s -> match s with | "ErrorRanges" -> tcConfigB.errorStyle <- ErrorStyle.TestErrors - | "MemberBodyRanges" -> PostTypecheckSemanticChecks.testFlagMemberBody := true + | "MemberBodyRanges" -> PostTypeCheckSemanticChecks.testFlagMemberBody := true | "Tracking" -> Lib.tracking := true (* general purpose on/off diagnostics flag *) | "NoNeedToTailcall" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportNoNeedToTailcall = true } | "FunctionSizes" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportFunctionSizes = true } @@ -444,27 +791,21 @@ let testFlag tcConfigB = // not shown in fsc.exe help, no warning on use, motiviation is for use from VS let vsSpecificFlags (tcConfigB: TcConfigBuilder) = [ CompilerOption("vserrors", tagNone, OptionUnit (fun () -> tcConfigB.errorStyle <- ErrorStyle.VSErrors), None, None); - CompilerOption("validate-type-providers", tagNone, OptionUnit (fun () -> tcConfigB.validateTypeProviders <- true), None, None); + CompilerOption("validate-type-providers", tagNone, OptionUnit (id), None, None); // preserved for compatibility's sake, no longer has any effect CompilerOption("LCID", tagInt, OptionInt (fun n -> tcConfigB.lcid <- Some(n)), None, None); CompilerOption("flaterrors", tagNone, OptionUnit (fun () -> tcConfigB.flatErrors <- true), None, None); CompilerOption("sqmsessionguid", tagNone, OptionString (fun s -> tcConfigB.sqmSessionGuid <- try System.Guid(s) |> Some with e -> None), None, None); + CompilerOption("gccerrors", tagNone, OptionUnit (fun () -> tcConfigB.errorStyle <- ErrorStyle.GccErrors), None, None); + CompilerOption("exename", tagNone, OptionString (fun s -> tcConfigB.exename <- Some(s)), None, None); CompilerOption("maxerrors", tagInt, OptionInt (fun n -> tcConfigB.maxErrors <- n), None, None); ] let internalFlags (tcConfigB:TcConfigBuilder) = [ - CompilerOption("use-incremental-build", tagNone, OptionUnit (fun () -> tcConfigB.useIncrementalBuilder <- true), None, None) - CompilerOption("stamps", tagNone, OptionUnit (fun () -> -#if DEBUG - Tast.verboseStamps := true -#else - () -#endif - ), Some(InternalCommandLineOption("--stamps", rangeCmdArgs)), None); + CompilerOption("stamps", tagNone, OptionUnit (fun () -> ()), Some(InternalCommandLineOption("--stamps", rangeCmdArgs)), None); CompilerOption("ranges", tagNone, OptionSet Tastops.DebugPrint.layoutRanges, Some(InternalCommandLineOption("--ranges", rangeCmdArgs)), None); CompilerOption("terms" , tagNone, OptionUnit (fun () -> tcConfigB.showTerms <- true), Some(InternalCommandLineOption("--terms", rangeCmdArgs)), None); CompilerOption("termsfile" , tagNone, OptionUnit (fun () -> tcConfigB.writeTermsToFiles <- true), Some(InternalCommandLineOption("--termsfile", rangeCmdArgs)), None); - CompilerOption("use-incremental-build", tagNone, OptionUnit (fun () -> tcConfigB.useIncrementalBuilder <- true), None, None) #if DEBUG CompilerOption("debug-parse", tagNone, OptionUnit (fun () -> Internal.Utilities.Text.Parsing.Flags.debug <- true), Some(InternalCommandLineOption("--debug-parse", rangeCmdArgs)), None); CompilerOption("ilfiles", tagNone, OptionUnit (fun () -> tcConfigB.writeGeneratedILFiles <- true), Some(InternalCommandLineOption("--ilfiles", rangeCmdArgs)), None); @@ -476,7 +817,7 @@ let internalFlags (tcConfigB:TcConfigBuilder) = CompilerOption("tlr", tagInt, OptionInt (setFlag (fun v -> tcConfigB.doTLR <- v)), Some(InternalCommandLineOption("--tlr", rangeCmdArgs)), None); CompilerOption("finalSimplify", tagInt, OptionInt (setFlag (fun v -> tcConfigB.doFinalSimplify <- v)), Some(InternalCommandLineOption("--finalSimplify", rangeCmdArgs)), None); #if TLR_LIFT - CompilerOption("tlrlift", tagNone, OptionInt (setFlag (fun v -> Tlr.liftTLR := v)), Some(InternalCommandLineOption("--tlrlift", rangeCmdArgs)), None); + CompilerOption("tlrlift", tagNone, OptionInt (setFlag (fun v -> InnerLambdasToTopLevelFuncs.liftTLR := v)), Some(InternalCommandLineOption("--tlrlift", rangeCmdArgs)), None); #endif CompilerOption("parseonly", tagNone, OptionUnit (fun () -> tcConfigB.parseOnly <- true), Some(InternalCommandLineOption("--parseonly", rangeCmdArgs)), None); CompilerOption("typecheckonly", tagNone, OptionUnit (fun () -> tcConfigB.typeCheckOnly <- true), Some(InternalCommandLineOption("--typecheckonly", rangeCmdArgs)), None); @@ -494,7 +835,6 @@ let internalFlags (tcConfigB:TcConfigBuilder) = CompilerOption("resolutionassemblyfoldersuffix", tagString, OptionString (fun s -> tcConfigB.resolutionAssemblyFoldersSuffix<-s), Some(InternalCommandLineOption("resolutionassemblyfoldersuffix", rangeCmdArgs)), None); // "The base registry key to use for assembly resolution. This part in brackets here: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\[AssemblyFoldersEx]"); CompilerOption("resolutionassemblyfoldersconditions", tagString, OptionString (fun s -> tcConfigB.resolutionAssemblyFoldersConditions <- ","^s), Some(InternalCommandLineOption("resolutionassemblyfoldersconditions", rangeCmdArgs)), None); // "Additional reference resolution conditions. For example \"OSVersion=5.1.2600.0,PlatformID=id"); CompilerOption("msbuildresolution", tagNone, OptionUnit (fun () -> tcConfigB.useMonoResolution<-false), Some(InternalCommandLineOption("msbuildresolution", rangeCmdArgs)), None); // "Resolve assembly references using MSBuild resolution rules rather than directory based (Default=true except when running fsc.exe under mono)"); - CompilerOption("indirectcallarraymethods", tagNone, OptionUnit (fun () -> tcConfigB.indirectCallArrayMethods<-true), Some(InternalCommandLineOption("--indirectCallArrayMethods", rangeCmdArgs)), None); CompilerOption("alwayscallvirt",tagNone,OptionSwitch(callVirtSwitch tcConfigB),Some(InternalCommandLineOption("alwayscallvirt",rangeCmdArgs)), None); CompilerOption("nodebugdata",tagNone, OptionUnit (fun () -> tcConfigB.noDebugData<-true),Some(InternalCommandLineOption("--nodebugdata",rangeCmdArgs)), None); testFlag tcConfigB ] @ @@ -582,7 +922,7 @@ let DisplayBannerText tcConfigB = /// FSC only help. (FSI has it's own help function). let displayHelpFsc tcConfigB (blocks:CompilerOptionBlock list) = DisplayBannerText tcConfigB; - printCompilerOptionBlocks blocks + PrintCompilerOptionBlocks blocks exit 0 let miscFlagsBoth tcConfigB = @@ -591,7 +931,8 @@ let miscFlagsBoth tcConfigB = let miscFlagsFsc tcConfigB = miscFlagsBoth tcConfigB @ - [ CompilerOption("help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some (FSComp.SR.optsHelp())) + [ CompilerOption("help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some (FSComp.SR.optsHelp())); + CompilerOption("@", tagNone, OptionUnit ignore, None, Some (FSComp.SR.optsResponseFile())) ] let miscFlagsFsi tcConfigB = miscFlagsBoth tcConfigB @@ -621,7 +962,7 @@ let abbreviatedFlagsFsc tcConfigB = CompilerOption("full-help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some(FSComp.SR.optsShortFormOf("--help"))) ] -let abbrevFlagSet tcConfigB isFsc = +let GetAbbrevFlagSet tcConfigB isFsc = let mutable argList : string list = [] for c in ((if isFsc then abbreviatedFlagsFsc else abbreviatedFlagsFsi) tcConfigB) do match c with @@ -653,7 +994,7 @@ let PostProcessCompilerArgs (abbrevArgs : string Set) (args : string []) = let testingAndQAFlags _tcConfigB = [ - CompilerOption("dumpAllCommandLineOptions", tagNone, OptionHelp(fun blocks -> dumpCompilerOptionBlocks blocks), None, None) // "Command line options") + CompilerOption("dumpAllCommandLineOptions", tagNone, OptionHelp(fun blocks -> DumpCompilerOptionBlocks blocks), None, None) // "Command line options") ] @@ -709,7 +1050,7 @@ let GetCoreFscCompilerOptions (tcConfigB: TcConfigBuilder) = /// Filter out OptionHelp which does printing then exit. This is not wanted in the context of VS!! let GetCoreServiceCompilerOptions (tcConfigB:TcConfigBuilder) = let isHelpOption = function CompilerOption(_,_,OptionHelp _,_,_) -> true | _ -> false - List.map (filterCompilerOptionBlock (isHelpOption >> not)) (GetCoreFscCompilerOptions tcConfigB) + List.map (FilterCompilerOptionBlock (isHelpOption >> not)) (GetCoreFscCompilerOptions tcConfigB) /// The core/common options used by fsi.exe. [note, some additional options are added in fsi.fs]. let GetCoreFsiCompilerOptions (tcConfigB: TcConfigBuilder) = @@ -819,18 +1160,18 @@ let ReportTime (tcConfig:TcConfig) descr = // OPTIMIZATION - support - addDllToOptEnv //---------------------------------------------------------------------------- -let AddExternalCcuToOpimizationEnv tcGlobals optEnv ccuinfo = +let AddExternalCcuToOpimizationEnv tcGlobals optEnv (ccuinfo: ImportedAssembly) = match ccuinfo.FSharpOptimizationData.Force() with | None -> optEnv - | Some(data) -> Opt.BindCcu ccuinfo.FSharpViewOfMetadata data optEnv tcGlobals + | Some(data) -> Optimizer.BindCcu ccuinfo.FSharpViewOfMetadata data optEnv tcGlobals //---------------------------------------------------------------------------- // OPTIMIZATION - support - optimize //---------------------------------------------------------------------------- -let InitialOptimizationEnv (tcImports:TcImports) (tcGlobals:TcGlobals) = +let GetInitialOptimizationEnv (tcImports:TcImports, tcGlobals:TcGlobals) = let ccuinfos = tcImports.GetImportedAssemblies() - let optEnv = Opt.IncrementalOptimizationEnv.Empty + let optEnv = Optimizer.IncrementalOptimizationEnv.Empty let optEnv = List.fold (AddExternalCcuToOpimizationEnv tcGlobals) optEnv ccuinfos optEnv @@ -849,8 +1190,8 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM let optEnv0 = optEnv let (TAssembly(implFiles)) = tassembly ReportTime tcConfig ("Optimizations"); - let results,(optEnvFirstLoop,_,_) = - ((optEnv0,optEnv0,optEnv0),implFiles) ||> List.mapFold (fun (optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify) implFile -> + let results,(optEnvFirstLoop,_,_,_) = + ((optEnv0,optEnv0,optEnv0,SignatureHidingInfo.Empty),implFiles) ||> List.mapFold (fun (optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify,hidden) implFile -> // Only do abstract_big_targets on the first pass! Only do it when TLR is on! let optSettings = tcConfig.optSettings @@ -858,8 +1199,8 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM let optSettings = { optSettings with reportingPhase = true } //ReportTime tcConfig ("Initial simplify"); - let optEnvFirstLoop,implFile,implFileOptData = - Opt.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFirstLoop,isIncrementalFragment,tcConfig.emitTailcalls,implFile) + let optEnvFirstLoop,implFile,implFileOptData,hidden = + Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFirstLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile) let implFile = AutoBox.TransformImplFile tcGlobals importMap implFile @@ -867,13 +1208,13 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM let optSettings = { optSettings with abstractBigTargets = false } let optSettings = { optSettings with reportingPhase = false } #if DEBUG - if tcConfig.showOptimizationData then dprintf "Optimization implFileOptData:\n%s\n" (Layout.showL (Layout.squashTo 192 (Opt.moduleInfoL tcGlobals implFileOptData))); + if tcConfig.showOptimizationData then dprintf "Optimization implFileOptData:\n%s\n" (Layout.showL (Layout.squashTo 192 (Optimizer.moduleInfoL tcGlobals implFileOptData))); #endif let implFile,optEnvExtraLoop = if tcConfig.extraOptimizationIterations > 0 then //ReportTime tcConfig ("Extra simplification loop"); - let optEnvExtraLoop,implFile, _ = Opt.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvExtraLoop,isIncrementalFragment,tcConfig.emitTailcalls,implFile) + let optEnvExtraLoop,implFile, _, _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvExtraLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile) //PrintWholeAssemblyImplementation tcConfig outfile (sprintf "extra-loop-%d" n) implFile; implFile,optEnvExtraLoop else @@ -889,24 +1230,24 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM let implFile = if tcConfig.doTLR then - implFile |> Tlr.MakeTLRDecisions ccu tcGlobals + implFile |> InnerLambdasToTopLevelFuncs.MakeTLRDecisions ccu tcGlobals else implFile let implFile = - Lowertop.LowerImplFile tcGlobals implFile + LowerCallsAndSeqs.LowerImplFile tcGlobals implFile let implFile,optEnvFinalSimplify = if tcConfig.doFinalSimplify then //ReportTime tcConfig ("Final simplify pass"); - let optEnvFinalSimplify,implFile, _ = Opt.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFinalSimplify,isIncrementalFragment,tcConfig.emitTailcalls,implFile) + let optEnvFinalSimplify,implFile, _, _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFinalSimplify,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile) //PrintWholeAssemblyImplementation tcConfig outfile "post-rec-opt" implFile; implFile,optEnvFinalSimplify else implFile,optEnvFinalSimplify - (implFile,implFileOptData),(optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify)) + (implFile,implFileOptData),(optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify,hidden)) let implFiles,implFileOptDatas = List.unzip results - let assemblyOptData = Opt.UnionModuleInfos implFileOptDatas + let assemblyOptData = Optimizer.UnionOptimizationInfos implFileOptDatas let tassembly = TAssembly(implFiles) PrintWholeAssemblyImplementation tcConfig outfile "pass-end" tassembly; ReportTime tcConfig ("Ending Optimizations"); @@ -919,7 +1260,7 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM //---------------------------------------------------------------------------- let CreateIlxAssemblyGenerator (_tcConfig:TcConfig,tcImports:TcImports,tcGlobals, tcVal, generatedCcu) = - let ilxGenerator = new Ilxgen.IlxAssemblyGenerator (tcImports.GetImportMap(), tcGlobals, tcVal, generatedCcu) + let ilxGenerator = new IlxGen.IlxAssemblyGenerator (tcImports.GetImportMap(), tcGlobals, tcVal, generatedCcu) let ccus = tcImports.GetCcusInDeclOrder() ilxGenerator.AddExternalCcus ccus ilxGenerator @@ -958,7 +1299,7 @@ let NormalizeAssemblyRefs (tcImports:TcImports) scoref = | Some dllInfo -> dllInfo.ILScopeRef | None -> scoref -let fsharpModuleName (t:CompilerTarget) (s:string) = +let GetGeneratedILModuleName (t:CompilerTarget) (s:string) = // return the name of the file as a module name let ext = match t with | Dll -> "dll" | Module -> "netmodule" | _ -> "exe" s + "." + ext diff --git a/src/fsharp/CompileOptions.fsi b/src/fsharp/CompileOptions.fsi new file mode 100644 index 00000000000..57f87228ec8 --- /dev/null +++ b/src/fsharp/CompileOptions.fsi @@ -0,0 +1,101 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module internal Microsoft.FSharp.Compiler.CompileOptions + +open Internal.Utilities +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.AbstractIL +open Microsoft.FSharp.Compiler.AbstractIL.IL +open Microsoft.FSharp.Compiler.AbstractIL.Internal +open Microsoft.FSharp.Compiler.CompileOps +open Microsoft.FSharp.Compiler.ErrorLogger +open Microsoft.FSharp.Compiler.Ast +open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.Import +open Microsoft.FSharp.Compiler.Optimizer +open Microsoft.FSharp.Compiler.TcGlobals + +//---------------------------------------------------------------------------- +// Compiler Option Parser +//-------------------------------------------------------------------------- + +// For command-line options that can be suffixed with +/- +[] +type OptionSwitch = + | On + | Off + +/// The spec value describes the action of the argument, +/// and whether it expects a following parameter. +type OptionSpec = + | OptionClear of bool ref + | OptionFloat of (float -> unit) + | OptionInt of (int -> unit) + | OptionSwitch of (OptionSwitch -> unit) + | OptionIntList of (int -> unit) + | OptionIntListSwitch of (int -> OptionSwitch -> unit) + | OptionRest of (string -> unit) + | OptionSet of bool ref + | OptionString of (string -> unit) + | OptionStringList of (string -> unit) + | OptionStringListSwitch of (string -> OptionSwitch -> unit) + | OptionUnit of (unit -> unit) + | OptionHelp of (CompilerOptionBlock list -> unit) // like OptionUnit, but given the "options" + | OptionGeneral of (string list -> bool) * (string list -> string list) // Applies? * (ApplyReturningResidualArgs) + +and CompilerOption = + /// CompilerOption(name, argumentDescriptionString, actionSpec, exceptionOpt, helpTextOpt + | CompilerOption of string * string * OptionSpec * Option * string option + +and CompilerOptionBlock = + | PublicOptions of string * CompilerOption list + | PrivateOptions of CompilerOption list + +val PrintCompilerOptionBlocks : CompilerOptionBlock list -> unit // for printing usage +val DumpCompilerOptionBlocks : CompilerOptionBlock list -> unit // for QA +val FilterCompilerOptionBlock : (CompilerOption -> bool) -> CompilerOptionBlock -> CompilerOptionBlock + +/// Parse and process a set of compiler options +val ParseCompilerOptions : (string -> unit) * CompilerOptionBlock list * string list -> unit + + +//---------------------------------------------------------------------------- +// Compiler Options +//-------------------------------------------------------------------------- + +val DisplayBannerText : TcConfigBuilder -> unit + +val GetCoreFscCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list +val GetCoreFsiCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list +val GetCoreServiceCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list + +// Expose the "setters" for some user switches, to enable setting of defaults +val SetOptimizeSwitch : TcConfigBuilder -> OptionSwitch -> unit +val SetTailcallSwitch : TcConfigBuilder -> OptionSwitch -> unit +val SetDebugSwitch : TcConfigBuilder -> string option -> OptionSwitch -> unit +val PrintOptionInfo : TcConfigBuilder -> unit + +val GetGeneratedILModuleName : CompilerTarget -> string -> string + +#if NO_COMPILER_BACKEND +#else +val GetInitialOptimizationEnv : TcImports * TcGlobals -> IncrementalOptimizationEnv +val AddExternalCcuToOpimizationEnv : TcGlobals -> IncrementalOptimizationEnv -> ImportedAssembly -> IncrementalOptimizationEnv +val ApplyAllOptimizations : TcConfig * TcGlobals * ConstraintSolver.TcValF * string * ImportMap * bool * IncrementalOptimizationEnv * CcuThunk * TypedAssembly -> TypedAssembly * Optimizer.LazyModuleInfo * IncrementalOptimizationEnv + +val CreateIlxAssemblyGenerator : TcConfig * TcImports * TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxGen.IlxAssemblyGenerator + +val GenerateIlxCode : IlxGen.IlxGenBackend * bool * bool * TcConfig * TypeChecker.TopAttribs * TypedAssembly * string * bool * IlxGen.IlxAssemblyGenerator -> IlxGen.IlxGenResults +#endif + +// Used during static linking +val NormalizeAssemblyRefs : TcImports -> (AbstractIL.IL.ILScopeRef -> AbstractIL.IL.ILScopeRef) + +// Miscellany +val ignoreFailureOnMono1_1_16 : (unit -> unit) -> unit +val mutable enableConsoleColoring : bool +val DoWithErrorColor : bool -> (unit -> 'a) -> 'a +val ReportTime : TcConfig -> string -> unit +val GetAbbrevFlagSet : TcConfigBuilder -> bool -> Set +val PostProcessCompilerArgs : string Set -> string [] -> string list +val ParseCompilerOptions : (string -> unit) * CompilerOptionBlock list * string list -> unit diff --git a/src/fsharp/csolve.fs b/src/fsharp/ConstraintSolver.fs similarity index 99% rename from src/fsharp/csolve.fs rename to src/fsharp/ConstraintSolver.fs index 70e35b2ce3c..eeb87a4b7b1 100644 --- a/src/fsharp/csolve.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.ConstraintSolver @@ -45,12 +45,12 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic open Microsoft.FSharp.Compiler.Infos.AttributeChecking -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.PrettyNaming //------------------------------------------------------------------------- @@ -121,9 +121,9 @@ exception ConstraintSolverMissingConstraint of DisplayEnv * Tast.Typar * Tast.Ty exception ConstraintSolverError of string * range * range exception ConstraintSolverRelatedInformation of string option * range * exn -exception ErrorFromApplyingDefault of Env.TcGlobals * DisplayEnv * Tast.Typar * TType * exn * range -exception ErrorFromAddingTypeEquation of Env.TcGlobals * DisplayEnv * TType * TType * exn * range -exception ErrorsFromAddingSubsumptionConstraint of Env.TcGlobals * DisplayEnv * TType * TType * exn * range +exception ErrorFromApplyingDefault of TcGlobals * DisplayEnv * Tast.Typar * TType * exn * range +exception ErrorFromAddingTypeEquation of TcGlobals * DisplayEnv * TType * TType * exn * range +exception ErrorsFromAddingSubsumptionConstraint of TcGlobals * DisplayEnv * TType * TType * exn * range exception ErrorFromAddingConstraint of DisplayEnv * exn * range exception PossibleOverload of DisplayEnv * string * exn * range exception UnresolvedOverloading of DisplayEnv * exn list * string * range @@ -136,7 +136,7 @@ type TcValF = (ValRef -> ValUseFlag -> TType list -> range -> Expr * TType) type ConstraintSolverState = { - g: Env.TcGlobals; + g: TcGlobals; amap: Import.ImportMap; InfoReader : InfoReader; TcVal : TcValF @@ -1290,7 +1290,7 @@ and MemberConstraintSolutionOfMethInfo css m minfo minst = let minst = [] // GENERIC TYPE PROVIDERS: for generics, we would have an minst here let allArgVars, allArgs = minfo.GetParamTypes(amap, m, minst) |> List.concat |> List.mapi (fun i ty -> mkLocal m ("arg"+string i) ty) |> List.unzip let objArgVars, objArgs = (if minfo.IsInstance then [mkLocal m "this" minfo.EnclosingType] else []) |> List.unzip - let callMethInfoOpt, callExpr,callExprTy = Typrelns.ProvidedMethodCalls.BuildInvokerExpressionForProvidedMethodCall css.TcVal (g, amap, mi, objArgs, NeverMutates, false, ValUseFlag.NormalValUse, allArgs, m) + let callMethInfoOpt, callExpr,callExprTy = TypeRelations.ProvidedMethodCalls.BuildInvokerExpressionForProvidedMethodCall css.TcVal (g, amap, mi, objArgs, NeverMutates, false, ValUseFlag.NormalValUse, allArgs, m) let closedExprSln = ClosedExprSln (mkLambdas m [] (objArgVars@allArgVars) (callExpr, callExprTy) ) // If the call is a simple call to an IL method with all the arguments in the natural order, then revert to use ILMethSln. // This is important for calls to operators on generated provided types. There is an (unchecked) condition @@ -1644,7 +1644,7 @@ and SolveTypeSupportsComparison (csenv:ConstraintSolverEnv) ndeep m2 trace ty = // Give a good error for structural types excluded from the comparison relation because of their fields elif (isAppTy g ty && let tcref = tcrefOfAppTy g ty - Augment.TyconIsCandidateForAugmentationWithCompare g tcref.Deref && + AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare g tcref.Deref && isNone tcref.GeneratedCompareToWithComparerValues) then ErrorD (ConstraintSolverError(FSComp.SR.csTypeDoesNotSupportComparison3(NicePrint.minimalStringOfType denv ty),m,m2)) @@ -1672,7 +1672,7 @@ and SolveTypSupportsEquality (csenv:ConstraintSolverEnv) ndeep m2 trace ty = let tcref,tinst = destAppTy g ty // Give a good error for structural types excluded from the equality relation because of their fields - if (Augment.TyconIsCandidateForAugmentationWithEquals g tcref.Deref && + if (AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals g tcref.Deref && isNone tcref.GeneratedHashAndEqualsWithComparerValues) then ErrorD (ConstraintSolverError(FSComp.SR.csTypeDoesNotSupportEquality3(NicePrint.minimalStringOfType denv ty),m,m2)) @@ -1872,7 +1872,7 @@ and CanMemberSigsMatchUpToCheck let calledArgTy = rfinfo.FieldType rfinfo.Name, calledArgTy - subsumeArg (CalledArg((-1, 0), false, NotOptional, false, Some name, ReflectedArgInfo.None, calledArgTy)) caller) )) ++ (fun () -> + subsumeArg (CalledArg((-1, 0), false, NotOptional, false, Some (mkSynId m name), ReflectedArgInfo.None, calledArgTy)) caller) )) ++ (fun () -> // - Always take the return type into account for // -- op_Explicit, op_Implicit @@ -2004,7 +2004,7 @@ and ReportNoCandidatesError (csenv:ConstraintSolverEnv) (nUnnamedCallerArgs,nNam let missingArgs = List.drop nReqd cmeth.AllUnnamedCalledArgs match NamesOfCalledArgs missingArgs with | [] -> (false, "") - | names -> (true, String.concat ";" names) + | names -> (true, String.concat ";" (List.map textOfId names)) else (false, "") match suggestNamesForMissingArguments with diff --git a/src/fsharp/csolve.fsi b/src/fsharp/ConstraintSolver.fsi similarity index 83% rename from src/fsharp/csolve.fsi rename to src/fsharp/ConstraintSolver.fsi index f1a600f1002..75dda149237 100644 --- a/src/fsharp/csolve.fsi +++ b/src/fsharp/ConstraintSolver.fsi @@ -1,5 +1,6 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +/// Solves constraints using a mutable constraint-solver state module internal Microsoft.FSharp.Compiler.ConstraintSolver open Internal.Utilities @@ -15,18 +16,32 @@ open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Import open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tast -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Infos +/// Create a type variable representing the use of a "_" in F# code val NewAnonTypar : TyparKind * range * TyparRigidity * TyparStaticReq * TyparDynamicReq -> Typar + +/// Create an inference type variable val NewInferenceType : unit -> TType + +/// Create an inference type variable representing an error condition when checking an expression val NewErrorType : unit -> TType + +/// Create an inference type variable representing an error condition when checking a measure val NewErrorMeasure : unit -> MeasureExpr + +/// Create a list of inference type variables, one for each element in the input list val NewInferenceTypes : 'a list -> TType list +/// Given a set of formal type parameters and their constraints, make new inference type variables for +/// each and ensure that the constraints on the new type variables are adjusted to refer to these. val FreshenAndFixupTypars : range -> TyparRigidity -> Typars -> TType list -> Typars -> Typars * TyparInst * TType list + val FreshenTypeInst : range -> Typars -> Typars * TyparInst * TType list + val FreshenTypars : range -> Typars -> TType list + val FreshenMethInfo : range -> MethInfo -> TType list exception ConstraintSolverTupleDiffLengths of DisplayEnv * TType list * TType list * range * range @@ -42,16 +57,15 @@ exception ErrorsFromAddingSubsumptionConstraint of TcGlobals * DisplayEn exception ErrorFromAddingConstraint of DisplayEnv * exn * range exception UnresolvedConversionOperator of DisplayEnv * TType * TType * range exception PossibleOverload of DisplayEnv * string * exn * range -exception UnresolvedOverloading of DisplayEnv * exn list (* PossibleOverload list *) * string * range -//exception PossibleBestOverload of DisplayEnv * string * range +exception UnresolvedOverloading of DisplayEnv * exn list * string * range exception NonRigidTypar of DisplayEnv * string option * range * TType * TType * range -/// function type that denotes captured tcVal used in constraint solver +/// A function that denotes captured tcVal, Used in constraint solver and elsewhere to get appropriate expressions for a ValRef. type TcValF = (ValRef -> ValUseFlag -> TType list -> range -> Expr * TType) [] type ConstraintSolverState = - static member New: TcGlobals * Import.ImportMap * InfoReader * TcValF-> ConstraintSolverState + static member New: TcGlobals * Import.ImportMap * InfoReader * TcValF -> ConstraintSolverState type ConstraintSolverEnv @@ -69,10 +83,9 @@ val SimplifyMeasuresInTypeScheme : TcGlobals -> bool -> Typars -> TT val SolveTyparEqualsTyp : ConstraintSolverEnv -> int -> range -> OptionalTrace -> TType -> TType -> OperationResult val SolveTypEqualsTypKeepAbbrevs : ConstraintSolverEnv -> int -> range -> OptionalTrace -> TType -> TType -> OperationResult val CanonicalizeRelevantMemberConstraints : ConstraintSolverEnv -> int -> OptionalTrace -> Typars -> OperationResult -val ResolveOverloading : ConstraintSolverEnv -> OptionalTrace -> string -> ndeep: int -> bool -> int * int -> AccessorDomain -> Typrelns.CalledMeth list -> bool -> TType option -> Typrelns.CalledMeth option * OperationResult -val UnifyUniqueOverloading : ConstraintSolverEnv -> int * int -> string -> AccessorDomain -> Typrelns.CalledMeth list -> TType -> OperationResult +val ResolveOverloading : ConstraintSolverEnv -> OptionalTrace -> string -> ndeep: int -> bool -> int * int -> AccessorDomain -> TypeRelations.CalledMeth list -> bool -> TType option -> TypeRelations.CalledMeth option * OperationResult +val UnifyUniqueOverloading : ConstraintSolverEnv -> int * int -> string -> AccessorDomain -> TypeRelations.CalledMeth list -> TType -> OperationResult val EliminateConstraintsForGeneralizedTypars : ConstraintSolverEnv -> OptionalTrace -> Typars -> unit -//val AdjustCalledArgType : TcGlobals -> InfoReader -> bool -> Typrelns.CalledArg -> Typrelns.CallerArg<'T> -> TType val CheckDeclaredTypars : DisplayEnv -> ConstraintSolverState -> range -> Typars -> Typars -> unit diff --git a/src/fsharp/detuple.fs b/src/fsharp/DetupleArgs.fs similarity index 80% rename from src/fsharp/detuple.fs rename to src/fsharp/DetupleArgs.fs index 3265f5d634b..c0682f08ba4 100644 --- a/src/fsharp/detuple.fs +++ b/src/fsharp/DetupleArgs.fs @@ -1,20 +1,19 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.Detuple open Internal.Utilities +open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library -open Microsoft.FSharp.Compiler - open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.PrettyNaming open Microsoft.FSharp.Compiler.Lib @@ -87,7 +86,7 @@ open Microsoft.FSharp.Compiler.Lib // - extend call patterns to length n with _ (no tuple info known) // - component-wise intersect argument tuple-structures over call patterns. // - gives least known call-pattern of length n. -// - can trim to minimum non-trivual length. +// - can trim to minimum non-trivial length. // // [Used to] have INVARIANT on this chosen call pattern: // @@ -101,7 +100,7 @@ open Microsoft.FSharp.Compiler.Lib // [PS: now defn arg projection info can override call site info] // // 2b.Choosing CallPattern also needs to check type of formals for the function. -// If function is not expecting a tuple (accoring to types) do not split them. +// If function is not expecting a tuple (according to types) do not split them. // // 3. Given CallPattern for selected fOrig, // (a) Can choose replacement formals, ybi where needed. (b, bar, means vector of formals). @@ -145,7 +144,7 @@ open Microsoft.FSharp.Compiler.Lib // Note: ids can occur in several ways in expr at this point in compiler. // val id - freely -// app (val id) tys args - applied to tys/args (if no args, then free occurance) +// app (val id) tys args - applied to tys/args (if no args, then free occurrence) // app (reclink (val id)) tys args - applied (recursive case) // app (reclink (app (val id) tys' []) tys args - applied (recursive type instanced case) // So, taking care counting callpatterns. @@ -168,7 +167,7 @@ let (|TyappAndApp|_|) e = // GetValsBoundInExpr //------------------------------------------------------------------------- -module GlobalUsageAnalysis = begin +module GlobalUsageAnalysis = let bindAccBounds vals (_isInDTree,v) = Zset.add v vals let GetValsBoundInExpr expr = @@ -184,59 +183,60 @@ module GlobalUsageAnalysis = begin type accessor = TupleGet of int * TType list + /// Expr information. + /// For each v, + /// (a) log it's usage site context = accessors // APP type-inst args + /// where first accessor in list applies first to the v/app. + /// (b) log it's binding site representation. type Results = - (* Expr information. - * For each v, - * (a) log it's usage site context = accessors // APP type-inst args - * where first accessor in list applies first to the v/app. - * (b) log it's binding site representation. - *------ - * Future, could generalise to be graph representation of expr. (partly there). - * This type used to be called "usage". - *) - { Uses : Zmap; (* v -> context / APP inst args *) - Defns : Zmap; (* v -> binding repr *) - DecisionTreeBindings : Zset; (* bound in a decision tree? *) - RecursiveBindings : Zmap; (* v -> v list * recursive? -- the others in the mutual binding *) - TopLevelBindings : Zset; - IterationIsAtTopLevel : bool - } + { /// v -> context / APP inst args + Uses : Zmap + /// v -> binding repr + Defns : Zmap + /// bound in a decision tree? + DecisionTreeBindings : Zset + /// v -> v list * recursive? -- the others in the mutual binding + RecursiveBindings : Zmap + TopLevelBindings : Zset + IterationIsAtTopLevel : bool } let z0 = - { Uses = Zmap.empty valOrder; - Defns = Zmap.empty valOrder; - RecursiveBindings = Zmap.empty valOrder; - DecisionTreeBindings = Zset.empty valOrder; - TopLevelBindings = Zset.empty valOrder; - IterationIsAtTopLevel = true - } - - // Note: this routine is called very frequently + { Uses = Zmap.empty valOrder + Defns = Zmap.empty valOrder + RecursiveBindings = Zmap.empty valOrder + DecisionTreeBindings = Zset.empty valOrder + TopLevelBindings = Zset.empty valOrder + IterationIsAtTopLevel = true } + + /// Log the use of a value with a particular tuple chape at a callsite + /// Note: this routine is called very frequently let logUse (f:Val) tup z = {z with Uses = match Zmap.tryFind f z.Uses with | Some sites -> Zmap.add f (tup::sites) z.Uses | None -> Zmap.add f [tup] z.Uses } + /// Log the definition of a binding let logBinding z (isInDTree,v) = let z = if isInDTree then {z with DecisionTreeBindings = Zset.add v z.DecisionTreeBindings} else z let z = if z.IterationIsAtTopLevel then {z with TopLevelBindings = Zset.add v z.TopLevelBindings} else z z + /// Log the definition of a non-recursive binding let logNonRecBinding z (bind:Binding) = - (* log mubind v -> vs *) let v = bind.Var let vs = FlatList.one v {z with RecursiveBindings = Zmap.add v (false,vs) z.RecursiveBindings; Defns = Zmap.add v bind.Expr z.Defns } + /// Log the definition of a recursive binding let logRecBindings z binds = - (* log mubind v -> vs *) let vs = valsOfBinds binds {z with RecursiveBindings = (z.RecursiveBindings,vs) ||> FlatList.fold (fun mubinds v -> Zmap.add v (true,vs) mubinds); Defns = (z.Defns,binds) ||> FlatList.fold (fun eqns bind -> Zmap.add bind.Var bind.Expr eqns) } + /// Work locally under a lambda of some kind let foldUnderLambda f z x = let saved = z.IterationIsAtTopLevel let z = {z with IterationIsAtTopLevel=false} @@ -244,49 +244,24 @@ module GlobalUsageAnalysis = begin let z = {z with IterationIsAtTopLevel=saved} z -#if DEBUG - let dumpXInfo z = - let soAccessor (TupleGet (n,_ts)) = "#" ^ string n - let dumpSite v (accessors,inst,args) = - dprintf "- use %s%s %s %s\n" - (showL (valL v)) - (match inst with - [] -> "" - | _ -> "@[" ^ showL (commaListL (List.map typeL inst)) ^ "]") - (showL (spaceListL (List.map exprL args))) - (match accessors with - [] -> "" - | _ -> "|> " ^ String.concat " " (List.map soAccessor accessors)) - let dumpUse v sites = List.iter (dumpSite v) sites - let dumpTop (v:Val) = dprintf "- toplevel: %s\n" v.LogicalName - if false then - ( dprintf "usage:\n"; - Zmap.iter dumpUse z.Uses; - Zset.iter dumpTop z.TopLevelBindings - ) - else - () -#endif - - //------------------------------------------------------------------------- // GlobalUsageAnalysis - FoldExpr, foldBind collectors //------------------------------------------------------------------------- + // Fold expr, intercepts selected exprs. + // "val v" - count [] callpattern of v + // "app (f,args)" - count callpattern of f + //--- + // On intercepted nodes, must continue exprF fold over any subexpressions, e.g. args. + //------ + // Also, noting top-level bindings, + // so must cancel top-level "foldUnderLambda" whenever step under loop/lambda: + // - lambdas + // - try/with and try/finally + // - for body + // - match targets + // - tmethods let UsageFolders g = - // Fold expr, intercepts selected exprs. - // "val v" - count [] callpattern of v - // "app (f,args)" - count callpattern of f - //--- - // On intercepted nodes, must continue exprF fold over any subexpressions, e.g. args. - //------ - // Also, noting top-level bindings, - // so must cancel top-level "foldUnderLambda" whenever step under loop/lambda: - // - lambdas - // - try/with and try/finally - // - for body - // - match targets - // - tmethods let foldLocalVal f z (vref: ValRef) = if valRefInThisAssembly g.compilingFslib vref then f z vref.Deref else z @@ -294,7 +269,7 @@ module GlobalUsageAnalysis = begin let rec recognise context expr = match expr with | Expr.Val (v,_,_) -> - // YES: count free occurance + // YES: count free occurrence let z = foldLocalVal (fun z v -> logUse v (context,[],[]) z) z v Some z | TyappAndApp(f,_,tys,args,_) -> @@ -331,12 +306,12 @@ module GlobalUsageAnalysis = begin let tmethodIntercept exprF z = function TObjExprMethod(_,_,_,_,e,_m) -> Some (foldUnderLambda exprF z e) {ExprFolder0 with - exprIntercept = exprUsageIntercept; - nonRecBindingsIntercept = logNonRecBinding; - recBindingsIntercept = logRecBindings; - valBindingSiteIntercept = logBinding; - targetIntercept = targetIntercept; - tmethodIntercept = tmethodIntercept; + exprIntercept = exprUsageIntercept + nonRecBindingsIntercept = logNonRecBinding + recBindingsIntercept = logRecBindings + valBindingSiteIntercept = logBinding + targetIntercept = targetIntercept + tmethodIntercept = tmethodIntercept } @@ -349,8 +324,6 @@ module GlobalUsageAnalysis = begin let z = FoldImplFile folder z0 expr z -end - open GlobalUsageAnalysis @@ -364,23 +337,17 @@ let mkLocalVal m name ty topValInfo = let compgen = false in (* REVIEW: review: should this be true? *) NewVal(name,m,None,ty,Immutable,compgen,topValInfo,taccessPublic,ValNotInRecScope,None,NormalVal,[],ValInline.Optional,XmlDoc.Empty,false,false,false,false,false,false,None,ParentNone) -let dprintTerm header expr = - if false then - let str = Layout.showL (Layout.squashTo 192 (implFileL expr)) (* improve cxty! *) - dprintf "\n\n\n%s:\n%s\n" header str - else - () - //------------------------------------------------------------------------- // TupleStructure = tuple structure //------------------------------------------------------------------------- -type TupleStructure = (* tuple structure *) +type TupleStructure = | UnknownTS | TupleTS of TupleStructure list -let rec ValReprInfoForTS = function +let rec ValReprInfoForTS ts = + match ts with | UnknownTS -> [ValReprInfo.unnamedTopArg] | TupleTS ts -> ts |> List.collect ValReprInfoForTS @@ -396,7 +363,9 @@ let checkTS = function | TupleTS [_] -> internalError "exprTS: Tuple[x] not expected. (singleton tuples should not exist." | ts -> ts -let rec uncheckedExprTS = function (* explicit tuple-structure in expr *) +/// explicit tuple-structure in expr +let rec uncheckedExprTS expr = + match expr with | Expr.Op(TOp.Tuple,_tys,args,_) -> TupleTS (List.map uncheckedExprTS args) | _ -> UnknownTS @@ -415,35 +384,28 @@ let rebuildTS g m ts vs = match vs,ts with | [] ,UnknownTS -> internalError "rebuildTS: not enough fringe to build tuple" | v::vs,UnknownTS -> vs,(exprForVal m v,v.Type) - | vs ,TupleTS tss -> let vs,xtys = List.foldMap rebuild vs tss - let xs,tys = List.unzip xtys - let x = mkTupled g m xs tys - let ty = mkTupledTy g tys - vs,(x,ty) + | vs ,TupleTS tss -> + let vs,xtys = List.foldMap rebuild vs tss + let xs,tys = List.unzip xtys + let x = mkTupled g m xs tys + let ty = mkTupledTy g tys + vs,(x,ty) let vs,(x,_ty) = rebuild vs ts if vs.Length <> 0 then internalError "rebuildTS: had move fringe vars than fringe. REPORT BUG" else (); x -(* naive string concats, just for testing *) - /// CallPattern is tuple-structure for each argument position. /// - callsites have a CallPattern (possibly instancing fOrig at tuple types...). /// - the definition lambdas may imply a one-level CallPattern /// - the definition formal projection info suggests a CallPattern -type CallPattern = - TupleStructure list (* equality/ordering ok on this type *) +type CallPattern = TupleStructure list let callPatternOrder = (compare : CallPattern -> CallPattern -> int) let argsCP exprs = List.map exprTS exprs let noArgsCP = [] let isTrivialCP xs = (isNil xs) -#if DEBUG -let rec soTS = function (UnknownTS) -> "_" | TupleTS ss -> "(" ^ String.concat "," (List.map soTS ss) ^ ")" -let soCP tss = String.concat ";" (List.map soTS tss) -#endif - let rec minimalCallPattern callPattern = match callPattern with | [] -> [] @@ -453,7 +415,6 @@ let rec minimalCallPattern callPattern = | tss -> UnknownTS::tss (* non triv tss tail *) | (TupleTS ts)::tss -> TupleTS ts :: minimalCallPattern tss -/// INTERSECTION. /// Combines a list of callpatterns into one common callpattern. let commonCallPattern callPatterns = let rec andCPs cpA cpB = @@ -487,10 +448,9 @@ type TransformedFormal = /// - yb1..ybp - replacement formal choices for x1...xp. /// - transformedVal - replaces f. type Transform = - { transformCallPattern : CallPattern; - transformedFormals : TransformedFormal list; (* REVIEW: could push these to fixup binding site *) - transformedVal : Val; - } + { transformCallPattern : CallPattern + transformedFormals : TransformedFormal list + transformedVal : Val } //------------------------------------------------------------------------- @@ -530,26 +490,10 @@ let mkTransform g (f:Val) m tps x1Ntys rty (callPattern,tyfringes: (TType list * let argtys = tys1r @ tysrN let fCty = mkLambdaTy tps argtys rty let transformedVal = mkLocalVal f.Range (globalNng.FreshCompilerGeneratedName (f.LogicalName,f.Range)) fCty topValInfo - (*dprintf "mkTransform: f=%s\n" (showL (valL f)); - dprintf "mkTransform: tps=%s\n" (showL (commaListL (List.map typarL tps))); - dprintf "mkTransform: callPattern=%s\n" (soCP callPattern); - dprintf "mkTransform: tyfringes=%s\n" (showL (commaListL (List.map (fun fr -> tupleL (List.map typeL fr)) tyfringes))); - dprintf "mkTransform: tys1r=%s\n" (showL (commaListL (List.map typeL tys1r))); - dprintf "mkTransform: tysrN=%s\n" (showL (commaListL (List.map typeL tysrN))); - dprintf "mkTransform: rty =%s\n" ((showType rty)); - *) - { transformCallPattern = callPattern; - transformedFormals = transformedFormals; - transformedVal = transformedVal; - } - -#if DEBUG -open Microsoft.FSharp.Compiler.Layout -let dumpTransform trans = - dprintf " - cp : %s\n - transformedVal : %s\n\n" - (soCP trans.transformCallPattern) - (showL (valL trans.transformedVal)) -#endif + { transformCallPattern = callPattern + transformedFormals = transformedFormals + transformedVal = transformedVal } + //------------------------------------------------------------------------- // transform - vTransforms - support @@ -618,34 +562,23 @@ let decideFormalSuggestedCP g z tys vss = // transform - decideTransform //------------------------------------------------------------------------- -let decideTransform g z v callPatterns (m,tps,vss:Val list list,rty) (* tys are types of outer args *) = +let decideTransform g z v callPatterns (m,tps,vss:Val list list,rty) = let tys = List.map (typeOfLambdaArg m) vss (* arg types *) (* NOTE: 'a in arg types may have been instanced at different tuples... *) (* commonCallPattern has to handle those cases. *) let callPattern = commonCallPattern callPatterns // common CallPattern let callPattern = List.take vss.Length callPattern // restricted to max nArgs - (* NOW: get formal callPattern by defn usage of formals *) + // Get formal callPattern by defn usage of formals let formalCallPattern = decideFormalSuggestedCP g z tys vss let callPattern = List.take callPattern.Length formalCallPattern - // zip with information about known args + // Zip with information about known args let callPattern,tyfringes = zipCallPatternArgTys m g callPattern vss - // drop trivial tail AND + // Drop trivial tail AND let callPattern = minimalCallPattern callPattern - // shorten tyfringes (zippable) + // Shorten tyfringes (zippable) let tyfringes = List.take callPattern.Length tyfringes - (*dprintf "decideTransform: for v=%s\n" (showL (valL v)); - List.iter (fun cp -> dprintf "- site cp = %s\n" (soCP cp)) callPatterns; - dprintf "- common cp = %s\n" (soCP cp); - dprintf "- front cp = %s\n" (soCP cp); - dprintf "- arg tys = %s\n" (showL (commaListL (List.map typeL tys))); - dprintf "- formalCallPattern = %s\n" (soCP formalCallPattern); - dprintf "- front formalCallPattern = %s\n" (soCP cp); - dprintf "- zipped cp = %s\n" (soCP cp); - dprintf "- tyfringes = %s\n" (showL (commaListL (List.map (List.length >> intL) tyfringes))); - dprintf "- minimal cp = %s\n\n" (soCP cp); - *) if isTrivialCP callPattern then - None (* no transform *) + None // no transform else Some (v,mkTransform g v m tps tys rty (callPattern,tyfringes)) @@ -670,9 +603,9 @@ let eligibleVal g (v:Val) = let determineTransforms g (z : GlobalUsageAnalysis.Results) = let selectTransform f sites = if not (eligibleVal g f) then None else - (* consider f, if it has top-level lambda (meaning has term args) *) + // Consider f, if it has top-level lambda (meaning has term args) match Zmap.tryFind f z.Defns with - | None -> None (* no binding site, so no transform *) + | None -> None // no binding site, so no transform | Some e -> let tps,vss,_b,rty = stripTopLambda (e,f.Type) match List.concat vss with @@ -686,12 +619,6 @@ let determineTransforms g (z : GlobalUsageAnalysis.Results) = let vtransforms = Zmap.ofList valOrder vtransforms vtransforms -#if DEBUG -let dumpVTransform v tr = - dprintf "Transform for %s\n" (showL (valL v)); - dumpTransform tr; - stdout.Flush() -#endif //------------------------------------------------------------------------- @@ -699,10 +626,10 @@ let dumpVTransform v tr = //------------------------------------------------------------------------- type penv = - { transforms : Zmap; (* planned transforms *) - ccu : CcuThunk; - g : Env.TcGlobals; - } + { // The planned transforms + transforms : Zmap + ccu : CcuThunk + g : TcGlobals } let hasTransfrom penv f = Zmap.tryFind f penv.transforms @@ -716,9 +643,11 @@ let hasTransfrom penv f = Zmap.tryFind f penv.transforms - also factor buildProjections, so they share common tmps. *) -type env = {eg : TcGlobals; - prefix : string; - m : Range.range; } +type env = + { eg : TcGlobals + prefix : string + m : Range.range } + let suffixE env s = {env with prefix = env.prefix ^ s} let rangeE env m = {env with m = m} @@ -892,15 +821,16 @@ let passBinds penv binds = binds |> FlatList.map (passBind penv) // 3. run pass over following code. //------------------------------------------------------------------------- -let passBindRhs _penv conv (TBind (v,repr,letSeqPtOpt)) = TBind(v,conv repr,letSeqPtOpt) +let passBindRhs conv (TBind (v,repr,letSeqPtOpt)) = TBind(v,conv repr,letSeqPtOpt) + let preInterceptExpr (penv:penv) conv expr = match expr with | Expr.LetRec (binds,e,m,_) -> - let binds = FlatList.map (passBindRhs penv conv) binds + let binds = FlatList.map (passBindRhs conv) binds let binds = passBinds penv binds Some (mkLetRecBinds m binds (conv e)) | Expr.Let (bind,e,m,_) -> - let bind = passBindRhs penv conv bind + let bind = passBindRhs conv bind let bind = passBind penv bind Some (mkLetBind m bind (conv e)) | TyappAndApp(f,fty,tys,args,m) -> @@ -926,9 +856,9 @@ let postTransformExpr (penv:penv) expr = let passImplFile penv ass = - ass |> RewriteImplFile {PreIntercept =None (* Some (preInterceptExpr penv) *); + ass |> RewriteImplFile {PreIntercept =None PreInterceptBinding=None - PostTransform= postTransformExpr penv (* (fun _ -> None) *); + PostTransform= postTransformExpr penv IsUnderQuotations=false } @@ -942,17 +872,7 @@ let DetupleImplFile ccu g expr = // For each Val, decide Some "transform", or None if not changing let vtrans = determineTransforms g z -#if DEBUG - // Diagnostics - summary of planned transforms - if verbose then dprintf "note: detuple - %d functions transformed\n" (List.length (Zmap.keys vtrans)); - if verbose then Zmap.iter dumpVTransform vtrans; -#endif - - (* Pass over term, rewriting bindings and fixing up call sites, under penv *) + // Pass over term, rewriting bindings and fixing up call sites, under penv let penv = {g=g; transforms = vtrans; ccu = ccu} - if verbose then dprintTerm "DetupleAssembly before:" expr; - if verbose then dprintf "DetupleAssembly: pass\n"; let expr = passImplFile penv expr - if verbose then dprintTerm "DetupleAssembly after:" expr; - if verbose then dprintf "DetupleAssembly: done\n"; expr diff --git a/src/fsharp/detuple.fsi b/src/fsharp/DetupleArgs.fsi similarity index 79% rename from src/fsharp/detuple.fsi rename to src/fsharp/DetupleArgs.fsi index 254e887bcf5..47ac4cb6c33 100644 --- a/src/fsharp/detuple.fsi +++ b/src/fsharp/DetupleArgs.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.Detuple @@ -7,11 +7,12 @@ open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals (* detuple pass: *) -val DetupleImplFile : CcuThunk -> Env.TcGlobals -> TypedImplFile -> TypedImplFile +val DetupleImplFile : CcuThunk -> TcGlobals -> TypedImplFile -> TypedImplFile module GlobalUsageAnalysis = val GetValsBoundInExpr : Expr -> Zset @@ -35,4 +36,4 @@ module GlobalUsageAnalysis = /// top of expr toplevel? (true) IterationIsAtTopLevel : bool; } - val GetUsageInfoOfImplFile : Env.TcGlobals -> TypedImplFile -> Results + val GetUsageInfoOfImplFile : TcGlobals -> TypedImplFile -> Results diff --git a/src/fsharp/ErrorLogger.fs b/src/fsharp/ErrorLogger.fs old mode 100644 new mode 100755 index f55cd3acc69..7d9a5bf3cce --- a/src/fsharp/ErrorLogger.fs +++ b/src/fsharp/ErrorLogger.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.ErrorLogger @@ -37,9 +37,10 @@ let rec findOriginalException err = | _ -> err -/// Thrown when we stop processing the F# Interactive interactive entry or #load. -exception StopProcessing - +/// Thrown when we stop processing the F# Interactive entry or #load. +exception StopProcessingExn of exn option +let (|StopProcessing|_|) exn = match exn with StopProcessingExn _ -> Some () | _ -> None +let StopProcessing<'T> = StopProcessingExn None (* common error kinds *) exception NumberedError of (int * string) * range with // int is e.g. 191 in FS0191 @@ -73,6 +74,13 @@ let inline protectAssemblyExploration dflt f = | UnresolvedPathReferenceNoRange _ -> dflt | _ -> reraise() +let inline protectAssemblyExplorationF dflt f = + try + f() + with + | UnresolvedPathReferenceNoRange (asmName, path) -> dflt(asmName,path) + | _ -> reraise() + let inline protectAssemblyExplorationNoReraise dflt1 dflt2 f = try f() @@ -381,7 +389,7 @@ let report f = let deprecatedWithError s m = errorR(Deprecated(s,m)) -// Note: global state, but only for compiling FSHarp.Core.dll +// Note: global state, but only for compiling FSharp.Core.dll let mutable reportLibraryOnlyFeatures = true let libraryOnlyError m = if reportLibraryOnlyFeatures then errorR(LibraryUseOnly(m)) let libraryOnlyWarning m = if reportLibraryOnlyFeatures then warning(LibraryUseOnly(m)) diff --git a/src/fsharp/ExtensibleDumper.fs b/src/fsharp/ExtensibleDumper.fs deleted file mode 100644 index 8415ad4596c..00000000000 --- a/src/fsharp/ExtensibleDumper.fs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Internal.Utilities.Diagnostic -open System -open System.Diagnostics -open System.Reflection -open System.Collections.Generic - -#if EXTENSIBLE_DUMPER -#if DEBUG - -type internal ExtensibleDumper(x:obj) = - static let mutable dumpers = new Dictionary() - - [] - member self.Debug = ExtensibleDumper.Dump(x) - - static member Dump(o:obj) : string = - if o = null then "null" - else - let dumpeeType = o.GetType() - - let DeriveDumperName(dumpeeType:Type) = - "Internal.Utilities.Diagnostic." + dumpeeType.Name + "Dumper" - - match dumpers.TryGetValue(dumpeeType) with - | true, Some(dumperType, methodInfo) -> - try - let dumper = Activator.CreateInstance(dumperType,[| o |]) - let result = methodInfo.Invoke(dumper, [||]) - downcast result - with e -> "Exception during dump: "+e.Message - | true, None -> - "There is no dumper named "+(DeriveDumperName dumpeeType)+" with single constructor that takes "+dumpeeType.Name+" and property named Dump." - | false, _ -> - let TryAdd(dumpeeType:Type) = - let dumperDerivedName = DeriveDumperName(dumpeeType) - let dumperAssembly = dumpeeType.Assembly // Dumper must live in the same assembly as dumpee - let dumperType = dumperAssembly.GetType(dumperDerivedName, (*throwOnError*)false) - if dumperType <> null then - let dumpMethod = dumperType.GetMethod("ToString") - if dumpMethod <> null then - let constructors = dumperType.GetConstructors() - if constructors.Length = 1 then - let constr = constructors.[0] - let parameters = constr.GetParameters() - if parameters.Length = 1 then - dumpers.[o.GetType()] <- Some(dumperType,dumpMethod) - dumpers.ContainsKey(o.GetType()) - - if (not(TryAdd(o.GetType()))) then - if (not(TryAdd(o.GetType().BaseType))) then - dumpers.[dumpeeType] <- None - ExtensibleDumper.Dump(o) // Show the message - - - - -#endif -#endif diff --git a/src/fsharp/ExtensibleDumper.fsi b/src/fsharp/ExtensibleDumper.fsi deleted file mode 100644 index be32bd56542..00000000000 --- a/src/fsharp/ExtensibleDumper.fsi +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Internal.Utilities.Diagnostic -open System -open System.Diagnostics -open System.Reflection -open System.Collections.Generic - -#if EXTENSIBLE_DUMPER -#if DEBUG - -type internal ExtensibleDumper = - class - new : x:obj -> ExtensibleDumper - member Debug : string - static member Dump : o:obj -> string - end - -#endif -#endif diff --git a/src/fsharp/est.fs b/src/fsharp/ExtensionTyping.fs old mode 100644 new mode 100755 similarity index 81% rename from src/fsharp/est.fs rename to src/fsharp/ExtensionTyping.fs index 59e513ebc09..747fc5ba0f2 --- a/src/fsharp/est.fs +++ b/src/fsharp/ExtensionTyping.fs @@ -1,9 +1,11 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Type providers, validation of provided types, etc. namespace Microsoft.FSharp.Compiler +#if EXTENSIONTYPING + module internal ExtensionTyping = open System open System.IO @@ -15,208 +17,6 @@ module internal ExtensionTyping = open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics // dprintfn open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library // frontAndBack - open Internal.Utilities.FileSystem - -#if TYPE_PROVIDER_SECURITY - module internal GlobalsTheLanguageServiceCanPoke = - //+++ GLOBAL STATE - // This is the LS dialog, it is only poked once, when the LS is first constructed. It lives here so the compiler can invoke it at the right moment in time. - let mutable displayLSTypeProviderSecurityDialogBlockingUI = None : (string -> unit) option - // This is poked by the LS (service.fs:UntypedParseImpl) and read later when the LS dialog pops up (code in servicem.fs:CreateService), called via displayLSTypeProviderSecurityDialogBlockingUI. - // It would be complicated to plumb this info through end-to-end, so we use a global. Since the LS only checks one file at a time, it is safe from race conditions. - let mutable theMostRecentFileNameWeChecked = None : string option - - module internal ApprovalIO = - - /// The absolute path name to where approvals are stored - let ApprovalsAbsoluteFileName = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData), @"Microsoft\VisualStudio\12.0\type-providers.txt") - - /// Canonicalize the name of a type provider component - let partiallyCanonicalizeFileName fn = - (new FileInfo(fn)).FullName // avoid some trivialities like double backslashes or spaces before slashes (but preserves others like casing distinctions), see also bug 206595 - - /// Check a type provider component name is partially canonicalized - let verifyIsPartiallyCanonicalized fn = - assert (partiallyCanonicalizeFileName fn = fn) - fn - - /// Represents the approvals status for one type provider - [] - type TypeProviderApprovalStatus = - | NotTrusted of string - | Trusted of string - - member this.FileName = - match this with - | NotTrusted(fn) -> verifyIsPartiallyCanonicalized fn - | Trusted(fn) -> verifyIsPartiallyCanonicalized fn - - member this.isTrusted = - match this with - | NotTrusted _ -> false - | Trusted _ -> true - - /// Try to perform the operation on a stream obtained by opening a file, using an exclusive lock - let TryDoWithFileStreamUnderExclusiveLock(filename, f) = - use file = File.Open(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite) - file.Lock(0L, 0L) - f file - - /// Try to perform the operation on a stream obtained by opening a file, using an exclusive lock, - /// retrying 5 times with 100ms sleeps in between. Throw System.IO.IOException if it fails after that. - let TryDoWithFileStreamUnderExclusiveLockWithRetryFor500ms(filename, f) = - let SLEEP_PER_TRY = 100 - let MAX_TRIES = 5 - let mutable retryCount = 0 - let mutable ok = false - let mutable result = Unchecked.defaultof<_> - while not(ok) do - try - let r = TryDoWithFileStreamUnderExclusiveLock(filename, f) - ok <- true - result <- r - with - | :? IOException when retryCount < MAX_TRIES -> - retryCount <- retryCount + 1 - System.Threading.Thread.Sleep(SLEEP_PER_TRY) - result - - /// Try to do an operation on the type-provider approvals file - let DoWithApprovalsFile (fileStreamOpt : FileStream option) f = - match fileStreamOpt with - | None -> - if not(FileSystem.SafeExists(ApprovalsAbsoluteFileName)) then - assert(fileStreamOpt = None) - let directoryName = Path.GetDirectoryName(ApprovalsAbsoluteFileName) - if not(Directory.Exists(directoryName)) then - Directory.CreateDirectory(directoryName) |> ignore // this creates multiple directory levels if needed - TryDoWithFileStreamUnderExclusiveLockWithRetryFor500ms(ApprovalsAbsoluteFileName, fun file -> - let text = -#if DEBUG - String.Join(System.Environment.NewLine, - ["""# This file is normally edited by Visual Studio, via Tools\Options\F# Tools\Type Provider Approvals""" - """# or by referencing a Type Provider from F# code for the first time.""" - """# Each line should be one of these general forms:""" - """# NOT_TRUSTED c:\path\filename.dll""" - """# TRUSTED c:\path\filename.dll""" - """# Lines starting with a '#' are ignored as comments.""" ]) + System.Environment.NewLine -#else - "" -#endif - let bytes = System.Text.Encoding.UTF8.GetBytes(text) - file.Write(bytes, 0, bytes.Length) - f file) - else - TryDoWithFileStreamUnderExclusiveLockWithRetryFor500ms(ApprovalsAbsoluteFileName, f) - | Some fs -> f fs - - /// Read all TP approval data. does not throw, will swallow exceptions and return empty list if there's trouble. - let ReadApprovalsFile fileStreamOpt = - try - DoWithApprovalsFile fileStreamOpt (fun file -> - file.Seek(0L, SeekOrigin.Begin) |> ignore - let sr = new StreamReader(file, System.Text.Encoding.UTF8) // Note: we use 'let', not 'use' here, as closing the reader would close the file, and we don't want that - let lines = - let text = sr.ReadToEnd() - text.Split([| System.Environment.NewLine |], StringSplitOptions.RemoveEmptyEntries) - |> Array.filter (fun s -> not(s.StartsWith("#"))) - let result = ResizeArray() - let mutable bad = false - for s in lines do - if s.StartsWith("NOT_TRUSTED ") then - let partiallyCanonicalizedFileName = partiallyCanonicalizeFileName(s.Substring(12)) - match result |> Seq.tryFind (fun r -> String.Compare(r.FileName, partiallyCanonicalizedFileName, StringComparison.CurrentCultureIgnoreCase) = 0) with - | None -> - result.Add(TypeProviderApprovalStatus.NotTrusted(partiallyCanonicalizedFileName)) - | Some r -> // there is another line of the file with the same filename - if r.isTrusted then - bad <- true // if conflicting status, then declare the file to be bad; if just duplicating same info, is ok - elif s.StartsWith("TRUSTED ") then - let partiallyCanonicalizedFileName = partiallyCanonicalizeFileName(s.Substring(8)) - match result |> Seq.tryFind (fun r -> String.Compare(r.FileName, partiallyCanonicalizedFileName, StringComparison.CurrentCultureIgnoreCase) = 0) with - | None -> - result.Add(TypeProviderApprovalStatus.Trusted(partiallyCanonicalizedFileName)) - | Some r -> // there is another line of the file with the same filename - if not r.isTrusted then - bad <- true // if conflicting status, then declare the file to be bad; if just duplicating same info, is ok - else - bad <- true - - if bad then - // The file is corrupt, just delete it - file.SetLength(0L) - result.Clear() - try - failwith "approvals file is corrupt, deleting" // just to produce a first-chance exception for debugging - with - _ -> () - result |> List.ofSeq) - with - | :? System.IO.IOException -> - [] - | e -> - System.Diagnostics.Debug.Assert(false, e.ToString()) // what other exceptions might occur? - [] - - /// Append one piece of TP approval info. may throw if trouble with file IO. - let AppendApprovalStatus fileStreamOpt (status:TypeProviderApprovalStatus) = - let ok,line = - let partiallyCanonicalizedFileName = partiallyCanonicalizeFileName status.FileName - match status with - | TypeProviderApprovalStatus.NotTrusted(_) -> - if Path.IsInvalidPath(partiallyCanonicalizedFileName) then - assert(false) - false, "" - else - true, "NOT_TRUSTED "+partiallyCanonicalizedFileName - | TypeProviderApprovalStatus.Trusted(_) -> - if Path.IsInvalidPath(partiallyCanonicalizedFileName) then - assert(false) - false, "" - else - true, "TRUSTED "+partiallyCanonicalizedFileName - if ok then - DoWithApprovalsFile fileStreamOpt (fun file -> - let bytes = System.Text.Encoding.UTF8.GetBytes(line + System.Environment.NewLine) - file.Seek(0L, SeekOrigin.End) |> ignore - file.Write(bytes, 0, bytes.Length) - ) - - /// Replace one piece of TP approval info. May throw if trouble with file IO. - let ReplaceApprovalStatus fileStreamOpt (status : TypeProviderApprovalStatus) = - let partiallyCanonicalizedFileName = partiallyCanonicalizeFileName status.FileName - DoWithApprovalsFile fileStreamOpt (fun file -> - let priorApprovals = ReadApprovalsFile(Some file) - let keepers = priorApprovals |> List.filter (fun app -> String.Compare(app.FileName, partiallyCanonicalizedFileName, StringComparison.CurrentCultureIgnoreCase) <> 0) - file.SetLength(0L) // delete file - keepers |> List.iter (AppendApprovalStatus (Some file)) - AppendApprovalStatus (Some file) status - ) - - module internal ApprovalsChecking = - - let DiscoverIfIsApprovedAndPopupDialogIfUnknown (runTimeAssemblyFileName : string, approvals : ApprovalIO.TypeProviderApprovalStatus list, popupDialogCallback : (string->unit) option) : bool = - let partiallyCanonicalizedFileName = ApprovalIO.partiallyCanonicalizeFileName runTimeAssemblyFileName - - match approvals |> List.tryFind (function - | ApprovalIO.TypeProviderApprovalStatus.Trusted(s) -> String.Compare(partiallyCanonicalizedFileName,s,StringComparison.CurrentCultureIgnoreCase)=0 - | ApprovalIO.TypeProviderApprovalStatus.NotTrusted(s) -> String.Compare(partiallyCanonicalizedFileName,s,StringComparison.CurrentCultureIgnoreCase)=0) with - | Some(ApprovalIO.TypeProviderApprovalStatus.Trusted _) -> true - | Some(ApprovalIO.TypeProviderApprovalStatus.NotTrusted _) -> false - | None -> - // This assembly is unknown. If we're in VS, pop up the dialog - match popupDialogCallback with - | None -> () - | Some callback -> - // The callback had UI thread affinity. But this code path runs as part of the VS background interactive checker, which must never block on the UI - // thread (or else it may deadlock, see bug 380608). - System.Threading.ThreadPool.QueueUserWorkItem(fun _ -> - // the callback will pop up the dialog - callback(runTimeAssemblyFileName) - ) |> ignore - // Behave like a 'NotTrusted'. If the user trusts the assembly via the UI in a moment, the callback is responsible for requesting a re-typecheck. - false -#endif type TypeProviderDesignation = TypeProviderDesignation of string @@ -269,7 +69,7 @@ module internal ExtensionTyping = else loadFromGac() - // If we've find a desing-time assembly, look for the public types with TypeProviderAttribute + // If we've find a design-time assembly, look for the public types with TypeProviderAttribute match designTimeAssemblyOpt with | Some loadedDesignTimeAssembly -> try @@ -284,6 +84,12 @@ module internal ExtensionTyping = raiseError e | None -> [] + let StripException (e:exn) = + match e with + | :? TargetInvocationException as e -> e.InnerException + | :? TypeInitializationException as e -> e.InnerException + | _ -> e + /// Create an instance of a type provider from the implementation type for the type provider in the /// design-time assembly by using reflection-invoke on a constructor for the type provider. let CreateTypeProvider (typeProviderImplementationType:System.Type, @@ -301,12 +107,7 @@ module internal ExtensionTyping = try f () with err -> - let strip (e:exn) = - match e with - | :? TargetInvocationException as e -> e.InnerException - | :? TypeInitializationException as e -> e.InnerException - | _ -> e - let e = strip (strip err) + let e = StripException (StripException err) raise (TypeProviderError(FSComp.SR.etTypeProviderConstructorException(e.Message), typeProviderImplementationType.FullName, m)) if typeProviderImplementationType.GetConstructor([| typeof |]) <> null then @@ -331,12 +132,7 @@ module internal ExtensionTyping = raise (TypeProviderError(FSComp.SR.etProviderDoesNotHaveValidConstructor(), typeProviderImplementationType.FullName, m)) let GetTypeProvidersOfAssembly - (displayPSTypeProviderSecurityDialogBlockingUI : (string->unit) option, - validateTypeProviders:bool, -#if TYPE_PROVIDER_SECURITY - approvals, -#endif - runTimeAssemblyFileName:string, + (runTimeAssemblyFileName:string, ilScopeRefOfRuntimeAssembly:ILScopeRef, designTimeAssemblyNameString:string, resolutionEnvironment:ResolutionEnvironment, @@ -346,53 +142,34 @@ module internal ExtensionTyping = systemRuntimeAssemblyVersion : System.Version, m:range) = - let ok = -#if TYPE_PROVIDER_SECURITY - if not validateTypeProviders then - true // if not validating, then everything is ok - else - // pick the PS dialog if available (if so, we are definitely being called from a 'Build' from the PS), else use the LS one if available - let dialog = match displayPSTypeProviderSecurityDialogBlockingUI with - | None -> GlobalsTheLanguageServiceCanPoke.displayLSTypeProviderSecurityDialogBlockingUI - | _ -> displayPSTypeProviderSecurityDialogBlockingUI - let r = ApprovalsChecking.DiscoverIfIsApprovedAndPopupDialogIfUnknown(runTimeAssemblyFileName, approvals, dialog) - if not r then - warning(Error(FSComp.SR.etTypeProviderNotApproved(runTimeAssemblyFileName), m)) - r -#else - true -#endif let providerSpecs = - if ok then - try - let designTimeAssemblyName = - try - Some (AssemblyName designTimeAssemblyNameString) - with :? ArgumentException -> - errorR(Error(FSComp.SR.etInvalidTypeProviderAssemblyName(runTimeAssemblyFileName,designTimeAssemblyNameString),m)) - None - - [ match designTimeAssemblyName,resolutionEnvironment.outputFile with - | Some designTimeAssemblyName, Some path when String.Compare(designTimeAssemblyName.Name, Path.GetFileNameWithoutExtension path, StringComparison.OrdinalIgnoreCase) = 0 -> - () - | Some _, _ -> - for t in GetTypeProviderImplementationTypes (runTimeAssemblyFileName,designTimeAssemblyNameString,m) do - let resolver = CreateTypeProvider (t, runTimeAssemblyFileName, resolutionEnvironment, isInvalidationSupported, isInteractive, systemRuntimeContainsType, systemRuntimeAssemblyVersion, m) - match box resolver with - | null -> () - | _ -> yield (resolver,ilScopeRefOfRuntimeAssembly) - | None, _ -> - () ] - - with :? TypeProviderError as tpe -> - tpe.Iter(fun e -> errorR(NumberedError((e.Number,e.ContextualErrorMessage),m)) ) - [] - else + try + let designTimeAssemblyName = + try + Some (AssemblyName designTimeAssemblyNameString) + with :? ArgumentException -> + errorR(Error(FSComp.SR.etInvalidTypeProviderAssemblyName(runTimeAssemblyFileName,designTimeAssemblyNameString),m)) + None + + [ match designTimeAssemblyName,resolutionEnvironment.outputFile with + | Some designTimeAssemblyName, Some path when String.Compare(designTimeAssemblyName.Name, Path.GetFileNameWithoutExtension path, StringComparison.OrdinalIgnoreCase) = 0 -> + () + | Some _, _ -> + for t in GetTypeProviderImplementationTypes (runTimeAssemblyFileName,designTimeAssemblyNameString,m) do + let resolver = CreateTypeProvider (t, runTimeAssemblyFileName, resolutionEnvironment, isInvalidationSupported, isInteractive, systemRuntimeContainsType, systemRuntimeAssemblyVersion, m) + match box resolver with + | null -> () + | _ -> yield (resolver,ilScopeRefOfRuntimeAssembly) + | None, _ -> + () ] + + with :? TypeProviderError as tpe -> + tpe.Iter(fun e -> errorR(NumberedError((e.Number,e.ContextualErrorMessage),m)) ) [] let providers = Tainted<_>.CreateAll(providerSpecs) - ok,providers + providers let unmarshal (t:Tainted<_>) = t.PUntaintNoFailure id @@ -456,7 +233,7 @@ module internal ExtensionTyping = // We do _not_ rely on object identity or any other notion of equivalence provided by System.Type // itself. The mscorlib implementations of System.Type equality relations are not suitable: for // example RuntimeType overrides the equality relation to be reference equality for the Equals(object) - // override, but the other subtypes of System.Type do not, making the relation non-reflecive. + // override, but the other subtypes of System.Type do not, making the relation non-reflective. // // Further, avoiding reliance on canonicalization (UnderlyingSystemType) or System.Type object identity means that // providers can implement wrap-and-filter "views" over existing System.Type clusters without needing @@ -629,7 +406,7 @@ module internal ExtensionTyping = let namedArgs = a.NamedArguments |> Seq.toList - |> List.map (fun arg -> arg.MemberName, match arg.TypedValue with Arg null -> None | Arg obj -> Some obj | _ -> None) + |> List.map (fun arg -> arg.MemberInfo.Name, match arg.TypedValue with Arg null -> None | Arg obj -> Some obj | _ -> None) ctorArgs, namedArgs) member __.GetHasTypeProviderEditorHideMethodsAttribute provider = @@ -745,7 +522,9 @@ module internal ExtensionTyping = // To allow a type provider to depend only on FSharp.Core 4.3.0.0, it can alternatively implement an appropriate method called GetStaticParametersForMethod let meth = provider.GetType().GetMethod( "GetStaticParametersForMethod", bindingFlags, null, [| typeof |], null) if isNull meth then [| |] else - let paramsAsObj = meth.Invoke(provider, bindingFlags ||| BindingFlags.InvokeMethod, null, [| box x |], null) + let paramsAsObj = + try meth.Invoke(provider, bindingFlags ||| BindingFlags.InvokeMethod, null, [| box x |], null) + with err -> raise (StripException (StripException err)) paramsAsObj :?> ParameterInfo[] staticParams |> ProvidedParameterInfo.CreateArray ctxt @@ -763,7 +542,10 @@ module internal ExtensionTyping = match meth with | null -> failwith (FSComp.SR.estApplyStaticArgumentsForMethodNotImplemented()) | _ -> - let mbAsObj = meth.Invoke(provider, bindingFlags ||| BindingFlags.InvokeMethod, null, [| box x; box fullNameAfterArguments; box staticArgs |], null) + let mbAsObj = + try meth.Invoke(provider, bindingFlags ||| BindingFlags.InvokeMethod, null, [| box x; box fullNameAfterArguments; box staticArgs |], null) + with err -> raise (StripException (StripException err)) + match mbAsObj with | :? MethodBase as mb -> mb | _ -> failwith (FSComp.SR.estApplyStaticArgumentsForMethodNotImplemented()) @@ -793,6 +575,8 @@ module internal ExtensionTyping = member __.IsFamilyAndAssembly = x.IsFamilyAndAssembly override __.Equals y = assert false; match y with :? ProvidedFieldInfo as y -> x.Equals y.Handle | _ -> false override __.GetHashCode() = assert false; x.GetHashCode() + static member TaintedEquals (pt1:Tainted, pt2:Tainted) = + Tainted.EqTainted (pt1.PApplyNoFailure(fun st -> st.Handle)) (pt2.PApplyNoFailure(fun st -> st.Handle)) @@ -1066,7 +850,7 @@ module internal ExtensionTyping = let path = String.Join(".",path) errorR(Error(FSComp.SR.etProvidedTypeHasUnexpectedPath(expectedPath,path), m)) - /// Eagerly validate a range of conditions on a provided type, after static instantiation (if any) has occured + /// Eagerly validate a range of conditions on a provided type, after static instantiation (if any) has occurred let ValidateProvidedTypeAfterStaticInstantiation(m,st:Tainted, expectedPath : string[], expectedName : string) = // Do all the calling into st up front with recovery let fullName, namespaceName, usedMembers = @@ -1443,3 +1227,4 @@ module internal ExtensionTyping = let IsGeneratedTypeDirectReference (st: Tainted, m) = st.PUntaint((fun st -> st.TryGetTyconRef() |> isNone), m) +#endif diff --git a/src/fsharp/est.fsi b/src/fsharp/ExtensionTyping.fsi old mode 100644 new mode 100755 similarity index 90% rename from src/fsharp/est.fsi rename to src/fsharp/ExtensionTyping.fsi index e2959ff1bce..fe6af10bdcf --- a/src/fsharp/est.fsi +++ b/src/fsharp/ExtensionTyping.fsi @@ -1,9 +1,11 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Extension typing, validation of extension types, etc. namespace Microsoft.FSharp.Compiler +#if EXTENSIONTYPING + module internal ExtensionTyping = open System @@ -13,37 +15,6 @@ module internal ExtensionTyping = open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Range -#if TYPE_PROVIDER_SECURITY - // These global variables are used by the VS language service for the type provider security dialog - module internal GlobalsTheLanguageServiceCanPoke = - //+++ GLOBAL STATE - val mutable displayLSTypeProviderSecurityDialogBlockingUI : (string->unit) option - val mutable theMostRecentFileNameWeChecked : string option - - module internal ApprovalIO = - - val partiallyCanonicalizeFileName : string -> string - - /// location of approvals data file, e.g. C:\Users\username\AppData\Local\Microsoft\VisualStudio\14.0\type-providers.txt - val ApprovalsAbsoluteFileName : string - - [] - type TypeProviderApprovalStatus = - /// NotTrusted(absoluteFileName) - | NotTrusted of string - /// Trusted(absoluteFileName) - | Trusted of string - - /// Try to do an operation on the type-provider approvals file - val DoWithApprovalsFile : FileStream option -> (FileStream -> 'a) -> 'a - - /// Read all TP approval data. does not throw, will swallow exceptions and return empty list if there's trouble. - val ReadApprovalsFile : FileStream option -> TypeProviderApprovalStatus list - - /// Replace one piece of TP approval info (or append it, if this is a new filename). may throw if trouble with file IO. - val ReplaceApprovalStatus : FileStream option -> TypeProviderApprovalStatus -> unit -#endif - type TypeProviderDesignation = TypeProviderDesignation of string /// Raised when a type provider has thrown an exception. @@ -71,12 +42,7 @@ module internal ExtensionTyping = /// Find and instantiate the set of ITypeProvider components for the given assembly reference val GetTypeProvidersOfAssembly : - displayPSTypeProviderSecurityDialogBlockingUI : (string->unit) option - * validateTypeProviders: bool -#if TYPE_PROVIDER_SECURITY - * ApprovalIO.TypeProviderApprovalStatus list -#endif - * runtimeAssemblyFilename: string + runtimeAssemblyFilename: string * ilScopeRefOfRuntimeAssembly:ILScopeRef * designerAssemblyName: string * ResolutionEnvironment @@ -84,7 +50,7 @@ module internal ExtensionTyping = * isInteractive: bool * systemRuntimeContainsType : (string -> bool) * systemRuntimeAssemblyVersion : System.Version - * range -> bool * Tainted list + * range -> Tainted list /// Given an extension type resolver, supply a human-readable name suitable for error messages. val DisplayNameOfTypeProvider : Tainted * range -> string @@ -244,6 +210,7 @@ module internal ExtensionTyping = member IsFamilyAndAssembly : bool member IsFamilyOrAssembly : bool member IsPrivate : bool + static member TaintedEquals : Tainted * Tainted -> bool and [] ProvidedPropertyInfo = @@ -403,3 +370,5 @@ module internal ExtensionTyping = /// Check if this is a direct reference to a non-embedded generated type. This is not permitted at any name resolution. /// We check by seeing if the type is absent from the remapping context. val IsGeneratedTypeDirectReference : Tainted * range -> bool + +#endif diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index f6ed2fdbdf4..ab16418c8b9 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1,4 +1,6 @@ -# Old-style error strings getting moved over +# ----------------------------------------------------------------------------- +# use a completely new error number and add new messages at the end of the file +# ----------------------------------------------------------------------------- undefinedNameNamespace,"The namespace '%s' is not defined" undefinedNameNamespaceOrModule,"The namespace or module '%s' is not defined" undefinedNameFieldConstructorOrMember,"The field, constructor or member '%s' is not defined" @@ -11,9 +13,6 @@ undefinedNameRecordLabelOrNamespace,"The record label or namespace '%s' is not d undefinedNameRecordLabel,"The record label '%s' is not defined" undefinedNameTypeParameter,"The type parameter '%s' is not defined" undefinedNamePatternDiscriminator,"The pattern discriminator '%s' is not defined" -# ----------------------------------------------------------------------------- -# build.fs -# ----------------------------------------------------------------------------- buildUnexpectedTypeArgs,"The non-generic type '%s' does not expect any type arguments, but here is given %d type argument(s)" 203,buildInvalidWarningNumber,"Invalid warning number '%s'" 204,buildInvalidVersionString,"Invalid version string '%s'" @@ -58,22 +57,13 @@ buildCouldNotReadVersionInfoFromMscorlib,"Could not read version from mscorlib.d 242,buildArgInvalidFloat,"'%s' is not a valid floating point argument" 243,buildUnrecognizedOption,"Unrecognized option: '%s'" 244,buildInvalidModuleOrNamespaceName,"Invalid module or namespace name" -# ----------------------------------------------------------------------------- -# pickle.fs -# ----------------------------------------------------------------------------- pickleErrorReadingWritingMetadata,"Error reading/writing metadata for the F# compiled DLL '%s'. Was the DLL compiled with an earlier version of the F# compiler? (error: '%s')." -# ----------------------------------------------------------------------------- -# tast.fs -# ----------------------------------------------------------------------------- 245,tastTypeOrModuleNotConcrete,"The type/module '%s' is not a concrete module or type" tastTypeHasAssemblyCodeRepresentation,"The type '%s' has an inline assembly code representation" 247,tastNamespaceAndModuleWithSameNameInAssembly,"A namespace and a module named '%s' both occur in two parts of this assembly" 248,tastTwoModulesWithSameNameInAssembly,"Two modules named '%s' occur in two parts of this assembly" 249,tastDuplicateTypeDefinitionInAssembly,"Two type definitions named '%s' occur in namespace '%s' in two parts of this assembly" 250,tastConflictingModuleAndTypeDefinitionInAssembly,"A module and a type definition named '%s' occur in namespace '%s' in two parts of this assembly" -# ----------------------------------------------------------------------------- -# tastops.fs -# ----------------------------------------------------------------------------- 251,tastInvalidMemberSignature,"Invalid member signature encountered because of an earlier error" 252,tastValueDoesNotHaveSetterType,"This value does not have a valid property setter type" 253,tastInvalidFormForPropertyGetter,"Invalid form for a property getter. At least one '()' argument is required when using the explicit syntax." @@ -90,9 +80,6 @@ tastUnexpectedDecodeOfInternalsVisibleToAttribute,"Unexpected decode of Internal tastUnexpectedDecodeOfInterfaceDataVersionAttribute,"Unexpected decode of InterfaceDataVersionAttribute" 265,tastActivePatternsLimitedToSeven,"Active patterns cannot return more than 7 possibilities" 267,tastNotAConstantExpression,"This is not a valid constant expression or custom attribute value" -# ----------------------------------------------------------------------------- -# typrelns.fs -# ----------------------------------------------------------------------------- ValueNotContainedMutabilityAttributesDiffer,"Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe mutability attributes differ" ValueNotContainedMutabilityNamesDiffer,"Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe names differ" ValueNotContainedMutabilityCompiledNamesDiffer,"Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe compiled names differ" @@ -198,16 +185,10 @@ ExceptionDefsNotCompatibleFieldOrderDiffers,"The exception definitions are not c 368,typrelMemberDoesNotHaveCorrectNumberOfTypeParameters,"The member '%s' does not have the correct number of method type parameters. The required signature is '%s'." 369,typrelMemberDoesNotHaveCorrectKindsOfGenericParameters,"The member '%s' does not have the correct kinds of generic parameters. The required signature is '%s'." 370,typrelMemberCannotImplement,"The member '%s' cannot be used to implement '%s'. The required signature is '%s'." -# ----------------------------------------------------------------------------- -# ast.fs errors -# ----------------------------------------------------------------------------- 371,astParseEmbeddedILError,"Error while parsing embedded IL" 372,astParseEmbeddedILTypeError,"Error while parsing embedded IL type" astDeprecatedIndexerNotation,"This indexer notation has been removed from the F# language" 374,astInvalidExprLeftHandOfAssignment,"Invalid expression on left of assignment" -# ----------------------------------------------------------------------------- -# augment.fs errors -# ----------------------------------------------------------------------------- 376,augNoRefEqualsOnStruct,"The 'ReferenceEquality' attribute cannot be used on structs. Consider using the 'StructuralEquality' attribute instead, or implement an override for 'System.Object.Equals(obj)'." 377,augInvalidAttrs,"This type uses an invalid mix of the attributes 'NoEquality', 'ReferenceEquality', 'StructuralEquality', 'NoComparison' and 'StructuralComparison'" 378,augNoEqualityNeedsNoComparison,"The 'NoEquality' attribute must be used in conjunction with the 'NoComparison' attribute" @@ -221,9 +202,6 @@ astDeprecatedIndexerNotation,"This indexer notation has been removed from the F# 386,augNoEqNeedsNoObjEquals,"A type with attribute 'NoEquality' should not usually have an explicit implementation of 'Object.Equals(obj)'. Disable this warning if this is intentional for interoperability purposes" 386,augNoCompCantImpIComp,"A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes" 387,augCustomEqNeedsNoCompOrCustomComp,"The 'CustomEquality' attribute must be used in conjunction with the 'NoComparison' or 'CustomComparison' attributes" -# ----------------------------------------------------------------------------- -# formats.fs errors -# ----------------------------------------------------------------------------- forPositionalSpecifiersNotPermitted,"Positional specifiers are not permitted in format strings" forMissingFormatSpecifier,"Missing format specifier" forFlagSetTwice,"'%s' flag set twice" @@ -239,14 +217,8 @@ forLIsUnnecessary,"The 'l' or 'L' in this format specifier is unnecessary. In F# forHIsUnnecessary,"The 'h' or 'H' in this format specifier is unnecessary. You can use %%d, %%x, %%o or %%u instead, which are overloaded to work with all basic integer types.." forDoesNotSupportPrefixFlag,"'%s' does not support prefix '%s' flag" forBadFormatSpecifierGeneral,"Bad format specifier: '%s'" -# ----------------------------------------------------------------------------- -# ErrorLogger.fs errors -# ----------------------------------------------------------------------------- elSysEnvExitDidntExit,"System.Environment.Exit did not exit" elDeprecatedOperator,"The treatment of this operator is now handled directly by the F# compiler and its meaning cannot be redefined" -# ----------------------------------------------------------------------------- -# check.fs errors -# ----------------------------------------------------------------------------- 405,chkProtectedOrBaseCalled,"A protected member is called or 'base' is being used. This is only allowed in the direct implementation of members since they could escape their object scope." 406,chkByrefUsedInInvalidWay,"The byref-typed variable '%s' is used in an invalid way. Byrefs cannot be captured by closures or passed to inner functions." 408,chkBaseUsedInInvalidWay,"The 'base' keyword is used in an invalid way. Base calls cannot be used in closures. Consider using a private member to make base calls." @@ -292,9 +264,6 @@ chkUnionCaseDefaultAugmentation,"default augmentation of the union case" 443,chkMultipleGenericInterfaceInstantiations,"This type implements the same interface at different generic instantiations '%s' and '%s'. This is not permitted in this version of F#." 444,chkValueWithDefaultValueMustHaveDefaultValue,"The type of a field using the 'DefaultValue' attribute must admit default initialization, i.e. have 'null' as a proper value or be a struct type whose fields all admit default initialization. You can use 'DefaultValue(false)' to disable this check" 445,chkNoByrefInTypeAbbrev,"The type abbreviation contains byrefs. This is not permitted by F#." -# ----------------------------------------------------------------------------- -# creflect.fs errors -# ----------------------------------------------------------------------------- 446,crefBoundVarUsedInSplice,"The variable '%s' is bound in a quotation but is used as part of a spliced expression. This is not permitted since it may escape its scope." 447,crefQuotationsCantContainGenericExprs,"Quotations cannot contain uses of generic expressions" 448,crefQuotationsCantContainGenericFunctions,"Quotations cannot contain function definitions that are inferred or declared to be generic. Consider adding some type constraints to make this a valid quoted expression." @@ -312,9 +281,6 @@ chkUnionCaseDefaultAugmentation,"default augmentation of the union case" 460,crefQuotationsCantContainThisPatternMatch,"Quotations cannot contain this kind of pattern match" 461,crefQuotationsCantContainArrayPatternMatching,"Quotations cannot contain array pattern matching" 462,crefQuotationsCantContainThisType,"Quotations cannot contain this kind of type" -# ----------------------------------------------------------------------------- -# csolve.fs errors -# ----------------------------------------------------------------------------- csTypeCannotBeResolvedAtCompileTime,"The declared type parameter '%s' cannot be used here since the type parameter cannot be resolved at compile time" 464,csCodeLessGeneric,"This code is less generic than indicated by its annotations. A unit-of-measure specified using '_' has been determined to be '1', i.e. dimensionless. Consider making the code generic, or removing the use of '_'." 465,csTypeInferenceMaxDepth,"Type inference problem too complicated (maximum iteration depth reached). Consider adding further type annotations." @@ -379,9 +345,6 @@ csNoOverloadsFound,"No overloads match for method '%s'." csMethodIsOverloaded,"A unique overload for method '%s' could not be determined based on type information prior to this program point. A type annotation may be needed." csCandidates,"Candidates: %s" csSeeAvailableOverloads,"The available overloads are shown below (or in the Error List window)." -# ----------------------------------------------------------------------------- -# pars.fsy errors -# ----------------------------------------------------------------------------- 512,parsDoCannotHaveVisibilityDeclarations,"Accessibility modifiers are not permitted on 'do' bindings" 513,parsEofInHashIf,"End of file in #if section begun at or after here" 514,parsEofInString,"End of file in string begun at or before here" @@ -478,9 +441,6 @@ parsMultiArgumentGenericTypeFormDeprecated,"The syntax '(typ,...,typ) ident' is parsNoEqualShouldFollowNamespace,"No '=' symbol should follow a 'namespace' declaration" parsSyntaxModuleStructEndDeprecated,"The syntax 'module ... = struct .. end' is not used in F# code. Consider using 'module ... = begin .. end'" parsSyntaxModuleSigEndDeprecated,"The syntax 'module ... : sig .. end' is not used in F# code. Consider using 'module ... = begin .. end'" -# ----------------------------------------------------------------------------- -# tc.fs errors -# ----------------------------------------------------------------------------- 627,tcStaticFieldUsedWhenInstanceFieldExpected,"A static field was used where an instance field is expected" 629,tcMethodNotAccessible,"Method '%s' is not accessible from this code location" #630,tcTypeFunctionFieldsCannotBeMutated,"Fields which are type functions cannot be mutated" @@ -823,9 +783,6 @@ tcReservedSyntaxForAugmentation,"The syntax 'type X with ...' is reserved for au #968,tcExplicitSignaturesInImplementationFileCannotBeUsed,"Explicit signatures within implementation files are not permitted" #969,tcModulesCannotUseNamedModuleSignatures,"Modules cannot use named module signature definitions" 970,tcAttributeAutoOpenWasIgnored,"The attribute 'AutoOpen(\"%s\")' in the assembly '%s' did not refer to a valid module or namespace in that assembly and has been ignored" -# ----------------------------------------------------------------------------- -# ilxgen errors -# ----------------------------------------------------------------------------- 971,ilUndefinedValue,"Undefined value '%s'" 972,ilLabelNotFound,"Label %s not found" 973,ilIncorrectNumberOfTypeArguments,"Incorrect number of type arguments to local call" @@ -847,9 +804,6 @@ ilDynamicInvocationNotSupported,"Dynamic invocation of %s is not supported" 992,ilStructLayoutAttributeCouldNotBeDecoded,"The StructLayout attribute could not be decoded" 993,ilDefaultAugmentationAttributeCouldNotBeDecoded,"The DefaultAugmentation attribute could not be decoded" 994,ilReflectedDefinitionsCannotUseSliceOperator,"Reflected definitions cannot contain uses of the prefix splice operator '%%'" -# ----------------------------------------------------------------------------- -# fscopts text -# ----------------------------------------------------------------------------- 1000,optsProblemWithCodepage,"Problem with codepage '%d': %s" optsCopyright,"Copyright (c) Microsoft Corporation. All Rights Reserved." optsNameOfOutputFile,"Name of the output file (Short form: -o)" @@ -886,6 +840,7 @@ optsDefine,"Define conditional compilation symbols (Short form: -d)" optsMlcompatibility,"Ignore ML compatibility warnings" optsNologo,"Suppress compiler copyright message" optsHelp,"Display this usage message (Short form: -?)" +optsResponseFile,"Read response file for more options" optsCodepage,"Specify the codepage used to read source files" optsUtf8output,"Output messages in UTF-8 encoding" optsFullpaths,"Output messages with fully qualified paths" @@ -922,15 +877,13 @@ optsUseHighEntropyVA,"Enable high-entropy ASLR" optsSubSystemVersion,"Specify subsystem version of this assembly" optsTargetProfile,"Specify target framework profile of this assembly. Valid values are mscorlib or netcore. Default - mscorlib" optsEmitDebugInfoInQuotations,"Emit debug information in quotations" +optsNoCopyFsharpCore,"Don't copy FSharp.Core.dll along the produced binaries" 1051,optsInvalidSubSystemVersion,"Invalid version '%s' for '--subsystemversion'. The version must be 4.00 or greater." 1052,optsInvalidTargetProfile,"Invalid value '%s' for '--targetprofile', valid values are 'mscorlib' or 'netcore'." -# ----------------------------------------------------------------------------- -# service.fs strings -# ----------------------------------------------------------------------------- typeInfoFullName,"Full name" -typeInfoType,"type" -typeInfoInherits,"inherits" -typeInfoImplements,"implements" +# typeInfoType,"type" +# typeInfoInherits,"inherits" +# typeInfoImplements,"implements" typeInfoOtherOverloads,"and %d other overloads" typeInfoUnionCase,"union case" typeInfoActivePatternResult,"active pattern result" @@ -953,9 +906,6 @@ assemblyResolutionFoundByAssemblyFoldersKey,"Found by AssemblyFolders registry k assemblyResolutionFoundByAssemblyFoldersExKey,"Found by AssemblyFoldersEx registry key" assemblyResolutionNetFramework,".NET Framework" assemblyResolutionGAC,"Global Assembly Cache" -# ----------------------------------------------------------------------------- -# infos.fs errors -# ----------------------------------------------------------------------------- 1089,recursiveClassHierarchy,"Recursive class hierarchy in type '%s'" 1090,InvalidRecursiveReferenceToAbstractSlot,"Invalid recursive reference to an abstract slot" 1091,eventHasNonStandardType,"The event '%s' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit %s and %s methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'." @@ -969,32 +919,17 @@ experimentalConstruct,"This construct is experimental" 1099,noInvokeMethodsFound,"No Invoke methods found for delegate type" moreThanOneInvokeMethodFound,"More than one Invoke method found for delegate type" 1101,delegatesNotAllowedToHaveCurriedSignatures,"Delegates are not allowed to have curried signatures" -# ----------------------------------------------------------------------------- -# tlr.fs errors -# ----------------------------------------------------------------------------- 1102,tlrUnexpectedTExpr,"Unexpected Expr.TyChoose" 1103,tlrLambdaLiftingOptimizationsNotApplied,"Note: Lambda-lifting optimizations have not been applied because of the use of this local constrained generic function as a first class value. Adding type constraints may resolve this condition." -# ----------------------------------------------------------------------------- -# lexhelp.fs errors -# ----------------------------------------------------------------------------- 1104,lexhlpIdentifiersContainingAtSymbolReserved,"Identifiers containing '@' are reserved for use in F# code generation" lexhlpIdentifierReserved,"The identifier '%s' is reserved for future use by F#" -# ----------------------------------------------------------------------------- -# patcompile.fs errors -# ----------------------------------------------------------------------------- 1106,patcMissingVariable,"Missing variable '%s'" 1107,patcPartialActivePatternsGenerateOneResult,"Partial active patterns may only generate one result" -# ----------------------------------------------------------------------------- -# import.fs errors -# ----------------------------------------------------------------------------- 1108,impTypeRequiredUnavailable,"The type '%s' is required here and is unavailable. You must add a reference to assembly '%s'." 1109,impReferencedTypeCouldNotBeFoundInAssembly,"A reference to the type '%s' in assembly '%s' was found, but the type could not be found in that assembly" 1110,impNotEnoughTypeParamsInScopeWhileImporting,"Internal error or badly formed metadata: not enough type parameters were in scope while importing" 1111,impReferenceToDllRequiredByAssembly,"A reference to the DLL %s is required by assembly %s. The imported type %s is located in the first assembly and could not be resolved." 1112,impImportedAssemblyUsesNotPublicType,"An imported assembly uses the type '%s' but that type is not public" -# ----------------------------------------------------------------------------- -# opt.fs errors -# ----------------------------------------------------------------------------- 1113,optValueMarkedInlineButIncomplete,"The value '%s' was marked inline but its implementation makes use of an internal or private function which is not sufficiently accessible" 1114,optValueMarkedInlineButWasNotBoundInTheOptEnv,"The value '%s' was marked inline but was not bound in the optimization environment" 1115,optLocalValueNotFoundDuringOptimization,"Local value %s not found during optimization" @@ -1002,15 +937,9 @@ lexhlpIdentifierReserved,"The identifier '%s' is reserved for future use by F#" 1117,optValueMarkedInlineCouldNotBeInlined,"A value marked as 'inline' could not be inlined" 1118,optFailedToInlineValue,"Failed to inline the value '%s' marked 'inline', perhaps because a recursive value was marked 'inline'" 1119,optRecursiveValValue,"Recursive ValValue %s" -# ----------------------------------------------------------------------------- -# lexfilter.fs errors -# ----------------------------------------------------------------------------- lexfltIncorrentIndentationOfIn,"The indentation of this 'in' token is incorrect with respect to the corresponding 'let'" lexfltTokenIsOffsideOfContextStartedEarlier,"Possible incorrect indentation: this token is offside of context started at position %s. Try indenting this token further or using standard formatting conventions." lexfltSeparatorTokensOfPatternMatchMisaligned,"The '|' tokens separating rules of this pattern match are misaligned by one column. Consider realigning your code or using further indentation." -# ----------------------------------------------------------------------------- -# nameres.fs errors -# ----------------------------------------------------------------------------- 1123,nrInvalidModuleExprType,"Invalid module/expression/type" 1124,nrTypeInstantiationNeededToDisambiguateTypesWithSameName,"Multiple types exist called '%s', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. '%s'." 1125,nrTypeInstantiationIsMissingAndCouldNotBeInferred,"The instantiation of the generic type '%s' is missing and can't be inferred from the arguments or return type of this member. Consider providing a type instantiation when accessing this type, e.g. '%s'." @@ -1023,13 +952,7 @@ lexfltSeparatorTokensOfPatternMatchMisaligned,"The '|' tokens separating rules o 1133,nrNoConstructorsAvailableForType,"No constructors are available for the type '%s'" 1134,nrUnionTypeNeedsQualifiedAccess,"The union type for union case '%s' was defined with the RequireQualifiedAccessAttribute. Include the name of the union type ('%s') in the name you are using." 1135,nrRecordTypeNeedsQualifiedAccess,"The record type for the record field '%s' was defined with the RequireQualifiedAccessAttribute. Include the name of the record type ('%s') in the name you are using." -# ----------------------------------------------------------------------------- -# ilwrite.fs errors -# ----------------------------------------------------------------------------- 1135,ilwriteErrorCreatingPdb,"Unexpected error creating debug information file '%s'" -# ----------------------------------------------------------------------------- -# lex.fsl errors -# ----------------------------------------------------------------------------- 1138,lexOutsideIntegerRange,"This number is outside the allowable range for this integer type" lexCharNotAllowedInOperatorNames,"'%s' is not permitted as a character in operator names and is reserved for future use" lexUnexpectedChar,"Unexpected character '%s'" @@ -1089,8 +1012,8 @@ lexHashBangMustBeFirstInFile,"#! may only appear as the first line at the start 1189,parsNonAdjacentTypars,"Type parameters must be placed directly adjacent to the type name, e.g. \"type C<'T>\", not type \"C <'T>\"" 1190,parsNonAdjacentTyargs,"Type arguments must be placed directly adjacent to the type name, e.g. \"C<'T>\", not \"C <'T>\"" parsNonAtomicType,"The use of the type syntax 'int C' and 'C ' is not permitted here. Consider adjusting this type to be written in the form 'C'" -1191,tastUndefinedTyconItemField,"The type %s did not contain the field '%s'" -1192,tastUndefinedTyconItemUnionCase,"The type %s did not contain the union case '%s'" +# 1191,tastUndefinedTyconItemField,"The type %s did not contain the field '%s'" +# 1192,tastUndefinedTyconItemUnionCase,"The type %s did not contain the union case '%s'" 1193,tastUndefinedItemRefModuleNamespace,"The module/namespace '%s' from compilation unit '%s' did not contain the module/namespace '%s'" 1194,tastUndefinedItemRefVal,"The module/namespace '%s' from compilation unit '%s' did not contain the val '%s'" 1195,tastUndefinedItemRefModuleNamespaceType,"The module/namespace '%s' from compilation unit '%s' did not contain the namespace, module or type '%s'" @@ -1165,9 +1088,6 @@ fscTooManyErrors,"Exiting - too many errors" 2022,pathIsInvalid,"Problem with filename '%s': Illegal characters in path." 2023,fscResxSourceFileDeprecated,"Passing a .resx file (%s) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an item in the .fsproj project file." 2024,fscStaticLinkingNoProfileMismatches,"Static linking may not use assembly that targets different profile." -# ----------------------------------------------------------------------------- -# Extension typing errors -# ----------------------------------------------------------------------------- 3000,etIllegalCharactersInNamespaceName,"Character '%s' is not allowed in provided namespace name '%s'" 3001,etNullOrEmptyMemberName,"The provided type '%s' returned a member with a null or empty member name" 3002,etNullMember,"The provided type '%s' returned a null member" @@ -1287,7 +1207,6 @@ typeInfoCallsWord,"Calls" 3134,parsMutableOnAutoPropertyShouldBeGetSet,"Property definitions may not be declared mutable. To indicate that this property can be set, use 'member val PropertyName = expr with get,set'." 3135,parsMutableOnAutoPropertyShouldBeGetSetNotJustSet,"To indicate that this property can be set, use 'member val PropertyName = expr with get,set'." 3136,chkNoByrefsOfByrefs,"Type '%s' is illegal because in byref, T cannot contain byref types." -3137,etTypeProviderNotApproved,"Type provider assembly '%s' is not trusted and will not be loaded for security reasons. This may cause subsequent build errors. See the 'F# Tools' section of Visual Studio options for more information." 3138,tastopsMaxArrayThirtyTwo,"F# supports a maximum array rank of 32" 3139,tcNoIntegerForLoopInQuery,"In queries, use the form 'for x in n .. m do ...' for ranging over integers" 3140,tcNoWhileInQuery,"'while' expressions may not be used in queries" @@ -1342,3 +1261,13 @@ estApplyStaticArgumentsForMethodNotImplemented,"A type provider implemented GetS 3184,ppparsIncompleteExpression,"Incomplete preprocessor expression" 3185,ppparsMissingToken,"Missing token '%s' in preprocessor expression" 3186,pickleMissingDefinition,"An error occurred while reading the F# metadata node at position %d in table '%s' of assembly '%s'. The node had no matching declaration. Please report this warning. You may need to recompile the F# assembly you are using." +3187,checkNotSufficientlyGenericBecauseOfScope,"Type inference caused the type variable %s to escape its scope. Consider adding an explicit type parameter declaration or adjusting your code to be less generic." +3188,checkNotSufficientlyGenericBecauseOfScopeAnon,"Type inference caused an inference type variable to escape its scope. Consider adding type annotations to make your code less generic." +3189,checkRaiseFamilyFunctionArgumentCount,"Redundant arguments are being ignored in function '%s'. Expected %d but got %d arguments." +3190,checkLowercaseLiteralBindingInPattern,"Lowercase literal '%s' is being shadowed by a new pattern with the same name. Only uppercase and module-prefixed literals can be used as named patterns." +3191,tcLiteralDoesNotTakeArguments,"This literal pattern does not take arguments" +3192,tcConstructorsIllegalInAugmentation,"Constructors are not permitted as extension members - they must be defined as part of the original definition of the type" +3193,optsInvalidResponseFile,"Invalid response file '%s' ( '%s' )" +3194,optsResponseFileNotFound,"Response file '%s' not found in '%s'" +3195,optsResponseFileNameInvalid,"Response file name '%s' is empty, contains invalid characters, has a drive specification without an absolute path, or is too long" +3196,fsharpCoreNotFoundToBeCopied,"Cannot find FSharp.Core.dll in compiler's directory" diff --git a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj index 187bb8251cd..1eba67d3e6c 100644 --- a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj +++ b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj @@ -1,5 +1,5 @@ - + ..\.. @@ -47,11 +47,11 @@ - - - - - + + + + + diff --git a/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs b/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs index ae5d337777c..0ed3ee17373 100644 --- a/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs +++ b/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Build open System diff --git a/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fsi b/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fsi index afd8ac49e89..e5e700a1a4c 100644 --- a/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fsi +++ b/src/fsharp/FSharp.Build/CreateFSharpManifestResourceName.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Build diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 2e976932168..c27029bd255 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -1,5 +1,5 @@ - + ..\.. diff --git a/src/fsharp/FSharp.Build/Fsc.fs b/src/fsharp/FSharp.Build/Fsc.fs index f9c25399e51..b14de82a6a4 100644 --- a/src/fsharp/FSharp.Build/Fsc.fs +++ b/src/fsharp/FSharp.Build/Fsc.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Build @@ -144,7 +144,6 @@ type [] +[] do() diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets index 8fabc3fc7f7..cdaaf9563a8 100644 --- a/src/fsharp/FSharp.Build/Microsoft.FSharp.targets +++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.targets @@ -1,4 +1,4 @@ - + + diff --git a/src/fsharp/FSharp.Build/subst.fsx b/src/fsharp/FSharp.Build/subst.fsx index fcf2c98dda3..e9efcb9e072 100644 --- a/src/fsharp/FSharp.Build/subst.fsx +++ b/src/fsharp/FSharp.Build/subst.fsx @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. open System.IO diff --git a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj index b31633ef0f3..b6bacbcb300 100644 --- a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj +++ b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj @@ -1,5 +1,5 @@ - + ..\.. @@ -11,7 +11,11 @@ {33E0FB8C-93DC-4AD7-9DCD-9FBDA6C2F061} Library FSharp.Compiler-proto - BUILDING_PROTO;BUILDING_WITH_LKG;COMPILER;INCLUDE_METADATA_READER;INCLUDE_METADATA_WRITER;$(DefineConstants) + BUILDING_PROTO;$(DefineConstants) + BUILDING_WITH_LKG;$(DefineConstants) + COMPILER;$(DefineConstants) + INCLUDE_METADATA_READER;$(DefineConstants) + INCLUDE_METADATA_WRITER;$(DefineConstants) $(NoWarn);35;44;62;9;60;86;47;1203 LKG true @@ -133,6 +137,9 @@ ildiag.fs + + ReferenceResolution.fsi + ReferenceResolution.fs @@ -228,26 +235,23 @@ ilxsettings.fs - - pubclo.fsi - - - pubclo.fs + + EraseClosures.fsi - - cu_erase.fs + + EraseClosures.fs - - InternalFileSystemUtils.fsi + + EraseUnions.fsi - - InternalFileSystemUtils.fs + + EraseUnions.fs - - unilex.fsi + + UnicodeLexing.fsi - - unilex.fs + + UnicodeLexing.fs layout.fsi @@ -268,11 +272,11 @@ - - sreflect.fsi + + QuotationPickler.fsi - - sreflect.fs + + QuotationPickler.fs QueueList.fs @@ -280,23 +284,23 @@ tast.fs - - env.fs + + TcGlobals.fs - - tastops.fsi + + TastOps.fsi - - tastops.fs + + TastOps.fs - - pickle.fsi + + TastPickle.fsi - - pickle.fs + + TastPickle.fs - - lexfilter.fs + + LexFilter.fs import.fsi @@ -310,95 +314,89 @@ NicePrint.fs - - augment.fsi + + AugmentWithHashCompare.fsi - - augment.fs + + AugmentWithHashCompare.fs - - outcome.fsi + + NameResolution.fsi - - outcome.fs + + NameResolution.fs - - nameres.fsi + + TypeRelations.fs - - nameres.fs + + PatternMatchCompilation.fsi - - typrelns.fs + + PatternMatchCompilation.fs - - patcompile.fsi + + ConstraintSolver.fsi - - patcompile.fs + + ConstraintSolver.fs - - csolve.fsi + + CheckFormatStrings.fsi - - csolve.fs + + CheckFormatStrings.fs - - formats.fsi + + FindUnsolved.fs - - formats.fs + + QuotationTranslator.fsi - - unsolved.fs + + QuotationTranslator.fs - - creflect.fsi + + PostInferenceChecks.fsi - - creflect.fs + + PostInferenceChecks.fs - - check.fsi + + TypeChecker.fsi - - check.fs + + TypeChecker.fs - - tc.fsi + + Optimizer.fsi - - tc.fs - - - opt.fsi + + Optimizer.fs autobox.fs - - opt.fs - - - detuple.fsi + + DetupleArgs.fsi - - detuple.fs + + DetupleArgs.fs - - tlr.fsi + + InnerLambdasToTopLevelFuncs.fsi - - tlr.fs + + InnerLambdasToTopLevelFuncs.fs - - lowertop.fs + + LowerCallsAndSeqs.fs - - ilxgen.fsi + + IlxGen.fsi - - ilxgen.fs + + IlxGen.fs TraceCall.fsi @@ -406,23 +404,20 @@ TraceCall.fs - - build.fsi + + CompileOps.fsi - - build.fs + + CompileOps.fs - - fscopts.fsi + + CompileOptions.fsi - - fscopts.fs + + CompileOptions.fs - - IncrementalBuild.fsi - - - IncrementalBuild.fs + + fsc.fsi fsc.fs @@ -432,17 +427,15 @@ - - + - - - + - - - - + + + + + diff --git a/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj b/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj index 6c596282624..d9e821587c8 100644 --- a/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj +++ b/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj @@ -1,5 +1,5 @@ - + ..\.. diff --git a/src/fsharp/FSharp.Compiler.Interactive.Settings/InternalsVisibleTo.fs b/src/fsharp/FSharp.Compiler.Interactive.Settings/InternalsVisibleTo.fs index 2910533ff95..ba10d68fc8f 100644 --- a/src/fsharp/FSharp.Compiler.Interactive.Settings/InternalsVisibleTo.fs +++ b/src/fsharp/FSharp.Compiler.Interactive.Settings/InternalsVisibleTo.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp open System.Reflection diff --git a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj index cc573183528..174bee8d1f7 100644 --- a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj +++ b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj @@ -1,5 +1,5 @@ - + ..\.. diff --git a/src/fsharp/FSharp.Compiler.Server.Shared/InternalsVisibleTo.fs b/src/fsharp/FSharp.Compiler.Server.Shared/InternalsVisibleTo.fs index 61407f1db2e..195d257e42d 100644 --- a/src/fsharp/FSharp.Compiler.Server.Shared/InternalsVisibleTo.fs +++ b/src/fsharp/FSharp.Compiler.Server.Shared/InternalsVisibleTo.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp open System.Reflection diff --git a/src/fsharp/FSharp.Compiler.Unittests/CompilerTestHelpers.fs b/src/fsharp/FSharp.Compiler.Unittests/CompilerTestHelpers.fs new file mode 100644 index 00000000000..f0570aa93a1 --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Unittests/CompilerTestHelpers.fs @@ -0,0 +1,10 @@ +namespace FSharp.Compiler.Unittests + +[] +module CompilerTestHelpers = + + let (|Warning|_|) (exn: System.Exception) = + match exn with + | :? Microsoft.FSharp.Compiler.ErrorLogger.Error as e -> let n,d = e.Data0 in Some (n,d) + | :? Microsoft.FSharp.Compiler.ErrorLogger.NumberedError as e -> let n,d = e.Data0 in Some (n,d) + | _ -> None diff --git a/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj b/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj index 5e468db0c9f..28721abe8c2 100644 --- a/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj +++ b/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj @@ -1,5 +1,5 @@ - - + + ..\.. @@ -15,7 +15,6 @@ Library FSharp.Compiler.Unittests v3.5 - SystematicUnitTests false false @@ -58,8 +57,11 @@ + + + diff --git a/src/fsharp/FSharp.Compiler.Unittests/HashIfExpression.fs b/src/fsharp/FSharp.Compiler.Unittests/HashIfExpression.fs index cf70addb330..b788bd15c2f 100644 --- a/src/fsharp/FSharp.Compiler.Unittests/HashIfExpression.fs +++ b/src/fsharp/FSharp.Compiler.Unittests/HashIfExpression.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Compiler.Unittests diff --git a/src/fsharp/FSharp.Compiler.Unittests/ManglingNameOfProvidedTypes.fs b/src/fsharp/FSharp.Compiler.Unittests/ManglingNameOfProvidedTypes.fs index 0180e6abdd2..8ea0ccdcce9 100644 --- a/src/fsharp/FSharp.Compiler.Unittests/ManglingNameOfProvidedTypes.fs +++ b/src/fsharp/FSharp.Compiler.Unittests/ManglingNameOfProvidedTypes.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Compiler.Unittests open System diff --git a/src/fsharp/FSharp.Compiler.Unittests/NunitHelpers.fs b/src/fsharp/FSharp.Compiler.Unittests/NunitHelpers.fs new file mode 100644 index 00000000000..89fb1cfc5ba --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Unittests/NunitHelpers.fs @@ -0,0 +1,14 @@ +namespace NUnit.Framework + +module Assert = + + let inline fail message = Assert.Fail message + + let inline failf fmt = Printf.kprintf fail fmt + + let inline areEqual (expected: ^T) (actual: ^T) = + Assert.AreEqual(expected, actual) + +module StringAssert = + + let inline contains expected actual = StringAssert.Contains(expected, actual) diff --git a/src/fsharp/FSharp.Compiler.Unittests/ProductVersion.fs b/src/fsharp/FSharp.Compiler.Unittests/ProductVersion.fs new file mode 100644 index 00000000000..74c4da0c2fa --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Unittests/ProductVersion.fs @@ -0,0 +1,107 @@ +namespace FSharp.Compiler.Unittests + +open System +open System.Text +open NUnit.Framework + +open Microsoft.FSharp.Compiler.AbstractIL.IL +open Microsoft.FSharp.Compiler.Driver.MainModuleBuilder + +#nowarn "3180" + +module FileVersionTest = + + let fileVersionAttrName = typeof.FullName + + [] + let parseILVersion () = + "0.0.0.0" |> parseILVersion |> Assert.areEqual (0us,0us,0us,0us) + "1.2.3.4" |> parseILVersion |> Assert.areEqual (1us,2us,3us,4us) + + [] + let ``should use AssemblyFileVersionAttribute if set`` () = + let findStringAttr n = n |> Assert.areEqual fileVersionAttrName; Some "1.2.3.4" + let warn = Assert.failf "no warning expected but was '%A'" + fileVersion warn findStringAttr (1us,0us,0us,0us) |> Assert.areEqual (1us,2us,3us,4us) + + [] + let ``should raise warning FS2003 if AssemblyFileVersionAttribute is not a valid version`` () = + let mutable exns = [] + let warn e = exns <- List.append exns [e] + + fileVersion warn (fun _ -> Some "1.2a.3.3") (3us,7us,8us,6us) + |> Assert.areEqual (3us,7us,8us,6us) + + match exns with + | [ Warning(2003, description) ] as a -> + description |> StringAssert.contains "1.2a.3.3" + description |> StringAssert.contains fileVersionAttrName + | ex -> Assert.failf "expecting warning 2003 but was %A" ex + + [] + let ``should fallback to assemblyVersion if AssemblyFileVersionAttribute not set`` () = + let findStringAttr n = n |> Assert.areEqual fileVersionAttrName; None; + let warn = Assert.failf "no warning expected but was '%A'" + fileVersion warn findStringAttr (1us,0us,0us,4us) |> Assert.areEqual (1us,0us,0us,4us) + +module ProductVersionTest = + + let informationalVersionAttrName = typeof.FullName + let fileVersionAttrName = typeof.FullName + + [] + let ``should use AssemblyInformationalVersionAttribute if set`` () = + let mutable args = [] + let findStrAttr x = args <- List.append args [x]; Some "12.34.56.78" + productVersion ignore findStrAttr (1us,0us,0us,6us) |> Assert.areEqual "12.34.56.78" + args |> Assert.areEqual [ informationalVersionAttrName ] + + [] + let ``should raise warning FS2003 if AssemblyInformationalVersionAttribute is not a valid version`` () = + let mutable exns = [] + let warn e = exns <- List.append exns [e] + + productVersion warn (fun _ -> Some "1.2.3-main (build #12)") (1us,0us,0us,6us) + |> Assert.areEqual "1.2.3-main (build #12)" + + match exns with + | [ Warning(2003, description) ] as a -> + description |> StringAssert.contains "1.2.3-main (build #12)" + description |> StringAssert.contains informationalVersionAttrName + | ex -> Assert.failf "expecting warning 2003 but was %A" ex + + [] + let ``should fallback to fileVersion if AssemblyInformationalVersionAttribute not set or empty`` () = + let warn = Assert.failf "no warnings expected, but was '%A'" + productVersion warn (fun _ -> None) (3us,2us,1us,0us) |> Assert.areEqual "3.2.1.0" + productVersion warn (fun _ -> Some "") (3us,2us,1us,0us) |> Assert.areEqual "3.2.1.0" + + let validValues () = + let max = System.UInt16.MaxValue + [ "1.2.3.4", (1us,2us,3us,4us) + "0.0.0.0", (0us,0us,0us,0us) + "3213.57843.32382.59493", (3213us,57843us,32382us,59493us) + (sprintf "%d.%d.%d.%d" max max max max), (max,max,max,max) ] + |> List.map (fun (s,e) -> TestCaseData(s, e)) + + [] + let ``should use values if valid major.minor.revision.build version format`` (v, expected) = + v |> productVersionToILVersionInfo |> Assert.areEqual expected + + let invalidValues () = + [ "1.2.3.4", (1us,2us,3us,4us) + "1.2.3.4a", (1us,2us,3us,0us) + "1.2.c3.4", (1us,2us,0us,0us) + "1.2-d.3.4", (1us,0us,0us,0us) + "1dd.2.3.4", (0us,0us,0us,0us) + "1dd.2da.d3hj.dd4ds", (0us,0us,0us,0us) + "1.5.6.7.dasd", (1us,5us,6us,7us) + "9.3", (9us,3us,0us,0us) + "", (0us,0us,0us,0us) + "70000.80000.90000.100000", (0us,0us,0us,0us) + (sprintf "%d.70000.80000.90000" System.UInt16.MaxValue), (System.UInt16.MaxValue,0us,0us,0us) ] + |> List.map (fun (s,e) -> TestCaseData(s, e)) + + [] + let ``should zero starting from first invalid version part`` (v, expected) = + v |> productVersionToILVersionInfo |> Assert.areEqual expected diff --git a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj index fc6dc81aced..8a6f2d5b80f 100644 --- a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj +++ b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj @@ -1,5 +1,5 @@  - + ..\.. @@ -10,7 +10,10 @@ AnyCPU Library FSharp.Compiler - EXTENSIONTYPING;COMPILER;INCLUDE_METADATA_READER;INCLUDE_METADATA_WRITER;EXTENSIBLE_DUMPER;TYPE_PROVIDER_SECURITY;$(DefineConstants) + EXTENSIONTYPING;$(DefineConstants) + COMPILER;$(DefineConstants) + INCLUDE_METADATA_READER;$(DefineConstants) + INCLUDE_METADATA_WRITER;$(DefineConstants) $(NoWarn);62;9 {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} true @@ -51,17 +54,11 @@ LexYaccRuntime\prim-parsing.fs - - Utilities\ExtensibleDumper.fsi + + Utilities\ResizeArray.fsi - - Utilities\ExtensibleDumper.fs - - - Utilities\resizearray.fsi - - - Utilities\resizearray.fs + + Utilities\ResizeArray.fs Utilities\HashMultiMap.fsi @@ -123,12 +120,6 @@ Utilities\lib.fs - - Utilities\InternalFileSystemUtils.fsi - - - Utilities\InternalFileSystemUtils.fs - Utilities\TraceCall.fsi @@ -136,10 +127,10 @@ Utilities\TraceCall.fs - ErrorLogging\rational.fsi + Utilities\rational.fsi - ErrorLogging\rational.fs + Utilities\rational.fs ErrorLogging\range.fsi @@ -150,6 +141,9 @@ ErrorLogging\ErrorLogger.fs + + ReferenceResolution\ReferenceResolution.fsi + ReferenceResolution\ReferenceResolution.fs @@ -235,17 +229,17 @@ ILXErase\ilxsettings.fs - - ILXErase\pubclo.fsi + + ILXErase\EraseClosures.fsi - - ILXErase\pubclo.fs + + ILXErase\EraseClosures.fs - - ILXErase\cu_erase.fsi + + ILXErase\EraseUnions.fsi - - ILXErase\cu_erase.fs + + ILXErase\EraseUnions.fs --lexlib Internal.Utilities.Text.Lexing @@ -267,11 +261,11 @@ --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing ParserAndUntypedAST\pars.fsy - - ParserAndUntypedAST\unilex.fsi + + ParserAndUntypedAST\UnicodeLexing.fsi - - ParserAndUntypedAST\unilex.fs + + ParserAndUntypedAST\UnicodeLexing.fs ParserAndUntypedAST\layout.fsi @@ -300,7 +294,7 @@ ParserAndUntypedAST\lex.fs - + ParserAndUntypedAST\lexfilter.fs @@ -309,35 +303,35 @@ TypedAST\tainted.fs - - TypedAST\est.fsi + + TypedAST\ExtensionTyping.fsi - - TypedAST\est.fs + + TypedAST\ExtensionTyping.fs - - TypedAST\sreflect.fsi + + TypedAST\QuotationPickler.fsi - - TypedAST\sreflect.fs + + TypedAST\QuotationPickler.fs TypedAST\tast.fs - - TypedAST\env.fs + + TypedAST\TcGlobals.fs - - TypedAST\tastops.fsi + + TypedAST\TastOps.fsi - - TypedAST\tastops.fs + + TypedAST\TastOps.fs - - TypedAST\pickle.fsi + + TypedAST\TastPickle.fsi - - TypedAST\pickle.fs + + TypedAST\TastPickle.fs Logic\import.fsi @@ -351,170 +345,108 @@ Logic\NicePrint.fs - - Logic\augment.fsi - - - Logic\augment.fs - - - Logic\outcome.fsi + + Logic\AugmentWithHashCompare.fsi - - Logic\outcome.fs + + Logic\AugmentWithHashCompare.fs - - Logic\nameres.fsi + + Logic\NameResolution.fsi - - Logic\nameres.fs + + Logic\NameResolution.fs - - Logic\typrelns.fs + + Logic\TypeRelations.fs - - Logic\patcompile.fsi + + Logic\PatternMatchCompilation.fsi - - Logic\patcompile.fs + + Logic\PatternMatchCompilation.fs - - Logic\csolve.fsi + + Logic\ConstraintSolver.fsi - - Logic\csolve.fs + + Logic\ConstraintSolver.fs - - Logic\formats.fsi + + Logic\CheckFormatStrings.fsi - - Logic\formats.fs + + Logic\CheckFormatStrings.fs - - Logic\unsolved.fs + + Logic\FindUnsolved.fs - - Logic\creflect.fsi + + Logic\QuotationTranslator.fsi - - Logic\creflect.fs + + Logic\QuotationTranslator.fs - - Logic\check.fsi + + Logic\PostInferenceChecks.fsi - - Logic\check.fs + + Logic\PostInferenceChecks.fs - - Logic\tc.fsi + + Logic\TypeChecker.fsi - - Logic\tc.fs + + Logic\TypeChecker.fs - - Optimize\opt.fsi + + Optimize\Optimizer.fsi - - Optimize\opt.fs + + Optimize\Optimizer.fs - - Optimize\detuple.fsi + + Optimize\DetupleArgs.fsi - - Optimize\detuple.fs + + Optimize\DetupleArgs.fs - - Optimize\tlr.fsi + + Optimize\InnerLambdasToTopLevelFuncs.fsi - - Optimize\tlr.fs + + Optimize\InnerLambdasToTopLevelFuncs.fs - - Optimize\lowertop.fs + + Optimize\LowerCallsAndSeqs.fs Optimize\autobox.fs - - CodeGen\ilxgen.fsi + + CodeGen\IlxGen.fsi - - CodeGen\ilxgen.fs + + CodeGen\IlxGen.fs - - Driver\build.fsi + + Driver\CompileOps.fsi - - Driver\build.fs + + Driver\CompileOps.fs - - Driver\fscopts.fsi + + Driver\CompileOptions.fsi - - Driver\fscopts.fs + + Driver\CompileOptions.fs - - Driver\IncrementalBuild.fsi - - - Driver\IncrementalBuild.fs + + Driver\fsc.fsi Driver\fsc.fs - - Service\Reactor.fsi - - - Service\Reactor.fs - - - Service\ServiceLexing.fsi - - - Service\ServiceLexing.fs - - - Service\ServiceConstants.fs - - - Service\ServiceParseTreeWalk.fs - - - Service\ServiceNavigation.fsi - - - Service\ServiceNavigation.fs - - - Service\ServiceParamInfoLocations.fsi - - - Service\ServiceParamInfoLocations.fs - - - Service\ServiceUntypedParse.fsi - - - Service\ServiceUntypedParse.fs - - - Service\ServiceDeclarations.fsi - - - Service\ServiceDeclarations.fs - - - Service\service.fsi - - - Service\service.fs - - InternalsVisibleTo.fs @@ -524,9 +456,7 @@ - - diff --git a/src/fsharp/FSharp.Compiler/InternalsVisibleTo.fs b/src/fsharp/FSharp.Compiler/InternalsVisibleTo.fs index f0d5e127e65..b3a4f75fc52 100644 --- a/src/fsharp/FSharp.Compiler/InternalsVisibleTo.fs +++ b/src/fsharp/FSharp.Compiler/InternalsVisibleTo.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp open System.Reflection @@ -15,8 +15,8 @@ open System.Reflection [] [] [] -[] -[] +[] +[] [] [] diff --git a/src/fsharp/FSharp.Core.Unittests/App.xaml.cs b/src/fsharp/FSharp.Core.Unittests/App.xaml.cs index 387eda8ddff..21db398c37f 100644 --- a/src/fsharp/FSharp.Core.Unittests/App.xaml.cs +++ b/src/fsharp/FSharp.Core.Unittests/App.xaml.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.UnitTests.TestApp.csproj b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.UnitTests.TestApp.csproj index ccf72577036..c19f05278a4 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.UnitTests.TestApp.csproj +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.UnitTests.TestApp.csproj @@ -1,4 +1,4 @@ - + ..\.. diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.dll.config b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.dll.config new file mode 100644 index 00000000000..3424e396edf --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.dll.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj index ea30a91e878..0642d7849a6 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj @@ -1,5 +1,5 @@ - - + + ..\.. @@ -15,11 +15,11 @@ Library FSharp.Core.Unittests v3.5 - SystematicUnitTests false false netcore + $(NoWarn);217 $(DefineConstants);SILVERLIGHT @@ -44,10 +44,18 @@ - - true - True - $(NUnitLibDir)\nunit.framework.dll + + true + True + $(NUnitLibDir)\nunit.framework.dll + + + true + True + $(FsCheckLibDir)\net45\FsCheck.dll + $(FsCheckLibDir)\portable-net45+netcore45\FsCheck.dll + $(FsCheckLibDir)\portable-net45+netcore45+wp8\FsCheck.dll + $(FsCheckLibDir)\portable-net45+netcore45+wpa81+wp8\FsCheck.dll @@ -65,17 +73,20 @@ + + + @@ -83,8 +94,11 @@ + + + @@ -104,6 +118,9 @@ - + + FSharp.Core.Unittests.dll.config + + diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/ComparersRegression.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/ComparersRegression.fs new file mode 100644 index 00000000000..aeeeb2e6b64 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/ComparersRegression.fs @@ -0,0 +1,58630 @@ +// A set of regression tests for equality/relational operators and the IComparer<> and IEqualityComparer<> +// implementation provided by ComparisonIdentity.Structural and HashIdentity.Structural + +namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Core + +open System +open System.Numerics +open FSharp.Core.Unittests.LibraryTestFx +open NUnit.Framework + +module ComparersRegression = + type RefWrap<'item> = { Item : 'item } + + [] + type ValueWrap<'item> = + val Item : 'item + new(item) = { Item = item } + + type UnionWrap<'item> = + | UnionRaw of 'item + | UnionRefWrap of RefWrap<'item> + | UnionValueWrap of ValueWrap<'item> + | UnionUnion of UnionWrap<'item> + + let createUnionWrap s = + s + |> Seq.collect (fun item -> + [ UnionRaw item + UnionRefWrap {Item = item} + UnionValueWrap (ValueWrap item) + UnionUnion (UnionRaw item) + UnionUnion (UnionRefWrap {Item = item}) + UnionUnion (UnionValueWrap (ValueWrap item)) + UnionUnion (UnionUnion (UnionRaw item)) ]) + |> Array.ofSeq + + let createNullables s = + seq { + yield Nullable () + yield! s |> Seq.map (fun x -> Nullable x) + } + |> Array.ofSeq + + let createUnionTypes raw ref value union item = + [| raw item + ref item + value item + union (raw item) + union (ref item) + union (value item) + union (union (raw item)) |] + + type Collection<'item, 'reftype, 'valuetype, 'uniontype> = { + Array : array<'item> + ToRefType : 'item -> 'reftype + ToValueType : 'item -> 'valuetype + ToUnionTypes : 'item -> array<'uniontype> + } with + member this.ValueWrapArray = + this.Array + |> Array.map (fun item -> ValueWrap item) + + member this.RefWrapArray = + this.Array + |> Array.map (fun item -> { RefWrap.Item = item }) + + member this.UnionWrapArray = + this.Array + |> createUnionWrap + + member this.ValueArray = + this.Array + |> Array.map this.ToValueType + + member this.RefArray = + this.Array + |> Array.map this.ToRefType + + member this.UnionArray = + this.Array + |> Array.collect this.ToUnionTypes + + member this.OptionArray = + [| yield None + yield! this.Array |> Array.map Some |] + + member this.ArrayArray = + [| yield! this.Array |> Array.map (fun x -> [| x |]) + yield! this.Array |> Array.mapi (fun i _ -> [| this.Array.[i]; this.Array.[(i+1)%this.Array.Length] |]) |] + + member this.ListArray = + this.ArrayArray + |> Array.map Array.toList + + module Bools = + type TestType = bool + + let Values : array = [| true; false|] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + module NullableBools = + type TestType = Nullable + + let Values : array = createNullables Bools.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module SBytes = + type TestType = sbyte + + let Values : array = [| SByte.MinValue; SByte.MaxValue; -1y; 0y; +1y |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableSbytes = + type TestType = Nullable + + let Values : array = createNullables SBytes.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Int16s = + type TestType = int16 + + let Values : array = [| Int16.MaxValue; Int16.MaxValue; -1s; 0s; +1s |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableInt16s = + type TestType = Nullable + + let Values : array = createNullables Int16s.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Int32s = + type TestType = int32 + + let Values : array = [| Int32.MinValue; Int32.MaxValue; -1; 0; +1 |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableInt32s = + type TestType = Nullable + + let Values : array = createNullables Int32s.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Int64s = + type TestType = int64 + + let Values : array = [| Int64.MinValue; Int64.MaxValue; -1L; 0L; +1L |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableInt64s = + type TestType = Nullable + + let Values : array = createNullables Int64s.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NativeInts = + type TestType = nativeint + + let Values : array = [| -1n; 0n; +1n |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableNativeInts = + type TestType = Nullable + + let Values : array = createNullables NativeInts.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Bytes = + type TestType = byte + + let Values : array = [| Byte.MinValue; Byte.MaxValue; 0uy; 1uy; 2uy |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableBytes = + type TestType = Nullable + + let Values : array = createNullables Bytes.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Uint16s = + type TestType = uint16 + + let Values : array = [| UInt16.MinValue; UInt16.MaxValue; 0us; 1us; 2us |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableUInt16s = + type TestType = Nullable + + let Values : array = createNullables Uint16s.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module UInt32s = + type TestType = uint32 + + let Values : array = [| UInt32.MinValue; UInt32.MaxValue; 0u; 1u; 2u|] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableUInt32s = + type TestType = Nullable + + let Values : array = createNullables UInt32s.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module UInt64s = + type TestType = uint64 + + let Values : array = [| UInt64.MinValue; UInt64.MaxValue; 0UL; 1UL; 2UL|] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableUInt64s = + type TestType = Nullable + + let Values : array = createNullables UInt64s.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module UNativeInts = + type TestType = unativeint + + let Values : array = [| 0un; 1un; 2un |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableUNativeInts = + type TestType = Nullable + + let Values : array = createNullables UNativeInts.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Chars = + type TestType = char + + let Values : array = [| Char.MinValue; Char.MaxValue; '0'; '1'; '2' |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableChars = + type TestType = Nullable + + let Values : array = createNullables Chars.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Strings = + type TestType = string + + let Values : array = [| null; String.Empty; "Hello, world!"; String('\u0000', 3); "\u0061\u030a"; "\u00e5" |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Decimals = + type TestType = decimal + + let Values : array = [| Decimal.MinValue; Decimal.MaxValue; Decimal.MinusOne; Decimal.Zero; Decimal.One |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableDecimals = + type TestType = Nullable + + let Values : array = createNullables Decimals.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Floats = + type TestType = float + + let Values : array = [| Double.MinValue; Double.MaxValue; Double.Epsilon; Double.NaN; Double.NegativeInfinity; Double.PositiveInfinity; -1.; 0.; 1. |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableFloats = + type TestType = Nullable + + let Values : array = createNullables Floats.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Float32s = + type TestType = float32 + + let Values : array = [| Single.MinValue; Single.MaxValue; Single.Epsilon; Single.NaN; Single.NegativeInfinity; Single.PositiveInfinity; -1.f; 0.f; 1.f |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableFloat32s = + type TestType = Nullable + + let Values : array = createNullables Float32s.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module DateTimes = + type TestType = System.DateTime + + let Values : array = [| DateTime.MinValue; DateTime.MaxValue; DateTime(2015, 10, 8, 5, 39, 23) |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module NullableDateTimes = + type TestType = Nullable + + let Values : array = createNullables DateTimes.Values + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Tuple2s = + type TestType = float*float + + let Values : array = [| (nan, nan); (nan, 0.0); (0.0, nan); (0.0, 0.0) |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + // ---------------------------------------------------------------------------- + + module Tuple3s = + type TestType = float*float*float + + let Values : array = [| + (nan, nan, nan); (nan, nan, 0.0); (nan, 0.0, nan); (nan, 0.0, 0.0); + (0.0, nan, nan); (0.0, nan, 0.0); (0.0, 0.0, nan); (0.0, 0.0, 0.0) |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Tuple4s = + type TestType = float*float*float*float + + let Values : array = [| + (nan, nan, nan, nan); (nan, nan, nan, 0.0); (nan, nan, 0.0, nan); (nan, nan, 0.0, 0.0); + (nan, 0.0, nan, nan); (nan, 0.0, nan, 0.0); (nan, 0.0, 0.0, nan); (nan, 0.0, 0.0, 0.0); + (0.0, nan, nan, nan); (0.0, nan, nan, 0.0); (0.0, nan, 0.0, nan); (0.0, nan, 0.0, 0.0); + (0.0, 0.0, nan, nan); (0.0, 0.0, nan, 0.0); (0.0, 0.0, 0.0, nan); (0.0, 0.0, 0.0, 0.0); + |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + module Tuple5s = + type TestType = float*float*float*float*float + + let Values : array = [| + (nan, nan, nan, nan, nan); (nan, nan, nan, nan, 0.0); (nan, nan, nan, 0.0, nan); (nan, nan, nan, 0.0, 0.0); + (nan, nan, 0.0, nan, nan); (nan, nan, 0.0, nan, 0.0); (nan, nan, 0.0, 0.0, nan); (nan, nan, 0.0, 0.0, 0.0); + (nan, 0.0, nan, nan, nan); (nan, 0.0, nan, nan, 0.0); (nan, 0.0, nan, 0.0, nan); (nan, 0.0, nan, 0.0, 0.0); + (nan, 0.0, 0.0, nan, nan); (nan, 0.0, 0.0, nan, 0.0); (nan, 0.0, 0.0, 0.0, nan); (nan, 0.0, 0.0, 0.0, 0.0); + (0.0, nan, nan, nan, nan); (0.0, nan, nan, nan, 0.0); (0.0, nan, nan, 0.0, nan); (0.0, nan, nan, 0.0, 0.0); + (0.0, nan, 0.0, nan, nan); (0.0, nan, 0.0, nan, 0.0); (0.0, nan, 0.0, 0.0, nan); (0.0, nan, 0.0, 0.0, 0.0); + (0.0, 0.0, nan, nan, nan); (0.0, 0.0, nan, nan, 0.0); (0.0, 0.0, nan, 0.0, nan); (0.0, 0.0, nan, 0.0, 0.0); + (0.0, 0.0, 0.0, nan, nan); (0.0, 0.0, 0.0, nan, 0.0); (0.0, 0.0, 0.0, 0.0, nan); (0.0, 0.0, 0.0, 0.0, 0.0); + |] + + type RefType = { + Item : TestType + } + + [] + type ValueType = + val Item : TestType + new(item) = { Item = item } + + type UnionType = + | UnionRaw of TestType + | UnionRefType of RefType + | UnionValueType of ValueType + | UnionUnion of UnionType + + let toRefType = fun x -> { Item = x} + let toValueType = fun x -> ValueType x + + let createUnion = + let raw x = UnionRaw x + let ref x = UnionRefType (toRefType x) + let value x = UnionValueType (toValueType x) + let union x = UnionUnion x + createUnionTypes raw ref value union + + let Collection = { + Array = Values + ToRefType = fun x -> { Item = x} + ToValueType = fun x -> ValueType x + ToUnionTypes = createUnion + } + + // ---------------------------------------------------------------------------- + + type IOperation<'a> = abstract Exec : 'a -> 'a -> int + + exception ValidationException of lhs:obj * rhs:obj * expected:obj * received:obj + + let make_result_set<'a,'b when 'b : equality> (f:IOperation<'a>) (items:array<'a>) (validation_set:option>)= + let results = Array.zeroCreate (items.Length*items.Length) + for i = 0 to items.Length-1 do + for j = 0 to items.Length-1 do + let index = i * items.Length + j + let lhs = items.[i] + let rhs = items.[j] + let result = f.Exec lhs rhs + + validation_set + |> Option.iter (fun validation_set -> + let expected = validation_set.[index] + if expected <> result then + raise (ValidationException (box lhs, box rhs, expected, result))) + + results.[index] <- result + results + + let toint b = if b then 1 else 0 + + type EqualityOperations<'a when 'a : equality>() = + member inline __.equals = { new IOperation<'a> with member __.Exec lhs rhs = toint (HashIdentity.Structural.Equals(lhs,rhs)) } + member inline __.equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs = rhs) } + member inline __.not_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs <> rhs) } + + type ComparisonOperations<'a when 'a : comparison>() = + member inline __.equals = { new IOperation<'a> with member __.Exec lhs rhs = toint (HashIdentity.Structural.Equals(lhs,rhs)) } + member inline __.equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs = rhs) } + member inline __.not_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs <> rhs) } + member inline __.compare = { new IOperation<'a> with member __.Exec lhs rhs = ComparisonIdentity.Structural.Compare(lhs,rhs) } + member inline __.less_than = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs < rhs) } + member inline __.less_or_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs <= rhs) } + member inline __.greater_than = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs > rhs) } + member inline __.greater_or_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs >= rhs) } + + type NoninlinableEqualityOperations<'a when 'a : equality>() = + let operations = + let underlyingType = typedefof>.MakeGenericType [| typeof<'a> |] + match System.Activator.CreateInstance underlyingType with + | :? EqualityOperations<'a> as operations -> operations + | _ -> failwith "" + + member __.equals = operations.equals + member __.equal = operations.equal + member __.not_equal = operations.not_equal + + type NoninlinableComparisonOperations<'a when 'a : comparison>() = + let operations = + let underlyingType = typedefof>.MakeGenericType [| typeof<'a> |] + match System.Activator.CreateInstance underlyingType with + | :? ComparisonOperations<'a> as operations -> operations + | _ -> failwith "" + + member __.equals = operations.equals + member __.equal = operations.equal + member __.not_equal = operations.not_equal + member __.compare = operations.compare + member __.less_than = operations.less_than + member __.less_or_equal = operations.less_or_equal + member __.greater_than = operations.greater_than + member __.greater_or_equal = operations.greater_or_equal + + type E<'a when 'a : equality>() = + static let inlinable = EqualityOperations<'a> () + static let noninlinable = NoninlinableEqualityOperations<'a> () + + static member I = inlinable + static member N = noninlinable + + type C<'a when 'a : comparison>() = + static let inlinable = ComparisonOperations<'a> () + static let noninlinable = NoninlinableComparisonOperations<'a> () + + static member I = inlinable + static member N = noninlinable + +#if FX_ATLEAST_45 + let create<'a,'b when 'b : equality> name operation (f:IOperation<'a>) (items:array<'a>) = + printf """ [] + member __.``%s %s``() = + validate (%s) %s """ name operation name operation + + make_result_set f items None + |> Seq.iteri (fun n result -> + if n = 0 + then printf "[|" + else printf ";" + if n % 40 = 0 then printf "\n " + printf "%d" result) + printfn "\n |]\n" + + let create_inequalities name (items:array<'a>) = + create name "C.I.equals" C.I.equals items + create name "C.I.equal" C.I.equal items + create name "C.I.not_equal" C.I.not_equal items + create name "C.I.compare" C.I.compare items + create name "C.I.less_than" C.I.less_than items + create name "C.I.less_or_equal" C.I.less_or_equal items + create name "C.I.greater_than" C.I.greater_than items + create name "C.I.greater_or_equal" C.I.greater_or_equal items + create name "C.N.equals" C.N.equals items + create name "C.N.equal" C.N.equal items + create name "C.N.not_equal" C.N.not_equal items + create name "C.N.compare" C.N.compare items + create name "C.N.less_than" C.N.less_than items + create name "C.N.less_or_equal" C.N.less_or_equal items + create name "C.N.greater_than" C.N.greater_than items + create name "C.N.greater_or_equal" C.N.greater_or_equal items + + let create_equalities name (items:array<'a>) = + create name "E.I.equals" E.I.equals items + create name "E.I.equal" E.I.equal items + create name "E.I.not_equal" E.I.not_equal items + create name "E.N.equals" E.N.equals items + create name "E.N.equal" E.N.equal items + create name "E.N.not_equal" E.N.not_equal items + + let create_collection_inequalities name (collection:Collection<_,_,_,_>) = + create_inequalities (name + ".Array") collection.Array + create_inequalities (name + ".OptionArray") collection.OptionArray + create_inequalities (name + ".RefArray") collection.RefArray + create_inequalities (name + ".RefWrapArray") collection.RefWrapArray + create_inequalities (name + ".UnionArray") collection.UnionArray + create_inequalities (name + ".UnionWrapArray") collection.UnionWrapArray + create_inequalities (name + ".ValueArray") collection.ValueArray + create_inequalities (name + ".ValueWrapArray") collection.ValueWrapArray + create_inequalities (name + ".ArrayArray") collection.ArrayArray + create_inequalities (name + ".ListArray") collection.ListArray + create_inequalities (name + ".ArrayArray |> Array.map Set.ofArray") (collection.ArrayArray |> Array.map Set.ofArray) + + let create_tuples_tests name (collection:Collection<_,_,_,_>) = + create_inequalities (name + ".Array") collection.Array + + let create_collection_equalities name (collection:Collection<_,_,_,_>) = + create_equalities (name + ".Array") collection.Array + create_equalities (name + ".OptionArray") collection.OptionArray + create_equalities (name + ".RefArray") collection.RefArray + create_equalities (name + ".RefWrapArray") collection.RefWrapArray + create_equalities (name + ".UnionArray") collection.UnionArray + create_equalities (name + ".UnionWrapArray") collection.UnionWrapArray + create_equalities (name + ".ValueArray") collection.ValueArray + create_equalities (name + ".ValueWrapArray") collection.ValueWrapArray + create_equalities (name + ".ArrayArray") collection.ArrayArray + create_equalities (name + ".ListArray") collection.ListArray + + let createData () = + create_collection_inequalities "Bools.Collection" Bools.Collection + create_collection_equalities "NullableBools.Collection" NullableBools.Collection + create_collection_inequalities "SBytes.Collection" SBytes.Collection + create_collection_equalities "NullableSbytes.Collection" NullableSbytes.Collection + create_collection_inequalities "Int16s.Collection" Int16s.Collection + create_collection_equalities "NullableInt16s.Collection" NullableInt16s.Collection + create_collection_inequalities "Int32s.Collection" Int32s.Collection + create_collection_equalities "NullableInt32s.Collection" NullableInt32s.Collection + create_collection_inequalities "Int64s.Collection" Int64s.Collection + create_collection_equalities "NullableInt64s.Collection" NullableInt64s.Collection + create_collection_inequalities "NativeInts.Collection" NativeInts.Collection + create_collection_equalities "NullableNativeInts.Collection" NullableNativeInts.Collection + create_collection_inequalities "Bytes.Collection" Bytes.Collection + create_collection_equalities "NullableBytes.Collection" NullableBytes.Collection + create_collection_inequalities "Uint16s.Collection" Uint16s.Collection + create_collection_equalities "NullableUInt16s.Collection" NullableUInt16s.Collection + create_collection_inequalities "UInt32s.Collection" UInt32s.Collection + create_collection_equalities "NullableUInt32s.Collection" NullableUInt32s.Collection + create_collection_inequalities "UInt64s.Collection" UInt64s.Collection + create_collection_equalities "NullableUInt64s.Collection" NullableUInt64s.Collection + create_collection_inequalities "UNativeInts.Collection" UNativeInts.Collection + create_collection_equalities "NullableUNativeInts.Collection" NullableUNativeInts.Collection + create_collection_inequalities "Chars.Collection" Chars.Collection + create_collection_equalities "NullableChars.Collection" NullableChars.Collection + create_collection_inequalities "Strings.Collection" Strings.Collection + create_collection_inequalities "Decimals.Collection" Decimals.Collection + create_collection_equalities "NullableDecimals.Collection" NullableDecimals.Collection + create_collection_inequalities "Floats.Collection" Floats.Collection + create_collection_equalities "NullableFloats.Collection" NullableFloats.Collection + create_collection_inequalities "Float32s.Collection" Float32s.Collection + create_collection_equalities "NullableFloat32s.Collection" NullableFloat32s.Collection + create_collection_inequalities "DateTimes.Collection" DateTimes.Collection + create_collection_equalities "NullableDateTimes.Collection" NullableDateTimes.Collection + create_collection_inequalities "Tuple2s.Collection" Tuple2s.Collection + create_tuples_tests "Tuple3s.Collection" Tuple3s.Collection + create_tuples_tests "Tuple4s.Collection" Tuple4s.Collection + create_tuples_tests "Tuple5s.Collection" Tuple5s.Collection +#endif + + let validate (items:array<'a>) (f:IOperation<'a>) (expected:array) = + try + make_result_set f items (Some expected) |> ignore + with + | ValidationException(lhs=lhs; rhs=rhs; expected=expected; received=received) -> + failwith <| sprintf "args(%O, %O) Expected=%O. Received=%O." lhs rhs expected received + +open ComparersRegression + +[] +type GeneratedTestSuite () = + let _ = () +// ------------------------------------------------------------------------------ +// -- The following should be generated by running CreateComparersRegression.fsx +// ------------------------------------------------------------------------------ + [] + member __.``Bools.Collection.Array C.I.equals``() = + validate (Bools.Collection.Array) C.I.equals [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.Array C.I.equal``() = + validate (Bools.Collection.Array) C.I.equal [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.Array C.I.not_equal``() = + validate (Bools.Collection.Array) C.I.not_equal [| + 0;1;1;0 + |] + + [] + member __.``Bools.Collection.Array C.I.compare``() = + validate (Bools.Collection.Array) C.I.compare [| + 0;1;-1;0 + |] + + [] + member __.``Bools.Collection.Array C.I.less_than``() = + validate (Bools.Collection.Array) C.I.less_than [| + 0;0;1;0 + |] + + [] + member __.``Bools.Collection.Array C.I.less_or_equal``() = + validate (Bools.Collection.Array) C.I.less_or_equal [| + 1;0;1;1 + |] + + [] + member __.``Bools.Collection.Array C.I.greater_than``() = + validate (Bools.Collection.Array) C.I.greater_than [| + 0;1;0;0 + |] + + [] + member __.``Bools.Collection.Array C.I.greater_or_equal``() = + validate (Bools.Collection.Array) C.I.greater_or_equal [| + 1;1;0;1 + |] + + [] + member __.``Bools.Collection.Array C.N.equals``() = + validate (Bools.Collection.Array) C.N.equals [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.Array C.N.equal``() = + validate (Bools.Collection.Array) C.N.equal [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.Array C.N.not_equal``() = + validate (Bools.Collection.Array) C.N.not_equal [| + 0;1;1;0 + |] + + [] + member __.``Bools.Collection.Array C.N.compare``() = + validate (Bools.Collection.Array) C.N.compare [| + 0;1;-1;0 + |] + + [] + member __.``Bools.Collection.Array C.N.less_than``() = + validate (Bools.Collection.Array) C.N.less_than [| + 0;0;1;0 + |] + + [] + member __.``Bools.Collection.Array C.N.less_or_equal``() = + validate (Bools.Collection.Array) C.N.less_or_equal [| + 1;0;1;1 + |] + + [] + member __.``Bools.Collection.Array C.N.greater_than``() = + validate (Bools.Collection.Array) C.N.greater_than [| + 0;1;0;0 + |] + + [] + member __.``Bools.Collection.Array C.N.greater_or_equal``() = + validate (Bools.Collection.Array) C.N.greater_or_equal [| + 1;1;0;1 + |] + + [] + member __.``Bools.Collection.OptionArray C.I.equals``() = + validate (Bools.Collection.OptionArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``Bools.Collection.OptionArray C.I.equal``() = + validate (Bools.Collection.OptionArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``Bools.Collection.OptionArray C.I.not_equal``() = + validate (Bools.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``Bools.Collection.OptionArray C.I.compare``() = + validate (Bools.Collection.OptionArray) C.I.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``Bools.Collection.OptionArray C.I.less_than``() = + validate (Bools.Collection.OptionArray) C.I.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``Bools.Collection.OptionArray C.I.less_or_equal``() = + validate (Bools.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``Bools.Collection.OptionArray C.I.greater_than``() = + validate (Bools.Collection.OptionArray) C.I.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``Bools.Collection.OptionArray C.I.greater_or_equal``() = + validate (Bools.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``Bools.Collection.OptionArray C.N.equals``() = + validate (Bools.Collection.OptionArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``Bools.Collection.OptionArray C.N.equal``() = + validate (Bools.Collection.OptionArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``Bools.Collection.OptionArray C.N.not_equal``() = + validate (Bools.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``Bools.Collection.OptionArray C.N.compare``() = + validate (Bools.Collection.OptionArray) C.N.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``Bools.Collection.OptionArray C.N.less_than``() = + validate (Bools.Collection.OptionArray) C.N.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``Bools.Collection.OptionArray C.N.less_or_equal``() = + validate (Bools.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``Bools.Collection.OptionArray C.N.greater_than``() = + validate (Bools.Collection.OptionArray) C.N.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``Bools.Collection.OptionArray C.N.greater_or_equal``() = + validate (Bools.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``Bools.Collection.RefArray C.I.equals``() = + validate (Bools.Collection.RefArray) C.I.equals [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.RefArray C.I.equal``() = + validate (Bools.Collection.RefArray) C.I.equal [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.RefArray C.I.not_equal``() = + validate (Bools.Collection.RefArray) C.I.not_equal [| + 0;1;1;0 + |] + + [] + member __.``Bools.Collection.RefArray C.I.compare``() = + validate (Bools.Collection.RefArray) C.I.compare [| + 0;1;-1;0 + |] + + [] + member __.``Bools.Collection.RefArray C.I.less_than``() = + validate (Bools.Collection.RefArray) C.I.less_than [| + 0;0;1;0 + |] + + [] + member __.``Bools.Collection.RefArray C.I.less_or_equal``() = + validate (Bools.Collection.RefArray) C.I.less_or_equal [| + 1;0;1;1 + |] + + [] + member __.``Bools.Collection.RefArray C.I.greater_than``() = + validate (Bools.Collection.RefArray) C.I.greater_than [| + 0;1;0;0 + |] + + [] + member __.``Bools.Collection.RefArray C.I.greater_or_equal``() = + validate (Bools.Collection.RefArray) C.I.greater_or_equal [| + 1;1;0;1 + |] + + [] + member __.``Bools.Collection.RefArray C.N.equals``() = + validate (Bools.Collection.RefArray) C.N.equals [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.RefArray C.N.equal``() = + validate (Bools.Collection.RefArray) C.N.equal [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.RefArray C.N.not_equal``() = + validate (Bools.Collection.RefArray) C.N.not_equal [| + 0;1;1;0 + |] + + [] + member __.``Bools.Collection.RefArray C.N.compare``() = + validate (Bools.Collection.RefArray) C.N.compare [| + 0;1;-1;0 + |] + + [] + member __.``Bools.Collection.RefArray C.N.less_than``() = + validate (Bools.Collection.RefArray) C.N.less_than [| + 0;0;1;0 + |] + + [] + member __.``Bools.Collection.RefArray C.N.less_or_equal``() = + validate (Bools.Collection.RefArray) C.N.less_or_equal [| + 1;0;1;1 + |] + + [] + member __.``Bools.Collection.RefArray C.N.greater_than``() = + validate (Bools.Collection.RefArray) C.N.greater_than [| + 0;1;0;0 + |] + + [] + member __.``Bools.Collection.RefArray C.N.greater_or_equal``() = + validate (Bools.Collection.RefArray) C.N.greater_or_equal [| + 1;1;0;1 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.I.equals``() = + validate (Bools.Collection.RefWrapArray) C.I.equals [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.I.equal``() = + validate (Bools.Collection.RefWrapArray) C.I.equal [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.I.not_equal``() = + validate (Bools.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;0 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.I.compare``() = + validate (Bools.Collection.RefWrapArray) C.I.compare [| + 0;1;-1;0 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.I.less_than``() = + validate (Bools.Collection.RefWrapArray) C.I.less_than [| + 0;0;1;0 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Bools.Collection.RefWrapArray) C.I.less_or_equal [| + 1;0;1;1 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.I.greater_than``() = + validate (Bools.Collection.RefWrapArray) C.I.greater_than [| + 0;1;0;0 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Bools.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;1;0;1 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.N.equals``() = + validate (Bools.Collection.RefWrapArray) C.N.equals [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.N.equal``() = + validate (Bools.Collection.RefWrapArray) C.N.equal [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.N.not_equal``() = + validate (Bools.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;0 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.N.compare``() = + validate (Bools.Collection.RefWrapArray) C.N.compare [| + 0;1;-1;0 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.N.less_than``() = + validate (Bools.Collection.RefWrapArray) C.N.less_than [| + 0;0;1;0 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Bools.Collection.RefWrapArray) C.N.less_or_equal [| + 1;0;1;1 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.N.greater_than``() = + validate (Bools.Collection.RefWrapArray) C.N.greater_than [| + 0;1;0;0 + |] + + [] + member __.``Bools.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Bools.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;1;0;1 + |] + + [] + member __.``Bools.Collection.UnionArray C.I.equals``() = + validate (Bools.Collection.UnionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionArray C.I.equal``() = + validate (Bools.Collection.UnionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionArray C.I.not_equal``() = + validate (Bools.Collection.UnionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.UnionArray C.I.compare``() = + validate (Bools.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; + 2;1;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-1; + -2;3;2;1;1;0;-1;-2;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0 + |] + + [] + member __.``Bools.Collection.UnionArray C.I.less_than``() = + validate (Bools.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0 + |] + + [] + member __.``Bools.Collection.UnionArray C.I.less_or_equal``() = + validate (Bools.Collection.UnionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionArray C.I.greater_than``() = + validate (Bools.Collection.UnionArray) C.I.greater_than [| + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.UnionArray C.I.greater_or_equal``() = + validate (Bools.Collection.UnionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1 + |] + + [] + member __.``Bools.Collection.UnionArray C.N.equals``() = + validate (Bools.Collection.UnionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionArray C.N.equal``() = + validate (Bools.Collection.UnionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionArray C.N.not_equal``() = + validate (Bools.Collection.UnionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.UnionArray C.N.compare``() = + validate (Bools.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; + 2;1;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-1; + -2;3;2;1;1;0;-1;-2;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0 + |] + + [] + member __.``Bools.Collection.UnionArray C.N.less_than``() = + validate (Bools.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0 + |] + + [] + member __.``Bools.Collection.UnionArray C.N.less_or_equal``() = + validate (Bools.Collection.UnionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionArray C.N.greater_than``() = + validate (Bools.Collection.UnionArray) C.N.greater_than [| + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.UnionArray C.N.greater_or_equal``() = + validate (Bools.Collection.UnionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.I.equals``() = + validate (Bools.Collection.UnionWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.I.equal``() = + validate (Bools.Collection.UnionWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.I.not_equal``() = + validate (Bools.Collection.UnionWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.I.compare``() = + validate (Bools.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; + 2;1;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-1; + -2;3;2;1;1;0;-1;-2;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.I.less_than``() = + validate (Bools.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Bools.Collection.UnionWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.I.greater_than``() = + validate (Bools.Collection.UnionWrapArray) C.I.greater_than [| + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Bools.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.N.equals``() = + validate (Bools.Collection.UnionWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.N.equal``() = + validate (Bools.Collection.UnionWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.N.not_equal``() = + validate (Bools.Collection.UnionWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.N.compare``() = + validate (Bools.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; + 2;1;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-1; + -2;3;2;1;1;0;-1;-2;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.N.less_than``() = + validate (Bools.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Bools.Collection.UnionWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.N.greater_than``() = + validate (Bools.Collection.UnionWrapArray) C.N.greater_than [| + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Bools.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1 + |] + + [] + member __.``Bools.Collection.ValueArray C.I.equals``() = + validate (Bools.Collection.ValueArray) C.I.equals [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.ValueArray C.I.equal``() = + validate (Bools.Collection.ValueArray) C.I.equal [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.ValueArray C.I.not_equal``() = + validate (Bools.Collection.ValueArray) C.I.not_equal [| + 0;1;1;0 + |] + + [] + member __.``Bools.Collection.ValueArray C.I.compare``() = + validate (Bools.Collection.ValueArray) C.I.compare [| + 0;1;-1;0 + |] + + [] + member __.``Bools.Collection.ValueArray C.I.less_than``() = + validate (Bools.Collection.ValueArray) C.I.less_than [| + 0;0;1;0 + |] + + [] + member __.``Bools.Collection.ValueArray C.I.less_or_equal``() = + validate (Bools.Collection.ValueArray) C.I.less_or_equal [| + 1;0;1;1 + |] + + [] + member __.``Bools.Collection.ValueArray C.I.greater_than``() = + validate (Bools.Collection.ValueArray) C.I.greater_than [| + 0;1;0;0 + |] + + [] + member __.``Bools.Collection.ValueArray C.I.greater_or_equal``() = + validate (Bools.Collection.ValueArray) C.I.greater_or_equal [| + 1;1;0;1 + |] + + [] + member __.``Bools.Collection.ValueArray C.N.equals``() = + validate (Bools.Collection.ValueArray) C.N.equals [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.ValueArray C.N.equal``() = + validate (Bools.Collection.ValueArray) C.N.equal [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.ValueArray C.N.not_equal``() = + validate (Bools.Collection.ValueArray) C.N.not_equal [| + 0;1;1;0 + |] + + [] + member __.``Bools.Collection.ValueArray C.N.compare``() = + validate (Bools.Collection.ValueArray) C.N.compare [| + 0;1;-1;0 + |] + + [] + member __.``Bools.Collection.ValueArray C.N.less_than``() = + validate (Bools.Collection.ValueArray) C.N.less_than [| + 0;0;1;0 + |] + + [] + member __.``Bools.Collection.ValueArray C.N.less_or_equal``() = + validate (Bools.Collection.ValueArray) C.N.less_or_equal [| + 1;0;1;1 + |] + + [] + member __.``Bools.Collection.ValueArray C.N.greater_than``() = + validate (Bools.Collection.ValueArray) C.N.greater_than [| + 0;1;0;0 + |] + + [] + member __.``Bools.Collection.ValueArray C.N.greater_or_equal``() = + validate (Bools.Collection.ValueArray) C.N.greater_or_equal [| + 1;1;0;1 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.I.equals``() = + validate (Bools.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.I.equal``() = + validate (Bools.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.I.not_equal``() = + validate (Bools.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;0 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.I.compare``() = + validate (Bools.Collection.ValueWrapArray) C.I.compare [| + 0;1;-1;0 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.I.less_than``() = + validate (Bools.Collection.ValueWrapArray) C.I.less_than [| + 0;0;1;0 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Bools.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;0;1;1 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.I.greater_than``() = + validate (Bools.Collection.ValueWrapArray) C.I.greater_than [| + 0;1;0;0 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Bools.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;1;0;1 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.N.equals``() = + validate (Bools.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.N.equal``() = + validate (Bools.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;1 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.N.not_equal``() = + validate (Bools.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;0 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.N.compare``() = + validate (Bools.Collection.ValueWrapArray) C.N.compare [| + 0;1;-1;0 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.N.less_than``() = + validate (Bools.Collection.ValueWrapArray) C.N.less_than [| + 0;0;1;0 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Bools.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;0;1;1 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.N.greater_than``() = + validate (Bools.Collection.ValueWrapArray) C.N.greater_than [| + 0;1;0;0 + |] + + [] + member __.``Bools.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Bools.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;1;0;1 + |] + + [] + member __.``Bools.Collection.ArrayArray C.I.equals``() = + validate (Bools.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.ArrayArray C.I.equal``() = + validate (Bools.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.ArrayArray C.I.not_equal``() = + validate (Bools.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.ArrayArray C.I.compare``() = + validate (Bools.Collection.ArrayArray) C.I.compare [| + 0;1;-1;-1;-1;0;-1;-1;1;1;0;1;1;1;-1;0 + |] + + [] + member __.``Bools.Collection.ArrayArray C.I.less_than``() = + validate (Bools.Collection.ArrayArray) C.I.less_than [| + 0;0;1;1;1;0;1;1;0;0;0;0;0;0;1;0 + |] + + [] + member __.``Bools.Collection.ArrayArray C.I.less_or_equal``() = + validate (Bools.Collection.ArrayArray) C.I.less_or_equal [| + 1;0;1;1;1;1;1;1;0;0;1;0;0;0;1;1 + |] + + [] + member __.``Bools.Collection.ArrayArray C.I.greater_than``() = + validate (Bools.Collection.ArrayArray) C.I.greater_than [| + 0;1;0;0;0;0;0;0;1;1;0;1;1;1;0;0 + |] + + [] + member __.``Bools.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Bools.Collection.ArrayArray) C.I.greater_or_equal [| + 1;1;0;0;0;1;0;0;1;1;1;1;1;1;0;1 + |] + + [] + member __.``Bools.Collection.ArrayArray C.N.equals``() = + validate (Bools.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.ArrayArray C.N.equal``() = + validate (Bools.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.ArrayArray C.N.not_equal``() = + validate (Bools.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.ArrayArray C.N.compare``() = + validate (Bools.Collection.ArrayArray) C.N.compare [| + 0;1;-1;-1;-1;0;-1;-1;1;1;0;1;1;1;-1;0 + |] + + [] + member __.``Bools.Collection.ArrayArray C.N.less_than``() = + validate (Bools.Collection.ArrayArray) C.N.less_than [| + 0;0;1;1;1;0;1;1;0;0;0;0;0;0;1;0 + |] + + [] + member __.``Bools.Collection.ArrayArray C.N.less_or_equal``() = + validate (Bools.Collection.ArrayArray) C.N.less_or_equal [| + 1;0;1;1;1;1;1;1;0;0;1;0;0;0;1;1 + |] + + [] + member __.``Bools.Collection.ArrayArray C.N.greater_than``() = + validate (Bools.Collection.ArrayArray) C.N.greater_than [| + 0;1;0;0;0;0;0;0;1;1;0;1;1;1;0;0 + |] + + [] + member __.``Bools.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Bools.Collection.ArrayArray) C.N.greater_or_equal [| + 1;1;0;0;0;1;0;0;1;1;1;1;1;1;0;1 + |] + + [] + member __.``Bools.Collection.ListArray C.I.equals``() = + validate (Bools.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.ListArray C.I.equal``() = + validate (Bools.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.ListArray C.I.not_equal``() = + validate (Bools.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.ListArray C.I.compare``() = + validate (Bools.Collection.ListArray) C.I.compare [| + 0;1;-1;1;-1;0;-1;-1;1;1;0;1;-1;1;-1;0 + |] + + [] + member __.``Bools.Collection.ListArray C.I.less_than``() = + validate (Bools.Collection.ListArray) C.I.less_than [| + 0;0;1;0;1;0;1;1;0;0;0;0;1;0;1;0 + |] + + [] + member __.``Bools.Collection.ListArray C.I.less_or_equal``() = + validate (Bools.Collection.ListArray) C.I.less_or_equal [| + 1;0;1;0;1;1;1;1;0;0;1;0;1;0;1;1 + |] + + [] + member __.``Bools.Collection.ListArray C.I.greater_than``() = + validate (Bools.Collection.ListArray) C.I.greater_than [| + 0;1;0;1;0;0;0;0;1;1;0;1;0;1;0;0 + |] + + [] + member __.``Bools.Collection.ListArray C.I.greater_or_equal``() = + validate (Bools.Collection.ListArray) C.I.greater_or_equal [| + 1;1;0;1;0;1;0;0;1;1;1;1;0;1;0;1 + |] + + [] + member __.``Bools.Collection.ListArray C.N.equals``() = + validate (Bools.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.ListArray C.N.equal``() = + validate (Bools.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``Bools.Collection.ListArray C.N.not_equal``() = + validate (Bools.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``Bools.Collection.ListArray C.N.compare``() = + validate (Bools.Collection.ListArray) C.N.compare [| + 0;1;-1;1;-1;0;-1;-1;1;1;0;1;-1;1;-1;0 + |] + + [] + member __.``Bools.Collection.ListArray C.N.less_than``() = + validate (Bools.Collection.ListArray) C.N.less_than [| + 0;0;1;0;1;0;1;1;0;0;0;0;1;0;1;0 + |] + + [] + member __.``Bools.Collection.ListArray C.N.less_or_equal``() = + validate (Bools.Collection.ListArray) C.N.less_or_equal [| + 1;0;1;0;1;1;1;1;0;0;1;0;1;0;1;1 + |] + + [] + member __.``Bools.Collection.ListArray C.N.greater_than``() = + validate (Bools.Collection.ListArray) C.N.greater_than [| + 0;1;0;1;0;0;0;0;1;1;0;1;0;1;0;0 + |] + + [] + member __.``Bools.Collection.ListArray C.N.greater_or_equal``() = + validate (Bools.Collection.ListArray) C.N.greater_or_equal [| + 1;1;0;1;0;1;0;0;1;1;1;1;0;1;0;1 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;0;1;1;0;0 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;1;1;1;-1;0;-1;-1;-1;1;0;0;-1;1;0;0 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;0;0;0;1;0;1;1;1;0;0;0;1;0;0;0 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;0;0;0;1;1;1;1;1;0;1;1;1;0;1;1 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;1;1;1;0;0;0;0;0;1;0;0;0;1;0;0 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;1;1;1;0;1;0;0;0;1;1;1;0;1;1;1 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;0;1;1;0;0 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;1;1;1;-1;0;-1;-1;-1;1;0;0;-1;1;0;0 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;0;0;0;1;0;1;1;1;0;0;0;1;0;0;0 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;0;0;0;1;1;1;1;1;0;1;1;1;0;1;1 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;1;1;1;0;0;0;0;0;1;0;0;0;1;0;0 + |] + + [] + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;1;1;1;0;1;0;0;0;1;1;1;0;1;1;1 + |] + + [] + member __.``NullableBools.Collection.Array E.I.equals``() = + validate (NullableBools.Collection.Array) E.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.Array E.I.equal``() = + validate (NullableBools.Collection.Array) E.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.Array E.I.not_equal``() = + validate (NullableBools.Collection.Array) E.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.Array E.N.equals``() = + validate (NullableBools.Collection.Array) E.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.Array E.N.equal``() = + validate (NullableBools.Collection.Array) E.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.Array E.N.not_equal``() = + validate (NullableBools.Collection.Array) E.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.OptionArray E.I.equals``() = + validate (NullableBools.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.OptionArray E.I.equal``() = + validate (NullableBools.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.OptionArray E.I.not_equal``() = + validate (NullableBools.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.OptionArray E.N.equals``() = + validate (NullableBools.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.OptionArray E.N.equal``() = + validate (NullableBools.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.OptionArray E.N.not_equal``() = + validate (NullableBools.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.RefArray E.I.equals``() = + validate (NullableBools.Collection.RefArray) E.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.RefArray E.I.equal``() = + validate (NullableBools.Collection.RefArray) E.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.RefArray E.I.not_equal``() = + validate (NullableBools.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.RefArray E.N.equals``() = + validate (NullableBools.Collection.RefArray) E.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.RefArray E.N.equal``() = + validate (NullableBools.Collection.RefArray) E.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.RefArray E.N.not_equal``() = + validate (NullableBools.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.RefWrapArray E.I.equals``() = + validate (NullableBools.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.RefWrapArray E.I.equal``() = + validate (NullableBools.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableBools.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.RefWrapArray E.N.equals``() = + validate (NullableBools.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.RefWrapArray E.N.equal``() = + validate (NullableBools.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableBools.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.UnionArray E.I.equals``() = + validate (NullableBools.Collection.UnionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableBools.Collection.UnionArray E.I.equal``() = + validate (NullableBools.Collection.UnionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableBools.Collection.UnionArray E.I.not_equal``() = + validate (NullableBools.Collection.UnionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NullableBools.Collection.UnionArray E.N.equals``() = + validate (NullableBools.Collection.UnionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableBools.Collection.UnionArray E.N.equal``() = + validate (NullableBools.Collection.UnionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableBools.Collection.UnionArray E.N.not_equal``() = + validate (NullableBools.Collection.UnionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NullableBools.Collection.UnionWrapArray E.I.equals``() = + validate (NullableBools.Collection.UnionWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableBools.Collection.UnionWrapArray E.I.equal``() = + validate (NullableBools.Collection.UnionWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableBools.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableBools.Collection.UnionWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NullableBools.Collection.UnionWrapArray E.N.equals``() = + validate (NullableBools.Collection.UnionWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableBools.Collection.UnionWrapArray E.N.equal``() = + validate (NullableBools.Collection.UnionWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableBools.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableBools.Collection.UnionWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NullableBools.Collection.ValueArray E.I.equals``() = + validate (NullableBools.Collection.ValueArray) E.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ValueArray E.I.equal``() = + validate (NullableBools.Collection.ValueArray) E.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ValueArray E.I.not_equal``() = + validate (NullableBools.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.ValueArray E.N.equals``() = + validate (NullableBools.Collection.ValueArray) E.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ValueArray E.N.equal``() = + validate (NullableBools.Collection.ValueArray) E.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ValueArray E.N.not_equal``() = + validate (NullableBools.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.ValueWrapArray E.I.equals``() = + validate (NullableBools.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ValueWrapArray E.I.equal``() = + validate (NullableBools.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableBools.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.ValueWrapArray E.N.equals``() = + validate (NullableBools.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ValueWrapArray E.N.equal``() = + validate (NullableBools.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableBools.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.ArrayArray E.I.equals``() = + validate (NullableBools.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ArrayArray E.I.equal``() = + validate (NullableBools.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ArrayArray E.I.not_equal``() = + validate (NullableBools.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.ArrayArray E.N.equals``() = + validate (NullableBools.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ArrayArray E.N.equal``() = + validate (NullableBools.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ArrayArray E.N.not_equal``() = + validate (NullableBools.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.ListArray E.I.equals``() = + validate (NullableBools.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ListArray E.I.equal``() = + validate (NullableBools.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ListArray E.I.not_equal``() = + validate (NullableBools.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBools.Collection.ListArray E.N.equals``() = + validate (NullableBools.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ListArray E.N.equal``() = + validate (NullableBools.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBools.Collection.ListArray E.N.not_equal``() = + validate (NullableBools.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.Array C.I.equals``() = + validate (SBytes.Collection.Array) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.Array C.I.equal``() = + validate (SBytes.Collection.Array) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.Array C.I.not_equal``() = + validate (SBytes.Collection.Array) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.Array C.I.compare``() = + validate (SBytes.Collection.Array) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``SBytes.Collection.Array C.I.less_than``() = + validate (SBytes.Collection.Array) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.Array C.I.less_or_equal``() = + validate (SBytes.Collection.Array) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.Array C.I.greater_than``() = + validate (SBytes.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.Array C.I.greater_or_equal``() = + validate (SBytes.Collection.Array) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.Array C.N.equals``() = + validate (SBytes.Collection.Array) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.Array C.N.equal``() = + validate (SBytes.Collection.Array) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.Array C.N.not_equal``() = + validate (SBytes.Collection.Array) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.Array C.N.compare``() = + validate (SBytes.Collection.Array) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``SBytes.Collection.Array C.N.less_than``() = + validate (SBytes.Collection.Array) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.Array C.N.less_or_equal``() = + validate (SBytes.Collection.Array) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.Array C.N.greater_than``() = + validate (SBytes.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.Array C.N.greater_or_equal``() = + validate (SBytes.Collection.Array) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.OptionArray C.I.equals``() = + validate (SBytes.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.OptionArray C.I.equal``() = + validate (SBytes.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.OptionArray C.I.not_equal``() = + validate (SBytes.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.OptionArray C.I.compare``() = + validate (SBytes.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-255;-127;-128;-129;1;255;0;128;127;126;1;127;-128;0;-1;-2;1;128;-127;1;0;-1;1;129;-126;2;1;0 + |] + + [] + member __.``SBytes.Collection.OptionArray C.I.less_than``() = + validate (SBytes.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.OptionArray C.I.less_or_equal``() = + validate (SBytes.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.OptionArray C.I.greater_than``() = + validate (SBytes.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.OptionArray C.I.greater_or_equal``() = + validate (SBytes.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.OptionArray C.N.equals``() = + validate (SBytes.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.OptionArray C.N.equal``() = + validate (SBytes.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.OptionArray C.N.not_equal``() = + validate (SBytes.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.OptionArray C.N.compare``() = + validate (SBytes.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-255;-127;-128;-129;1;255;0;128;127;126;1;127;-128;0;-1;-2;1;128;-127;1;0;-1;1;129;-126;2;1;0 + |] + + [] + member __.``SBytes.Collection.OptionArray C.N.less_than``() = + validate (SBytes.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.OptionArray C.N.less_or_equal``() = + validate (SBytes.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.OptionArray C.N.greater_than``() = + validate (SBytes.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.OptionArray C.N.greater_or_equal``() = + validate (SBytes.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.RefArray C.I.equals``() = + validate (SBytes.Collection.RefArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefArray C.I.equal``() = + validate (SBytes.Collection.RefArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefArray C.I.not_equal``() = + validate (SBytes.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.RefArray C.I.compare``() = + validate (SBytes.Collection.RefArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``SBytes.Collection.RefArray C.I.less_than``() = + validate (SBytes.Collection.RefArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.RefArray C.I.less_or_equal``() = + validate (SBytes.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefArray C.I.greater_than``() = + validate (SBytes.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.RefArray C.I.greater_or_equal``() = + validate (SBytes.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.RefArray C.N.equals``() = + validate (SBytes.Collection.RefArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefArray C.N.equal``() = + validate (SBytes.Collection.RefArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefArray C.N.not_equal``() = + validate (SBytes.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.RefArray C.N.compare``() = + validate (SBytes.Collection.RefArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``SBytes.Collection.RefArray C.N.less_than``() = + validate (SBytes.Collection.RefArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.RefArray C.N.less_or_equal``() = + validate (SBytes.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefArray C.N.greater_than``() = + validate (SBytes.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.RefArray C.N.greater_or_equal``() = + validate (SBytes.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.I.equals``() = + validate (SBytes.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.I.equal``() = + validate (SBytes.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.I.not_equal``() = + validate (SBytes.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.I.compare``() = + validate (SBytes.Collection.RefWrapArray) C.I.compare [| + 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.I.less_than``() = + validate (SBytes.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.I.less_or_equal``() = + validate (SBytes.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.I.greater_than``() = + validate (SBytes.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (SBytes.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.N.equals``() = + validate (SBytes.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.N.equal``() = + validate (SBytes.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.N.not_equal``() = + validate (SBytes.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.N.compare``() = + validate (SBytes.Collection.RefWrapArray) C.N.compare [| + 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.N.less_than``() = + validate (SBytes.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.N.less_or_equal``() = + validate (SBytes.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.N.greater_than``() = + validate (SBytes.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (SBytes.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.UnionArray C.I.equals``() = + validate (SBytes.Collection.UnionArray) C.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``SBytes.Collection.UnionArray C.I.equal``() = + validate (SBytes.Collection.UnionArray) C.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``SBytes.Collection.UnionArray C.I.not_equal``() = + validate (SBytes.Collection.UnionArray) C.I.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``SBytes.Collection.UnionArray C.I.compare``() = + validate (SBytes.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``SBytes.Collection.UnionArray C.I.less_than``() = + validate (SBytes.Collection.UnionArray) C.I.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``SBytes.Collection.UnionArray C.I.less_or_equal``() = + validate (SBytes.Collection.UnionArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.UnionArray C.I.greater_than``() = + validate (SBytes.Collection.UnionArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.UnionArray C.I.greater_or_equal``() = + validate (SBytes.Collection.UnionArray) C.I.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``SBytes.Collection.UnionArray C.N.equals``() = + validate (SBytes.Collection.UnionArray) C.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``SBytes.Collection.UnionArray C.N.equal``() = + validate (SBytes.Collection.UnionArray) C.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``SBytes.Collection.UnionArray C.N.not_equal``() = + validate (SBytes.Collection.UnionArray) C.N.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``SBytes.Collection.UnionArray C.N.compare``() = + validate (SBytes.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``SBytes.Collection.UnionArray C.N.less_than``() = + validate (SBytes.Collection.UnionArray) C.N.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``SBytes.Collection.UnionArray C.N.less_or_equal``() = + validate (SBytes.Collection.UnionArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.UnionArray C.N.greater_than``() = + validate (SBytes.Collection.UnionArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.UnionArray C.N.greater_or_equal``() = + validate (SBytes.Collection.UnionArray) C.N.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.I.equals``() = + validate (SBytes.Collection.UnionWrapArray) C.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.I.equal``() = + validate (SBytes.Collection.UnionWrapArray) C.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.I.not_equal``() = + validate (SBytes.Collection.UnionWrapArray) C.I.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.I.compare``() = + validate (SBytes.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;-127;-1;-2;-3;-3;-3;-3;-128;-1;-2;-3;-3;-3;-3;-129;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-255;-1;-2;-2;-2;-2;1;-127;-1;-2;-2;-2;-2;1;-128;-1;-2;-2;-2;-2;1;-129;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; + -1;-1;-1;-1;2;1;-127;-1;-1;-1;-1;2;1;-128;-1;-1;-1;-1;2;1;-129;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-255;-1;-2;-3;3; + 2;1;-127;-1;-2;-3;3;2;1;-128;-1;-2;-3;3;2;1;-129;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-255;-1;-2;3;2;1;1;-127;-1; + -2;3;2;1;1;-128;-1;-2;3;2;1;1;-129;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-255;-1;3;2;1;2;1;-127;-1;3;2;1;2; + 1;-128;-1;3;2;1;2;1;-129;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-255;3;2;1;3;2;1;-127;3;2;1;3;2;1;-128;3;2; + 1;3;2;1;-129;255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;128;-1;-2;-3;-3;-3;-3;127;-1;-2;-3;-3;-3;-3;126;-1;-2;-3;-3;-3;-3; + 1;255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;128;-1;-2;-2;-2;-2;1;127;-1;-2;-2;-2;-2;1;126;-1;-2;-2;-2;-2;2;1;255;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;128;-1;-1;-1;-1;2;1;127;-1;-1;-1;-1;2;1;126;-1;-1;-1;-1;3;2;1;255;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;128;-1;-2;-3;3;2;1;127;-1;-2;-3;3;2;1;126;-1;-2;-3;3;2;1;1;255;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;128;-1;-2;3;2;1;1;127;-1;-2;3;2;1;1;126;-1;-2;3;2;1;2;1;255;-1;3;2;1;2;1;0;-1;3;2;1;2;1;128; + -1;3;2;1;2;1;127;-1;3;2;1;2;1;126;-1;3;2;1;3;2;1;255;3;2;1;3;2;1;0;3;2;1;3;2;1;128;3;2;1;3; + 2;1;127;3;2;1;3;2;1;126;127;-1;-2;-3;-3;-3;-3;-128;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1; + -2;-3;-3;-3;-3;1;127;-1;-2;-2;-2;-2;1;-128;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2; + 2;1;127;-1;-1;-1;-1;2;1;-128;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;127;-1; + -2;-3;3;2;1;-128;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;127;-1;-2;3;2;1; + 1;-128;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;127;-1;3;2;1;2;1;-128;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;127;3;2;1;3;2;1;-128;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-2;128;-1;-2;-3;-3;-3;-3;-127;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;128;-1;-2;-2;-2;-2;1;-127;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;128;-1;-1;-1;-1;2;1;-127;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;128;-1;-2;-3;3;2;1;-127;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;128; + -1;-2;3;2;1;1;-127;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;128;-1;3;2;1; + 2;1;-127;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;128;3;2;1;3;2;1;-127;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;129;-1;-2;-3;-3;-3;-3;-126;-1;-2;-3;-3;-3;-3;2;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;129;-1;-2;-2;-2;-2;1;-126;-1;-2;-2;-2;-2;1;2;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;129;-1;-1;-1;-1;2;1;-126;-1;-1;-1;-1;2;1;2;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;129;-1;-2;-3;3;2;1;-126;-1;-2;-3;3;2;1;2;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;129;-1;-2;3;2;1;1;-126;-1;-2;3;2;1;1;2;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 129;-1;3;2;1;2;1;-126;-1;3;2;1;2;1;2;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;129;3;2;1; + 3;2;1;-126;3;2;1;3;2;1;2;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.I.less_than``() = + validate (SBytes.Collection.UnionWrapArray) C.I.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (SBytes.Collection.UnionWrapArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.I.greater_than``() = + validate (SBytes.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (SBytes.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.N.equals``() = + validate (SBytes.Collection.UnionWrapArray) C.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.N.equal``() = + validate (SBytes.Collection.UnionWrapArray) C.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.N.not_equal``() = + validate (SBytes.Collection.UnionWrapArray) C.N.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.N.compare``() = + validate (SBytes.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;-127;-1;-2;-3;-3;-3;-3;-128;-1;-2;-3;-3;-3;-3;-129;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-255;-1;-2;-2;-2;-2;1;-127;-1;-2;-2;-2;-2;1;-128;-1;-2;-2;-2;-2;1;-129;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; + -1;-1;-1;-1;2;1;-127;-1;-1;-1;-1;2;1;-128;-1;-1;-1;-1;2;1;-129;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-255;-1;-2;-3;3; + 2;1;-127;-1;-2;-3;3;2;1;-128;-1;-2;-3;3;2;1;-129;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-255;-1;-2;3;2;1;1;-127;-1; + -2;3;2;1;1;-128;-1;-2;3;2;1;1;-129;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-255;-1;3;2;1;2;1;-127;-1;3;2;1;2; + 1;-128;-1;3;2;1;2;1;-129;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-255;3;2;1;3;2;1;-127;3;2;1;3;2;1;-128;3;2; + 1;3;2;1;-129;255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;128;-1;-2;-3;-3;-3;-3;127;-1;-2;-3;-3;-3;-3;126;-1;-2;-3;-3;-3;-3; + 1;255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;128;-1;-2;-2;-2;-2;1;127;-1;-2;-2;-2;-2;1;126;-1;-2;-2;-2;-2;2;1;255;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;128;-1;-1;-1;-1;2;1;127;-1;-1;-1;-1;2;1;126;-1;-1;-1;-1;3;2;1;255;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;128;-1;-2;-3;3;2;1;127;-1;-2;-3;3;2;1;126;-1;-2;-3;3;2;1;1;255;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;128;-1;-2;3;2;1;1;127;-1;-2;3;2;1;1;126;-1;-2;3;2;1;2;1;255;-1;3;2;1;2;1;0;-1;3;2;1;2;1;128; + -1;3;2;1;2;1;127;-1;3;2;1;2;1;126;-1;3;2;1;3;2;1;255;3;2;1;3;2;1;0;3;2;1;3;2;1;128;3;2;1;3; + 2;1;127;3;2;1;3;2;1;126;127;-1;-2;-3;-3;-3;-3;-128;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1; + -2;-3;-3;-3;-3;1;127;-1;-2;-2;-2;-2;1;-128;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2; + 2;1;127;-1;-1;-1;-1;2;1;-128;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;127;-1; + -2;-3;3;2;1;-128;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;127;-1;-2;3;2;1; + 1;-128;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;127;-1;3;2;1;2;1;-128;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;127;3;2;1;3;2;1;-128;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-2;128;-1;-2;-3;-3;-3;-3;-127;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;128;-1;-2;-2;-2;-2;1;-127;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;128;-1;-1;-1;-1;2;1;-127;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;128;-1;-2;-3;3;2;1;-127;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;128; + -1;-2;3;2;1;1;-127;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;128;-1;3;2;1; + 2;1;-127;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;128;3;2;1;3;2;1;-127;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;129;-1;-2;-3;-3;-3;-3;-126;-1;-2;-3;-3;-3;-3;2;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;129;-1;-2;-2;-2;-2;1;-126;-1;-2;-2;-2;-2;1;2;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;129;-1;-1;-1;-1;2;1;-126;-1;-1;-1;-1;2;1;2;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;129;-1;-2;-3;3;2;1;-126;-1;-2;-3;3;2;1;2;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;129;-1;-2;3;2;1;1;-126;-1;-2;3;2;1;1;2;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 129;-1;3;2;1;2;1;-126;-1;3;2;1;2;1;2;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;129;3;2;1; + 3;2;1;-126;3;2;1;3;2;1;2;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.N.less_than``() = + validate (SBytes.Collection.UnionWrapArray) C.N.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (SBytes.Collection.UnionWrapArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.N.greater_than``() = + validate (SBytes.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (SBytes.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``SBytes.Collection.ValueArray C.I.equals``() = + validate (SBytes.Collection.ValueArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueArray C.I.equal``() = + validate (SBytes.Collection.ValueArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueArray C.I.not_equal``() = + validate (SBytes.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ValueArray C.I.compare``() = + validate (SBytes.Collection.ValueArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ValueArray C.I.less_than``() = + validate (SBytes.Collection.ValueArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.ValueArray C.I.less_or_equal``() = + validate (SBytes.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueArray C.I.greater_than``() = + validate (SBytes.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.ValueArray C.I.greater_or_equal``() = + validate (SBytes.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.ValueArray C.N.equals``() = + validate (SBytes.Collection.ValueArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueArray C.N.equal``() = + validate (SBytes.Collection.ValueArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueArray C.N.not_equal``() = + validate (SBytes.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ValueArray C.N.compare``() = + validate (SBytes.Collection.ValueArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ValueArray C.N.less_than``() = + validate (SBytes.Collection.ValueArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.ValueArray C.N.less_or_equal``() = + validate (SBytes.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueArray C.N.greater_than``() = + validate (SBytes.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.ValueArray C.N.greater_or_equal``() = + validate (SBytes.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.I.equals``() = + validate (SBytes.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.I.equal``() = + validate (SBytes.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.I.not_equal``() = + validate (SBytes.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.I.compare``() = + validate (SBytes.Collection.ValueWrapArray) C.I.compare [| + 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.I.less_than``() = + validate (SBytes.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (SBytes.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.I.greater_than``() = + validate (SBytes.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (SBytes.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.N.equals``() = + validate (SBytes.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.N.equal``() = + validate (SBytes.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.N.not_equal``() = + validate (SBytes.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.N.compare``() = + validate (SBytes.Collection.ValueWrapArray) C.N.compare [| + 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.N.less_than``() = + validate (SBytes.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (SBytes.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.N.greater_than``() = + validate (SBytes.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (SBytes.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.I.equals``() = + validate (SBytes.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.I.equal``() = + validate (SBytes.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.I.not_equal``() = + validate (SBytes.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.I.compare``() = + validate (SBytes.Collection.ArrayArray) C.I.compare [| + 0;1;-1;1;1;-1;-1;-1;-1;-1;-1;0;-1;1;1;-1;-1;-1;-1;-1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1; + -1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;-1;1;1;1;1;1;1;1;-1;0;-1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;-1;-1;-1;0;-1;1;1;1;1;1;-1;-1;-1;1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.I.less_than``() = + validate (SBytes.Collection.ArrayArray) C.I.less_than [| + 0;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;0;0;0;0;1;1;1;0;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.I.less_or_equal``() = + validate (SBytes.Collection.ArrayArray) C.I.less_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.I.greater_than``() = + validate (SBytes.Collection.ArrayArray) C.I.greater_than [| + 0;1;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.I.greater_or_equal``() = + validate (SBytes.Collection.ArrayArray) C.I.greater_or_equal [| + 1;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;0;1;0;1;1;1;1;1;0;0;0;1;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.N.equals``() = + validate (SBytes.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.N.equal``() = + validate (SBytes.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.N.not_equal``() = + validate (SBytes.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.N.compare``() = + validate (SBytes.Collection.ArrayArray) C.N.compare [| + 0;1;-1;1;1;-1;-1;-1;-1;-1;-1;0;-1;1;1;-1;-1;-1;-1;-1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1; + -1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;-1;1;1;1;1;1;1;1;-1;0;-1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;-1;-1;-1;0;-1;1;1;1;1;1;-1;-1;-1;1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.N.less_than``() = + validate (SBytes.Collection.ArrayArray) C.N.less_than [| + 0;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;0;0;0;0;1;1;1;0;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.N.less_or_equal``() = + validate (SBytes.Collection.ArrayArray) C.N.less_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.N.greater_than``() = + validate (SBytes.Collection.ArrayArray) C.N.greater_than [| + 0;1;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray C.N.greater_or_equal``() = + validate (SBytes.Collection.ArrayArray) C.N.greater_or_equal [| + 1;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;0;1;0;1;1;1;1;1;0;0;0;1;1 + |] + + [] + member __.``SBytes.Collection.ListArray C.I.equals``() = + validate (SBytes.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ListArray C.I.equal``() = + validate (SBytes.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ListArray C.I.not_equal``() = + validate (SBytes.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ListArray C.I.compare``() = + validate (SBytes.Collection.ListArray) C.I.compare [| + 0;-255;-127;-128;-129;-1;-255;-127;-128;-129;255;0;128;127;126;255;-1;128;127;126;127;-128;0;-1;-2;127;-128;-1;-1;-2;128;-127;1;0;-1;128;-127;1;-1;-1; + 129;-126;2;1;0;129;-126;2;1;-1;1;-255;-127;-128;-129;0;-255;-127;-128;-129;255;1;128;127;126;255;0;128;127;126;127;-128;1;-1;-2;127;-128;0;-1;-2; + 128;-127;1;1;-1;128;-127;1;0;-1;129;-126;2;1;1;129;-126;2;1;0 + |] + + [] + member __.``SBytes.Collection.ListArray C.I.less_than``() = + validate (SBytes.Collection.ListArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.ListArray C.I.less_or_equal``() = + validate (SBytes.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.ListArray C.I.greater_than``() = + validate (SBytes.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.ListArray C.I.greater_or_equal``() = + validate (SBytes.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.ListArray C.N.equals``() = + validate (SBytes.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ListArray C.N.equal``() = + validate (SBytes.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ListArray C.N.not_equal``() = + validate (SBytes.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ListArray C.N.compare``() = + validate (SBytes.Collection.ListArray) C.N.compare [| + 0;-255;-127;-128;-129;-1;-255;-127;-128;-129;255;0;128;127;126;255;-1;128;127;126;127;-128;0;-1;-2;127;-128;-1;-1;-2;128;-127;1;0;-1;128;-127;1;-1;-1; + 129;-126;2;1;0;129;-126;2;1;-1;1;-255;-127;-128;-129;0;-255;-127;-128;-129;255;1;128;127;126;255;0;128;127;126;127;-128;1;-1;-2;127;-128;0;-1;-2; + 128;-127;1;1;-1;128;-127;1;0;-1;129;-126;2;1;1;129;-126;2;1;0 + |] + + [] + member __.``SBytes.Collection.ListArray C.N.less_than``() = + validate (SBytes.Collection.ListArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``SBytes.Collection.ListArray C.N.less_or_equal``() = + validate (SBytes.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``SBytes.Collection.ListArray C.N.greater_than``() = + validate (SBytes.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``SBytes.Collection.ListArray C.N.greater_or_equal``() = + validate (SBytes.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; + 0;1;0;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; + 1;0;1;1;0;1;1;1;0;1;1;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; + 0;1;0;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; + 1;0;1;1;0;1;1;1;0;1;1;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.Array E.I.equals``() = + validate (NullableSbytes.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.Array E.I.equal``() = + validate (NullableSbytes.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.Array E.I.not_equal``() = + validate (NullableSbytes.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.Array E.N.equals``() = + validate (NullableSbytes.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.Array E.N.equal``() = + validate (NullableSbytes.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.Array E.N.not_equal``() = + validate (NullableSbytes.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.OptionArray E.I.equals``() = + validate (NullableSbytes.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.OptionArray E.I.equal``() = + validate (NullableSbytes.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.OptionArray E.I.not_equal``() = + validate (NullableSbytes.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.OptionArray E.N.equals``() = + validate (NullableSbytes.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.OptionArray E.N.equal``() = + validate (NullableSbytes.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.OptionArray E.N.not_equal``() = + validate (NullableSbytes.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.RefArray E.I.equals``() = + validate (NullableSbytes.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.RefArray E.I.equal``() = + validate (NullableSbytes.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.RefArray E.I.not_equal``() = + validate (NullableSbytes.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.RefArray E.N.equals``() = + validate (NullableSbytes.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.RefArray E.N.equal``() = + validate (NullableSbytes.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.RefArray E.N.not_equal``() = + validate (NullableSbytes.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.RefWrapArray E.I.equals``() = + validate (NullableSbytes.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.RefWrapArray E.I.equal``() = + validate (NullableSbytes.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableSbytes.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.RefWrapArray E.N.equals``() = + validate (NullableSbytes.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.RefWrapArray E.N.equal``() = + validate (NullableSbytes.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableSbytes.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.UnionArray E.I.equals``() = + validate (NullableSbytes.Collection.UnionArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.UnionArray E.I.equal``() = + validate (NullableSbytes.Collection.UnionArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.UnionArray E.I.not_equal``() = + validate (NullableSbytes.Collection.UnionArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.UnionArray E.N.equals``() = + validate (NullableSbytes.Collection.UnionArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.UnionArray E.N.equal``() = + validate (NullableSbytes.Collection.UnionArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.UnionArray E.N.not_equal``() = + validate (NullableSbytes.Collection.UnionArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.UnionWrapArray E.I.equals``() = + validate (NullableSbytes.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.UnionWrapArray E.I.equal``() = + validate (NullableSbytes.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableSbytes.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.UnionWrapArray E.N.equals``() = + validate (NullableSbytes.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.UnionWrapArray E.N.equal``() = + validate (NullableSbytes.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableSbytes.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.ValueArray E.I.equals``() = + validate (NullableSbytes.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ValueArray E.I.equal``() = + validate (NullableSbytes.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ValueArray E.I.not_equal``() = + validate (NullableSbytes.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.ValueArray E.N.equals``() = + validate (NullableSbytes.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ValueArray E.N.equal``() = + validate (NullableSbytes.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ValueArray E.N.not_equal``() = + validate (NullableSbytes.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.ValueWrapArray E.I.equals``() = + validate (NullableSbytes.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ValueWrapArray E.I.equal``() = + validate (NullableSbytes.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableSbytes.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.ValueWrapArray E.N.equals``() = + validate (NullableSbytes.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ValueWrapArray E.N.equal``() = + validate (NullableSbytes.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableSbytes.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.ArrayArray E.I.equals``() = + validate (NullableSbytes.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ArrayArray E.I.equal``() = + validate (NullableSbytes.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ArrayArray E.I.not_equal``() = + validate (NullableSbytes.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.ArrayArray E.N.equals``() = + validate (NullableSbytes.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ArrayArray E.N.equal``() = + validate (NullableSbytes.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ArrayArray E.N.not_equal``() = + validate (NullableSbytes.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.ListArray E.I.equals``() = + validate (NullableSbytes.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ListArray E.I.equal``() = + validate (NullableSbytes.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ListArray E.I.not_equal``() = + validate (NullableSbytes.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableSbytes.Collection.ListArray E.N.equals``() = + validate (NullableSbytes.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ListArray E.N.equal``() = + validate (NullableSbytes.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableSbytes.Collection.ListArray E.N.not_equal``() = + validate (NullableSbytes.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.Array C.I.equals``() = + validate (Int16s.Collection.Array) C.I.equals [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.Array C.I.equal``() = + validate (Int16s.Collection.Array) C.I.equal [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.Array C.I.not_equal``() = + validate (Int16s.Collection.Array) C.I.not_equal [| + 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.Array C.I.compare``() = + validate (Int16s.Collection.Array) C.I.compare [| + 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 + |] + + [] + member __.``Int16s.Collection.Array C.I.less_than``() = + validate (Int16s.Collection.Array) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.Array C.I.less_or_equal``() = + validate (Int16s.Collection.Array) C.I.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.Array C.I.greater_than``() = + validate (Int16s.Collection.Array) C.I.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.Array C.I.greater_or_equal``() = + validate (Int16s.Collection.Array) C.I.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.Array C.N.equals``() = + validate (Int16s.Collection.Array) C.N.equals [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.Array C.N.equal``() = + validate (Int16s.Collection.Array) C.N.equal [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.Array C.N.not_equal``() = + validate (Int16s.Collection.Array) C.N.not_equal [| + 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.Array C.N.compare``() = + validate (Int16s.Collection.Array) C.N.compare [| + 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 + |] + + [] + member __.``Int16s.Collection.Array C.N.less_than``() = + validate (Int16s.Collection.Array) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.Array C.N.less_or_equal``() = + validate (Int16s.Collection.Array) C.N.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.Array C.N.greater_than``() = + validate (Int16s.Collection.Array) C.N.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.Array C.N.greater_or_equal``() = + validate (Int16s.Collection.Array) C.N.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.OptionArray C.I.equals``() = + validate (Int16s.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.OptionArray C.I.equal``() = + validate (Int16s.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.OptionArray C.I.not_equal``() = + validate (Int16s.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.OptionArray C.I.compare``() = + validate (Int16s.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;0;32768;32767;32766;1;0;0;32768;32767;32766;1;-32768;-32768;0;-1;-2;1;-32767;-32767;1;0;-1;1;-32766;-32766;2;1;0 + |] + + [] + member __.``Int16s.Collection.OptionArray C.I.less_than``() = + validate (Int16s.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.OptionArray C.I.less_or_equal``() = + validate (Int16s.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;0;1;1;0;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.OptionArray C.I.greater_than``() = + validate (Int16s.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;1;0;0;1;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.OptionArray C.I.greater_or_equal``() = + validate (Int16s.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.OptionArray C.N.equals``() = + validate (Int16s.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.OptionArray C.N.equal``() = + validate (Int16s.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.OptionArray C.N.not_equal``() = + validate (Int16s.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.OptionArray C.N.compare``() = + validate (Int16s.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;0;32768;32767;32766;1;0;0;32768;32767;32766;1;-32768;-32768;0;-1;-2;1;-32767;-32767;1;0;-1;1;-32766;-32766;2;1;0 + |] + + [] + member __.``Int16s.Collection.OptionArray C.N.less_than``() = + validate (Int16s.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.OptionArray C.N.less_or_equal``() = + validate (Int16s.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;0;1;1;0;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.OptionArray C.N.greater_than``() = + validate (Int16s.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;1;0;0;1;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.OptionArray C.N.greater_or_equal``() = + validate (Int16s.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.RefArray C.I.equals``() = + validate (Int16s.Collection.RefArray) C.I.equals [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefArray C.I.equal``() = + validate (Int16s.Collection.RefArray) C.I.equal [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefArray C.I.not_equal``() = + validate (Int16s.Collection.RefArray) C.I.not_equal [| + 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.RefArray C.I.compare``() = + validate (Int16s.Collection.RefArray) C.I.compare [| + 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 + |] + + [] + member __.``Int16s.Collection.RefArray C.I.less_than``() = + validate (Int16s.Collection.RefArray) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.RefArray C.I.less_or_equal``() = + validate (Int16s.Collection.RefArray) C.I.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefArray C.I.greater_than``() = + validate (Int16s.Collection.RefArray) C.I.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.RefArray C.I.greater_or_equal``() = + validate (Int16s.Collection.RefArray) C.I.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.RefArray C.N.equals``() = + validate (Int16s.Collection.RefArray) C.N.equals [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefArray C.N.equal``() = + validate (Int16s.Collection.RefArray) C.N.equal [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefArray C.N.not_equal``() = + validate (Int16s.Collection.RefArray) C.N.not_equal [| + 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.RefArray C.N.compare``() = + validate (Int16s.Collection.RefArray) C.N.compare [| + 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 + |] + + [] + member __.``Int16s.Collection.RefArray C.N.less_than``() = + validate (Int16s.Collection.RefArray) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.RefArray C.N.less_or_equal``() = + validate (Int16s.Collection.RefArray) C.N.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefArray C.N.greater_than``() = + validate (Int16s.Collection.RefArray) C.N.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.RefArray C.N.greater_or_equal``() = + validate (Int16s.Collection.RefArray) C.N.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.I.equals``() = + validate (Int16s.Collection.RefWrapArray) C.I.equals [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.I.equal``() = + validate (Int16s.Collection.RefWrapArray) C.I.equal [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.I.not_equal``() = + validate (Int16s.Collection.RefWrapArray) C.I.not_equal [| + 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.I.compare``() = + validate (Int16s.Collection.RefWrapArray) C.I.compare [| + 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.I.less_than``() = + validate (Int16s.Collection.RefWrapArray) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Int16s.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.I.greater_than``() = + validate (Int16s.Collection.RefWrapArray) C.I.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Int16s.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.N.equals``() = + validate (Int16s.Collection.RefWrapArray) C.N.equals [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.N.equal``() = + validate (Int16s.Collection.RefWrapArray) C.N.equal [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.N.not_equal``() = + validate (Int16s.Collection.RefWrapArray) C.N.not_equal [| + 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.N.compare``() = + validate (Int16s.Collection.RefWrapArray) C.N.compare [| + 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.N.less_than``() = + validate (Int16s.Collection.RefWrapArray) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Int16s.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.N.greater_than``() = + validate (Int16s.Collection.RefWrapArray) C.N.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Int16s.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.UnionArray C.I.equals``() = + validate (Int16s.Collection.UnionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;1;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;1;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int16s.Collection.UnionArray C.I.equal``() = + validate (Int16s.Collection.UnionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;1;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;1;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int16s.Collection.UnionArray C.I.not_equal``() = + validate (Int16s.Collection.UnionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;0;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;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int16s.Collection.UnionArray C.I.compare``() = + validate (Int16s.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; + -1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;0;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2; + 1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2; + 1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;0;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + -1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;-1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int16s.Collection.UnionArray C.I.less_than``() = + validate (Int16s.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int16s.Collection.UnionArray C.I.less_or_equal``() = + validate (Int16s.Collection.UnionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.UnionArray C.I.greater_than``() = + validate (Int16s.Collection.UnionArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.UnionArray C.I.greater_or_equal``() = + validate (Int16s.Collection.UnionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int16s.Collection.UnionArray C.N.equals``() = + validate (Int16s.Collection.UnionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;1;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;1;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int16s.Collection.UnionArray C.N.equal``() = + validate (Int16s.Collection.UnionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;1;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;1;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int16s.Collection.UnionArray C.N.not_equal``() = + validate (Int16s.Collection.UnionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;0;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;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int16s.Collection.UnionArray C.N.compare``() = + validate (Int16s.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; + -1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;0;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2; + 1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2; + 1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;0;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + -1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;-1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int16s.Collection.UnionArray C.N.less_than``() = + validate (Int16s.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int16s.Collection.UnionArray C.N.less_or_equal``() = + validate (Int16s.Collection.UnionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.UnionArray C.N.greater_than``() = + validate (Int16s.Collection.UnionArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.UnionArray C.N.greater_or_equal``() = + validate (Int16s.Collection.UnionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.I.equals``() = + validate (Int16s.Collection.UnionWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;1;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;1;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.I.equal``() = + validate (Int16s.Collection.UnionWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;1;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;1;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.I.not_equal``() = + validate (Int16s.Collection.UnionWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;0;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;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.I.compare``() = + validate (Int16s.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;32768;-1;-2;-3;-3;-3;-3;32767;-1;-2;-3;-3;-3;-3;32766;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;0;-1;-2;-2;-2;-2;1;32768;-1;-2;-2;-2;-2;1;32767;-1;-2;-2;-2;-2;1;32766;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; + -1;-1;-1;-1;2;1;32768;-1;-1;-1;-1;2;1;32767;-1;-1;-1;-1;2;1;32766;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;0;-1;-2;-3;3; + 2;1;32768;-1;-2;-3;3;2;1;32767;-1;-2;-3;3;2;1;32766;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;32768;-1; + -2;3;2;1;1;32767;-1;-2;3;2;1;1;32766;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;0;-1;3;2;1;2;1;32768;-1;3;2;1;2; + 1;32767;-1;3;2;1;2;1;32766;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;0;3;2;1;3;2;1;32768;3;2;1;3;2;1;32767;3;2; + 1;3;2;1;32766;0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;32768;-1;-2;-3;-3;-3;-3;32767;-1;-2;-3;-3;-3;-3;32766;-1;-2;-3;-3;-3;-3; + 1;0;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;32768;-1;-2;-2;-2;-2;1;32767;-1;-2;-2;-2;-2;1;32766;-1;-2;-2;-2;-2;2;1;0;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;32768;-1;-1;-1;-1;2;1;32767;-1;-1;-1;-1;2;1;32766;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;32768;-1;-2;-3;3;2;1;32767;-1;-2;-3;3;2;1;32766;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;32768;-1;-2;3;2;1;1;32767;-1;-2;3;2;1;1;32766;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;0;-1;3;2;1;2;1;32768; + -1;3;2;1;2;1;32767;-1;3;2;1;2;1;32766;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;0;3;2;1;3;2;1;32768;3;2;1;3; + 2;1;32767;3;2;1;3;2;1;32766;-32768;-1;-2;-3;-3;-3;-3;-32768;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1; + -2;-3;-3;-3;-3;1;-32768;-1;-2;-2;-2;-2;1;-32768;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2; + 2;1;-32768;-1;-1;-1;-1;2;1;-32768;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;-32768;-1; + -2;-3;3;2;1;-32768;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;-32768;-1;-2;3;2;1; + 1;-32768;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;-32768;-1;3;2;1;2;1;-32768;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;-32768;3;2;1;3;2;1;-32768;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-2;-32767;-1;-2;-3;-3;-3;-3;-32767;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-32767;-1;-2;-2;-2;-2;1;-32767;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;-32767;-1;-1;-1;-1;2;1;-32767;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;-32767;-1;-2;-3;3;2;1;-32767;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-32767; + -1;-2;3;2;1;1;-32767;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;-32767;-1;3;2;1; + 2;1;-32767;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-32767;3;2;1;3;2;1;-32767;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;-32766;-1;-2;-3;-3;-3;-3;-32766;-1;-2;-3;-3;-3;-3;2;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-32766;-1;-2;-2;-2;-2;1;-32766;-1;-2;-2;-2;-2;1;2;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;-32766;-1;-1;-1;-1;2;1;-32766;-1;-1;-1;-1;2;1;2;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;-32766;-1;-2;-3;3;2;1;-32766;-1;-2;-3;3;2;1;2;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;-32766;-1;-2;3;2;1;1;-32766;-1;-2;3;2;1;1;2;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + -32766;-1;3;2;1;2;1;-32766;-1;3;2;1;2;1;2;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;-32766;3;2;1; + 3;2;1;-32766;3;2;1;3;2;1;2;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.I.less_than``() = + validate (Int16s.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Int16s.Collection.UnionWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.I.greater_than``() = + validate (Int16s.Collection.UnionWrapArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Int16s.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.N.equals``() = + validate (Int16s.Collection.UnionWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;1;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;1;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.N.equal``() = + validate (Int16s.Collection.UnionWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;1;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;1;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.N.not_equal``() = + validate (Int16s.Collection.UnionWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;0;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;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.N.compare``() = + validate (Int16s.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;32768;-1;-2;-3;-3;-3;-3;32767;-1;-2;-3;-3;-3;-3;32766;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;0;-1;-2;-2;-2;-2;1;32768;-1;-2;-2;-2;-2;1;32767;-1;-2;-2;-2;-2;1;32766;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; + -1;-1;-1;-1;2;1;32768;-1;-1;-1;-1;2;1;32767;-1;-1;-1;-1;2;1;32766;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;0;-1;-2;-3;3; + 2;1;32768;-1;-2;-3;3;2;1;32767;-1;-2;-3;3;2;1;32766;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;32768;-1; + -2;3;2;1;1;32767;-1;-2;3;2;1;1;32766;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;0;-1;3;2;1;2;1;32768;-1;3;2;1;2; + 1;32767;-1;3;2;1;2;1;32766;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;0;3;2;1;3;2;1;32768;3;2;1;3;2;1;32767;3;2; + 1;3;2;1;32766;0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;32768;-1;-2;-3;-3;-3;-3;32767;-1;-2;-3;-3;-3;-3;32766;-1;-2;-3;-3;-3;-3; + 1;0;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;32768;-1;-2;-2;-2;-2;1;32767;-1;-2;-2;-2;-2;1;32766;-1;-2;-2;-2;-2;2;1;0;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;32768;-1;-1;-1;-1;2;1;32767;-1;-1;-1;-1;2;1;32766;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;32768;-1;-2;-3;3;2;1;32767;-1;-2;-3;3;2;1;32766;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;32768;-1;-2;3;2;1;1;32767;-1;-2;3;2;1;1;32766;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;0;-1;3;2;1;2;1;32768; + -1;3;2;1;2;1;32767;-1;3;2;1;2;1;32766;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;0;3;2;1;3;2;1;32768;3;2;1;3; + 2;1;32767;3;2;1;3;2;1;32766;-32768;-1;-2;-3;-3;-3;-3;-32768;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1; + -2;-3;-3;-3;-3;1;-32768;-1;-2;-2;-2;-2;1;-32768;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2; + 2;1;-32768;-1;-1;-1;-1;2;1;-32768;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;-32768;-1; + -2;-3;3;2;1;-32768;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;-32768;-1;-2;3;2;1; + 1;-32768;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;-32768;-1;3;2;1;2;1;-32768;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;-32768;3;2;1;3;2;1;-32768;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-2;-32767;-1;-2;-3;-3;-3;-3;-32767;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-32767;-1;-2;-2;-2;-2;1;-32767;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;-32767;-1;-1;-1;-1;2;1;-32767;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;-32767;-1;-2;-3;3;2;1;-32767;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-32767; + -1;-2;3;2;1;1;-32767;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;-32767;-1;3;2;1; + 2;1;-32767;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-32767;3;2;1;3;2;1;-32767;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;-32766;-1;-2;-3;-3;-3;-3;-32766;-1;-2;-3;-3;-3;-3;2;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-32766;-1;-2;-2;-2;-2;1;-32766;-1;-2;-2;-2;-2;1;2;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;-32766;-1;-1;-1;-1;2;1;-32766;-1;-1;-1;-1;2;1;2;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;-32766;-1;-2;-3;3;2;1;-32766;-1;-2;-3;3;2;1;2;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;-32766;-1;-2;3;2;1;1;-32766;-1;-2;3;2;1;1;2;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + -32766;-1;3;2;1;2;1;-32766;-1;3;2;1;2;1;2;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;-32766;3;2;1; + 3;2;1;-32766;3;2;1;3;2;1;2;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.N.less_than``() = + validate (Int16s.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Int16s.Collection.UnionWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.N.greater_than``() = + validate (Int16s.Collection.UnionWrapArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Int16s.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int16s.Collection.ValueArray C.I.equals``() = + validate (Int16s.Collection.ValueArray) C.I.equals [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueArray C.I.equal``() = + validate (Int16s.Collection.ValueArray) C.I.equal [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueArray C.I.not_equal``() = + validate (Int16s.Collection.ValueArray) C.I.not_equal [| + 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ValueArray C.I.compare``() = + validate (Int16s.Collection.ValueArray) C.I.compare [| + 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ValueArray C.I.less_than``() = + validate (Int16s.Collection.ValueArray) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.ValueArray C.I.less_or_equal``() = + validate (Int16s.Collection.ValueArray) C.I.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueArray C.I.greater_than``() = + validate (Int16s.Collection.ValueArray) C.I.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.ValueArray C.I.greater_or_equal``() = + validate (Int16s.Collection.ValueArray) C.I.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.ValueArray C.N.equals``() = + validate (Int16s.Collection.ValueArray) C.N.equals [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueArray C.N.equal``() = + validate (Int16s.Collection.ValueArray) C.N.equal [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueArray C.N.not_equal``() = + validate (Int16s.Collection.ValueArray) C.N.not_equal [| + 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ValueArray C.N.compare``() = + validate (Int16s.Collection.ValueArray) C.N.compare [| + 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ValueArray C.N.less_than``() = + validate (Int16s.Collection.ValueArray) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.ValueArray C.N.less_or_equal``() = + validate (Int16s.Collection.ValueArray) C.N.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueArray C.N.greater_than``() = + validate (Int16s.Collection.ValueArray) C.N.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.ValueArray C.N.greater_or_equal``() = + validate (Int16s.Collection.ValueArray) C.N.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.I.equals``() = + validate (Int16s.Collection.ValueWrapArray) C.I.equals [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.I.equal``() = + validate (Int16s.Collection.ValueWrapArray) C.I.equal [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.I.not_equal``() = + validate (Int16s.Collection.ValueWrapArray) C.I.not_equal [| + 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.I.compare``() = + validate (Int16s.Collection.ValueWrapArray) C.I.compare [| + 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.I.less_than``() = + validate (Int16s.Collection.ValueWrapArray) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Int16s.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.I.greater_than``() = + validate (Int16s.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Int16s.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.N.equals``() = + validate (Int16s.Collection.ValueWrapArray) C.N.equals [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.N.equal``() = + validate (Int16s.Collection.ValueWrapArray) C.N.equal [| + 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.N.not_equal``() = + validate (Int16s.Collection.ValueWrapArray) C.N.not_equal [| + 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.N.compare``() = + validate (Int16s.Collection.ValueWrapArray) C.N.compare [| + 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.N.less_than``() = + validate (Int16s.Collection.ValueWrapArray) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Int16s.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.N.greater_than``() = + validate (Int16s.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Int16s.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.I.equals``() = + validate (Int16s.Collection.ArrayArray) C.I.equals [| + 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.I.equal``() = + validate (Int16s.Collection.ArrayArray) C.I.equal [| + 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.I.not_equal``() = + validate (Int16s.Collection.ArrayArray) C.I.not_equal [| + 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.I.compare``() = + validate (Int16s.Collection.ArrayArray) C.I.compare [| + 0;0;32768;32767;32766;-1;-1;-1;-1;-1;0;0;32768;32767;32766;-1;-1;-1;-1;-1;-32768;-32768;0;-1;-2;-1;-1;-1;-1;-1;-32767;-32767;1;0;-1;-1;-1;-1;-1;-1; + -32766;-32766;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;32768;32768;32767;32766;1;1;1;1;1;-32768;0;32768;32767;32766;1;1;1;1;1;-32768;-32768;0;-1;-2; + 1;1;1;1;1;-32767;-32767;1;0;-1;1;1;1;1;1;-32766;-32766;2;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.I.less_than``() = + validate (Int16s.Collection.ArrayArray) C.I.less_than [| + 0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;1;1; + 0;0;0;0;0;1;1;0;0;1;0;0;0;0;0;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.I.less_or_equal``() = + validate (Int16s.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;0;0;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1; + 0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.I.greater_than``() = + validate (Int16s.Collection.ArrayArray) C.I.greater_than [| + 0;0;1;1;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0; + 1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Int16s.Collection.ArrayArray) C.I.greater_or_equal [| + 1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0; + 0;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;0;0; + 1;1;1;1;1;0;0;1;1;0;1;1;1;1;1;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.N.equals``() = + validate (Int16s.Collection.ArrayArray) C.N.equals [| + 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.N.equal``() = + validate (Int16s.Collection.ArrayArray) C.N.equal [| + 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.N.not_equal``() = + validate (Int16s.Collection.ArrayArray) C.N.not_equal [| + 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.N.compare``() = + validate (Int16s.Collection.ArrayArray) C.N.compare [| + 0;0;32768;32767;32766;-1;-1;-1;-1;-1;0;0;32768;32767;32766;-1;-1;-1;-1;-1;-32768;-32768;0;-1;-2;-1;-1;-1;-1;-1;-32767;-32767;1;0;-1;-1;-1;-1;-1;-1; + -32766;-32766;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;32768;32768;32767;32766;1;1;1;1;1;-32768;0;32768;32767;32766;1;1;1;1;1;-32768;-32768;0;-1;-2; + 1;1;1;1;1;-32767;-32767;1;0;-1;1;1;1;1;1;-32766;-32766;2;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.N.less_than``() = + validate (Int16s.Collection.ArrayArray) C.N.less_than [| + 0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;1;1; + 0;0;0;0;0;1;1;0;0;1;0;0;0;0;0;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.N.less_or_equal``() = + validate (Int16s.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;0;0;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1; + 0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.N.greater_than``() = + validate (Int16s.Collection.ArrayArray) C.N.greater_than [| + 0;0;1;1;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0; + 1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Int16s.Collection.ArrayArray) C.N.greater_or_equal [| + 1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0; + 0;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;0;0; + 1;1;1;1;1;0;0;1;1;0;1;1;1;1;1;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.ListArray C.I.equals``() = + validate (Int16s.Collection.ListArray) C.I.equals [| + 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ListArray C.I.equal``() = + validate (Int16s.Collection.ListArray) C.I.equal [| + 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ListArray C.I.not_equal``() = + validate (Int16s.Collection.ListArray) C.I.not_equal [| + 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ListArray C.I.compare``() = + validate (Int16s.Collection.ListArray) C.I.compare [| + 0;0;32768;32767;32766;-1;-1;32768;32767;32766;0;0;32768;32767;32766;-1;-1;32768;32767;32766;-32768;-32768;0;-1;-2;-32768;-32768;-1;-1;-2;-32767;-32767;1;0;-1;-32767;-32767;1;-1;-1; + -32766;-32766;2;1;0;-32766;-32766;2;1;-1;1;1;32768;32767;32766;0;32768;32768;32767;32766;1;1;32768;32767;32766;-32768;0;32768;32767;32766;-32768;-32768;1;-1;-2;-32768;-32768;0;-1;-2; + -32767;-32767;1;1;-1;-32767;-32767;1;0;-1;-32766;-32766;2;1;1;-32766;-32766;2;1;0 + |] + + [] + member __.``Int16s.Collection.ListArray C.I.less_than``() = + validate (Int16s.Collection.ListArray) C.I.less_than [| + 0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;1;1; + 1;1;0;0;0;1;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1; + 1;1;0;0;1;1;1;0;0;1;1;1;0;0;0;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.ListArray C.I.less_or_equal``() = + validate (Int16s.Collection.ListArray) C.I.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;1;1; + 1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1; + 1;1;0;0;1;1;1;0;1;1;1;1;0;0;0;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.ListArray C.I.greater_than``() = + validate (Int16s.Collection.ListArray) C.I.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0; + 0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0; + 0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.ListArray C.I.greater_or_equal``() = + validate (Int16s.Collection.ListArray) C.I.greater_or_equal [| + 1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0; + 0;0;1;1;1;0;0;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0; + 0;0;1;1;0;0;0;1;1;0;0;0;1;1;1;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.ListArray C.N.equals``() = + validate (Int16s.Collection.ListArray) C.N.equals [| + 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ListArray C.N.equal``() = + validate (Int16s.Collection.ListArray) C.N.equal [| + 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ListArray C.N.not_equal``() = + validate (Int16s.Collection.ListArray) C.N.not_equal [| + 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ListArray C.N.compare``() = + validate (Int16s.Collection.ListArray) C.N.compare [| + 0;0;32768;32767;32766;-1;-1;32768;32767;32766;0;0;32768;32767;32766;-1;-1;32768;32767;32766;-32768;-32768;0;-1;-2;-32768;-32768;-1;-1;-2;-32767;-32767;1;0;-1;-32767;-32767;1;-1;-1; + -32766;-32766;2;1;0;-32766;-32766;2;1;-1;1;1;32768;32767;32766;0;32768;32768;32767;32766;1;1;32768;32767;32766;-32768;0;32768;32767;32766;-32768;-32768;1;-1;-2;-32768;-32768;0;-1;-2; + -32767;-32767;1;1;-1;-32767;-32767;1;0;-1;-32766;-32766;2;1;1;-32766;-32766;2;1;0 + |] + + [] + member __.``Int16s.Collection.ListArray C.N.less_than``() = + validate (Int16s.Collection.ListArray) C.N.less_than [| + 0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;1;1; + 1;1;0;0;0;1;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1; + 1;1;0;0;1;1;1;0;0;1;1;1;0;0;0;1;1;0;0;0 + |] + + [] + member __.``Int16s.Collection.ListArray C.N.less_or_equal``() = + validate (Int16s.Collection.ListArray) C.N.less_or_equal [| + 1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;1;1; + 1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1; + 1;1;0;0;1;1;1;0;1;1;1;1;0;0;0;1;1;0;0;1 + |] + + [] + member __.``Int16s.Collection.ListArray C.N.greater_than``() = + validate (Int16s.Collection.ListArray) C.N.greater_than [| + 0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0; + 0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0; + 0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;0;0;1;1;0 + |] + + [] + member __.``Int16s.Collection.ListArray C.N.greater_or_equal``() = + validate (Int16s.Collection.ListArray) C.N.greater_or_equal [| + 1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0; + 0;0;1;1;1;0;0;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0; + 0;0;1;1;0;0;0;1;1;0;0;0;1;1;1;0;0;1;1;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1; + -1;-1;1;1;0;-1;1;1;1;-1;0;0;1;1;1;0;1;1;1;1;-1;-1;1;-1;-1;-1;0;1;-1;-1;-1;-1;1;-1;-1;-1;-1;0;-1;-1; + -1;-1;1;1;-1;-1;1;1;0;-1;-1;-1;1;1;1;-1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1; + 1;1;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;1;1; + 1;1;0;0;1;1;0;0;0;1;1;1;0;0;0;1;0;0;0;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1; + 1;1;0;0;1;1;0;0;0;1;1;1;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;1;0;0; + 0;0;1;1;0;0;1;1;1;0;0;0;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;1;1;0;0;1;1;0;0;0;0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;0;0; + 0;0;1;1;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;0;0; + 0;0;1;1;0;0;1;1;1;0;0;0;1;1;1;0;1;1;1;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1; + -1;-1;1;1;0;-1;1;1;1;-1;0;0;1;1;1;0;1;1;1;1;-1;-1;1;-1;-1;-1;0;1;-1;-1;-1;-1;1;-1;-1;-1;-1;0;-1;-1; + -1;-1;1;1;-1;-1;1;1;0;-1;-1;-1;1;1;1;-1;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1; + 1;1;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;1;1; + 1;1;0;0;1;1;0;0;0;1;1;1;0;0;0;1;0;0;0;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1; + 1;1;0;0;1;1;0;0;0;1;1;1;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;1;0;0; + 0;0;1;1;0;0;1;1;1;0;0;0;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;1;1;0;0;1;1;0;0;0;0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;0;0; + 0;0;1;1;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;0;0; + 0;0;1;1;0;0;1;1;1;0;0;0;1;1;1;0;1;1;1;1 + |] + + [] + member __.``NullableInt16s.Collection.Array E.I.equals``() = + validate (NullableInt16s.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.Array E.I.equal``() = + validate (NullableInt16s.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.Array E.I.not_equal``() = + validate (NullableInt16s.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.Array E.N.equals``() = + validate (NullableInt16s.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.Array E.N.equal``() = + validate (NullableInt16s.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.Array E.N.not_equal``() = + validate (NullableInt16s.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.OptionArray E.I.equals``() = + validate (NullableInt16s.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.OptionArray E.I.equal``() = + validate (NullableInt16s.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.OptionArray E.I.not_equal``() = + validate (NullableInt16s.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.OptionArray E.N.equals``() = + validate (NullableInt16s.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.OptionArray E.N.equal``() = + validate (NullableInt16s.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.OptionArray E.N.not_equal``() = + validate (NullableInt16s.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.RefArray E.I.equals``() = + validate (NullableInt16s.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.RefArray E.I.equal``() = + validate (NullableInt16s.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.RefArray E.I.not_equal``() = + validate (NullableInt16s.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.RefArray E.N.equals``() = + validate (NullableInt16s.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.RefArray E.N.equal``() = + validate (NullableInt16s.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.RefArray E.N.not_equal``() = + validate (NullableInt16s.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.RefWrapArray E.I.equals``() = + validate (NullableInt16s.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.RefWrapArray E.I.equal``() = + validate (NullableInt16s.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableInt16s.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.RefWrapArray E.N.equals``() = + validate (NullableInt16s.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.RefWrapArray E.N.equal``() = + validate (NullableInt16s.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableInt16s.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.UnionArray E.I.equals``() = + validate (NullableInt16s.Collection.UnionArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0; + 0;0;0;1;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;1; + 0;0;0;0;0;0;1;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;1;0;0;0;0; + 0;0;1;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;1;0; + 0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.UnionArray E.I.equal``() = + validate (NullableInt16s.Collection.UnionArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0; + 0;0;0;1;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;1; + 0;0;0;0;0;0;1;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;1;0;0;0;0; + 0;0;1;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;1;0; + 0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.UnionArray E.I.not_equal``() = + validate (NullableInt16s.Collection.UnionArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1; + 0;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;1;0;1;1;1; + 1;1;1;0;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;1;0; + 1;1;1;1;1;1;0;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;1;1;1;1; + 1;1;0;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;1;0;1; + 1;1;1;1;1;0;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; + 1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.UnionArray E.N.equals``() = + validate (NullableInt16s.Collection.UnionArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0; + 0;0;0;1;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;1; + 0;0;0;0;0;0;1;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;1;0;0;0;0; + 0;0;1;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;1;0; + 0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.UnionArray E.N.equal``() = + validate (NullableInt16s.Collection.UnionArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0; + 0;0;0;1;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;1; + 0;0;0;0;0;0;1;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;1;0;0;0;0; + 0;0;1;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;1;0; + 0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.UnionArray E.N.not_equal``() = + validate (NullableInt16s.Collection.UnionArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1; + 0;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;1;0;1;1;1; + 1;1;1;0;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;1;0; + 1;1;1;1;1;1;0;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;1;1;1;1; + 1;1;0;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;1;0;1; + 1;1;1;1;1;0;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; + 1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.UnionWrapArray E.I.equals``() = + validate (NullableInt16s.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0; + 0;0;0;1;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;1; + 0;0;0;0;0;0;1;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;1;0;0;0;0; + 0;0;1;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;1;0; + 0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.UnionWrapArray E.I.equal``() = + validate (NullableInt16s.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0; + 0;0;0;1;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;1; + 0;0;0;0;0;0;1;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;1;0;0;0;0; + 0;0;1;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;1;0; + 0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableInt16s.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1; + 0;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;1;0;1;1;1; + 1;1;1;0;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;1;0; + 1;1;1;1;1;1;0;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;1;1;1;1; + 1;1;0;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;1;0;1; + 1;1;1;1;1;0;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; + 1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.UnionWrapArray E.N.equals``() = + validate (NullableInt16s.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0; + 0;0;0;1;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;1; + 0;0;0;0;0;0;1;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;1;0;0;0;0; + 0;0;1;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;1;0; + 0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.UnionWrapArray E.N.equal``() = + validate (NullableInt16s.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0; + 1;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;1;0;0;0; + 0;0;0;1;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;1; + 0;0;0;0;0;0;1;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;1;0;0;0;0; + 0;0;1;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;1;0; + 0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableInt16s.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1; + 0;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;1;0;1;1;1; + 1;1;1;0;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;1;0; + 1;1;1;1;1;1;0;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;1;1;1;1; + 1;1;0;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;1;0;1; + 1;1;1;1;1;0;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; + 1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.ValueArray E.I.equals``() = + validate (NullableInt16s.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ValueArray E.I.equal``() = + validate (NullableInt16s.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ValueArray E.I.not_equal``() = + validate (NullableInt16s.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.ValueArray E.N.equals``() = + validate (NullableInt16s.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ValueArray E.N.equal``() = + validate (NullableInt16s.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ValueArray E.N.not_equal``() = + validate (NullableInt16s.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.ValueWrapArray E.I.equals``() = + validate (NullableInt16s.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ValueWrapArray E.I.equal``() = + validate (NullableInt16s.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableInt16s.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.ValueWrapArray E.N.equals``() = + validate (NullableInt16s.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ValueWrapArray E.N.equal``() = + validate (NullableInt16s.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableInt16s.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.ArrayArray E.I.equals``() = + validate (NullableInt16s.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ArrayArray E.I.equal``() = + validate (NullableInt16s.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ArrayArray E.I.not_equal``() = + validate (NullableInt16s.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.ArrayArray E.N.equals``() = + validate (NullableInt16s.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ArrayArray E.N.equal``() = + validate (NullableInt16s.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ArrayArray E.N.not_equal``() = + validate (NullableInt16s.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.ListArray E.I.equals``() = + validate (NullableInt16s.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ListArray E.I.equal``() = + validate (NullableInt16s.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ListArray E.I.not_equal``() = + validate (NullableInt16s.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt16s.Collection.ListArray E.N.equals``() = + validate (NullableInt16s.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ListArray E.N.equal``() = + validate (NullableInt16s.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt16s.Collection.ListArray E.N.not_equal``() = + validate (NullableInt16s.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.Array C.I.equals``() = + validate (Int32s.Collection.Array) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.Array C.I.equal``() = + validate (Int32s.Collection.Array) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.Array C.I.not_equal``() = + validate (Int32s.Collection.Array) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.Array C.I.compare``() = + validate (Int32s.Collection.Array) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.Array C.I.less_than``() = + validate (Int32s.Collection.Array) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.Array C.I.less_or_equal``() = + validate (Int32s.Collection.Array) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.Array C.I.greater_than``() = + validate (Int32s.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.Array C.I.greater_or_equal``() = + validate (Int32s.Collection.Array) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.Array C.N.equals``() = + validate (Int32s.Collection.Array) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.Array C.N.equal``() = + validate (Int32s.Collection.Array) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.Array C.N.not_equal``() = + validate (Int32s.Collection.Array) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.Array C.N.compare``() = + validate (Int32s.Collection.Array) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.Array C.N.less_than``() = + validate (Int32s.Collection.Array) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.Array C.N.less_or_equal``() = + validate (Int32s.Collection.Array) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.Array C.N.greater_than``() = + validate (Int32s.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.Array C.N.greater_or_equal``() = + validate (Int32s.Collection.Array) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.OptionArray C.I.equals``() = + validate (Int32s.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.OptionArray C.I.equal``() = + validate (Int32s.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.OptionArray C.I.not_equal``() = + validate (Int32s.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.OptionArray C.I.compare``() = + validate (Int32s.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.OptionArray C.I.less_than``() = + validate (Int32s.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.OptionArray C.I.less_or_equal``() = + validate (Int32s.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.OptionArray C.I.greater_than``() = + validate (Int32s.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.OptionArray C.I.greater_or_equal``() = + validate (Int32s.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.OptionArray C.N.equals``() = + validate (Int32s.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.OptionArray C.N.equal``() = + validate (Int32s.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.OptionArray C.N.not_equal``() = + validate (Int32s.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.OptionArray C.N.compare``() = + validate (Int32s.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.OptionArray C.N.less_than``() = + validate (Int32s.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.OptionArray C.N.less_or_equal``() = + validate (Int32s.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.OptionArray C.N.greater_than``() = + validate (Int32s.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.OptionArray C.N.greater_or_equal``() = + validate (Int32s.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.RefArray C.I.equals``() = + validate (Int32s.Collection.RefArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefArray C.I.equal``() = + validate (Int32s.Collection.RefArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefArray C.I.not_equal``() = + validate (Int32s.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefArray C.I.compare``() = + validate (Int32s.Collection.RefArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefArray C.I.less_than``() = + validate (Int32s.Collection.RefArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.RefArray C.I.less_or_equal``() = + validate (Int32s.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefArray C.I.greater_than``() = + validate (Int32s.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefArray C.I.greater_or_equal``() = + validate (Int32s.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.RefArray C.N.equals``() = + validate (Int32s.Collection.RefArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefArray C.N.equal``() = + validate (Int32s.Collection.RefArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefArray C.N.not_equal``() = + validate (Int32s.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefArray C.N.compare``() = + validate (Int32s.Collection.RefArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefArray C.N.less_than``() = + validate (Int32s.Collection.RefArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.RefArray C.N.less_or_equal``() = + validate (Int32s.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefArray C.N.greater_than``() = + validate (Int32s.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefArray C.N.greater_or_equal``() = + validate (Int32s.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.I.equals``() = + validate (Int32s.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.I.equal``() = + validate (Int32s.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.I.not_equal``() = + validate (Int32s.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.I.compare``() = + validate (Int32s.Collection.RefWrapArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.I.less_than``() = + validate (Int32s.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Int32s.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.I.greater_than``() = + validate (Int32s.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Int32s.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.N.equals``() = + validate (Int32s.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.N.equal``() = + validate (Int32s.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.N.not_equal``() = + validate (Int32s.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.N.compare``() = + validate (Int32s.Collection.RefWrapArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.N.less_than``() = + validate (Int32s.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Int32s.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.N.greater_than``() = + validate (Int32s.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Int32s.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.UnionArray C.I.equals``() = + validate (Int32s.Collection.UnionArray) C.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int32s.Collection.UnionArray C.I.equal``() = + validate (Int32s.Collection.UnionArray) C.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int32s.Collection.UnionArray C.I.not_equal``() = + validate (Int32s.Collection.UnionArray) C.I.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int32s.Collection.UnionArray C.I.compare``() = + validate (Int32s.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int32s.Collection.UnionArray C.I.less_than``() = + validate (Int32s.Collection.UnionArray) C.I.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int32s.Collection.UnionArray C.I.less_or_equal``() = + validate (Int32s.Collection.UnionArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.UnionArray C.I.greater_than``() = + validate (Int32s.Collection.UnionArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.UnionArray C.I.greater_or_equal``() = + validate (Int32s.Collection.UnionArray) C.I.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int32s.Collection.UnionArray C.N.equals``() = + validate (Int32s.Collection.UnionArray) C.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int32s.Collection.UnionArray C.N.equal``() = + validate (Int32s.Collection.UnionArray) C.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int32s.Collection.UnionArray C.N.not_equal``() = + validate (Int32s.Collection.UnionArray) C.N.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int32s.Collection.UnionArray C.N.compare``() = + validate (Int32s.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int32s.Collection.UnionArray C.N.less_than``() = + validate (Int32s.Collection.UnionArray) C.N.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int32s.Collection.UnionArray C.N.less_or_equal``() = + validate (Int32s.Collection.UnionArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.UnionArray C.N.greater_than``() = + validate (Int32s.Collection.UnionArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.UnionArray C.N.greater_or_equal``() = + validate (Int32s.Collection.UnionArray) C.N.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.I.equals``() = + validate (Int32s.Collection.UnionWrapArray) C.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.I.equal``() = + validate (Int32s.Collection.UnionWrapArray) C.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.I.not_equal``() = + validate (Int32s.Collection.UnionWrapArray) C.I.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.I.compare``() = + validate (Int32s.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.I.less_than``() = + validate (Int32s.Collection.UnionWrapArray) C.I.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Int32s.Collection.UnionWrapArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.I.greater_than``() = + validate (Int32s.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Int32s.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.N.equals``() = + validate (Int32s.Collection.UnionWrapArray) C.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.N.equal``() = + validate (Int32s.Collection.UnionWrapArray) C.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.N.not_equal``() = + validate (Int32s.Collection.UnionWrapArray) C.N.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.N.compare``() = + validate (Int32s.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.N.less_than``() = + validate (Int32s.Collection.UnionWrapArray) C.N.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Int32s.Collection.UnionWrapArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.N.greater_than``() = + validate (Int32s.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Int32s.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int32s.Collection.ValueArray C.I.equals``() = + validate (Int32s.Collection.ValueArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueArray C.I.equal``() = + validate (Int32s.Collection.ValueArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueArray C.I.not_equal``() = + validate (Int32s.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueArray C.I.compare``() = + validate (Int32s.Collection.ValueArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueArray C.I.less_than``() = + validate (Int32s.Collection.ValueArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.ValueArray C.I.less_or_equal``() = + validate (Int32s.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueArray C.I.greater_than``() = + validate (Int32s.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueArray C.I.greater_or_equal``() = + validate (Int32s.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.ValueArray C.N.equals``() = + validate (Int32s.Collection.ValueArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueArray C.N.equal``() = + validate (Int32s.Collection.ValueArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueArray C.N.not_equal``() = + validate (Int32s.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueArray C.N.compare``() = + validate (Int32s.Collection.ValueArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueArray C.N.less_than``() = + validate (Int32s.Collection.ValueArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.ValueArray C.N.less_or_equal``() = + validate (Int32s.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueArray C.N.greater_than``() = + validate (Int32s.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueArray C.N.greater_or_equal``() = + validate (Int32s.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.I.equals``() = + validate (Int32s.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.I.equal``() = + validate (Int32s.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.I.not_equal``() = + validate (Int32s.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.I.compare``() = + validate (Int32s.Collection.ValueWrapArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.I.less_than``() = + validate (Int32s.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Int32s.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.I.greater_than``() = + validate (Int32s.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Int32s.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.N.equals``() = + validate (Int32s.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.N.equal``() = + validate (Int32s.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.N.not_equal``() = + validate (Int32s.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.N.compare``() = + validate (Int32s.Collection.ValueWrapArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.N.less_than``() = + validate (Int32s.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Int32s.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.N.greater_than``() = + validate (Int32s.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Int32s.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.I.equals``() = + validate (Int32s.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.I.equal``() = + validate (Int32s.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.I.not_equal``() = + validate (Int32s.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.I.compare``() = + validate (Int32s.Collection.ArrayArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.I.less_than``() = + validate (Int32s.Collection.ArrayArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.I.less_or_equal``() = + validate (Int32s.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.I.greater_than``() = + validate (Int32s.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Int32s.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.N.equals``() = + validate (Int32s.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.N.equal``() = + validate (Int32s.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.N.not_equal``() = + validate (Int32s.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.N.compare``() = + validate (Int32s.Collection.ArrayArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.N.less_than``() = + validate (Int32s.Collection.ArrayArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.N.less_or_equal``() = + validate (Int32s.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.N.greater_than``() = + validate (Int32s.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Int32s.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.ListArray C.I.equals``() = + validate (Int32s.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ListArray C.I.equal``() = + validate (Int32s.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ListArray C.I.not_equal``() = + validate (Int32s.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ListArray C.I.compare``() = + validate (Int32s.Collection.ListArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; + 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; + 1;-1;1;1;-1;1;-1;1;0;-1;1;-1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ListArray C.I.less_than``() = + validate (Int32s.Collection.ListArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.ListArray C.I.less_or_equal``() = + validate (Int32s.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.ListArray C.I.greater_than``() = + validate (Int32s.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.ListArray C.I.greater_or_equal``() = + validate (Int32s.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.ListArray C.N.equals``() = + validate (Int32s.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ListArray C.N.equal``() = + validate (Int32s.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ListArray C.N.not_equal``() = + validate (Int32s.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ListArray C.N.compare``() = + validate (Int32s.Collection.ListArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; + 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; + 1;-1;1;1;-1;1;-1;1;0;-1;1;-1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ListArray C.N.less_than``() = + validate (Int32s.Collection.ListArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Int32s.Collection.ListArray C.N.less_or_equal``() = + validate (Int32s.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Int32s.Collection.ListArray C.N.greater_than``() = + validate (Int32s.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Int32s.Collection.ListArray C.N.greater_or_equal``() = + validate (Int32s.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; + 0;1;0;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; + 1;0;1;1;0;1;1;1;0;1;1;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; + 0;1;0;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; + 1;0;1;1;0;1;1;1;0;1;1;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.Array E.I.equals``() = + validate (NullableInt32s.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.Array E.I.equal``() = + validate (NullableInt32s.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.Array E.I.not_equal``() = + validate (NullableInt32s.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.Array E.N.equals``() = + validate (NullableInt32s.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.Array E.N.equal``() = + validate (NullableInt32s.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.Array E.N.not_equal``() = + validate (NullableInt32s.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.OptionArray E.I.equals``() = + validate (NullableInt32s.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.OptionArray E.I.equal``() = + validate (NullableInt32s.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.OptionArray E.I.not_equal``() = + validate (NullableInt32s.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.OptionArray E.N.equals``() = + validate (NullableInt32s.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.OptionArray E.N.equal``() = + validate (NullableInt32s.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.OptionArray E.N.not_equal``() = + validate (NullableInt32s.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.RefArray E.I.equals``() = + validate (NullableInt32s.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.RefArray E.I.equal``() = + validate (NullableInt32s.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.RefArray E.I.not_equal``() = + validate (NullableInt32s.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.RefArray E.N.equals``() = + validate (NullableInt32s.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.RefArray E.N.equal``() = + validate (NullableInt32s.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.RefArray E.N.not_equal``() = + validate (NullableInt32s.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.RefWrapArray E.I.equals``() = + validate (NullableInt32s.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.RefWrapArray E.I.equal``() = + validate (NullableInt32s.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableInt32s.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.RefWrapArray E.N.equals``() = + validate (NullableInt32s.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.RefWrapArray E.N.equal``() = + validate (NullableInt32s.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableInt32s.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.UnionArray E.I.equals``() = + validate (NullableInt32s.Collection.UnionArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.UnionArray E.I.equal``() = + validate (NullableInt32s.Collection.UnionArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.UnionArray E.I.not_equal``() = + validate (NullableInt32s.Collection.UnionArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.UnionArray E.N.equals``() = + validate (NullableInt32s.Collection.UnionArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.UnionArray E.N.equal``() = + validate (NullableInt32s.Collection.UnionArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.UnionArray E.N.not_equal``() = + validate (NullableInt32s.Collection.UnionArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.UnionWrapArray E.I.equals``() = + validate (NullableInt32s.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.UnionWrapArray E.I.equal``() = + validate (NullableInt32s.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableInt32s.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.UnionWrapArray E.N.equals``() = + validate (NullableInt32s.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.UnionWrapArray E.N.equal``() = + validate (NullableInt32s.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableInt32s.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.ValueArray E.I.equals``() = + validate (NullableInt32s.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ValueArray E.I.equal``() = + validate (NullableInt32s.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ValueArray E.I.not_equal``() = + validate (NullableInt32s.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.ValueArray E.N.equals``() = + validate (NullableInt32s.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ValueArray E.N.equal``() = + validate (NullableInt32s.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ValueArray E.N.not_equal``() = + validate (NullableInt32s.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.ValueWrapArray E.I.equals``() = + validate (NullableInt32s.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ValueWrapArray E.I.equal``() = + validate (NullableInt32s.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableInt32s.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.ValueWrapArray E.N.equals``() = + validate (NullableInt32s.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ValueWrapArray E.N.equal``() = + validate (NullableInt32s.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableInt32s.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.ArrayArray E.I.equals``() = + validate (NullableInt32s.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ArrayArray E.I.equal``() = + validate (NullableInt32s.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ArrayArray E.I.not_equal``() = + validate (NullableInt32s.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.ArrayArray E.N.equals``() = + validate (NullableInt32s.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ArrayArray E.N.equal``() = + validate (NullableInt32s.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ArrayArray E.N.not_equal``() = + validate (NullableInt32s.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.ListArray E.I.equals``() = + validate (NullableInt32s.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ListArray E.I.equal``() = + validate (NullableInt32s.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ListArray E.I.not_equal``() = + validate (NullableInt32s.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt32s.Collection.ListArray E.N.equals``() = + validate (NullableInt32s.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ListArray E.N.equal``() = + validate (NullableInt32s.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt32s.Collection.ListArray E.N.not_equal``() = + validate (NullableInt32s.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.Array C.I.equals``() = + validate (Int64s.Collection.Array) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.Array C.I.equal``() = + validate (Int64s.Collection.Array) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.Array C.I.not_equal``() = + validate (Int64s.Collection.Array) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.Array C.I.compare``() = + validate (Int64s.Collection.Array) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.Array C.I.less_than``() = + validate (Int64s.Collection.Array) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.Array C.I.less_or_equal``() = + validate (Int64s.Collection.Array) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.Array C.I.greater_than``() = + validate (Int64s.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.Array C.I.greater_or_equal``() = + validate (Int64s.Collection.Array) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.Array C.N.equals``() = + validate (Int64s.Collection.Array) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.Array C.N.equal``() = + validate (Int64s.Collection.Array) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.Array C.N.not_equal``() = + validate (Int64s.Collection.Array) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.Array C.N.compare``() = + validate (Int64s.Collection.Array) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.Array C.N.less_than``() = + validate (Int64s.Collection.Array) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.Array C.N.less_or_equal``() = + validate (Int64s.Collection.Array) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.Array C.N.greater_than``() = + validate (Int64s.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.Array C.N.greater_or_equal``() = + validate (Int64s.Collection.Array) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.OptionArray C.I.equals``() = + validate (Int64s.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.OptionArray C.I.equal``() = + validate (Int64s.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.OptionArray C.I.not_equal``() = + validate (Int64s.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.OptionArray C.I.compare``() = + validate (Int64s.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.OptionArray C.I.less_than``() = + validate (Int64s.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.OptionArray C.I.less_or_equal``() = + validate (Int64s.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.OptionArray C.I.greater_than``() = + validate (Int64s.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.OptionArray C.I.greater_or_equal``() = + validate (Int64s.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.OptionArray C.N.equals``() = + validate (Int64s.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.OptionArray C.N.equal``() = + validate (Int64s.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.OptionArray C.N.not_equal``() = + validate (Int64s.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.OptionArray C.N.compare``() = + validate (Int64s.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.OptionArray C.N.less_than``() = + validate (Int64s.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.OptionArray C.N.less_or_equal``() = + validate (Int64s.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.OptionArray C.N.greater_than``() = + validate (Int64s.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.OptionArray C.N.greater_or_equal``() = + validate (Int64s.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.RefArray C.I.equals``() = + validate (Int64s.Collection.RefArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefArray C.I.equal``() = + validate (Int64s.Collection.RefArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefArray C.I.not_equal``() = + validate (Int64s.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefArray C.I.compare``() = + validate (Int64s.Collection.RefArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefArray C.I.less_than``() = + validate (Int64s.Collection.RefArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.RefArray C.I.less_or_equal``() = + validate (Int64s.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefArray C.I.greater_than``() = + validate (Int64s.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefArray C.I.greater_or_equal``() = + validate (Int64s.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.RefArray C.N.equals``() = + validate (Int64s.Collection.RefArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefArray C.N.equal``() = + validate (Int64s.Collection.RefArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefArray C.N.not_equal``() = + validate (Int64s.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefArray C.N.compare``() = + validate (Int64s.Collection.RefArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefArray C.N.less_than``() = + validate (Int64s.Collection.RefArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.RefArray C.N.less_or_equal``() = + validate (Int64s.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefArray C.N.greater_than``() = + validate (Int64s.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefArray C.N.greater_or_equal``() = + validate (Int64s.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.I.equals``() = + validate (Int64s.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.I.equal``() = + validate (Int64s.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.I.not_equal``() = + validate (Int64s.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.I.compare``() = + validate (Int64s.Collection.RefWrapArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.I.less_than``() = + validate (Int64s.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Int64s.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.I.greater_than``() = + validate (Int64s.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Int64s.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.N.equals``() = + validate (Int64s.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.N.equal``() = + validate (Int64s.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.N.not_equal``() = + validate (Int64s.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.N.compare``() = + validate (Int64s.Collection.RefWrapArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.N.less_than``() = + validate (Int64s.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Int64s.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.N.greater_than``() = + validate (Int64s.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Int64s.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.UnionArray C.I.equals``() = + validate (Int64s.Collection.UnionArray) C.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int64s.Collection.UnionArray C.I.equal``() = + validate (Int64s.Collection.UnionArray) C.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int64s.Collection.UnionArray C.I.not_equal``() = + validate (Int64s.Collection.UnionArray) C.I.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int64s.Collection.UnionArray C.I.compare``() = + validate (Int64s.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int64s.Collection.UnionArray C.I.less_than``() = + validate (Int64s.Collection.UnionArray) C.I.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int64s.Collection.UnionArray C.I.less_or_equal``() = + validate (Int64s.Collection.UnionArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.UnionArray C.I.greater_than``() = + validate (Int64s.Collection.UnionArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.UnionArray C.I.greater_or_equal``() = + validate (Int64s.Collection.UnionArray) C.I.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int64s.Collection.UnionArray C.N.equals``() = + validate (Int64s.Collection.UnionArray) C.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int64s.Collection.UnionArray C.N.equal``() = + validate (Int64s.Collection.UnionArray) C.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int64s.Collection.UnionArray C.N.not_equal``() = + validate (Int64s.Collection.UnionArray) C.N.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int64s.Collection.UnionArray C.N.compare``() = + validate (Int64s.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int64s.Collection.UnionArray C.N.less_than``() = + validate (Int64s.Collection.UnionArray) C.N.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int64s.Collection.UnionArray C.N.less_or_equal``() = + validate (Int64s.Collection.UnionArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.UnionArray C.N.greater_than``() = + validate (Int64s.Collection.UnionArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.UnionArray C.N.greater_or_equal``() = + validate (Int64s.Collection.UnionArray) C.N.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.I.equals``() = + validate (Int64s.Collection.UnionWrapArray) C.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.I.equal``() = + validate (Int64s.Collection.UnionWrapArray) C.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.I.not_equal``() = + validate (Int64s.Collection.UnionWrapArray) C.I.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.I.compare``() = + validate (Int64s.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.I.less_than``() = + validate (Int64s.Collection.UnionWrapArray) C.I.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Int64s.Collection.UnionWrapArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.I.greater_than``() = + validate (Int64s.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Int64s.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.N.equals``() = + validate (Int64s.Collection.UnionWrapArray) C.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.N.equal``() = + validate (Int64s.Collection.UnionWrapArray) C.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.N.not_equal``() = + validate (Int64s.Collection.UnionWrapArray) C.N.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.N.compare``() = + validate (Int64s.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.N.less_than``() = + validate (Int64s.Collection.UnionWrapArray) C.N.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Int64s.Collection.UnionWrapArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.N.greater_than``() = + validate (Int64s.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Int64s.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int64s.Collection.ValueArray C.I.equals``() = + validate (Int64s.Collection.ValueArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueArray C.I.equal``() = + validate (Int64s.Collection.ValueArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueArray C.I.not_equal``() = + validate (Int64s.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueArray C.I.compare``() = + validate (Int64s.Collection.ValueArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueArray C.I.less_than``() = + validate (Int64s.Collection.ValueArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.ValueArray C.I.less_or_equal``() = + validate (Int64s.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueArray C.I.greater_than``() = + validate (Int64s.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueArray C.I.greater_or_equal``() = + validate (Int64s.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.ValueArray C.N.equals``() = + validate (Int64s.Collection.ValueArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueArray C.N.equal``() = + validate (Int64s.Collection.ValueArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueArray C.N.not_equal``() = + validate (Int64s.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueArray C.N.compare``() = + validate (Int64s.Collection.ValueArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueArray C.N.less_than``() = + validate (Int64s.Collection.ValueArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.ValueArray C.N.less_or_equal``() = + validate (Int64s.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueArray C.N.greater_than``() = + validate (Int64s.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueArray C.N.greater_or_equal``() = + validate (Int64s.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.I.equals``() = + validate (Int64s.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.I.equal``() = + validate (Int64s.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.I.not_equal``() = + validate (Int64s.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.I.compare``() = + validate (Int64s.Collection.ValueWrapArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.I.less_than``() = + validate (Int64s.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Int64s.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.I.greater_than``() = + validate (Int64s.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Int64s.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.N.equals``() = + validate (Int64s.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.N.equal``() = + validate (Int64s.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.N.not_equal``() = + validate (Int64s.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.N.compare``() = + validate (Int64s.Collection.ValueWrapArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.N.less_than``() = + validate (Int64s.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Int64s.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.N.greater_than``() = + validate (Int64s.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Int64s.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.I.equals``() = + validate (Int64s.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.I.equal``() = + validate (Int64s.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.I.not_equal``() = + validate (Int64s.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.I.compare``() = + validate (Int64s.Collection.ArrayArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.I.less_than``() = + validate (Int64s.Collection.ArrayArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.I.less_or_equal``() = + validate (Int64s.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.I.greater_than``() = + validate (Int64s.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Int64s.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.N.equals``() = + validate (Int64s.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.N.equal``() = + validate (Int64s.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.N.not_equal``() = + validate (Int64s.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.N.compare``() = + validate (Int64s.Collection.ArrayArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.N.less_than``() = + validate (Int64s.Collection.ArrayArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.N.less_or_equal``() = + validate (Int64s.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.N.greater_than``() = + validate (Int64s.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Int64s.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.ListArray C.I.equals``() = + validate (Int64s.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ListArray C.I.equal``() = + validate (Int64s.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ListArray C.I.not_equal``() = + validate (Int64s.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ListArray C.I.compare``() = + validate (Int64s.Collection.ListArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; + 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; + 1;-1;1;1;-1;1;-1;1;0;-1;1;-1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ListArray C.I.less_than``() = + validate (Int64s.Collection.ListArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.ListArray C.I.less_or_equal``() = + validate (Int64s.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.ListArray C.I.greater_than``() = + validate (Int64s.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.ListArray C.I.greater_or_equal``() = + validate (Int64s.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.ListArray C.N.equals``() = + validate (Int64s.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ListArray C.N.equal``() = + validate (Int64s.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ListArray C.N.not_equal``() = + validate (Int64s.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ListArray C.N.compare``() = + validate (Int64s.Collection.ListArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; + 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; + 1;-1;1;1;-1;1;-1;1;0;-1;1;-1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ListArray C.N.less_than``() = + validate (Int64s.Collection.ListArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Int64s.Collection.ListArray C.N.less_or_equal``() = + validate (Int64s.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Int64s.Collection.ListArray C.N.greater_than``() = + validate (Int64s.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Int64s.Collection.ListArray C.N.greater_or_equal``() = + validate (Int64s.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; + 0;1;0;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; + 1;0;1;1;0;1;1;1;0;1;1;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; + 0;1;0;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; + 1;0;1;1;0;1;1;1;0;1;1;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.Array E.I.equals``() = + validate (NullableInt64s.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.Array E.I.equal``() = + validate (NullableInt64s.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.Array E.I.not_equal``() = + validate (NullableInt64s.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.Array E.N.equals``() = + validate (NullableInt64s.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.Array E.N.equal``() = + validate (NullableInt64s.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.Array E.N.not_equal``() = + validate (NullableInt64s.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.OptionArray E.I.equals``() = + validate (NullableInt64s.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.OptionArray E.I.equal``() = + validate (NullableInt64s.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.OptionArray E.I.not_equal``() = + validate (NullableInt64s.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.OptionArray E.N.equals``() = + validate (NullableInt64s.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.OptionArray E.N.equal``() = + validate (NullableInt64s.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.OptionArray E.N.not_equal``() = + validate (NullableInt64s.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.RefArray E.I.equals``() = + validate (NullableInt64s.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.RefArray E.I.equal``() = + validate (NullableInt64s.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.RefArray E.I.not_equal``() = + validate (NullableInt64s.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.RefArray E.N.equals``() = + validate (NullableInt64s.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.RefArray E.N.equal``() = + validate (NullableInt64s.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.RefArray E.N.not_equal``() = + validate (NullableInt64s.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.RefWrapArray E.I.equals``() = + validate (NullableInt64s.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.RefWrapArray E.I.equal``() = + validate (NullableInt64s.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableInt64s.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.RefWrapArray E.N.equals``() = + validate (NullableInt64s.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.RefWrapArray E.N.equal``() = + validate (NullableInt64s.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableInt64s.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.UnionArray E.I.equals``() = + validate (NullableInt64s.Collection.UnionArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.UnionArray E.I.equal``() = + validate (NullableInt64s.Collection.UnionArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.UnionArray E.I.not_equal``() = + validate (NullableInt64s.Collection.UnionArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.UnionArray E.N.equals``() = + validate (NullableInt64s.Collection.UnionArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.UnionArray E.N.equal``() = + validate (NullableInt64s.Collection.UnionArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.UnionArray E.N.not_equal``() = + validate (NullableInt64s.Collection.UnionArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.UnionWrapArray E.I.equals``() = + validate (NullableInt64s.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.UnionWrapArray E.I.equal``() = + validate (NullableInt64s.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableInt64s.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.UnionWrapArray E.N.equals``() = + validate (NullableInt64s.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.UnionWrapArray E.N.equal``() = + validate (NullableInt64s.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableInt64s.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.ValueArray E.I.equals``() = + validate (NullableInt64s.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ValueArray E.I.equal``() = + validate (NullableInt64s.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ValueArray E.I.not_equal``() = + validate (NullableInt64s.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.ValueArray E.N.equals``() = + validate (NullableInt64s.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ValueArray E.N.equal``() = + validate (NullableInt64s.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ValueArray E.N.not_equal``() = + validate (NullableInt64s.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.ValueWrapArray E.I.equals``() = + validate (NullableInt64s.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ValueWrapArray E.I.equal``() = + validate (NullableInt64s.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableInt64s.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.ValueWrapArray E.N.equals``() = + validate (NullableInt64s.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ValueWrapArray E.N.equal``() = + validate (NullableInt64s.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableInt64s.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.ArrayArray E.I.equals``() = + validate (NullableInt64s.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ArrayArray E.I.equal``() = + validate (NullableInt64s.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ArrayArray E.I.not_equal``() = + validate (NullableInt64s.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.ArrayArray E.N.equals``() = + validate (NullableInt64s.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ArrayArray E.N.equal``() = + validate (NullableInt64s.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ArrayArray E.N.not_equal``() = + validate (NullableInt64s.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.ListArray E.I.equals``() = + validate (NullableInt64s.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ListArray E.I.equal``() = + validate (NullableInt64s.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ListArray E.I.not_equal``() = + validate (NullableInt64s.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableInt64s.Collection.ListArray E.N.equals``() = + validate (NullableInt64s.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ListArray E.N.equal``() = + validate (NullableInt64s.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableInt64s.Collection.ListArray E.N.not_equal``() = + validate (NullableInt64s.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.Array C.I.equals``() = + validate (NativeInts.Collection.Array) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.Array C.I.equal``() = + validate (NativeInts.Collection.Array) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.Array C.I.not_equal``() = + validate (NativeInts.Collection.Array) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.Array C.I.compare``() = + validate (NativeInts.Collection.Array) C.I.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.Array C.I.less_than``() = + validate (NativeInts.Collection.Array) C.I.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``NativeInts.Collection.Array C.I.less_or_equal``() = + validate (NativeInts.Collection.Array) C.I.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``NativeInts.Collection.Array C.I.greater_than``() = + validate (NativeInts.Collection.Array) C.I.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``NativeInts.Collection.Array C.I.greater_or_equal``() = + validate (NativeInts.Collection.Array) C.I.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``NativeInts.Collection.Array C.N.equals``() = + validate (NativeInts.Collection.Array) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.Array C.N.equal``() = + validate (NativeInts.Collection.Array) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.Array C.N.not_equal``() = + validate (NativeInts.Collection.Array) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.Array C.N.compare``() = + validate (NativeInts.Collection.Array) C.N.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.Array C.N.less_than``() = + validate (NativeInts.Collection.Array) C.N.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``NativeInts.Collection.Array C.N.less_or_equal``() = + validate (NativeInts.Collection.Array) C.N.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``NativeInts.Collection.Array C.N.greater_than``() = + validate (NativeInts.Collection.Array) C.N.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``NativeInts.Collection.Array C.N.greater_or_equal``() = + validate (NativeInts.Collection.Array) C.N.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.I.equals``() = + validate (NativeInts.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.I.equal``() = + validate (NativeInts.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.I.not_equal``() = + validate (NativeInts.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.I.compare``() = + validate (NativeInts.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.I.less_than``() = + validate (NativeInts.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.I.less_or_equal``() = + validate (NativeInts.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.I.greater_than``() = + validate (NativeInts.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.I.greater_or_equal``() = + validate (NativeInts.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.N.equals``() = + validate (NativeInts.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.N.equal``() = + validate (NativeInts.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.N.not_equal``() = + validate (NativeInts.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.N.compare``() = + validate (NativeInts.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.N.less_than``() = + validate (NativeInts.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.N.less_or_equal``() = + validate (NativeInts.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.N.greater_than``() = + validate (NativeInts.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.OptionArray C.N.greater_or_equal``() = + validate (NativeInts.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 + |] + + [] + member __.``NativeInts.Collection.RefArray C.I.equals``() = + validate (NativeInts.Collection.RefArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefArray C.I.equal``() = + validate (NativeInts.Collection.RefArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefArray C.I.not_equal``() = + validate (NativeInts.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefArray C.I.compare``() = + validate (NativeInts.Collection.RefArray) C.I.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefArray C.I.less_than``() = + validate (NativeInts.Collection.RefArray) C.I.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``NativeInts.Collection.RefArray C.I.less_or_equal``() = + validate (NativeInts.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefArray C.I.greater_than``() = + validate (NativeInts.Collection.RefArray) C.I.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefArray C.I.greater_or_equal``() = + validate (NativeInts.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``NativeInts.Collection.RefArray C.N.equals``() = + validate (NativeInts.Collection.RefArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefArray C.N.equal``() = + validate (NativeInts.Collection.RefArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefArray C.N.not_equal``() = + validate (NativeInts.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefArray C.N.compare``() = + validate (NativeInts.Collection.RefArray) C.N.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefArray C.N.less_than``() = + validate (NativeInts.Collection.RefArray) C.N.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``NativeInts.Collection.RefArray C.N.less_or_equal``() = + validate (NativeInts.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefArray C.N.greater_than``() = + validate (NativeInts.Collection.RefArray) C.N.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefArray C.N.greater_or_equal``() = + validate (NativeInts.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.I.equals``() = + validate (NativeInts.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.I.equal``() = + validate (NativeInts.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.I.not_equal``() = + validate (NativeInts.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.I.compare``() = + validate (NativeInts.Collection.RefWrapArray) C.I.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.I.less_than``() = + validate (NativeInts.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.I.less_or_equal``() = + validate (NativeInts.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.I.greater_than``() = + validate (NativeInts.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (NativeInts.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.N.equals``() = + validate (NativeInts.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.N.equal``() = + validate (NativeInts.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.N.not_equal``() = + validate (NativeInts.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.N.compare``() = + validate (NativeInts.Collection.RefWrapArray) C.N.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.N.less_than``() = + validate (NativeInts.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.N.less_or_equal``() = + validate (NativeInts.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.N.greater_than``() = + validate (NativeInts.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``NativeInts.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (NativeInts.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.I.equals``() = + validate (NativeInts.Collection.UnionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.I.equal``() = + validate (NativeInts.Collection.UnionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.I.not_equal``() = + validate (NativeInts.Collection.UnionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.I.compare``() = + validate (NativeInts.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.I.less_than``() = + validate (NativeInts.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.I.less_or_equal``() = + validate (NativeInts.Collection.UnionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.I.greater_than``() = + validate (NativeInts.Collection.UnionArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.I.greater_or_equal``() = + validate (NativeInts.Collection.UnionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.N.equals``() = + validate (NativeInts.Collection.UnionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.N.equal``() = + validate (NativeInts.Collection.UnionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.N.not_equal``() = + validate (NativeInts.Collection.UnionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.N.compare``() = + validate (NativeInts.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.N.less_than``() = + validate (NativeInts.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.N.less_or_equal``() = + validate (NativeInts.Collection.UnionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.N.greater_than``() = + validate (NativeInts.Collection.UnionArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionArray C.N.greater_or_equal``() = + validate (NativeInts.Collection.UnionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.I.equals``() = + validate (NativeInts.Collection.UnionWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.I.equal``() = + validate (NativeInts.Collection.UnionWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.I.not_equal``() = + validate (NativeInts.Collection.UnionWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.I.compare``() = + validate (NativeInts.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.I.less_than``() = + validate (NativeInts.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (NativeInts.Collection.UnionWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.I.greater_than``() = + validate (NativeInts.Collection.UnionWrapArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (NativeInts.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.N.equals``() = + validate (NativeInts.Collection.UnionWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.N.equal``() = + validate (NativeInts.Collection.UnionWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.N.not_equal``() = + validate (NativeInts.Collection.UnionWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.N.compare``() = + validate (NativeInts.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.N.less_than``() = + validate (NativeInts.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (NativeInts.Collection.UnionWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.N.greater_than``() = + validate (NativeInts.Collection.UnionWrapArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NativeInts.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (NativeInts.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.I.equals``() = + validate (NativeInts.Collection.ValueArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.I.equal``() = + validate (NativeInts.Collection.ValueArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.I.not_equal``() = + validate (NativeInts.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.I.compare``() = + validate (NativeInts.Collection.ValueArray) C.I.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.I.less_than``() = + validate (NativeInts.Collection.ValueArray) C.I.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.I.less_or_equal``() = + validate (NativeInts.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.I.greater_than``() = + validate (NativeInts.Collection.ValueArray) C.I.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.I.greater_or_equal``() = + validate (NativeInts.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.N.equals``() = + validate (NativeInts.Collection.ValueArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.N.equal``() = + validate (NativeInts.Collection.ValueArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.N.not_equal``() = + validate (NativeInts.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.N.compare``() = + validate (NativeInts.Collection.ValueArray) C.N.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.N.less_than``() = + validate (NativeInts.Collection.ValueArray) C.N.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.N.less_or_equal``() = + validate (NativeInts.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.N.greater_than``() = + validate (NativeInts.Collection.ValueArray) C.N.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueArray C.N.greater_or_equal``() = + validate (NativeInts.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.I.equals``() = + validate (NativeInts.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.I.equal``() = + validate (NativeInts.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.I.not_equal``() = + validate (NativeInts.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.I.compare``() = + validate (NativeInts.Collection.ValueWrapArray) C.I.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.I.less_than``() = + validate (NativeInts.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (NativeInts.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.I.greater_than``() = + validate (NativeInts.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (NativeInts.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.N.equals``() = + validate (NativeInts.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.N.equal``() = + validate (NativeInts.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.N.not_equal``() = + validate (NativeInts.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.N.compare``() = + validate (NativeInts.Collection.ValueWrapArray) C.N.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.N.less_than``() = + validate (NativeInts.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (NativeInts.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.N.greater_than``() = + validate (NativeInts.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (NativeInts.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.I.equals``() = + validate (NativeInts.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.I.equal``() = + validate (NativeInts.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.I.not_equal``() = + validate (NativeInts.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.I.compare``() = + validate (NativeInts.Collection.ArrayArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.I.less_than``() = + validate (NativeInts.Collection.ArrayArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.I.less_or_equal``() = + validate (NativeInts.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.I.greater_than``() = + validate (NativeInts.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.I.greater_or_equal``() = + validate (NativeInts.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.N.equals``() = + validate (NativeInts.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.N.equal``() = + validate (NativeInts.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.N.not_equal``() = + validate (NativeInts.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.N.compare``() = + validate (NativeInts.Collection.ArrayArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.N.less_than``() = + validate (NativeInts.Collection.ArrayArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.N.less_or_equal``() = + validate (NativeInts.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.N.greater_than``() = + validate (NativeInts.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray C.N.greater_or_equal``() = + validate (NativeInts.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``NativeInts.Collection.ListArray C.I.equals``() = + validate (NativeInts.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ListArray C.I.equal``() = + validate (NativeInts.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ListArray C.I.not_equal``() = + validate (NativeInts.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ListArray C.I.compare``() = + validate (NativeInts.Collection.ListArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ListArray C.I.less_than``() = + validate (NativeInts.Collection.ListArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``NativeInts.Collection.ListArray C.I.less_or_equal``() = + validate (NativeInts.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ListArray C.I.greater_than``() = + validate (NativeInts.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ListArray C.I.greater_or_equal``() = + validate (NativeInts.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``NativeInts.Collection.ListArray C.N.equals``() = + validate (NativeInts.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ListArray C.N.equal``() = + validate (NativeInts.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ListArray C.N.not_equal``() = + validate (NativeInts.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ListArray C.N.compare``() = + validate (NativeInts.Collection.ListArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ListArray C.N.less_than``() = + validate (NativeInts.Collection.ListArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``NativeInts.Collection.ListArray C.N.less_or_equal``() = + validate (NativeInts.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ListArray C.N.greater_than``() = + validate (NativeInts.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ListArray C.N.greater_or_equal``() = + validate (NativeInts.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 + |] + + [] + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.Array E.I.equals``() = + validate (NullableNativeInts.Collection.Array) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.Array E.I.equal``() = + validate (NullableNativeInts.Collection.Array) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.Array E.I.not_equal``() = + validate (NullableNativeInts.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.Array E.N.equals``() = + validate (NullableNativeInts.Collection.Array) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.Array E.N.equal``() = + validate (NullableNativeInts.Collection.Array) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.Array E.N.not_equal``() = + validate (NullableNativeInts.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.OptionArray E.I.equals``() = + validate (NullableNativeInts.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.OptionArray E.I.equal``() = + validate (NullableNativeInts.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.OptionArray E.I.not_equal``() = + validate (NullableNativeInts.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.OptionArray E.N.equals``() = + validate (NullableNativeInts.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.OptionArray E.N.equal``() = + validate (NullableNativeInts.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.OptionArray E.N.not_equal``() = + validate (NullableNativeInts.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.RefArray E.I.equals``() = + validate (NullableNativeInts.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.RefArray E.I.equal``() = + validate (NullableNativeInts.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.RefArray E.I.not_equal``() = + validate (NullableNativeInts.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.RefArray E.N.equals``() = + validate (NullableNativeInts.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.RefArray E.N.equal``() = + validate (NullableNativeInts.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.RefArray E.N.not_equal``() = + validate (NullableNativeInts.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.RefWrapArray E.I.equals``() = + validate (NullableNativeInts.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.RefWrapArray E.I.equal``() = + validate (NullableNativeInts.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableNativeInts.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.RefWrapArray E.N.equals``() = + validate (NullableNativeInts.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.RefWrapArray E.N.equal``() = + validate (NullableNativeInts.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableNativeInts.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.UnionArray E.I.equals``() = + validate (NullableNativeInts.Collection.UnionArray) E.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableNativeInts.Collection.UnionArray E.I.equal``() = + validate (NullableNativeInts.Collection.UnionArray) E.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableNativeInts.Collection.UnionArray E.I.not_equal``() = + validate (NullableNativeInts.Collection.UnionArray) E.I.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableNativeInts.Collection.UnionArray E.N.equals``() = + validate (NullableNativeInts.Collection.UnionArray) E.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableNativeInts.Collection.UnionArray E.N.equal``() = + validate (NullableNativeInts.Collection.UnionArray) E.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableNativeInts.Collection.UnionArray E.N.not_equal``() = + validate (NullableNativeInts.Collection.UnionArray) E.N.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableNativeInts.Collection.UnionWrapArray E.I.equals``() = + validate (NullableNativeInts.Collection.UnionWrapArray) E.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableNativeInts.Collection.UnionWrapArray E.I.equal``() = + validate (NullableNativeInts.Collection.UnionWrapArray) E.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableNativeInts.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableNativeInts.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableNativeInts.Collection.UnionWrapArray E.N.equals``() = + validate (NullableNativeInts.Collection.UnionWrapArray) E.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableNativeInts.Collection.UnionWrapArray E.N.equal``() = + validate (NullableNativeInts.Collection.UnionWrapArray) E.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableNativeInts.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableNativeInts.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableNativeInts.Collection.ValueArray E.I.equals``() = + validate (NullableNativeInts.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ValueArray E.I.equal``() = + validate (NullableNativeInts.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ValueArray E.I.not_equal``() = + validate (NullableNativeInts.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.ValueArray E.N.equals``() = + validate (NullableNativeInts.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ValueArray E.N.equal``() = + validate (NullableNativeInts.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ValueArray E.N.not_equal``() = + validate (NullableNativeInts.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.ValueWrapArray E.I.equals``() = + validate (NullableNativeInts.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ValueWrapArray E.I.equal``() = + validate (NullableNativeInts.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableNativeInts.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.ValueWrapArray E.N.equals``() = + validate (NullableNativeInts.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ValueWrapArray E.N.equal``() = + validate (NullableNativeInts.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableNativeInts.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.ArrayArray E.I.equals``() = + validate (NullableNativeInts.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ArrayArray E.I.equal``() = + validate (NullableNativeInts.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ArrayArray E.I.not_equal``() = + validate (NullableNativeInts.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.ArrayArray E.N.equals``() = + validate (NullableNativeInts.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ArrayArray E.N.equal``() = + validate (NullableNativeInts.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ArrayArray E.N.not_equal``() = + validate (NullableNativeInts.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.ListArray E.I.equals``() = + validate (NullableNativeInts.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ListArray E.I.equal``() = + validate (NullableNativeInts.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ListArray E.I.not_equal``() = + validate (NullableNativeInts.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableNativeInts.Collection.ListArray E.N.equals``() = + validate (NullableNativeInts.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ListArray E.N.equal``() = + validate (NullableNativeInts.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableNativeInts.Collection.ListArray E.N.not_equal``() = + validate (NullableNativeInts.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.Array C.I.equals``() = + validate (Bytes.Collection.Array) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.Array C.I.equal``() = + validate (Bytes.Collection.Array) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.Array C.I.not_equal``() = + validate (Bytes.Collection.Array) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.Array C.I.compare``() = + validate (Bytes.Collection.Array) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Bytes.Collection.Array C.I.less_than``() = + validate (Bytes.Collection.Array) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.Array C.I.less_or_equal``() = + validate (Bytes.Collection.Array) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.Array C.I.greater_than``() = + validate (Bytes.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.Array C.I.greater_or_equal``() = + validate (Bytes.Collection.Array) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.Array C.N.equals``() = + validate (Bytes.Collection.Array) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.Array C.N.equal``() = + validate (Bytes.Collection.Array) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.Array C.N.not_equal``() = + validate (Bytes.Collection.Array) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.Array C.N.compare``() = + validate (Bytes.Collection.Array) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Bytes.Collection.Array C.N.less_than``() = + validate (Bytes.Collection.Array) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.Array C.N.less_or_equal``() = + validate (Bytes.Collection.Array) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.Array C.N.greater_than``() = + validate (Bytes.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.Array C.N.greater_or_equal``() = + validate (Bytes.Collection.Array) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.OptionArray C.I.equals``() = + validate (Bytes.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.OptionArray C.I.equal``() = + validate (Bytes.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.OptionArray C.I.not_equal``() = + validate (Bytes.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.OptionArray C.I.compare``() = + validate (Bytes.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-255;0;-1;-2;1;255;0;255;254;253;1;0;-255;0;-1;-2;1;1;-254;1;0;-1;1;2;-253;2;1;0 + |] + + [] + member __.``Bytes.Collection.OptionArray C.I.less_than``() = + validate (Bytes.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.OptionArray C.I.less_or_equal``() = + validate (Bytes.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.OptionArray C.I.greater_than``() = + validate (Bytes.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.OptionArray C.I.greater_or_equal``() = + validate (Bytes.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.OptionArray C.N.equals``() = + validate (Bytes.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.OptionArray C.N.equal``() = + validate (Bytes.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.OptionArray C.N.not_equal``() = + validate (Bytes.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.OptionArray C.N.compare``() = + validate (Bytes.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-255;0;-1;-2;1;255;0;255;254;253;1;0;-255;0;-1;-2;1;1;-254;1;0;-1;1;2;-253;2;1;0 + |] + + [] + member __.``Bytes.Collection.OptionArray C.N.less_than``() = + validate (Bytes.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.OptionArray C.N.less_or_equal``() = + validate (Bytes.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.OptionArray C.N.greater_than``() = + validate (Bytes.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.OptionArray C.N.greater_or_equal``() = + validate (Bytes.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.RefArray C.I.equals``() = + validate (Bytes.Collection.RefArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefArray C.I.equal``() = + validate (Bytes.Collection.RefArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefArray C.I.not_equal``() = + validate (Bytes.Collection.RefArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.RefArray C.I.compare``() = + validate (Bytes.Collection.RefArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Bytes.Collection.RefArray C.I.less_than``() = + validate (Bytes.Collection.RefArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.RefArray C.I.less_or_equal``() = + validate (Bytes.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefArray C.I.greater_than``() = + validate (Bytes.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.RefArray C.I.greater_or_equal``() = + validate (Bytes.Collection.RefArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.RefArray C.N.equals``() = + validate (Bytes.Collection.RefArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefArray C.N.equal``() = + validate (Bytes.Collection.RefArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefArray C.N.not_equal``() = + validate (Bytes.Collection.RefArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.RefArray C.N.compare``() = + validate (Bytes.Collection.RefArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Bytes.Collection.RefArray C.N.less_than``() = + validate (Bytes.Collection.RefArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.RefArray C.N.less_or_equal``() = + validate (Bytes.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefArray C.N.greater_than``() = + validate (Bytes.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.RefArray C.N.greater_or_equal``() = + validate (Bytes.Collection.RefArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.I.equals``() = + validate (Bytes.Collection.RefWrapArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.I.equal``() = + validate (Bytes.Collection.RefWrapArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.I.not_equal``() = + validate (Bytes.Collection.RefWrapArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.I.compare``() = + validate (Bytes.Collection.RefWrapArray) C.I.compare [| + 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.I.less_than``() = + validate (Bytes.Collection.RefWrapArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Bytes.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.I.greater_than``() = + validate (Bytes.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Bytes.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.N.equals``() = + validate (Bytes.Collection.RefWrapArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.N.equal``() = + validate (Bytes.Collection.RefWrapArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.N.not_equal``() = + validate (Bytes.Collection.RefWrapArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.N.compare``() = + validate (Bytes.Collection.RefWrapArray) C.N.compare [| + 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.N.less_than``() = + validate (Bytes.Collection.RefWrapArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Bytes.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.N.greater_than``() = + validate (Bytes.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Bytes.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.UnionArray C.I.equals``() = + validate (Bytes.Collection.UnionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Bytes.Collection.UnionArray C.I.equal``() = + validate (Bytes.Collection.UnionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Bytes.Collection.UnionArray C.I.not_equal``() = + validate (Bytes.Collection.UnionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Bytes.Collection.UnionArray C.I.compare``() = + validate (Bytes.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Bytes.Collection.UnionArray C.I.less_than``() = + validate (Bytes.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Bytes.Collection.UnionArray C.I.less_or_equal``() = + validate (Bytes.Collection.UnionArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.UnionArray C.I.greater_than``() = + validate (Bytes.Collection.UnionArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.UnionArray C.I.greater_or_equal``() = + validate (Bytes.Collection.UnionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Bytes.Collection.UnionArray C.N.equals``() = + validate (Bytes.Collection.UnionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Bytes.Collection.UnionArray C.N.equal``() = + validate (Bytes.Collection.UnionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Bytes.Collection.UnionArray C.N.not_equal``() = + validate (Bytes.Collection.UnionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Bytes.Collection.UnionArray C.N.compare``() = + validate (Bytes.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Bytes.Collection.UnionArray C.N.less_than``() = + validate (Bytes.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Bytes.Collection.UnionArray C.N.less_or_equal``() = + validate (Bytes.Collection.UnionArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.UnionArray C.N.greater_than``() = + validate (Bytes.Collection.UnionArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.UnionArray C.N.greater_or_equal``() = + validate (Bytes.Collection.UnionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.I.equals``() = + validate (Bytes.Collection.UnionWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.I.equal``() = + validate (Bytes.Collection.UnionWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.I.not_equal``() = + validate (Bytes.Collection.UnionWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.I.compare``() = + validate (Bytes.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-255;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-255;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-255;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-255;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-2;255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;255;-1;-2;-3;-3;-3;-3;254;-1;-2;-3;-3;-3;-3;253;-1;-2;-3;-3;-3;-3; + 1;255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;255;-1;-2;-2;-2;-2;1;254;-1;-2;-2;-2;-2;1;253;-1;-2;-2;-2;-2;2;1;255;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;255;-1;-1;-1;-1;2;1;254;-1;-1;-1;-1;2;1;253;-1;-1;-1;-1;3;2;1;255;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;255;-1;-2;-3;3;2;1;254;-1;-2;-3;3;2;1;253;-1;-2;-3;3;2;1;1;255;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;255;-1;-2;3;2;1;1;254;-1;-2;3;2;1;1;253;-1;-2;3;2;1;2;1;255;-1;3;2;1;2;1;0;-1;3;2;1;2;1;255; + -1;3;2;1;2;1;254;-1;3;2;1;2;1;253;-1;3;2;1;3;2;1;255;3;2;1;3;2;1;0;3;2;1;3;2;1;255;3;2;1;3; + 2;1;254;3;2;1;3;2;1;253;0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-255;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-255;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-255;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-255;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-255;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-2;1;-1;-2;-3;-3;-3;-3;-254;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-254;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-254;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-254;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-254;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-254;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-254;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;2;-1;-2;-3;-3;-3;-3;-253;-1;-2;-3;-3;-3;-3;2;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;2;-1;-2;-2;-2;-2;1;-253;-1;-2;-2;-2;-2;1;2;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;2;-1;-1;-1;-1;2;1;-253;-1;-1;-1;-1;2;1;2;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;2;-1;-2;-3;3;2;1;-253;-1;-2;-3;3;2;1;2;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;2;-1;-2;3;2;1;1;-253;-1;-2;3;2;1;1;2;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 2;-1;3;2;1;2;1;-253;-1;3;2;1;2;1;2;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;2;3;2;1; + 3;2;1;-253;3;2;1;3;2;1;2;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.I.less_than``() = + validate (Bytes.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Bytes.Collection.UnionWrapArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.I.greater_than``() = + validate (Bytes.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Bytes.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.N.equals``() = + validate (Bytes.Collection.UnionWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.N.equal``() = + validate (Bytes.Collection.UnionWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.N.not_equal``() = + validate (Bytes.Collection.UnionWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.N.compare``() = + validate (Bytes.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-255;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-255;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-255;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-255;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-2;255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;255;-1;-2;-3;-3;-3;-3;254;-1;-2;-3;-3;-3;-3;253;-1;-2;-3;-3;-3;-3; + 1;255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;255;-1;-2;-2;-2;-2;1;254;-1;-2;-2;-2;-2;1;253;-1;-2;-2;-2;-2;2;1;255;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;255;-1;-1;-1;-1;2;1;254;-1;-1;-1;-1;2;1;253;-1;-1;-1;-1;3;2;1;255;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;255;-1;-2;-3;3;2;1;254;-1;-2;-3;3;2;1;253;-1;-2;-3;3;2;1;1;255;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;255;-1;-2;3;2;1;1;254;-1;-2;3;2;1;1;253;-1;-2;3;2;1;2;1;255;-1;3;2;1;2;1;0;-1;3;2;1;2;1;255; + -1;3;2;1;2;1;254;-1;3;2;1;2;1;253;-1;3;2;1;3;2;1;255;3;2;1;3;2;1;0;3;2;1;3;2;1;255;3;2;1;3; + 2;1;254;3;2;1;3;2;1;253;0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-255;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-255;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-255;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-255;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-255;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-2;1;-1;-2;-3;-3;-3;-3;-254;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-254;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-254;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-254;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-254;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-254;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-254;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;2;-1;-2;-3;-3;-3;-3;-253;-1;-2;-3;-3;-3;-3;2;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;2;-1;-2;-2;-2;-2;1;-253;-1;-2;-2;-2;-2;1;2;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;2;-1;-1;-1;-1;2;1;-253;-1;-1;-1;-1;2;1;2;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;2;-1;-2;-3;3;2;1;-253;-1;-2;-3;3;2;1;2;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;2;-1;-2;3;2;1;1;-253;-1;-2;3;2;1;1;2;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 2;-1;3;2;1;2;1;-253;-1;3;2;1;2;1;2;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;2;3;2;1; + 3;2;1;-253;3;2;1;3;2;1;2;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.N.less_than``() = + validate (Bytes.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Bytes.Collection.UnionWrapArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.N.greater_than``() = + validate (Bytes.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Bytes.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Bytes.Collection.ValueArray C.I.equals``() = + validate (Bytes.Collection.ValueArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueArray C.I.equal``() = + validate (Bytes.Collection.ValueArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueArray C.I.not_equal``() = + validate (Bytes.Collection.ValueArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ValueArray C.I.compare``() = + validate (Bytes.Collection.ValueArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ValueArray C.I.less_than``() = + validate (Bytes.Collection.ValueArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.ValueArray C.I.less_or_equal``() = + validate (Bytes.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueArray C.I.greater_than``() = + validate (Bytes.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.ValueArray C.I.greater_or_equal``() = + validate (Bytes.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.ValueArray C.N.equals``() = + validate (Bytes.Collection.ValueArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueArray C.N.equal``() = + validate (Bytes.Collection.ValueArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueArray C.N.not_equal``() = + validate (Bytes.Collection.ValueArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ValueArray C.N.compare``() = + validate (Bytes.Collection.ValueArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ValueArray C.N.less_than``() = + validate (Bytes.Collection.ValueArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.ValueArray C.N.less_or_equal``() = + validate (Bytes.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueArray C.N.greater_than``() = + validate (Bytes.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.ValueArray C.N.greater_or_equal``() = + validate (Bytes.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.I.equals``() = + validate (Bytes.Collection.ValueWrapArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.I.equal``() = + validate (Bytes.Collection.ValueWrapArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.I.not_equal``() = + validate (Bytes.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.I.compare``() = + validate (Bytes.Collection.ValueWrapArray) C.I.compare [| + 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.I.less_than``() = + validate (Bytes.Collection.ValueWrapArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Bytes.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.I.greater_than``() = + validate (Bytes.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Bytes.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.N.equals``() = + validate (Bytes.Collection.ValueWrapArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.N.equal``() = + validate (Bytes.Collection.ValueWrapArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.N.not_equal``() = + validate (Bytes.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.N.compare``() = + validate (Bytes.Collection.ValueWrapArray) C.N.compare [| + 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.N.less_than``() = + validate (Bytes.Collection.ValueWrapArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Bytes.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.N.greater_than``() = + validate (Bytes.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Bytes.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.I.equals``() = + validate (Bytes.Collection.ArrayArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.I.equal``() = + validate (Bytes.Collection.ArrayArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.I.not_equal``() = + validate (Bytes.Collection.ArrayArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.I.compare``() = + validate (Bytes.Collection.ArrayArray) C.I.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.I.less_than``() = + validate (Bytes.Collection.ArrayArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.I.less_or_equal``() = + validate (Bytes.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.I.greater_than``() = + validate (Bytes.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Bytes.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.N.equals``() = + validate (Bytes.Collection.ArrayArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.N.equal``() = + validate (Bytes.Collection.ArrayArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.N.not_equal``() = + validate (Bytes.Collection.ArrayArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.N.compare``() = + validate (Bytes.Collection.ArrayArray) C.N.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.N.less_than``() = + validate (Bytes.Collection.ArrayArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.N.less_or_equal``() = + validate (Bytes.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.N.greater_than``() = + validate (Bytes.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Bytes.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.ListArray C.I.equals``() = + validate (Bytes.Collection.ListArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ListArray C.I.equal``() = + validate (Bytes.Collection.ListArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ListArray C.I.not_equal``() = + validate (Bytes.Collection.ListArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ListArray C.I.compare``() = + validate (Bytes.Collection.ListArray) C.I.compare [| + 0;-255;0;-1;-2;-1;-255;-1;-1;-2;255;0;255;254;253;255;-1;255;254;253;0;-255;0;-1;-2;-1;-255;-1;-1;-2;1;-254;1;0;-1;1;-254;1;-1;-1; + 2;-253;2;1;0;2;-253;2;1;-1;1;-255;1;-1;-2;0;-255;254;-1;-2;255;1;255;254;253;255;0;255;254;253;1;-255;1;-1;-2;-254;-255;0;-1;-2; + 1;-254;1;1;-1;1;-254;1;0;-1;2;-253;2;1;1;2;-253;2;1;0 + |] + + [] + member __.``Bytes.Collection.ListArray C.I.less_than``() = + validate (Bytes.Collection.ListArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.ListArray C.I.less_or_equal``() = + validate (Bytes.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.ListArray C.I.greater_than``() = + validate (Bytes.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.ListArray C.I.greater_or_equal``() = + validate (Bytes.Collection.ListArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.ListArray C.N.equals``() = + validate (Bytes.Collection.ListArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ListArray C.N.equal``() = + validate (Bytes.Collection.ListArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ListArray C.N.not_equal``() = + validate (Bytes.Collection.ListArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ListArray C.N.compare``() = + validate (Bytes.Collection.ListArray) C.N.compare [| + 0;-255;0;-1;-2;-1;-255;-1;-1;-2;255;0;255;254;253;255;-1;255;254;253;0;-255;0;-1;-2;-1;-255;-1;-1;-2;1;-254;1;0;-1;1;-254;1;-1;-1; + 2;-253;2;1;0;2;-253;2;1;-1;1;-255;1;-1;-2;0;-255;254;-1;-2;255;1;255;254;253;255;0;255;254;253;1;-255;1;-1;-2;-254;-255;0;-1;-2; + 1;-254;1;1;-1;1;-254;1;0;-1;2;-253;2;1;1;2;-253;2;1;0 + |] + + [] + member __.``Bytes.Collection.ListArray C.N.less_than``() = + validate (Bytes.Collection.ListArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Bytes.Collection.ListArray C.N.less_or_equal``() = + validate (Bytes.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Bytes.Collection.ListArray C.N.greater_than``() = + validate (Bytes.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Bytes.Collection.ListArray C.N.greater_or_equal``() = + validate (Bytes.Collection.ListArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;1;-1;-1;-1;-1;1;-1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;1;-1;-1;-1;-1;1;-1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0 + |] + + [] + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1 + |] + + [] + member __.``NullableBytes.Collection.Array E.I.equals``() = + validate (NullableBytes.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.Array E.I.equal``() = + validate (NullableBytes.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.Array E.I.not_equal``() = + validate (NullableBytes.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.Array E.N.equals``() = + validate (NullableBytes.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.Array E.N.equal``() = + validate (NullableBytes.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.Array E.N.not_equal``() = + validate (NullableBytes.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.OptionArray E.I.equals``() = + validate (NullableBytes.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.OptionArray E.I.equal``() = + validate (NullableBytes.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.OptionArray E.I.not_equal``() = + validate (NullableBytes.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.OptionArray E.N.equals``() = + validate (NullableBytes.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.OptionArray E.N.equal``() = + validate (NullableBytes.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.OptionArray E.N.not_equal``() = + validate (NullableBytes.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.RefArray E.I.equals``() = + validate (NullableBytes.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.RefArray E.I.equal``() = + validate (NullableBytes.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.RefArray E.I.not_equal``() = + validate (NullableBytes.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.RefArray E.N.equals``() = + validate (NullableBytes.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.RefArray E.N.equal``() = + validate (NullableBytes.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.RefArray E.N.not_equal``() = + validate (NullableBytes.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.RefWrapArray E.I.equals``() = + validate (NullableBytes.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.RefWrapArray E.I.equal``() = + validate (NullableBytes.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableBytes.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.RefWrapArray E.N.equals``() = + validate (NullableBytes.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.RefWrapArray E.N.equal``() = + validate (NullableBytes.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableBytes.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.UnionArray E.I.equals``() = + validate (NullableBytes.Collection.UnionArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.UnionArray E.I.equal``() = + validate (NullableBytes.Collection.UnionArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.UnionArray E.I.not_equal``() = + validate (NullableBytes.Collection.UnionArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.UnionArray E.N.equals``() = + validate (NullableBytes.Collection.UnionArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.UnionArray E.N.equal``() = + validate (NullableBytes.Collection.UnionArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.UnionArray E.N.not_equal``() = + validate (NullableBytes.Collection.UnionArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.UnionWrapArray E.I.equals``() = + validate (NullableBytes.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.UnionWrapArray E.I.equal``() = + validate (NullableBytes.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableBytes.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.UnionWrapArray E.N.equals``() = + validate (NullableBytes.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.UnionWrapArray E.N.equal``() = + validate (NullableBytes.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableBytes.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.ValueArray E.I.equals``() = + validate (NullableBytes.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ValueArray E.I.equal``() = + validate (NullableBytes.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ValueArray E.I.not_equal``() = + validate (NullableBytes.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.ValueArray E.N.equals``() = + validate (NullableBytes.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ValueArray E.N.equal``() = + validate (NullableBytes.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ValueArray E.N.not_equal``() = + validate (NullableBytes.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.ValueWrapArray E.I.equals``() = + validate (NullableBytes.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ValueWrapArray E.I.equal``() = + validate (NullableBytes.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableBytes.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.ValueWrapArray E.N.equals``() = + validate (NullableBytes.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ValueWrapArray E.N.equal``() = + validate (NullableBytes.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableBytes.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.ArrayArray E.I.equals``() = + validate (NullableBytes.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ArrayArray E.I.equal``() = + validate (NullableBytes.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ArrayArray E.I.not_equal``() = + validate (NullableBytes.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.ArrayArray E.N.equals``() = + validate (NullableBytes.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ArrayArray E.N.equal``() = + validate (NullableBytes.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ArrayArray E.N.not_equal``() = + validate (NullableBytes.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.ListArray E.I.equals``() = + validate (NullableBytes.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ListArray E.I.equal``() = + validate (NullableBytes.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ListArray E.I.not_equal``() = + validate (NullableBytes.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableBytes.Collection.ListArray E.N.equals``() = + validate (NullableBytes.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ListArray E.N.equal``() = + validate (NullableBytes.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableBytes.Collection.ListArray E.N.not_equal``() = + validate (NullableBytes.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.Array C.I.equals``() = + validate (Uint16s.Collection.Array) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.Array C.I.equal``() = + validate (Uint16s.Collection.Array) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.Array C.I.not_equal``() = + validate (Uint16s.Collection.Array) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.Array C.I.compare``() = + validate (Uint16s.Collection.Array) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.Array C.I.less_than``() = + validate (Uint16s.Collection.Array) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.Array C.I.less_or_equal``() = + validate (Uint16s.Collection.Array) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.Array C.I.greater_than``() = + validate (Uint16s.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.Array C.I.greater_or_equal``() = + validate (Uint16s.Collection.Array) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.Array C.N.equals``() = + validate (Uint16s.Collection.Array) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.Array C.N.equal``() = + validate (Uint16s.Collection.Array) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.Array C.N.not_equal``() = + validate (Uint16s.Collection.Array) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.Array C.N.compare``() = + validate (Uint16s.Collection.Array) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.Array C.N.less_than``() = + validate (Uint16s.Collection.Array) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.Array C.N.less_or_equal``() = + validate (Uint16s.Collection.Array) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.Array C.N.greater_than``() = + validate (Uint16s.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.Array C.N.greater_or_equal``() = + validate (Uint16s.Collection.Array) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.I.equals``() = + validate (Uint16s.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.I.equal``() = + validate (Uint16s.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.I.not_equal``() = + validate (Uint16s.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.I.compare``() = + validate (Uint16s.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-65535;0;-1;-2;1;65535;0;65535;65534;65533;1;0;-65535;0;-1;-2;1;1;-65534;1;0;-1;1;2;-65533;2;1;0 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.I.less_than``() = + validate (Uint16s.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.I.less_or_equal``() = + validate (Uint16s.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.I.greater_than``() = + validate (Uint16s.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.I.greater_or_equal``() = + validate (Uint16s.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.N.equals``() = + validate (Uint16s.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.N.equal``() = + validate (Uint16s.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.N.not_equal``() = + validate (Uint16s.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.N.compare``() = + validate (Uint16s.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-65535;0;-1;-2;1;65535;0;65535;65534;65533;1;0;-65535;0;-1;-2;1;1;-65534;1;0;-1;1;2;-65533;2;1;0 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.N.less_than``() = + validate (Uint16s.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.N.less_or_equal``() = + validate (Uint16s.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.N.greater_than``() = + validate (Uint16s.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.OptionArray C.N.greater_or_equal``() = + validate (Uint16s.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.RefArray C.I.equals``() = + validate (Uint16s.Collection.RefArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefArray C.I.equal``() = + validate (Uint16s.Collection.RefArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefArray C.I.not_equal``() = + validate (Uint16s.Collection.RefArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.RefArray C.I.compare``() = + validate (Uint16s.Collection.RefArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.RefArray C.I.less_than``() = + validate (Uint16s.Collection.RefArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.RefArray C.I.less_or_equal``() = + validate (Uint16s.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefArray C.I.greater_than``() = + validate (Uint16s.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.RefArray C.I.greater_or_equal``() = + validate (Uint16s.Collection.RefArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.RefArray C.N.equals``() = + validate (Uint16s.Collection.RefArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefArray C.N.equal``() = + validate (Uint16s.Collection.RefArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefArray C.N.not_equal``() = + validate (Uint16s.Collection.RefArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.RefArray C.N.compare``() = + validate (Uint16s.Collection.RefArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.RefArray C.N.less_than``() = + validate (Uint16s.Collection.RefArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.RefArray C.N.less_or_equal``() = + validate (Uint16s.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefArray C.N.greater_than``() = + validate (Uint16s.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.RefArray C.N.greater_or_equal``() = + validate (Uint16s.Collection.RefArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.I.equals``() = + validate (Uint16s.Collection.RefWrapArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.I.equal``() = + validate (Uint16s.Collection.RefWrapArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.I.not_equal``() = + validate (Uint16s.Collection.RefWrapArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.I.compare``() = + validate (Uint16s.Collection.RefWrapArray) C.I.compare [| + 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.I.less_than``() = + validate (Uint16s.Collection.RefWrapArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Uint16s.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.I.greater_than``() = + validate (Uint16s.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Uint16s.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.N.equals``() = + validate (Uint16s.Collection.RefWrapArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.N.equal``() = + validate (Uint16s.Collection.RefWrapArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.N.not_equal``() = + validate (Uint16s.Collection.RefWrapArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.N.compare``() = + validate (Uint16s.Collection.RefWrapArray) C.N.compare [| + 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.N.less_than``() = + validate (Uint16s.Collection.RefWrapArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Uint16s.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.N.greater_than``() = + validate (Uint16s.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Uint16s.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.I.equals``() = + validate (Uint16s.Collection.UnionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.I.equal``() = + validate (Uint16s.Collection.UnionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.I.not_equal``() = + validate (Uint16s.Collection.UnionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.I.compare``() = + validate (Uint16s.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.I.less_than``() = + validate (Uint16s.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.I.less_or_equal``() = + validate (Uint16s.Collection.UnionArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.I.greater_than``() = + validate (Uint16s.Collection.UnionArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.I.greater_or_equal``() = + validate (Uint16s.Collection.UnionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.N.equals``() = + validate (Uint16s.Collection.UnionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.N.equal``() = + validate (Uint16s.Collection.UnionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.N.not_equal``() = + validate (Uint16s.Collection.UnionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.N.compare``() = + validate (Uint16s.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.N.less_than``() = + validate (Uint16s.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.N.less_or_equal``() = + validate (Uint16s.Collection.UnionArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.N.greater_than``() = + validate (Uint16s.Collection.UnionArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionArray C.N.greater_or_equal``() = + validate (Uint16s.Collection.UnionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.I.equals``() = + validate (Uint16s.Collection.UnionWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.I.equal``() = + validate (Uint16s.Collection.UnionWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.I.not_equal``() = + validate (Uint16s.Collection.UnionWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.I.compare``() = + validate (Uint16s.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-65535;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-65535;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-65535;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-65535;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-2;65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;65535;-1;-2;-3;-3;-3;-3;65534;-1;-2;-3;-3;-3;-3;65533;-1;-2;-3;-3;-3;-3; + 1;65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;65535;-1;-2;-2;-2;-2;1;65534;-1;-2;-2;-2;-2;1;65533;-1;-2;-2;-2;-2;2;1;65535;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;65535;-1;-1;-1;-1;2;1;65534;-1;-1;-1;-1;2;1;65533;-1;-1;-1;-1;3;2;1;65535;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;65535;-1;-2;-3;3;2;1;65534;-1;-2;-3;3;2;1;65533;-1;-2;-3;3;2;1;1;65535;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;65535;-1;-2;3;2;1;1;65534;-1;-2;3;2;1;1;65533;-1;-2;3;2;1;2;1;65535;-1;3;2;1;2;1;0;-1;3;2;1;2;1;65535; + -1;3;2;1;2;1;65534;-1;3;2;1;2;1;65533;-1;3;2;1;3;2;1;65535;3;2;1;3;2;1;0;3;2;1;3;2;1;65535;3;2;1;3; + 2;1;65534;3;2;1;3;2;1;65533;0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-65535;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-65535;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-65535;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-65535;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-65535;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-2;1;-1;-2;-3;-3;-3;-3;-65534;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-65534;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-65534;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-65534;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-65534;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-65534;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-65534;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;2;-1;-2;-3;-3;-3;-3;-65533;-1;-2;-3;-3;-3;-3;2;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;2;-1;-2;-2;-2;-2;1;-65533;-1;-2;-2;-2;-2;1;2;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;2;-1;-1;-1;-1;2;1;-65533;-1;-1;-1;-1;2;1;2;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;2;-1;-2;-3;3;2;1;-65533;-1;-2;-3;3;2;1;2;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;2;-1;-2;3;2;1;1;-65533;-1;-2;3;2;1;1;2;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 2;-1;3;2;1;2;1;-65533;-1;3;2;1;2;1;2;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;2;3;2;1; + 3;2;1;-65533;3;2;1;3;2;1;2;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.I.less_than``() = + validate (Uint16s.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Uint16s.Collection.UnionWrapArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.I.greater_than``() = + validate (Uint16s.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Uint16s.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.N.equals``() = + validate (Uint16s.Collection.UnionWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.N.equal``() = + validate (Uint16s.Collection.UnionWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.N.not_equal``() = + validate (Uint16s.Collection.UnionWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.N.compare``() = + validate (Uint16s.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-65535;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-65535;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-65535;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-65535;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-2;65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;65535;-1;-2;-3;-3;-3;-3;65534;-1;-2;-3;-3;-3;-3;65533;-1;-2;-3;-3;-3;-3; + 1;65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;65535;-1;-2;-2;-2;-2;1;65534;-1;-2;-2;-2;-2;1;65533;-1;-2;-2;-2;-2;2;1;65535;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;65535;-1;-1;-1;-1;2;1;65534;-1;-1;-1;-1;2;1;65533;-1;-1;-1;-1;3;2;1;65535;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;65535;-1;-2;-3;3;2;1;65534;-1;-2;-3;3;2;1;65533;-1;-2;-3;3;2;1;1;65535;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;65535;-1;-2;3;2;1;1;65534;-1;-2;3;2;1;1;65533;-1;-2;3;2;1;2;1;65535;-1;3;2;1;2;1;0;-1;3;2;1;2;1;65535; + -1;3;2;1;2;1;65534;-1;3;2;1;2;1;65533;-1;3;2;1;3;2;1;65535;3;2;1;3;2;1;0;3;2;1;3;2;1;65535;3;2;1;3; + 2;1;65534;3;2;1;3;2;1;65533;0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-65535;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-65535;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-65535;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-65535;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-65535;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-2;1;-1;-2;-3;-3;-3;-3;-65534;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-65534;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-65534;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-65534;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-65534;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-65534;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-65534;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;2;-1;-2;-3;-3;-3;-3;-65533;-1;-2;-3;-3;-3;-3;2;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;2;-1;-2;-2;-2;-2;1;-65533;-1;-2;-2;-2;-2;1;2;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;2;-1;-1;-1;-1;2;1;-65533;-1;-1;-1;-1;2;1;2;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;2;-1;-2;-3;3;2;1;-65533;-1;-2;-3;3;2;1;2;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;2;-1;-2;3;2;1;1;-65533;-1;-2;3;2;1;1;2;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 2;-1;3;2;1;2;1;-65533;-1;3;2;1;2;1;2;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;2;3;2;1; + 3;2;1;-65533;3;2;1;3;2;1;2;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.N.less_than``() = + validate (Uint16s.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Uint16s.Collection.UnionWrapArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.N.greater_than``() = + validate (Uint16s.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Uint16s.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.I.equals``() = + validate (Uint16s.Collection.ValueArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.I.equal``() = + validate (Uint16s.Collection.ValueArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.I.not_equal``() = + validate (Uint16s.Collection.ValueArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.I.compare``() = + validate (Uint16s.Collection.ValueArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.I.less_than``() = + validate (Uint16s.Collection.ValueArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.I.less_or_equal``() = + validate (Uint16s.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.I.greater_than``() = + validate (Uint16s.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.I.greater_or_equal``() = + validate (Uint16s.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.N.equals``() = + validate (Uint16s.Collection.ValueArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.N.equal``() = + validate (Uint16s.Collection.ValueArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.N.not_equal``() = + validate (Uint16s.Collection.ValueArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.N.compare``() = + validate (Uint16s.Collection.ValueArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.N.less_than``() = + validate (Uint16s.Collection.ValueArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.N.less_or_equal``() = + validate (Uint16s.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.N.greater_than``() = + validate (Uint16s.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueArray C.N.greater_or_equal``() = + validate (Uint16s.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.I.equals``() = + validate (Uint16s.Collection.ValueWrapArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.I.equal``() = + validate (Uint16s.Collection.ValueWrapArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.I.not_equal``() = + validate (Uint16s.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.I.compare``() = + validate (Uint16s.Collection.ValueWrapArray) C.I.compare [| + 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.I.less_than``() = + validate (Uint16s.Collection.ValueWrapArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Uint16s.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.I.greater_than``() = + validate (Uint16s.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Uint16s.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.N.equals``() = + validate (Uint16s.Collection.ValueWrapArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.N.equal``() = + validate (Uint16s.Collection.ValueWrapArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.N.not_equal``() = + validate (Uint16s.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.N.compare``() = + validate (Uint16s.Collection.ValueWrapArray) C.N.compare [| + 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.N.less_than``() = + validate (Uint16s.Collection.ValueWrapArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Uint16s.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.N.greater_than``() = + validate (Uint16s.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Uint16s.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.I.equals``() = + validate (Uint16s.Collection.ArrayArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.I.equal``() = + validate (Uint16s.Collection.ArrayArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.I.not_equal``() = + validate (Uint16s.Collection.ArrayArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.I.compare``() = + validate (Uint16s.Collection.ArrayArray) C.I.compare [| + 0;-65535;0;-1;-2;-1;-1;-1;-1;-1;65535;0;65535;65534;65533;-1;-1;-1;-1;-1;0;-65535;0;-1;-2;-1;-1;-1;-1;-1;1;-65534;1;0;-1;-1;-1;-1;-1;-1; + 2;-65533;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;65534;-1;-2;1;1;1;1;1;65535;0;65535;65534;65533;1;1;1;1;1;-65534;-65535;0;-1;-2; + 1;1;1;1;1;1;-65534;1;0;-1;1;1;1;1;1;2;-65533;2;1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.I.less_than``() = + validate (Uint16s.Collection.ArrayArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.I.less_or_equal``() = + validate (Uint16s.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.I.greater_than``() = + validate (Uint16s.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Uint16s.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.N.equals``() = + validate (Uint16s.Collection.ArrayArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.N.equal``() = + validate (Uint16s.Collection.ArrayArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.N.not_equal``() = + validate (Uint16s.Collection.ArrayArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.N.compare``() = + validate (Uint16s.Collection.ArrayArray) C.N.compare [| + 0;-65535;0;-1;-2;-1;-1;-1;-1;-1;65535;0;65535;65534;65533;-1;-1;-1;-1;-1;0;-65535;0;-1;-2;-1;-1;-1;-1;-1;1;-65534;1;0;-1;-1;-1;-1;-1;-1; + 2;-65533;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;65534;-1;-2;1;1;1;1;1;65535;0;65535;65534;65533;1;1;1;1;1;-65534;-65535;0;-1;-2; + 1;1;1;1;1;1;-65534;1;0;-1;1;1;1;1;1;2;-65533;2;1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.N.less_than``() = + validate (Uint16s.Collection.ArrayArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.N.less_or_equal``() = + validate (Uint16s.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.N.greater_than``() = + validate (Uint16s.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Uint16s.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.ListArray C.I.equals``() = + validate (Uint16s.Collection.ListArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ListArray C.I.equal``() = + validate (Uint16s.Collection.ListArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ListArray C.I.not_equal``() = + validate (Uint16s.Collection.ListArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ListArray C.I.compare``() = + validate (Uint16s.Collection.ListArray) C.I.compare [| + 0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;65535;0;65535;65534;65533;65535;-1;65535;65534;65533;0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;1;-65534;1;0;-1;1;-65534;1;-1;-1; + 2;-65533;2;1;0;2;-65533;2;1;-1;1;-65535;1;-1;-2;0;-65535;65534;-1;-2;65535;1;65535;65534;65533;65535;0;65535;65534;65533;1;-65535;1;-1;-2;-65534;-65535;0;-1;-2; + 1;-65534;1;1;-1;1;-65534;1;0;-1;2;-65533;2;1;1;2;-65533;2;1;0 + |] + + [] + member __.``Uint16s.Collection.ListArray C.I.less_than``() = + validate (Uint16s.Collection.ListArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.ListArray C.I.less_or_equal``() = + validate (Uint16s.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ListArray C.I.greater_than``() = + validate (Uint16s.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ListArray C.I.greater_or_equal``() = + validate (Uint16s.Collection.ListArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.ListArray C.N.equals``() = + validate (Uint16s.Collection.ListArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ListArray C.N.equal``() = + validate (Uint16s.Collection.ListArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ListArray C.N.not_equal``() = + validate (Uint16s.Collection.ListArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ListArray C.N.compare``() = + validate (Uint16s.Collection.ListArray) C.N.compare [| + 0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;65535;0;65535;65534;65533;65535;-1;65535;65534;65533;0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;1;-65534;1;0;-1;1;-65534;1;-1;-1; + 2;-65533;2;1;0;2;-65533;2;1;-1;1;-65535;1;-1;-2;0;-65535;65534;-1;-2;65535;1;65535;65534;65533;65535;0;65535;65534;65533;1;-65535;1;-1;-2;-65534;-65535;0;-1;-2; + 1;-65534;1;1;-1;1;-65534;1;0;-1;2;-65533;2;1;1;2;-65533;2;1;0 + |] + + [] + member __.``Uint16s.Collection.ListArray C.N.less_than``() = + validate (Uint16s.Collection.ListArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Uint16s.Collection.ListArray C.N.less_or_equal``() = + validate (Uint16s.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ListArray C.N.greater_than``() = + validate (Uint16s.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ListArray C.N.greater_or_equal``() = + validate (Uint16s.Collection.ListArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;1;-1;-1;-1;-1;1;-1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;1;-1;-1;-1;-1;1;-1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0 + |] + + [] + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.Array E.I.equals``() = + validate (NullableUInt16s.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.Array E.I.equal``() = + validate (NullableUInt16s.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.Array E.I.not_equal``() = + validate (NullableUInt16s.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.Array E.N.equals``() = + validate (NullableUInt16s.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.Array E.N.equal``() = + validate (NullableUInt16s.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.Array E.N.not_equal``() = + validate (NullableUInt16s.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.OptionArray E.I.equals``() = + validate (NullableUInt16s.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.OptionArray E.I.equal``() = + validate (NullableUInt16s.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.OptionArray E.I.not_equal``() = + validate (NullableUInt16s.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.OptionArray E.N.equals``() = + validate (NullableUInt16s.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.OptionArray E.N.equal``() = + validate (NullableUInt16s.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.OptionArray E.N.not_equal``() = + validate (NullableUInt16s.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.RefArray E.I.equals``() = + validate (NullableUInt16s.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.RefArray E.I.equal``() = + validate (NullableUInt16s.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.RefArray E.I.not_equal``() = + validate (NullableUInt16s.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.RefArray E.N.equals``() = + validate (NullableUInt16s.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.RefArray E.N.equal``() = + validate (NullableUInt16s.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.RefArray E.N.not_equal``() = + validate (NullableUInt16s.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.RefWrapArray E.I.equals``() = + validate (NullableUInt16s.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.RefWrapArray E.I.equal``() = + validate (NullableUInt16s.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableUInt16s.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.RefWrapArray E.N.equals``() = + validate (NullableUInt16s.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.RefWrapArray E.N.equal``() = + validate (NullableUInt16s.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableUInt16s.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.UnionArray E.I.equals``() = + validate (NullableUInt16s.Collection.UnionArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.UnionArray E.I.equal``() = + validate (NullableUInt16s.Collection.UnionArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.UnionArray E.I.not_equal``() = + validate (NullableUInt16s.Collection.UnionArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.UnionArray E.N.equals``() = + validate (NullableUInt16s.Collection.UnionArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.UnionArray E.N.equal``() = + validate (NullableUInt16s.Collection.UnionArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.UnionArray E.N.not_equal``() = + validate (NullableUInt16s.Collection.UnionArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.UnionWrapArray E.I.equals``() = + validate (NullableUInt16s.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.UnionWrapArray E.I.equal``() = + validate (NullableUInt16s.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableUInt16s.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.UnionWrapArray E.N.equals``() = + validate (NullableUInt16s.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.UnionWrapArray E.N.equal``() = + validate (NullableUInt16s.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableUInt16s.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.ValueArray E.I.equals``() = + validate (NullableUInt16s.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ValueArray E.I.equal``() = + validate (NullableUInt16s.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ValueArray E.I.not_equal``() = + validate (NullableUInt16s.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.ValueArray E.N.equals``() = + validate (NullableUInt16s.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ValueArray E.N.equal``() = + validate (NullableUInt16s.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ValueArray E.N.not_equal``() = + validate (NullableUInt16s.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.ValueWrapArray E.I.equals``() = + validate (NullableUInt16s.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ValueWrapArray E.I.equal``() = + validate (NullableUInt16s.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableUInt16s.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.ValueWrapArray E.N.equals``() = + validate (NullableUInt16s.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ValueWrapArray E.N.equal``() = + validate (NullableUInt16s.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableUInt16s.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.ArrayArray E.I.equals``() = + validate (NullableUInt16s.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ArrayArray E.I.equal``() = + validate (NullableUInt16s.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ArrayArray E.I.not_equal``() = + validate (NullableUInt16s.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.ArrayArray E.N.equals``() = + validate (NullableUInt16s.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ArrayArray E.N.equal``() = + validate (NullableUInt16s.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ArrayArray E.N.not_equal``() = + validate (NullableUInt16s.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.ListArray E.I.equals``() = + validate (NullableUInt16s.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ListArray E.I.equal``() = + validate (NullableUInt16s.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ListArray E.I.not_equal``() = + validate (NullableUInt16s.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt16s.Collection.ListArray E.N.equals``() = + validate (NullableUInt16s.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ListArray E.N.equal``() = + validate (NullableUInt16s.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt16s.Collection.ListArray E.N.not_equal``() = + validate (NullableUInt16s.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.Array C.I.equals``() = + validate (UInt32s.Collection.Array) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.Array C.I.equal``() = + validate (UInt32s.Collection.Array) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.Array C.I.not_equal``() = + validate (UInt32s.Collection.Array) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.Array C.I.compare``() = + validate (UInt32s.Collection.Array) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.Array C.I.less_than``() = + validate (UInt32s.Collection.Array) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.Array C.I.less_or_equal``() = + validate (UInt32s.Collection.Array) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.Array C.I.greater_than``() = + validate (UInt32s.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.Array C.I.greater_or_equal``() = + validate (UInt32s.Collection.Array) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.Array C.N.equals``() = + validate (UInt32s.Collection.Array) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.Array C.N.equal``() = + validate (UInt32s.Collection.Array) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.Array C.N.not_equal``() = + validate (UInt32s.Collection.Array) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.Array C.N.compare``() = + validate (UInt32s.Collection.Array) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.Array C.N.less_than``() = + validate (UInt32s.Collection.Array) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.Array C.N.less_or_equal``() = + validate (UInt32s.Collection.Array) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.Array C.N.greater_than``() = + validate (UInt32s.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.Array C.N.greater_or_equal``() = + validate (UInt32s.Collection.Array) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.I.equals``() = + validate (UInt32s.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.I.equal``() = + validate (UInt32s.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.I.not_equal``() = + validate (UInt32s.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.I.compare``() = + validate (UInt32s.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.I.less_than``() = + validate (UInt32s.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.I.less_or_equal``() = + validate (UInt32s.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.I.greater_than``() = + validate (UInt32s.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.I.greater_or_equal``() = + validate (UInt32s.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.N.equals``() = + validate (UInt32s.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.N.equal``() = + validate (UInt32s.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.N.not_equal``() = + validate (UInt32s.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.N.compare``() = + validate (UInt32s.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.N.less_than``() = + validate (UInt32s.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.N.less_or_equal``() = + validate (UInt32s.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.N.greater_than``() = + validate (UInt32s.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.OptionArray C.N.greater_or_equal``() = + validate (UInt32s.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.RefArray C.I.equals``() = + validate (UInt32s.Collection.RefArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefArray C.I.equal``() = + validate (UInt32s.Collection.RefArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefArray C.I.not_equal``() = + validate (UInt32s.Collection.RefArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefArray C.I.compare``() = + validate (UInt32s.Collection.RefArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefArray C.I.less_than``() = + validate (UInt32s.Collection.RefArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.RefArray C.I.less_or_equal``() = + validate (UInt32s.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefArray C.I.greater_than``() = + validate (UInt32s.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefArray C.I.greater_or_equal``() = + validate (UInt32s.Collection.RefArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.RefArray C.N.equals``() = + validate (UInt32s.Collection.RefArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefArray C.N.equal``() = + validate (UInt32s.Collection.RefArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefArray C.N.not_equal``() = + validate (UInt32s.Collection.RefArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefArray C.N.compare``() = + validate (UInt32s.Collection.RefArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefArray C.N.less_than``() = + validate (UInt32s.Collection.RefArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.RefArray C.N.less_or_equal``() = + validate (UInt32s.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefArray C.N.greater_than``() = + validate (UInt32s.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefArray C.N.greater_or_equal``() = + validate (UInt32s.Collection.RefArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.I.equals``() = + validate (UInt32s.Collection.RefWrapArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.I.equal``() = + validate (UInt32s.Collection.RefWrapArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.I.not_equal``() = + validate (UInt32s.Collection.RefWrapArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.I.compare``() = + validate (UInt32s.Collection.RefWrapArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.I.less_than``() = + validate (UInt32s.Collection.RefWrapArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.I.less_or_equal``() = + validate (UInt32s.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.I.greater_than``() = + validate (UInt32s.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (UInt32s.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.N.equals``() = + validate (UInt32s.Collection.RefWrapArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.N.equal``() = + validate (UInt32s.Collection.RefWrapArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.N.not_equal``() = + validate (UInt32s.Collection.RefWrapArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.N.compare``() = + validate (UInt32s.Collection.RefWrapArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.N.less_than``() = + validate (UInt32s.Collection.RefWrapArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.N.less_or_equal``() = + validate (UInt32s.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.N.greater_than``() = + validate (UInt32s.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (UInt32s.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.I.equals``() = + validate (UInt32s.Collection.UnionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.I.equal``() = + validate (UInt32s.Collection.UnionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.I.not_equal``() = + validate (UInt32s.Collection.UnionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.I.compare``() = + validate (UInt32s.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.I.less_than``() = + validate (UInt32s.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.I.less_or_equal``() = + validate (UInt32s.Collection.UnionArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.I.greater_than``() = + validate (UInt32s.Collection.UnionArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.I.greater_or_equal``() = + validate (UInt32s.Collection.UnionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.N.equals``() = + validate (UInt32s.Collection.UnionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.N.equal``() = + validate (UInt32s.Collection.UnionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.N.not_equal``() = + validate (UInt32s.Collection.UnionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.N.compare``() = + validate (UInt32s.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.N.less_than``() = + validate (UInt32s.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.N.less_or_equal``() = + validate (UInt32s.Collection.UnionArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.N.greater_than``() = + validate (UInt32s.Collection.UnionArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionArray C.N.greater_or_equal``() = + validate (UInt32s.Collection.UnionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.I.equals``() = + validate (UInt32s.Collection.UnionWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.I.equal``() = + validate (UInt32s.Collection.UnionWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.I.not_equal``() = + validate (UInt32s.Collection.UnionWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.I.compare``() = + validate (UInt32s.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.I.less_than``() = + validate (UInt32s.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (UInt32s.Collection.UnionWrapArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.I.greater_than``() = + validate (UInt32s.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (UInt32s.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.N.equals``() = + validate (UInt32s.Collection.UnionWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.N.equal``() = + validate (UInt32s.Collection.UnionWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.N.not_equal``() = + validate (UInt32s.Collection.UnionWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.N.compare``() = + validate (UInt32s.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.N.less_than``() = + validate (UInt32s.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (UInt32s.Collection.UnionWrapArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.N.greater_than``() = + validate (UInt32s.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (UInt32s.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.I.equals``() = + validate (UInt32s.Collection.ValueArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.I.equal``() = + validate (UInt32s.Collection.ValueArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.I.not_equal``() = + validate (UInt32s.Collection.ValueArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.I.compare``() = + validate (UInt32s.Collection.ValueArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.I.less_than``() = + validate (UInt32s.Collection.ValueArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.I.less_or_equal``() = + validate (UInt32s.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.I.greater_than``() = + validate (UInt32s.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.I.greater_or_equal``() = + validate (UInt32s.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.N.equals``() = + validate (UInt32s.Collection.ValueArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.N.equal``() = + validate (UInt32s.Collection.ValueArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.N.not_equal``() = + validate (UInt32s.Collection.ValueArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.N.compare``() = + validate (UInt32s.Collection.ValueArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.N.less_than``() = + validate (UInt32s.Collection.ValueArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.N.less_or_equal``() = + validate (UInt32s.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.N.greater_than``() = + validate (UInt32s.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueArray C.N.greater_or_equal``() = + validate (UInt32s.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.I.equals``() = + validate (UInt32s.Collection.ValueWrapArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.I.equal``() = + validate (UInt32s.Collection.ValueWrapArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.I.not_equal``() = + validate (UInt32s.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.I.compare``() = + validate (UInt32s.Collection.ValueWrapArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.I.less_than``() = + validate (UInt32s.Collection.ValueWrapArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (UInt32s.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.I.greater_than``() = + validate (UInt32s.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (UInt32s.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.N.equals``() = + validate (UInt32s.Collection.ValueWrapArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.N.equal``() = + validate (UInt32s.Collection.ValueWrapArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.N.not_equal``() = + validate (UInt32s.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.N.compare``() = + validate (UInt32s.Collection.ValueWrapArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.N.less_than``() = + validate (UInt32s.Collection.ValueWrapArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (UInt32s.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.N.greater_than``() = + validate (UInt32s.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (UInt32s.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.I.equals``() = + validate (UInt32s.Collection.ArrayArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.I.equal``() = + validate (UInt32s.Collection.ArrayArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.I.not_equal``() = + validate (UInt32s.Collection.ArrayArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.I.compare``() = + validate (UInt32s.Collection.ArrayArray) C.I.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.I.less_than``() = + validate (UInt32s.Collection.ArrayArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.I.less_or_equal``() = + validate (UInt32s.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.I.greater_than``() = + validate (UInt32s.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.I.greater_or_equal``() = + validate (UInt32s.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.N.equals``() = + validate (UInt32s.Collection.ArrayArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.N.equal``() = + validate (UInt32s.Collection.ArrayArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.N.not_equal``() = + validate (UInt32s.Collection.ArrayArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.N.compare``() = + validate (UInt32s.Collection.ArrayArray) C.N.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.N.less_than``() = + validate (UInt32s.Collection.ArrayArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.N.less_or_equal``() = + validate (UInt32s.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.N.greater_than``() = + validate (UInt32s.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray C.N.greater_or_equal``() = + validate (UInt32s.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.ListArray C.I.equals``() = + validate (UInt32s.Collection.ListArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ListArray C.I.equal``() = + validate (UInt32s.Collection.ListArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ListArray C.I.not_equal``() = + validate (UInt32s.Collection.ListArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ListArray C.I.compare``() = + validate (UInt32s.Collection.ListArray) C.I.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; + 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;-1;1;0;-1;1;-1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ListArray C.I.less_than``() = + validate (UInt32s.Collection.ListArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.ListArray C.I.less_or_equal``() = + validate (UInt32s.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ListArray C.I.greater_than``() = + validate (UInt32s.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ListArray C.I.greater_or_equal``() = + validate (UInt32s.Collection.ListArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.ListArray C.N.equals``() = + validate (UInt32s.Collection.ListArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ListArray C.N.equal``() = + validate (UInt32s.Collection.ListArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ListArray C.N.not_equal``() = + validate (UInt32s.Collection.ListArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ListArray C.N.compare``() = + validate (UInt32s.Collection.ListArray) C.N.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; + 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;-1;1;0;-1;1;-1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ListArray C.N.less_than``() = + validate (UInt32s.Collection.ListArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``UInt32s.Collection.ListArray C.N.less_or_equal``() = + validate (UInt32s.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ListArray C.N.greater_than``() = + validate (UInt32s.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ListArray C.N.greater_or_equal``() = + validate (UInt32s.Collection.ListArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;1;-1;-1;-1;-1;1;-1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;1;-1;-1;-1;-1;1;-1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0 + |] + + [] + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.Array E.I.equals``() = + validate (NullableUInt32s.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.Array E.I.equal``() = + validate (NullableUInt32s.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.Array E.I.not_equal``() = + validate (NullableUInt32s.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.Array E.N.equals``() = + validate (NullableUInt32s.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.Array E.N.equal``() = + validate (NullableUInt32s.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.Array E.N.not_equal``() = + validate (NullableUInt32s.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.OptionArray E.I.equals``() = + validate (NullableUInt32s.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.OptionArray E.I.equal``() = + validate (NullableUInt32s.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.OptionArray E.I.not_equal``() = + validate (NullableUInt32s.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.OptionArray E.N.equals``() = + validate (NullableUInt32s.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.OptionArray E.N.equal``() = + validate (NullableUInt32s.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.OptionArray E.N.not_equal``() = + validate (NullableUInt32s.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.RefArray E.I.equals``() = + validate (NullableUInt32s.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.RefArray E.I.equal``() = + validate (NullableUInt32s.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.RefArray E.I.not_equal``() = + validate (NullableUInt32s.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.RefArray E.N.equals``() = + validate (NullableUInt32s.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.RefArray E.N.equal``() = + validate (NullableUInt32s.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.RefArray E.N.not_equal``() = + validate (NullableUInt32s.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.RefWrapArray E.I.equals``() = + validate (NullableUInt32s.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.RefWrapArray E.I.equal``() = + validate (NullableUInt32s.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableUInt32s.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.RefWrapArray E.N.equals``() = + validate (NullableUInt32s.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.RefWrapArray E.N.equal``() = + validate (NullableUInt32s.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableUInt32s.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.UnionArray E.I.equals``() = + validate (NullableUInt32s.Collection.UnionArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.UnionArray E.I.equal``() = + validate (NullableUInt32s.Collection.UnionArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.UnionArray E.I.not_equal``() = + validate (NullableUInt32s.Collection.UnionArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.UnionArray E.N.equals``() = + validate (NullableUInt32s.Collection.UnionArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.UnionArray E.N.equal``() = + validate (NullableUInt32s.Collection.UnionArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.UnionArray E.N.not_equal``() = + validate (NullableUInt32s.Collection.UnionArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.UnionWrapArray E.I.equals``() = + validate (NullableUInt32s.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.UnionWrapArray E.I.equal``() = + validate (NullableUInt32s.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableUInt32s.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.UnionWrapArray E.N.equals``() = + validate (NullableUInt32s.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.UnionWrapArray E.N.equal``() = + validate (NullableUInt32s.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableUInt32s.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.ValueArray E.I.equals``() = + validate (NullableUInt32s.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ValueArray E.I.equal``() = + validate (NullableUInt32s.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ValueArray E.I.not_equal``() = + validate (NullableUInt32s.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.ValueArray E.N.equals``() = + validate (NullableUInt32s.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ValueArray E.N.equal``() = + validate (NullableUInt32s.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ValueArray E.N.not_equal``() = + validate (NullableUInt32s.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.ValueWrapArray E.I.equals``() = + validate (NullableUInt32s.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ValueWrapArray E.I.equal``() = + validate (NullableUInt32s.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableUInt32s.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.ValueWrapArray E.N.equals``() = + validate (NullableUInt32s.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ValueWrapArray E.N.equal``() = + validate (NullableUInt32s.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableUInt32s.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.ArrayArray E.I.equals``() = + validate (NullableUInt32s.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ArrayArray E.I.equal``() = + validate (NullableUInt32s.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ArrayArray E.I.not_equal``() = + validate (NullableUInt32s.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.ArrayArray E.N.equals``() = + validate (NullableUInt32s.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ArrayArray E.N.equal``() = + validate (NullableUInt32s.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ArrayArray E.N.not_equal``() = + validate (NullableUInt32s.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.ListArray E.I.equals``() = + validate (NullableUInt32s.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ListArray E.I.equal``() = + validate (NullableUInt32s.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ListArray E.I.not_equal``() = + validate (NullableUInt32s.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt32s.Collection.ListArray E.N.equals``() = + validate (NullableUInt32s.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ListArray E.N.equal``() = + validate (NullableUInt32s.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt32s.Collection.ListArray E.N.not_equal``() = + validate (NullableUInt32s.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.Array C.I.equals``() = + validate (UInt64s.Collection.Array) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.Array C.I.equal``() = + validate (UInt64s.Collection.Array) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.Array C.I.not_equal``() = + validate (UInt64s.Collection.Array) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.Array C.I.compare``() = + validate (UInt64s.Collection.Array) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.Array C.I.less_than``() = + validate (UInt64s.Collection.Array) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.Array C.I.less_or_equal``() = + validate (UInt64s.Collection.Array) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.Array C.I.greater_than``() = + validate (UInt64s.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.Array C.I.greater_or_equal``() = + validate (UInt64s.Collection.Array) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.Array C.N.equals``() = + validate (UInt64s.Collection.Array) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.Array C.N.equal``() = + validate (UInt64s.Collection.Array) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.Array C.N.not_equal``() = + validate (UInt64s.Collection.Array) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.Array C.N.compare``() = + validate (UInt64s.Collection.Array) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.Array C.N.less_than``() = + validate (UInt64s.Collection.Array) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.Array C.N.less_or_equal``() = + validate (UInt64s.Collection.Array) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.Array C.N.greater_than``() = + validate (UInt64s.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.Array C.N.greater_or_equal``() = + validate (UInt64s.Collection.Array) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.I.equals``() = + validate (UInt64s.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.I.equal``() = + validate (UInt64s.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.I.not_equal``() = + validate (UInt64s.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.I.compare``() = + validate (UInt64s.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.I.less_than``() = + validate (UInt64s.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.I.less_or_equal``() = + validate (UInt64s.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.I.greater_than``() = + validate (UInt64s.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.I.greater_or_equal``() = + validate (UInt64s.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.N.equals``() = + validate (UInt64s.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.N.equal``() = + validate (UInt64s.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.N.not_equal``() = + validate (UInt64s.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.N.compare``() = + validate (UInt64s.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.N.less_than``() = + validate (UInt64s.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.N.less_or_equal``() = + validate (UInt64s.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.N.greater_than``() = + validate (UInt64s.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.OptionArray C.N.greater_or_equal``() = + validate (UInt64s.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.RefArray C.I.equals``() = + validate (UInt64s.Collection.RefArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefArray C.I.equal``() = + validate (UInt64s.Collection.RefArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefArray C.I.not_equal``() = + validate (UInt64s.Collection.RefArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefArray C.I.compare``() = + validate (UInt64s.Collection.RefArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefArray C.I.less_than``() = + validate (UInt64s.Collection.RefArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.RefArray C.I.less_or_equal``() = + validate (UInt64s.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefArray C.I.greater_than``() = + validate (UInt64s.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefArray C.I.greater_or_equal``() = + validate (UInt64s.Collection.RefArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.RefArray C.N.equals``() = + validate (UInt64s.Collection.RefArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefArray C.N.equal``() = + validate (UInt64s.Collection.RefArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefArray C.N.not_equal``() = + validate (UInt64s.Collection.RefArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefArray C.N.compare``() = + validate (UInt64s.Collection.RefArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefArray C.N.less_than``() = + validate (UInt64s.Collection.RefArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.RefArray C.N.less_or_equal``() = + validate (UInt64s.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefArray C.N.greater_than``() = + validate (UInt64s.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefArray C.N.greater_or_equal``() = + validate (UInt64s.Collection.RefArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.I.equals``() = + validate (UInt64s.Collection.RefWrapArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.I.equal``() = + validate (UInt64s.Collection.RefWrapArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.I.not_equal``() = + validate (UInt64s.Collection.RefWrapArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.I.compare``() = + validate (UInt64s.Collection.RefWrapArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.I.less_than``() = + validate (UInt64s.Collection.RefWrapArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.I.less_or_equal``() = + validate (UInt64s.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.I.greater_than``() = + validate (UInt64s.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (UInt64s.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.N.equals``() = + validate (UInt64s.Collection.RefWrapArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.N.equal``() = + validate (UInt64s.Collection.RefWrapArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.N.not_equal``() = + validate (UInt64s.Collection.RefWrapArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.N.compare``() = + validate (UInt64s.Collection.RefWrapArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.N.less_than``() = + validate (UInt64s.Collection.RefWrapArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.N.less_or_equal``() = + validate (UInt64s.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.N.greater_than``() = + validate (UInt64s.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (UInt64s.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.I.equals``() = + validate (UInt64s.Collection.UnionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.I.equal``() = + validate (UInt64s.Collection.UnionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.I.not_equal``() = + validate (UInt64s.Collection.UnionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.I.compare``() = + validate (UInt64s.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.I.less_than``() = + validate (UInt64s.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.I.less_or_equal``() = + validate (UInt64s.Collection.UnionArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.I.greater_than``() = + validate (UInt64s.Collection.UnionArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.I.greater_or_equal``() = + validate (UInt64s.Collection.UnionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.N.equals``() = + validate (UInt64s.Collection.UnionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.N.equal``() = + validate (UInt64s.Collection.UnionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.N.not_equal``() = + validate (UInt64s.Collection.UnionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.N.compare``() = + validate (UInt64s.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.N.less_than``() = + validate (UInt64s.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.N.less_or_equal``() = + validate (UInt64s.Collection.UnionArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.N.greater_than``() = + validate (UInt64s.Collection.UnionArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionArray C.N.greater_or_equal``() = + validate (UInt64s.Collection.UnionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.I.equals``() = + validate (UInt64s.Collection.UnionWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.I.equal``() = + validate (UInt64s.Collection.UnionWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.I.not_equal``() = + validate (UInt64s.Collection.UnionWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.I.compare``() = + validate (UInt64s.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.I.less_than``() = + validate (UInt64s.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (UInt64s.Collection.UnionWrapArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.I.greater_than``() = + validate (UInt64s.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (UInt64s.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.N.equals``() = + validate (UInt64s.Collection.UnionWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.N.equal``() = + validate (UInt64s.Collection.UnionWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;1;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; + 1;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;1;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;1;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;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.N.not_equal``() = + validate (UInt64s.Collection.UnionWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.N.compare``() = + validate (UInt64s.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.N.less_than``() = + validate (UInt64s.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (UInt64s.Collection.UnionWrapArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;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;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.N.greater_than``() = + validate (UInt64s.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (UInt64s.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.I.equals``() = + validate (UInt64s.Collection.ValueArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.I.equal``() = + validate (UInt64s.Collection.ValueArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.I.not_equal``() = + validate (UInt64s.Collection.ValueArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.I.compare``() = + validate (UInt64s.Collection.ValueArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.I.less_than``() = + validate (UInt64s.Collection.ValueArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.I.less_or_equal``() = + validate (UInt64s.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.I.greater_than``() = + validate (UInt64s.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.I.greater_or_equal``() = + validate (UInt64s.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.N.equals``() = + validate (UInt64s.Collection.ValueArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.N.equal``() = + validate (UInt64s.Collection.ValueArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.N.not_equal``() = + validate (UInt64s.Collection.ValueArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.N.compare``() = + validate (UInt64s.Collection.ValueArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.N.less_than``() = + validate (UInt64s.Collection.ValueArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.N.less_or_equal``() = + validate (UInt64s.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.N.greater_than``() = + validate (UInt64s.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueArray C.N.greater_or_equal``() = + validate (UInt64s.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.I.equals``() = + validate (UInt64s.Collection.ValueWrapArray) C.I.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.I.equal``() = + validate (UInt64s.Collection.ValueWrapArray) C.I.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.I.not_equal``() = + validate (UInt64s.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.I.compare``() = + validate (UInt64s.Collection.ValueWrapArray) C.I.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.I.less_than``() = + validate (UInt64s.Collection.ValueWrapArray) C.I.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (UInt64s.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.I.greater_than``() = + validate (UInt64s.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (UInt64s.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.N.equals``() = + validate (UInt64s.Collection.ValueWrapArray) C.N.equals [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.N.equal``() = + validate (UInt64s.Collection.ValueWrapArray) C.N.equal [| + 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.N.not_equal``() = + validate (UInt64s.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.N.compare``() = + validate (UInt64s.Collection.ValueWrapArray) C.N.compare [| + 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.N.less_than``() = + validate (UInt64s.Collection.ValueWrapArray) C.N.less_than [| + 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (UInt64s.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.N.greater_than``() = + validate (UInt64s.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (UInt64s.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.I.equals``() = + validate (UInt64s.Collection.ArrayArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.I.equal``() = + validate (UInt64s.Collection.ArrayArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.I.not_equal``() = + validate (UInt64s.Collection.ArrayArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.I.compare``() = + validate (UInt64s.Collection.ArrayArray) C.I.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.I.less_than``() = + validate (UInt64s.Collection.ArrayArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.I.less_or_equal``() = + validate (UInt64s.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.I.greater_than``() = + validate (UInt64s.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.I.greater_or_equal``() = + validate (UInt64s.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.N.equals``() = + validate (UInt64s.Collection.ArrayArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.N.equal``() = + validate (UInt64s.Collection.ArrayArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.N.not_equal``() = + validate (UInt64s.Collection.ArrayArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.N.compare``() = + validate (UInt64s.Collection.ArrayArray) C.N.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.N.less_than``() = + validate (UInt64s.Collection.ArrayArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.N.less_or_equal``() = + validate (UInt64s.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.N.greater_than``() = + validate (UInt64s.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray C.N.greater_or_equal``() = + validate (UInt64s.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.ListArray C.I.equals``() = + validate (UInt64s.Collection.ListArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ListArray C.I.equal``() = + validate (UInt64s.Collection.ListArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ListArray C.I.not_equal``() = + validate (UInt64s.Collection.ListArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ListArray C.I.compare``() = + validate (UInt64s.Collection.ListArray) C.I.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; + 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;-1;1;0;-1;1;-1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ListArray C.I.less_than``() = + validate (UInt64s.Collection.ListArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.ListArray C.I.less_or_equal``() = + validate (UInt64s.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ListArray C.I.greater_than``() = + validate (UInt64s.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ListArray C.I.greater_or_equal``() = + validate (UInt64s.Collection.ListArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.ListArray C.N.equals``() = + validate (UInt64s.Collection.ListArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ListArray C.N.equal``() = + validate (UInt64s.Collection.ListArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ListArray C.N.not_equal``() = + validate (UInt64s.Collection.ListArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ListArray C.N.compare``() = + validate (UInt64s.Collection.ListArray) C.N.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; + 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;-1;1;0;-1;1;-1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ListArray C.N.less_than``() = + validate (UInt64s.Collection.ListArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``UInt64s.Collection.ListArray C.N.less_or_equal``() = + validate (UInt64s.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ListArray C.N.greater_than``() = + validate (UInt64s.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ListArray C.N.greater_or_equal``() = + validate (UInt64s.Collection.ListArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;1;-1;-1;-1;-1;1;-1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;1;-1;-1;-1;-1;1;-1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0 + |] + + [] + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; + 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.Array E.I.equals``() = + validate (NullableUInt64s.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.Array E.I.equal``() = + validate (NullableUInt64s.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.Array E.I.not_equal``() = + validate (NullableUInt64s.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.Array E.N.equals``() = + validate (NullableUInt64s.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.Array E.N.equal``() = + validate (NullableUInt64s.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.Array E.N.not_equal``() = + validate (NullableUInt64s.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.OptionArray E.I.equals``() = + validate (NullableUInt64s.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.OptionArray E.I.equal``() = + validate (NullableUInt64s.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.OptionArray E.I.not_equal``() = + validate (NullableUInt64s.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.OptionArray E.N.equals``() = + validate (NullableUInt64s.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.OptionArray E.N.equal``() = + validate (NullableUInt64s.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.OptionArray E.N.not_equal``() = + validate (NullableUInt64s.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.RefArray E.I.equals``() = + validate (NullableUInt64s.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.RefArray E.I.equal``() = + validate (NullableUInt64s.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.RefArray E.I.not_equal``() = + validate (NullableUInt64s.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.RefArray E.N.equals``() = + validate (NullableUInt64s.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.RefArray E.N.equal``() = + validate (NullableUInt64s.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.RefArray E.N.not_equal``() = + validate (NullableUInt64s.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.RefWrapArray E.I.equals``() = + validate (NullableUInt64s.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.RefWrapArray E.I.equal``() = + validate (NullableUInt64s.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableUInt64s.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.RefWrapArray E.N.equals``() = + validate (NullableUInt64s.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.RefWrapArray E.N.equal``() = + validate (NullableUInt64s.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableUInt64s.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.UnionArray E.I.equals``() = + validate (NullableUInt64s.Collection.UnionArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.UnionArray E.I.equal``() = + validate (NullableUInt64s.Collection.UnionArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.UnionArray E.I.not_equal``() = + validate (NullableUInt64s.Collection.UnionArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.UnionArray E.N.equals``() = + validate (NullableUInt64s.Collection.UnionArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.UnionArray E.N.equal``() = + validate (NullableUInt64s.Collection.UnionArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.UnionArray E.N.not_equal``() = + validate (NullableUInt64s.Collection.UnionArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.UnionWrapArray E.I.equals``() = + validate (NullableUInt64s.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.UnionWrapArray E.I.equal``() = + validate (NullableUInt64s.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableUInt64s.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.UnionWrapArray E.N.equals``() = + validate (NullableUInt64s.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.UnionWrapArray E.N.equal``() = + validate (NullableUInt64s.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;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;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;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;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableUInt64s.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;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;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;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;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.ValueArray E.I.equals``() = + validate (NullableUInt64s.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ValueArray E.I.equal``() = + validate (NullableUInt64s.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ValueArray E.I.not_equal``() = + validate (NullableUInt64s.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.ValueArray E.N.equals``() = + validate (NullableUInt64s.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ValueArray E.N.equal``() = + validate (NullableUInt64s.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ValueArray E.N.not_equal``() = + validate (NullableUInt64s.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.ValueWrapArray E.I.equals``() = + validate (NullableUInt64s.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ValueWrapArray E.I.equal``() = + validate (NullableUInt64s.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableUInt64s.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.ValueWrapArray E.N.equals``() = + validate (NullableUInt64s.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ValueWrapArray E.N.equal``() = + validate (NullableUInt64s.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableUInt64s.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.ArrayArray E.I.equals``() = + validate (NullableUInt64s.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ArrayArray E.I.equal``() = + validate (NullableUInt64s.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ArrayArray E.I.not_equal``() = + validate (NullableUInt64s.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.ArrayArray E.N.equals``() = + validate (NullableUInt64s.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ArrayArray E.N.equal``() = + validate (NullableUInt64s.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ArrayArray E.N.not_equal``() = + validate (NullableUInt64s.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.ListArray E.I.equals``() = + validate (NullableUInt64s.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ListArray E.I.equal``() = + validate (NullableUInt64s.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ListArray E.I.not_equal``() = + validate (NullableUInt64s.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUInt64s.Collection.ListArray E.N.equals``() = + validate (NullableUInt64s.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ListArray E.N.equal``() = + validate (NullableUInt64s.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUInt64s.Collection.ListArray E.N.not_equal``() = + validate (NullableUInt64s.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.Array C.I.equals``() = + validate (UNativeInts.Collection.Array) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.Array C.I.equal``() = + validate (UNativeInts.Collection.Array) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.Array C.I.not_equal``() = + validate (UNativeInts.Collection.Array) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.Array C.I.compare``() = + validate (UNativeInts.Collection.Array) C.I.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.Array C.I.less_than``() = + validate (UNativeInts.Collection.Array) C.I.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.Array C.I.less_or_equal``() = + validate (UNativeInts.Collection.Array) C.I.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.Array C.I.greater_than``() = + validate (UNativeInts.Collection.Array) C.I.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.Array C.I.greater_or_equal``() = + validate (UNativeInts.Collection.Array) C.I.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.Array C.N.equals``() = + validate (UNativeInts.Collection.Array) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.Array C.N.equal``() = + validate (UNativeInts.Collection.Array) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.Array C.N.not_equal``() = + validate (UNativeInts.Collection.Array) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.Array C.N.compare``() = + validate (UNativeInts.Collection.Array) C.N.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.Array C.N.less_than``() = + validate (UNativeInts.Collection.Array) C.N.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.Array C.N.less_or_equal``() = + validate (UNativeInts.Collection.Array) C.N.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.Array C.N.greater_than``() = + validate (UNativeInts.Collection.Array) C.N.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.Array C.N.greater_or_equal``() = + validate (UNativeInts.Collection.Array) C.N.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.I.equals``() = + validate (UNativeInts.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.I.equal``() = + validate (UNativeInts.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.I.not_equal``() = + validate (UNativeInts.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.I.compare``() = + validate (UNativeInts.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.I.less_than``() = + validate (UNativeInts.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.I.less_or_equal``() = + validate (UNativeInts.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.I.greater_than``() = + validate (UNativeInts.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.I.greater_or_equal``() = + validate (UNativeInts.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.N.equals``() = + validate (UNativeInts.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.N.equal``() = + validate (UNativeInts.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.N.not_equal``() = + validate (UNativeInts.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.N.compare``() = + validate (UNativeInts.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.N.less_than``() = + validate (UNativeInts.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.N.less_or_equal``() = + validate (UNativeInts.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.N.greater_than``() = + validate (UNativeInts.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.OptionArray C.N.greater_or_equal``() = + validate (UNativeInts.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.I.equals``() = + validate (UNativeInts.Collection.RefArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.I.equal``() = + validate (UNativeInts.Collection.RefArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.I.not_equal``() = + validate (UNativeInts.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.I.compare``() = + validate (UNativeInts.Collection.RefArray) C.I.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.I.less_than``() = + validate (UNativeInts.Collection.RefArray) C.I.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.I.less_or_equal``() = + validate (UNativeInts.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.I.greater_than``() = + validate (UNativeInts.Collection.RefArray) C.I.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.I.greater_or_equal``() = + validate (UNativeInts.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.N.equals``() = + validate (UNativeInts.Collection.RefArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.N.equal``() = + validate (UNativeInts.Collection.RefArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.N.not_equal``() = + validate (UNativeInts.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.N.compare``() = + validate (UNativeInts.Collection.RefArray) C.N.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.N.less_than``() = + validate (UNativeInts.Collection.RefArray) C.N.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.N.less_or_equal``() = + validate (UNativeInts.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.N.greater_than``() = + validate (UNativeInts.Collection.RefArray) C.N.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefArray C.N.greater_or_equal``() = + validate (UNativeInts.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.I.equals``() = + validate (UNativeInts.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.I.equal``() = + validate (UNativeInts.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.I.not_equal``() = + validate (UNativeInts.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.I.compare``() = + validate (UNativeInts.Collection.RefWrapArray) C.I.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.I.less_than``() = + validate (UNativeInts.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.I.less_or_equal``() = + validate (UNativeInts.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.I.greater_than``() = + validate (UNativeInts.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (UNativeInts.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.N.equals``() = + validate (UNativeInts.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.N.equal``() = + validate (UNativeInts.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.N.not_equal``() = + validate (UNativeInts.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.N.compare``() = + validate (UNativeInts.Collection.RefWrapArray) C.N.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.N.less_than``() = + validate (UNativeInts.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.N.less_or_equal``() = + validate (UNativeInts.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.N.greater_than``() = + validate (UNativeInts.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (UNativeInts.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.I.equals``() = + validate (UNativeInts.Collection.UnionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.I.equal``() = + validate (UNativeInts.Collection.UnionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.I.not_equal``() = + validate (UNativeInts.Collection.UnionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.I.compare``() = + validate (UNativeInts.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.I.less_than``() = + validate (UNativeInts.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.I.less_or_equal``() = + validate (UNativeInts.Collection.UnionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.I.greater_than``() = + validate (UNativeInts.Collection.UnionArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.I.greater_or_equal``() = + validate (UNativeInts.Collection.UnionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.N.equals``() = + validate (UNativeInts.Collection.UnionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.N.equal``() = + validate (UNativeInts.Collection.UnionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.N.not_equal``() = + validate (UNativeInts.Collection.UnionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.N.compare``() = + validate (UNativeInts.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.N.less_than``() = + validate (UNativeInts.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.N.less_or_equal``() = + validate (UNativeInts.Collection.UnionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.N.greater_than``() = + validate (UNativeInts.Collection.UnionArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionArray C.N.greater_or_equal``() = + validate (UNativeInts.Collection.UnionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.I.equals``() = + validate (UNativeInts.Collection.UnionWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.I.equal``() = + validate (UNativeInts.Collection.UnionWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.I.not_equal``() = + validate (UNativeInts.Collection.UnionWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.I.compare``() = + validate (UNativeInts.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.I.less_than``() = + validate (UNativeInts.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (UNativeInts.Collection.UnionWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.I.greater_than``() = + validate (UNativeInts.Collection.UnionWrapArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (UNativeInts.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.N.equals``() = + validate (UNativeInts.Collection.UnionWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.N.equal``() = + validate (UNativeInts.Collection.UnionWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.N.not_equal``() = + validate (UNativeInts.Collection.UnionWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.N.compare``() = + validate (UNativeInts.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.N.less_than``() = + validate (UNativeInts.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (UNativeInts.Collection.UnionWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.N.greater_than``() = + validate (UNativeInts.Collection.UnionWrapArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``UNativeInts.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (UNativeInts.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.I.equals``() = + validate (UNativeInts.Collection.ValueArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.I.equal``() = + validate (UNativeInts.Collection.ValueArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.I.not_equal``() = + validate (UNativeInts.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.I.compare``() = + validate (UNativeInts.Collection.ValueArray) C.I.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.I.less_than``() = + validate (UNativeInts.Collection.ValueArray) C.I.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.I.less_or_equal``() = + validate (UNativeInts.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.I.greater_than``() = + validate (UNativeInts.Collection.ValueArray) C.I.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.I.greater_or_equal``() = + validate (UNativeInts.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.N.equals``() = + validate (UNativeInts.Collection.ValueArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.N.equal``() = + validate (UNativeInts.Collection.ValueArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.N.not_equal``() = + validate (UNativeInts.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.N.compare``() = + validate (UNativeInts.Collection.ValueArray) C.N.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.N.less_than``() = + validate (UNativeInts.Collection.ValueArray) C.N.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.N.less_or_equal``() = + validate (UNativeInts.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.N.greater_than``() = + validate (UNativeInts.Collection.ValueArray) C.N.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueArray C.N.greater_or_equal``() = + validate (UNativeInts.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.I.equals``() = + validate (UNativeInts.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.I.equal``() = + validate (UNativeInts.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.I.not_equal``() = + validate (UNativeInts.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.I.compare``() = + validate (UNativeInts.Collection.ValueWrapArray) C.I.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.I.less_than``() = + validate (UNativeInts.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (UNativeInts.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.I.greater_than``() = + validate (UNativeInts.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (UNativeInts.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.N.equals``() = + validate (UNativeInts.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.N.equal``() = + validate (UNativeInts.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.N.not_equal``() = + validate (UNativeInts.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.N.compare``() = + validate (UNativeInts.Collection.ValueWrapArray) C.N.compare [| + 0;-1;-1;1;0;-1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.N.less_than``() = + validate (UNativeInts.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;0;0;1;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (UNativeInts.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;0;1;1;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.N.greater_than``() = + validate (UNativeInts.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;1;0;0;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (UNativeInts.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;1;1;0;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.I.equals``() = + validate (UNativeInts.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.I.equal``() = + validate (UNativeInts.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.I.not_equal``() = + validate (UNativeInts.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.I.compare``() = + validate (UNativeInts.Collection.ArrayArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.I.less_than``() = + validate (UNativeInts.Collection.ArrayArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.I.less_or_equal``() = + validate (UNativeInts.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.I.greater_than``() = + validate (UNativeInts.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.I.greater_or_equal``() = + validate (UNativeInts.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.N.equals``() = + validate (UNativeInts.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.N.equal``() = + validate (UNativeInts.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.N.not_equal``() = + validate (UNativeInts.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.N.compare``() = + validate (UNativeInts.Collection.ArrayArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.N.less_than``() = + validate (UNativeInts.Collection.ArrayArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.N.less_or_equal``() = + validate (UNativeInts.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.N.greater_than``() = + validate (UNativeInts.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray C.N.greater_or_equal``() = + validate (UNativeInts.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.I.equals``() = + validate (UNativeInts.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.I.equal``() = + validate (UNativeInts.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.I.not_equal``() = + validate (UNativeInts.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.I.compare``() = + validate (UNativeInts.Collection.ListArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.I.less_than``() = + validate (UNativeInts.Collection.ListArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.I.less_or_equal``() = + validate (UNativeInts.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.I.greater_than``() = + validate (UNativeInts.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.I.greater_or_equal``() = + validate (UNativeInts.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.N.equals``() = + validate (UNativeInts.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.N.equal``() = + validate (UNativeInts.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.N.not_equal``() = + validate (UNativeInts.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.N.compare``() = + validate (UNativeInts.Collection.ListArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.N.less_than``() = + validate (UNativeInts.Collection.ListArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.N.less_or_equal``() = + validate (UNativeInts.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.N.greater_than``() = + validate (UNativeInts.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ListArray C.N.greater_or_equal``() = + validate (UNativeInts.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 + |] + + [] + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.Array E.I.equals``() = + validate (NullableUNativeInts.Collection.Array) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.Array E.I.equal``() = + validate (NullableUNativeInts.Collection.Array) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.Array E.I.not_equal``() = + validate (NullableUNativeInts.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.Array E.N.equals``() = + validate (NullableUNativeInts.Collection.Array) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.Array E.N.equal``() = + validate (NullableUNativeInts.Collection.Array) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.Array E.N.not_equal``() = + validate (NullableUNativeInts.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.OptionArray E.I.equals``() = + validate (NullableUNativeInts.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.OptionArray E.I.equal``() = + validate (NullableUNativeInts.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.OptionArray E.I.not_equal``() = + validate (NullableUNativeInts.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.OptionArray E.N.equals``() = + validate (NullableUNativeInts.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.OptionArray E.N.equal``() = + validate (NullableUNativeInts.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.OptionArray E.N.not_equal``() = + validate (NullableUNativeInts.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.RefArray E.I.equals``() = + validate (NullableUNativeInts.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.RefArray E.I.equal``() = + validate (NullableUNativeInts.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.RefArray E.I.not_equal``() = + validate (NullableUNativeInts.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.RefArray E.N.equals``() = + validate (NullableUNativeInts.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.RefArray E.N.equal``() = + validate (NullableUNativeInts.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.RefArray E.N.not_equal``() = + validate (NullableUNativeInts.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.RefWrapArray E.I.equals``() = + validate (NullableUNativeInts.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.RefWrapArray E.I.equal``() = + validate (NullableUNativeInts.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableUNativeInts.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.RefWrapArray E.N.equals``() = + validate (NullableUNativeInts.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.RefWrapArray E.N.equal``() = + validate (NullableUNativeInts.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableUNativeInts.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionArray E.I.equals``() = + validate (NullableUNativeInts.Collection.UnionArray) E.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionArray E.I.equal``() = + validate (NullableUNativeInts.Collection.UnionArray) E.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionArray E.I.not_equal``() = + validate (NullableUNativeInts.Collection.UnionArray) E.I.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionArray E.N.equals``() = + validate (NullableUNativeInts.Collection.UnionArray) E.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionArray E.N.equal``() = + validate (NullableUNativeInts.Collection.UnionArray) E.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionArray E.N.not_equal``() = + validate (NullableUNativeInts.Collection.UnionArray) E.N.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionWrapArray E.I.equals``() = + validate (NullableUNativeInts.Collection.UnionWrapArray) E.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionWrapArray E.I.equal``() = + validate (NullableUNativeInts.Collection.UnionWrapArray) E.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableUNativeInts.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionWrapArray E.N.equals``() = + validate (NullableUNativeInts.Collection.UnionWrapArray) E.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionWrapArray E.N.equal``() = + validate (NullableUNativeInts.Collection.UnionWrapArray) E.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableUNativeInts.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableUNativeInts.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueArray E.I.equals``() = + validate (NullableUNativeInts.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueArray E.I.equal``() = + validate (NullableUNativeInts.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueArray E.I.not_equal``() = + validate (NullableUNativeInts.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueArray E.N.equals``() = + validate (NullableUNativeInts.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueArray E.N.equal``() = + validate (NullableUNativeInts.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueArray E.N.not_equal``() = + validate (NullableUNativeInts.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueWrapArray E.I.equals``() = + validate (NullableUNativeInts.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueWrapArray E.I.equal``() = + validate (NullableUNativeInts.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableUNativeInts.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueWrapArray E.N.equals``() = + validate (NullableUNativeInts.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueWrapArray E.N.equal``() = + validate (NullableUNativeInts.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableUNativeInts.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.ArrayArray E.I.equals``() = + validate (NullableUNativeInts.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ArrayArray E.I.equal``() = + validate (NullableUNativeInts.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ArrayArray E.I.not_equal``() = + validate (NullableUNativeInts.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.ArrayArray E.N.equals``() = + validate (NullableUNativeInts.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ArrayArray E.N.equal``() = + validate (NullableUNativeInts.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ArrayArray E.N.not_equal``() = + validate (NullableUNativeInts.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.ListArray E.I.equals``() = + validate (NullableUNativeInts.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ListArray E.I.equal``() = + validate (NullableUNativeInts.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ListArray E.I.not_equal``() = + validate (NullableUNativeInts.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableUNativeInts.Collection.ListArray E.N.equals``() = + validate (NullableUNativeInts.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ListArray E.N.equal``() = + validate (NullableUNativeInts.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableUNativeInts.Collection.ListArray E.N.not_equal``() = + validate (NullableUNativeInts.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.Array C.I.equals``() = + validate (Chars.Collection.Array) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.Array C.I.equal``() = + validate (Chars.Collection.Array) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.Array C.I.not_equal``() = + validate (Chars.Collection.Array) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.Array C.I.compare``() = + validate (Chars.Collection.Array) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Chars.Collection.Array C.I.less_than``() = + validate (Chars.Collection.Array) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.Array C.I.less_or_equal``() = + validate (Chars.Collection.Array) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.Array C.I.greater_than``() = + validate (Chars.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.Array C.I.greater_or_equal``() = + validate (Chars.Collection.Array) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.Array C.N.equals``() = + validate (Chars.Collection.Array) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.Array C.N.equal``() = + validate (Chars.Collection.Array) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.Array C.N.not_equal``() = + validate (Chars.Collection.Array) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.Array C.N.compare``() = + validate (Chars.Collection.Array) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Chars.Collection.Array C.N.less_than``() = + validate (Chars.Collection.Array) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.Array C.N.less_or_equal``() = + validate (Chars.Collection.Array) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.Array C.N.greater_than``() = + validate (Chars.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.Array C.N.greater_or_equal``() = + validate (Chars.Collection.Array) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.OptionArray C.I.equals``() = + validate (Chars.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.OptionArray C.I.equal``() = + validate (Chars.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.OptionArray C.I.not_equal``() = + validate (Chars.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.OptionArray C.I.compare``() = + validate (Chars.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-65535;-48;-49;-50;1;65535;0;65487;65486;65485;1;48;-65487;0;-1;-2;1;49;-65486;1;0;-1;1;50;-65485;2;1;0 + |] + + [] + member __.``Chars.Collection.OptionArray C.I.less_than``() = + validate (Chars.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.OptionArray C.I.less_or_equal``() = + validate (Chars.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.OptionArray C.I.greater_than``() = + validate (Chars.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.OptionArray C.I.greater_or_equal``() = + validate (Chars.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.OptionArray C.N.equals``() = + validate (Chars.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.OptionArray C.N.equal``() = + validate (Chars.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.OptionArray C.N.not_equal``() = + validate (Chars.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.OptionArray C.N.compare``() = + validate (Chars.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-65535;-48;-49;-50;1;65535;0;65487;65486;65485;1;48;-65487;0;-1;-2;1;49;-65486;1;0;-1;1;50;-65485;2;1;0 + |] + + [] + member __.``Chars.Collection.OptionArray C.N.less_than``() = + validate (Chars.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.OptionArray C.N.less_or_equal``() = + validate (Chars.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.OptionArray C.N.greater_than``() = + validate (Chars.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.OptionArray C.N.greater_or_equal``() = + validate (Chars.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.RefArray C.I.equals``() = + validate (Chars.Collection.RefArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.RefArray C.I.equal``() = + validate (Chars.Collection.RefArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.RefArray C.I.not_equal``() = + validate (Chars.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.RefArray C.I.compare``() = + validate (Chars.Collection.RefArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Chars.Collection.RefArray C.I.less_than``() = + validate (Chars.Collection.RefArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.RefArray C.I.less_or_equal``() = + validate (Chars.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.RefArray C.I.greater_than``() = + validate (Chars.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.RefArray C.I.greater_or_equal``() = + validate (Chars.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.RefArray C.N.equals``() = + validate (Chars.Collection.RefArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.RefArray C.N.equal``() = + validate (Chars.Collection.RefArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.RefArray C.N.not_equal``() = + validate (Chars.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.RefArray C.N.compare``() = + validate (Chars.Collection.RefArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Chars.Collection.RefArray C.N.less_than``() = + validate (Chars.Collection.RefArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.RefArray C.N.less_or_equal``() = + validate (Chars.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.RefArray C.N.greater_than``() = + validate (Chars.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.RefArray C.N.greater_or_equal``() = + validate (Chars.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.I.equals``() = + validate (Chars.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.I.equal``() = + validate (Chars.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.I.not_equal``() = + validate (Chars.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.I.compare``() = + validate (Chars.Collection.RefWrapArray) C.I.compare [| + 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.I.less_than``() = + validate (Chars.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Chars.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.I.greater_than``() = + validate (Chars.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Chars.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.N.equals``() = + validate (Chars.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.N.equal``() = + validate (Chars.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.N.not_equal``() = + validate (Chars.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.N.compare``() = + validate (Chars.Collection.RefWrapArray) C.N.compare [| + 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.N.less_than``() = + validate (Chars.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Chars.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.N.greater_than``() = + validate (Chars.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Chars.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.UnionArray C.I.equals``() = + validate (Chars.Collection.UnionArray) C.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Chars.Collection.UnionArray C.I.equal``() = + validate (Chars.Collection.UnionArray) C.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Chars.Collection.UnionArray C.I.not_equal``() = + validate (Chars.Collection.UnionArray) C.I.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Chars.Collection.UnionArray C.I.compare``() = + validate (Chars.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Chars.Collection.UnionArray C.I.less_than``() = + validate (Chars.Collection.UnionArray) C.I.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Chars.Collection.UnionArray C.I.less_or_equal``() = + validate (Chars.Collection.UnionArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.UnionArray C.I.greater_than``() = + validate (Chars.Collection.UnionArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.UnionArray C.I.greater_or_equal``() = + validate (Chars.Collection.UnionArray) C.I.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Chars.Collection.UnionArray C.N.equals``() = + validate (Chars.Collection.UnionArray) C.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Chars.Collection.UnionArray C.N.equal``() = + validate (Chars.Collection.UnionArray) C.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Chars.Collection.UnionArray C.N.not_equal``() = + validate (Chars.Collection.UnionArray) C.N.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Chars.Collection.UnionArray C.N.compare``() = + validate (Chars.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Chars.Collection.UnionArray C.N.less_than``() = + validate (Chars.Collection.UnionArray) C.N.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Chars.Collection.UnionArray C.N.less_or_equal``() = + validate (Chars.Collection.UnionArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.UnionArray C.N.greater_than``() = + validate (Chars.Collection.UnionArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.UnionArray C.N.greater_or_equal``() = + validate (Chars.Collection.UnionArray) C.N.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.I.equals``() = + validate (Chars.Collection.UnionWrapArray) C.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.I.equal``() = + validate (Chars.Collection.UnionWrapArray) C.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.I.not_equal``() = + validate (Chars.Collection.UnionWrapArray) C.I.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.I.compare``() = + validate (Chars.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;-48;-1;-2;-3;-3;-3;-3;-49;-1;-2;-3;-3;-3;-3;-50;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-65535;-1;-2;-2;-2;-2;1;-48;-1;-2;-2;-2;-2;1;-49;-1;-2;-2;-2;-2;1;-50;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; + -1;-1;-1;-1;2;1;-48;-1;-1;-1;-1;2;1;-49;-1;-1;-1;-1;2;1;-50;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-65535;-1;-2;-3;3; + 2;1;-48;-1;-2;-3;3;2;1;-49;-1;-2;-3;3;2;1;-50;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-65535;-1;-2;3;2;1;1;-48;-1; + -2;3;2;1;1;-49;-1;-2;3;2;1;1;-50;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-65535;-1;3;2;1;2;1;-48;-1;3;2;1;2; + 1;-49;-1;3;2;1;2;1;-50;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-65535;3;2;1;3;2;1;-48;3;2;1;3;2;1;-49;3;2; + 1;3;2;1;-50;65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;65487;-1;-2;-3;-3;-3;-3;65486;-1;-2;-3;-3;-3;-3;65485;-1;-2;-3;-3;-3;-3; + 1;65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;65487;-1;-2;-2;-2;-2;1;65486;-1;-2;-2;-2;-2;1;65485;-1;-2;-2;-2;-2;2;1;65535;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;65487;-1;-1;-1;-1;2;1;65486;-1;-1;-1;-1;2;1;65485;-1;-1;-1;-1;3;2;1;65535;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;65487;-1;-2;-3;3;2;1;65486;-1;-2;-3;3;2;1;65485;-1;-2;-3;3;2;1;1;65535;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;65487;-1;-2;3;2;1;1;65486;-1;-2;3;2;1;1;65485;-1;-2;3;2;1;2;1;65535;-1;3;2;1;2;1;0;-1;3;2;1;2;1;65487; + -1;3;2;1;2;1;65486;-1;3;2;1;2;1;65485;-1;3;2;1;3;2;1;65535;3;2;1;3;2;1;0;3;2;1;3;2;1;65487;3;2;1;3; + 2;1;65486;3;2;1;3;2;1;65485;48;-1;-2;-3;-3;-3;-3;-65487;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1; + -2;-3;-3;-3;-3;1;48;-1;-2;-2;-2;-2;1;-65487;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2; + 2;1;48;-1;-1;-1;-1;2;1;-65487;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;48;-1; + -2;-3;3;2;1;-65487;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;48;-1;-2;3;2;1; + 1;-65487;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;48;-1;3;2;1;2;1;-65487;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;48;3;2;1;3;2;1;-65487;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-2;49;-1;-2;-3;-3;-3;-3;-65486;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;49;-1;-2;-2;-2;-2;1;-65486;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;49;-1;-1;-1;-1;2;1;-65486;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;49;-1;-2;-3;3;2;1;-65486;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;49; + -1;-2;3;2;1;1;-65486;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;49;-1;3;2;1; + 2;1;-65486;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;49;3;2;1;3;2;1;-65486;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;50;-1;-2;-3;-3;-3;-3;-65485;-1;-2;-3;-3;-3;-3;2;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;50;-1;-2;-2;-2;-2;1;-65485;-1;-2;-2;-2;-2;1;2;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;50;-1;-1;-1;-1;2;1;-65485;-1;-1;-1;-1;2;1;2;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;50;-1;-2;-3;3;2;1;-65485;-1;-2;-3;3;2;1;2;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;50;-1;-2;3;2;1;1;-65485;-1;-2;3;2;1;1;2;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 50;-1;3;2;1;2;1;-65485;-1;3;2;1;2;1;2;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;50;3;2;1; + 3;2;1;-65485;3;2;1;3;2;1;2;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.I.less_than``() = + validate (Chars.Collection.UnionWrapArray) C.I.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Chars.Collection.UnionWrapArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.I.greater_than``() = + validate (Chars.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Chars.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.N.equals``() = + validate (Chars.Collection.UnionWrapArray) C.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.N.equal``() = + validate (Chars.Collection.UnionWrapArray) C.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.N.not_equal``() = + validate (Chars.Collection.UnionWrapArray) C.N.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.N.compare``() = + validate (Chars.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;-48;-1;-2;-3;-3;-3;-3;-49;-1;-2;-3;-3;-3;-3;-50;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-65535;-1;-2;-2;-2;-2;1;-48;-1;-2;-2;-2;-2;1;-49;-1;-2;-2;-2;-2;1;-50;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; + -1;-1;-1;-1;2;1;-48;-1;-1;-1;-1;2;1;-49;-1;-1;-1;-1;2;1;-50;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-65535;-1;-2;-3;3; + 2;1;-48;-1;-2;-3;3;2;1;-49;-1;-2;-3;3;2;1;-50;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-65535;-1;-2;3;2;1;1;-48;-1; + -2;3;2;1;1;-49;-1;-2;3;2;1;1;-50;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-65535;-1;3;2;1;2;1;-48;-1;3;2;1;2; + 1;-49;-1;3;2;1;2;1;-50;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-65535;3;2;1;3;2;1;-48;3;2;1;3;2;1;-49;3;2; + 1;3;2;1;-50;65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;65487;-1;-2;-3;-3;-3;-3;65486;-1;-2;-3;-3;-3;-3;65485;-1;-2;-3;-3;-3;-3; + 1;65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;65487;-1;-2;-2;-2;-2;1;65486;-1;-2;-2;-2;-2;1;65485;-1;-2;-2;-2;-2;2;1;65535;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;65487;-1;-1;-1;-1;2;1;65486;-1;-1;-1;-1;2;1;65485;-1;-1;-1;-1;3;2;1;65535;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;65487;-1;-2;-3;3;2;1;65486;-1;-2;-3;3;2;1;65485;-1;-2;-3;3;2;1;1;65535;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;65487;-1;-2;3;2;1;1;65486;-1;-2;3;2;1;1;65485;-1;-2;3;2;1;2;1;65535;-1;3;2;1;2;1;0;-1;3;2;1;2;1;65487; + -1;3;2;1;2;1;65486;-1;3;2;1;2;1;65485;-1;3;2;1;3;2;1;65535;3;2;1;3;2;1;0;3;2;1;3;2;1;65487;3;2;1;3; + 2;1;65486;3;2;1;3;2;1;65485;48;-1;-2;-3;-3;-3;-3;-65487;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1; + -2;-3;-3;-3;-3;1;48;-1;-2;-2;-2;-2;1;-65487;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2; + 2;1;48;-1;-1;-1;-1;2;1;-65487;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-2;-1;-1;-1;-1;3;2;1;48;-1; + -2;-3;3;2;1;-65487;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-2;-1;-2;-3;3;2;1;1;48;-1;-2;3;2;1; + 1;-65487;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-2;-1;-2;3;2;1;2;1;48;-1;3;2;1;2;1;-65487;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-2;-1;3;2;1;3;2;1;48;3;2;1;3;2;1;-65487;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-2;49;-1;-2;-3;-3;-3;-3;-65486;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;49;-1;-2;-2;-2;-2;1;-65486;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;49;-1;-1;-1;-1;2;1;-65486;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;49;-1;-2;-3;3;2;1;-65486;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;49; + -1;-2;3;2;1;1;-65486;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;49;-1;3;2;1; + 2;1;-65486;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;49;3;2;1;3;2;1;-65486;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;50;-1;-2;-3;-3;-3;-3;-65485;-1;-2;-3;-3;-3;-3;2;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;50;-1;-2;-2;-2;-2;1;-65485;-1;-2;-2;-2;-2;1;2;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;50;-1;-1;-1;-1;2;1;-65485;-1;-1;-1;-1;2;1;2;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;50;-1;-2;-3;3;2;1;-65485;-1;-2;-3;3;2;1;2;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;50;-1;-2;3;2;1;1;-65485;-1;-2;3;2;1;1;2;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 50;-1;3;2;1;2;1;-65485;-1;3;2;1;2;1;2;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;50;3;2;1; + 3;2;1;-65485;3;2;1;3;2;1;2;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.N.less_than``() = + validate (Chars.Collection.UnionWrapArray) C.N.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Chars.Collection.UnionWrapArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.N.greater_than``() = + validate (Chars.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Chars.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Chars.Collection.ValueArray C.I.equals``() = + validate (Chars.Collection.ValueArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueArray C.I.equal``() = + validate (Chars.Collection.ValueArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueArray C.I.not_equal``() = + validate (Chars.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ValueArray C.I.compare``() = + validate (Chars.Collection.ValueArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Chars.Collection.ValueArray C.I.less_than``() = + validate (Chars.Collection.ValueArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.ValueArray C.I.less_or_equal``() = + validate (Chars.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueArray C.I.greater_than``() = + validate (Chars.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.ValueArray C.I.greater_or_equal``() = + validate (Chars.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.ValueArray C.N.equals``() = + validate (Chars.Collection.ValueArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueArray C.N.equal``() = + validate (Chars.Collection.ValueArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueArray C.N.not_equal``() = + validate (Chars.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ValueArray C.N.compare``() = + validate (Chars.Collection.ValueArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Chars.Collection.ValueArray C.N.less_than``() = + validate (Chars.Collection.ValueArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.ValueArray C.N.less_or_equal``() = + validate (Chars.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueArray C.N.greater_than``() = + validate (Chars.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.ValueArray C.N.greater_or_equal``() = + validate (Chars.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.I.equals``() = + validate (Chars.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.I.equal``() = + validate (Chars.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.I.not_equal``() = + validate (Chars.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.I.compare``() = + validate (Chars.Collection.ValueWrapArray) C.I.compare [| + 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.I.less_than``() = + validate (Chars.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Chars.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.I.greater_than``() = + validate (Chars.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Chars.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.N.equals``() = + validate (Chars.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.N.equal``() = + validate (Chars.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.N.not_equal``() = + validate (Chars.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.N.compare``() = + validate (Chars.Collection.ValueWrapArray) C.N.compare [| + 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.N.less_than``() = + validate (Chars.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Chars.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.N.greater_than``() = + validate (Chars.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Chars.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.ArrayArray C.I.equals``() = + validate (Chars.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray C.I.equal``() = + validate (Chars.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray C.I.not_equal``() = + validate (Chars.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray C.I.compare``() = + validate (Chars.Collection.ArrayArray) C.I.compare [| + 0;-65535;-48;-49;-50;-1;-1;-1;-1;-1;65535;0;65487;65486;65485;-1;-1;-1;-1;-1;48;-65487;0;-1;-2;-1;-1;-1;-1;-1;49;-65486;1;0;-1;-1;-1;-1;-1;-1; + 50;-65485;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;-48;-49;-50;1;1;1;1;1;65535;0;65487;65486;65485;1;1;1;1;1;48;-65487;0;-1;-2; + 1;1;1;1;1;49;-65486;1;0;-1;1;1;1;1;1;50;-65485;2;1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray C.I.less_than``() = + validate (Chars.Collection.ArrayArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.ArrayArray C.I.less_or_equal``() = + validate (Chars.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray C.I.greater_than``() = + validate (Chars.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Chars.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.ArrayArray C.N.equals``() = + validate (Chars.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray C.N.equal``() = + validate (Chars.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray C.N.not_equal``() = + validate (Chars.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray C.N.compare``() = + validate (Chars.Collection.ArrayArray) C.N.compare [| + 0;-65535;-48;-49;-50;-1;-1;-1;-1;-1;65535;0;65487;65486;65485;-1;-1;-1;-1;-1;48;-65487;0;-1;-2;-1;-1;-1;-1;-1;49;-65486;1;0;-1;-1;-1;-1;-1;-1; + 50;-65485;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;-48;-49;-50;1;1;1;1;1;65535;0;65487;65486;65485;1;1;1;1;1;48;-65487;0;-1;-2; + 1;1;1;1;1;49;-65486;1;0;-1;1;1;1;1;1;50;-65485;2;1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray C.N.less_than``() = + validate (Chars.Collection.ArrayArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.ArrayArray C.N.less_or_equal``() = + validate (Chars.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray C.N.greater_than``() = + validate (Chars.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Chars.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.ListArray C.I.equals``() = + validate (Chars.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ListArray C.I.equal``() = + validate (Chars.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ListArray C.I.not_equal``() = + validate (Chars.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ListArray C.I.compare``() = + validate (Chars.Collection.ListArray) C.I.compare [| + 0;-65535;-48;-49;-50;-1;-65535;-48;-49;-50;65535;0;65487;65486;65485;65535;-1;65487;65486;65485;48;-65487;0;-1;-2;48;-65487;-1;-1;-2;49;-65486;1;0;-1;49;-65486;1;-1;-1; + 50;-65485;2;1;0;50;-65485;2;1;-1;1;-65535;-48;-49;-50;0;-65535;-48;-49;-50;65535;1;65487;65486;65485;65535;0;65487;65486;65485;48;-65487;1;-1;-2;48;-65487;0;-1;-2; + 49;-65486;1;1;-1;49;-65486;1;0;-1;50;-65485;2;1;1;50;-65485;2;1;0 + |] + + [] + member __.``Chars.Collection.ListArray C.I.less_than``() = + validate (Chars.Collection.ListArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.ListArray C.I.less_or_equal``() = + validate (Chars.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.ListArray C.I.greater_than``() = + validate (Chars.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.ListArray C.I.greater_or_equal``() = + validate (Chars.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.ListArray C.N.equals``() = + validate (Chars.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ListArray C.N.equal``() = + validate (Chars.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ListArray C.N.not_equal``() = + validate (Chars.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ListArray C.N.compare``() = + validate (Chars.Collection.ListArray) C.N.compare [| + 0;-65535;-48;-49;-50;-1;-65535;-48;-49;-50;65535;0;65487;65486;65485;65535;-1;65487;65486;65485;48;-65487;0;-1;-2;48;-65487;-1;-1;-2;49;-65486;1;0;-1;49;-65486;1;-1;-1; + 50;-65485;2;1;0;50;-65485;2;1;-1;1;-65535;-48;-49;-50;0;-65535;-48;-49;-50;65535;1;65487;65486;65485;65535;0;65487;65486;65485;48;-65487;1;-1;-2;48;-65487;0;-1;-2; + 49;-65486;1;1;-1;49;-65486;1;0;-1;50;-65485;2;1;1;50;-65485;2;1;0 + |] + + [] + member __.``Chars.Collection.ListArray C.N.less_than``() = + validate (Chars.Collection.ListArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Chars.Collection.ListArray C.N.less_or_equal``() = + validate (Chars.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Chars.Collection.ListArray C.N.greater_than``() = + validate (Chars.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Chars.Collection.ListArray C.N.greater_or_equal``() = + validate (Chars.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; + 0;1;0;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; + 1;0;1;1;0;1;1;1;0;1;1;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; + 0;1;0;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; + 1;0;1;1;0;1;1;1;0;1;1;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.Array E.I.equals``() = + validate (NullableChars.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.Array E.I.equal``() = + validate (NullableChars.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.Array E.I.not_equal``() = + validate (NullableChars.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.Array E.N.equals``() = + validate (NullableChars.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.Array E.N.equal``() = + validate (NullableChars.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.Array E.N.not_equal``() = + validate (NullableChars.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.OptionArray E.I.equals``() = + validate (NullableChars.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.OptionArray E.I.equal``() = + validate (NullableChars.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.OptionArray E.I.not_equal``() = + validate (NullableChars.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.OptionArray E.N.equals``() = + validate (NullableChars.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.OptionArray E.N.equal``() = + validate (NullableChars.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.OptionArray E.N.not_equal``() = + validate (NullableChars.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.RefArray E.I.equals``() = + validate (NullableChars.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.RefArray E.I.equal``() = + validate (NullableChars.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.RefArray E.I.not_equal``() = + validate (NullableChars.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.RefArray E.N.equals``() = + validate (NullableChars.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.RefArray E.N.equal``() = + validate (NullableChars.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.RefArray E.N.not_equal``() = + validate (NullableChars.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.RefWrapArray E.I.equals``() = + validate (NullableChars.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.RefWrapArray E.I.equal``() = + validate (NullableChars.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableChars.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.RefWrapArray E.N.equals``() = + validate (NullableChars.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.RefWrapArray E.N.equal``() = + validate (NullableChars.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableChars.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.UnionArray E.I.equals``() = + validate (NullableChars.Collection.UnionArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.UnionArray E.I.equal``() = + validate (NullableChars.Collection.UnionArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.UnionArray E.I.not_equal``() = + validate (NullableChars.Collection.UnionArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.UnionArray E.N.equals``() = + validate (NullableChars.Collection.UnionArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.UnionArray E.N.equal``() = + validate (NullableChars.Collection.UnionArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.UnionArray E.N.not_equal``() = + validate (NullableChars.Collection.UnionArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.UnionWrapArray E.I.equals``() = + validate (NullableChars.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.UnionWrapArray E.I.equal``() = + validate (NullableChars.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableChars.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.UnionWrapArray E.N.equals``() = + validate (NullableChars.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.UnionWrapArray E.N.equal``() = + validate (NullableChars.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableChars.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.ValueArray E.I.equals``() = + validate (NullableChars.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ValueArray E.I.equal``() = + validate (NullableChars.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ValueArray E.I.not_equal``() = + validate (NullableChars.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.ValueArray E.N.equals``() = + validate (NullableChars.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ValueArray E.N.equal``() = + validate (NullableChars.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ValueArray E.N.not_equal``() = + validate (NullableChars.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.ValueWrapArray E.I.equals``() = + validate (NullableChars.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ValueWrapArray E.I.equal``() = + validate (NullableChars.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableChars.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.ValueWrapArray E.N.equals``() = + validate (NullableChars.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ValueWrapArray E.N.equal``() = + validate (NullableChars.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableChars.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.ArrayArray E.I.equals``() = + validate (NullableChars.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ArrayArray E.I.equal``() = + validate (NullableChars.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ArrayArray E.I.not_equal``() = + validate (NullableChars.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.ArrayArray E.N.equals``() = + validate (NullableChars.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ArrayArray E.N.equal``() = + validate (NullableChars.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ArrayArray E.N.not_equal``() = + validate (NullableChars.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.ListArray E.I.equals``() = + validate (NullableChars.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ListArray E.I.equal``() = + validate (NullableChars.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ListArray E.I.not_equal``() = + validate (NullableChars.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableChars.Collection.ListArray E.N.equals``() = + validate (NullableChars.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ListArray E.N.equal``() = + validate (NullableChars.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableChars.Collection.ListArray E.N.not_equal``() = + validate (NullableChars.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.Array C.I.equals``() = + validate (Strings.Collection.Array) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.Array C.I.equal``() = + validate (Strings.Collection.Array) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.Array C.I.not_equal``() = + validate (Strings.Collection.Array) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.Array C.I.compare``() = + validate (Strings.Collection.Array) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.Array C.I.less_than``() = + validate (Strings.Collection.Array) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.Array C.I.less_or_equal``() = + validate (Strings.Collection.Array) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.Array C.I.greater_than``() = + validate (Strings.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.Array C.I.greater_or_equal``() = + validate (Strings.Collection.Array) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.Array C.N.equals``() = + validate (Strings.Collection.Array) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.Array C.N.equal``() = + validate (Strings.Collection.Array) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.Array C.N.not_equal``() = + validate (Strings.Collection.Array) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.Array C.N.compare``() = + validate (Strings.Collection.Array) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.Array C.N.less_than``() = + validate (Strings.Collection.Array) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.Array C.N.less_or_equal``() = + validate (Strings.Collection.Array) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.Array C.N.greater_than``() = + validate (Strings.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.Array C.N.greater_or_equal``() = + validate (Strings.Collection.Array) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.OptionArray C.I.equals``() = + validate (Strings.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.OptionArray C.I.equal``() = + validate (Strings.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.OptionArray C.I.not_equal``() = + validate (Strings.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.OptionArray C.I.compare``() = + validate (Strings.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;0;-72;-3;-97;-229;1;1;72;0;72;-25;-157;1;1;3;-72;0;-97;-229;1;1;97;25;97; + 0;-132;1;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.OptionArray C.I.less_than``() = + validate (Strings.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;1;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.OptionArray C.I.less_or_equal``() = + validate (Strings.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;0;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.OptionArray C.I.greater_than``() = + validate (Strings.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;1;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.OptionArray C.I.greater_or_equal``() = + validate (Strings.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;0;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.OptionArray C.N.equals``() = + validate (Strings.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.OptionArray C.N.equal``() = + validate (Strings.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.OptionArray C.N.not_equal``() = + validate (Strings.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.OptionArray C.N.compare``() = + validate (Strings.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;0;-72;-3;-97;-229;1;1;72;0;72;-25;-157;1;1;3;-72;0;-97;-229;1;1;97;25;97; + 0;-132;1;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.OptionArray C.N.less_than``() = + validate (Strings.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;1;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.OptionArray C.N.less_or_equal``() = + validate (Strings.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;0;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.OptionArray C.N.greater_than``() = + validate (Strings.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;1;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.OptionArray C.N.greater_or_equal``() = + validate (Strings.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;0;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.RefArray C.I.equals``() = + validate (Strings.Collection.RefArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefArray C.I.equal``() = + validate (Strings.Collection.RefArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefArray C.I.not_equal``() = + validate (Strings.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.RefArray C.I.compare``() = + validate (Strings.Collection.RefArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.RefArray C.I.less_than``() = + validate (Strings.Collection.RefArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.RefArray C.I.less_or_equal``() = + validate (Strings.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefArray C.I.greater_than``() = + validate (Strings.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.RefArray C.I.greater_or_equal``() = + validate (Strings.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.RefArray C.N.equals``() = + validate (Strings.Collection.RefArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefArray C.N.equal``() = + validate (Strings.Collection.RefArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefArray C.N.not_equal``() = + validate (Strings.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.RefArray C.N.compare``() = + validate (Strings.Collection.RefArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.RefArray C.N.less_than``() = + validate (Strings.Collection.RefArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.RefArray C.N.less_or_equal``() = + validate (Strings.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefArray C.N.greater_than``() = + validate (Strings.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.RefArray C.N.greater_or_equal``() = + validate (Strings.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.I.equals``() = + validate (Strings.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.I.equal``() = + validate (Strings.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.I.not_equal``() = + validate (Strings.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.I.compare``() = + validate (Strings.Collection.RefWrapArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.I.less_than``() = + validate (Strings.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Strings.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.I.greater_than``() = + validate (Strings.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Strings.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.N.equals``() = + validate (Strings.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.N.equal``() = + validate (Strings.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.N.not_equal``() = + validate (Strings.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.N.compare``() = + validate (Strings.Collection.RefWrapArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.N.less_than``() = + validate (Strings.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Strings.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.N.greater_than``() = + validate (Strings.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Strings.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.UnionArray C.I.equals``() = + validate (Strings.Collection.UnionArray) C.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionArray C.I.equal``() = + validate (Strings.Collection.UnionArray) C.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionArray C.I.not_equal``() = + validate (Strings.Collection.UnionArray) C.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Strings.Collection.UnionArray C.I.compare``() = + validate (Strings.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2; + 1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + -1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-72;-1;-2;-3;-3;-3;-3;-3;-1;-2;-3;-3; + -3;-3;-97;-1;-2;-3;-3;-3;-3;-229;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-72;-1;-2;-2;-2;-2;1;-3;-1; + -2;-2;-2;-2;1;-97;-1;-2;-2;-2;-2;1;-229;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-72;-1;-1;-1;-1;2; + 1;-3;-1;-1;-1;-1;2;1;-97;-1;-1;-1;-1;2;1;-229;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-72;-1;-2; + -3;3;2;1;-3;-1;-2;-3;3;2;1;-97;-1;-2;-3;3;2;1;-229;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1; + -72;-1;-2;3;2;1;1;-3;-1;-2;3;2;1;1;-97;-1;-2;3;2;1;1;-229;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2; + 1;2;1;-72;-1;3;2;1;2;1;-3;-1;3;2;1;2;1;-97;-1;3;2;1;2;1;-229;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0; + 3;2;1;3;2;1;-72;3;2;1;3;2;1;-3;3;2;1;3;2;1;-97;3;2;1;3;2;1;-229;1;-1;-2;-3;-3;-3;-3;72;-1;-2;-3;-3; + -3;-3;0;-1;-2;-3;-3;-3;-3;72;-1;-2;-3;-3;-3;-3;-25;-1;-2;-3;-3;-3;-3;-157;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;72;-1; + -2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;72;-1;-2;-2;-2;-2;1;-25;-1;-2;-2;-2;-2;1;-157;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2; + 1;72;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;72;-1;-1;-1;-1;2;1;-25;-1;-1;-1;-1;2;1;-157;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;72;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;72;-1;-2;-3;3;2;1;-25;-1;-2;-3;3;2;1;-157;-1;-2;-3;3;2;1;1; + 1;-1;-2;3;2;1;1;72;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;72;-1;-2;3;2;1;1;-25;-1;-2;3;2;1;1;-157;-1;-2;3;2; + 1;2;1;1;-1;3;2;1;2;1;72;-1;3;2;1;2;1;0;-1;3;2;1;2;1;72;-1;3;2;1;2;1;-25;-1;3;2;1;2;1;-157;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;72;3;2;1;3;2;1;0;3;2;1;3;2;1;72;3;2;1;3;2;1;-25;3;2;1;3;2; + 1;-157;1;-1;-2;-3;-3;-3;-3;3;-1;-2;-3;-3;-3;-3;-72;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-97;-1;-2;-3;-3;-3;-3;-229;-1;-2; + -3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;3;-1;-2;-2;-2;-2;1;-72;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-97;-1;-2;-2;-2;-2;1; + -229;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;3;-1;-1;-1;-1;2;1;-72;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-97;-1;-1;-1; + -1;2;1;-229;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;3;-1;-2;-3;3;2;1;-72;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-97; + -1;-2;-3;3;2;1;-229;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;3;-1;-2;3;2;1;1;-72;-1;-2;3;2;1;1;0;-1;-2;3;2; + 1;1;-97;-1;-2;3;2;1;1;-229;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;3;-1;3;2;1;2;1;-72;-1;3;2;1;2;1;0;-1; + 3;2;1;2;1;-97;-1;3;2;1;2;1;-229;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;3;3;2;1;3;2;1;-72;3;2;1;3;2; + 1;0;3;2;1;3;2;1;-97;3;2;1;3;2;1;-229;1;-1;-2;-3;-3;-3;-3;97;-1;-2;-3;-3;-3;-3;25;-1;-2;-3;-3;-3;-3;97;-1;-2; + -3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-132;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;97;-1;-2;-2;-2;-2;1;25;-1;-2;-2;-2;-2;1; + 97;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-132;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;97;-1;-1;-1;-1;2;1;25;-1;-1;-1; + -1;2;1;97;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-132;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;97;-1;-2;-3;3;2;1;25; + -1;-2;-3;3;2;1;97;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-132;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;97;-1;-2;3;2; + 1;1;25;-1;-2;3;2;1;1;97;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-132;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;97;-1; + 3;2;1;2;1;25;-1;3;2;1;2;1;97;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-132;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;97;3;2;1;3;2;1;25;3;2;1;3;2;1;97;3;2;1;3;2;1;0;3;2;1;3;2;1;-132;1;-1;-2;-3;-3;-3;-3;229;-1;-2; + -3;-3;-3;-3;157;-1;-2;-3;-3;-3;-3;229;-1;-2;-3;-3;-3;-3;132;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1; + 229;-1;-2;-2;-2;-2;1;157;-1;-2;-2;-2;-2;1;229;-1;-2;-2;-2;-2;1;132;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1; + -1;2;1;229;-1;-1;-1;-1;2;1;157;-1;-1;-1;-1;2;1;229;-1;-1;-1;-1;2;1;132;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;229;-1;-2;-3;3;2;1;157;-1;-2;-3;3;2;1;229;-1;-2;-3;3;2;1;132;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2; + 1;1;1;-1;-2;3;2;1;1;229;-1;-2;3;2;1;1;157;-1;-2;3;2;1;1;229;-1;-2;3;2;1;1;132;-1;-2;3;2;1;1;0;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;229;-1;3;2;1;2;1;157;-1;3;2;1;2;1;229;-1;3;2;1;2;1;132;-1;3;2;1;2;1; + 0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;229;3;2;1;3;2;1;157;3;2;1;3;2;1;229;3;2;1;3;2;1;132;3;2;1; + 3;2;1;0 + |] + + [] + member __.``Strings.Collection.UnionArray C.I.less_than``() = + validate (Strings.Collection.UnionArray) C.I.less_than [| + 0;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;1;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 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;1;0;0;0;0;0; + 0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;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;0;0;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;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;0;0;0 + |] + + [] + member __.``Strings.Collection.UnionArray C.I.less_or_equal``() = + validate (Strings.Collection.UnionArray) C.I.less_or_equal [| + 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;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;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;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;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;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;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;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionArray C.I.greater_than``() = + validate (Strings.Collection.UnionArray) C.I.greater_than [| + 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;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;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;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;0;0;0;0;0;0;1;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;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;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;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;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;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Strings.Collection.UnionArray C.I.greater_or_equal``() = + validate (Strings.Collection.UnionArray) C.I.greater_or_equal [| + 1;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; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;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;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 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;0;1;1;1;1;1; + 1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;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;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1 + |] + + [] + member __.``Strings.Collection.UnionArray C.N.equals``() = + validate (Strings.Collection.UnionArray) C.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionArray C.N.equal``() = + validate (Strings.Collection.UnionArray) C.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionArray C.N.not_equal``() = + validate (Strings.Collection.UnionArray) C.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Strings.Collection.UnionArray C.N.compare``() = + validate (Strings.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2; + 1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + -1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-72;-1;-2;-3;-3;-3;-3;-3;-1;-2;-3;-3; + -3;-3;-97;-1;-2;-3;-3;-3;-3;-229;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-72;-1;-2;-2;-2;-2;1;-3;-1; + -2;-2;-2;-2;1;-97;-1;-2;-2;-2;-2;1;-229;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-72;-1;-1;-1;-1;2; + 1;-3;-1;-1;-1;-1;2;1;-97;-1;-1;-1;-1;2;1;-229;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-72;-1;-2; + -3;3;2;1;-3;-1;-2;-3;3;2;1;-97;-1;-2;-3;3;2;1;-229;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1; + -72;-1;-2;3;2;1;1;-3;-1;-2;3;2;1;1;-97;-1;-2;3;2;1;1;-229;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2; + 1;2;1;-72;-1;3;2;1;2;1;-3;-1;3;2;1;2;1;-97;-1;3;2;1;2;1;-229;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0; + 3;2;1;3;2;1;-72;3;2;1;3;2;1;-3;3;2;1;3;2;1;-97;3;2;1;3;2;1;-229;1;-1;-2;-3;-3;-3;-3;72;-1;-2;-3;-3; + -3;-3;0;-1;-2;-3;-3;-3;-3;72;-1;-2;-3;-3;-3;-3;-25;-1;-2;-3;-3;-3;-3;-157;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;72;-1; + -2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;72;-1;-2;-2;-2;-2;1;-25;-1;-2;-2;-2;-2;1;-157;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2; + 1;72;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;72;-1;-1;-1;-1;2;1;-25;-1;-1;-1;-1;2;1;-157;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;72;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;72;-1;-2;-3;3;2;1;-25;-1;-2;-3;3;2;1;-157;-1;-2;-3;3;2;1;1; + 1;-1;-2;3;2;1;1;72;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;72;-1;-2;3;2;1;1;-25;-1;-2;3;2;1;1;-157;-1;-2;3;2; + 1;2;1;1;-1;3;2;1;2;1;72;-1;3;2;1;2;1;0;-1;3;2;1;2;1;72;-1;3;2;1;2;1;-25;-1;3;2;1;2;1;-157;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;72;3;2;1;3;2;1;0;3;2;1;3;2;1;72;3;2;1;3;2;1;-25;3;2;1;3;2; + 1;-157;1;-1;-2;-3;-3;-3;-3;3;-1;-2;-3;-3;-3;-3;-72;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-97;-1;-2;-3;-3;-3;-3;-229;-1;-2; + -3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;3;-1;-2;-2;-2;-2;1;-72;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-97;-1;-2;-2;-2;-2;1; + -229;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;3;-1;-1;-1;-1;2;1;-72;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-97;-1;-1;-1; + -1;2;1;-229;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;3;-1;-2;-3;3;2;1;-72;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-97; + -1;-2;-3;3;2;1;-229;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;3;-1;-2;3;2;1;1;-72;-1;-2;3;2;1;1;0;-1;-2;3;2; + 1;1;-97;-1;-2;3;2;1;1;-229;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;3;-1;3;2;1;2;1;-72;-1;3;2;1;2;1;0;-1; + 3;2;1;2;1;-97;-1;3;2;1;2;1;-229;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;3;3;2;1;3;2;1;-72;3;2;1;3;2; + 1;0;3;2;1;3;2;1;-97;3;2;1;3;2;1;-229;1;-1;-2;-3;-3;-3;-3;97;-1;-2;-3;-3;-3;-3;25;-1;-2;-3;-3;-3;-3;97;-1;-2; + -3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-132;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;97;-1;-2;-2;-2;-2;1;25;-1;-2;-2;-2;-2;1; + 97;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-132;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;97;-1;-1;-1;-1;2;1;25;-1;-1;-1; + -1;2;1;97;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-132;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;97;-1;-2;-3;3;2;1;25; + -1;-2;-3;3;2;1;97;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-132;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;97;-1;-2;3;2; + 1;1;25;-1;-2;3;2;1;1;97;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-132;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;97;-1; + 3;2;1;2;1;25;-1;3;2;1;2;1;97;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-132;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;97;3;2;1;3;2;1;25;3;2;1;3;2;1;97;3;2;1;3;2;1;0;3;2;1;3;2;1;-132;1;-1;-2;-3;-3;-3;-3;229;-1;-2; + -3;-3;-3;-3;157;-1;-2;-3;-3;-3;-3;229;-1;-2;-3;-3;-3;-3;132;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1; + 229;-1;-2;-2;-2;-2;1;157;-1;-2;-2;-2;-2;1;229;-1;-2;-2;-2;-2;1;132;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1; + -1;2;1;229;-1;-1;-1;-1;2;1;157;-1;-1;-1;-1;2;1;229;-1;-1;-1;-1;2;1;132;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;229;-1;-2;-3;3;2;1;157;-1;-2;-3;3;2;1;229;-1;-2;-3;3;2;1;132;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2; + 1;1;1;-1;-2;3;2;1;1;229;-1;-2;3;2;1;1;157;-1;-2;3;2;1;1;229;-1;-2;3;2;1;1;132;-1;-2;3;2;1;1;0;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;229;-1;3;2;1;2;1;157;-1;3;2;1;2;1;229;-1;3;2;1;2;1;132;-1;3;2;1;2;1; + 0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;229;3;2;1;3;2;1;157;3;2;1;3;2;1;229;3;2;1;3;2;1;132;3;2;1; + 3;2;1;0 + |] + + [] + member __.``Strings.Collection.UnionArray C.N.less_than``() = + validate (Strings.Collection.UnionArray) C.N.less_than [| + 0;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;1;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 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;1;0;0;0;0;0; + 0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;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;0;0;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;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;0;0;0 + |] + + [] + member __.``Strings.Collection.UnionArray C.N.less_or_equal``() = + validate (Strings.Collection.UnionArray) C.N.less_or_equal [| + 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;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;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;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;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;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;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;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionArray C.N.greater_than``() = + validate (Strings.Collection.UnionArray) C.N.greater_than [| + 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;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;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;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;0;0;0;0;0;0;1;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;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;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;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;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;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Strings.Collection.UnionArray C.N.greater_or_equal``() = + validate (Strings.Collection.UnionArray) C.N.greater_or_equal [| + 1;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; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;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;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 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;0;1;1;1;1;1; + 1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;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;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.I.equals``() = + validate (Strings.Collection.UnionWrapArray) C.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.I.equal``() = + validate (Strings.Collection.UnionWrapArray) C.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.I.not_equal``() = + validate (Strings.Collection.UnionWrapArray) C.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.I.compare``() = + validate (Strings.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2; + 1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + -1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-72;-1;-2;-3;-3;-3;-3;-3;-1;-2;-3;-3; + -3;-3;-97;-1;-2;-3;-3;-3;-3;-229;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-72;-1;-2;-2;-2;-2;1;-3;-1; + -2;-2;-2;-2;1;-97;-1;-2;-2;-2;-2;1;-229;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-72;-1;-1;-1;-1;2; + 1;-3;-1;-1;-1;-1;2;1;-97;-1;-1;-1;-1;2;1;-229;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-72;-1;-2; + -3;3;2;1;-3;-1;-2;-3;3;2;1;-97;-1;-2;-3;3;2;1;-229;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1; + -72;-1;-2;3;2;1;1;-3;-1;-2;3;2;1;1;-97;-1;-2;3;2;1;1;-229;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2; + 1;2;1;-72;-1;3;2;1;2;1;-3;-1;3;2;1;2;1;-97;-1;3;2;1;2;1;-229;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0; + 3;2;1;3;2;1;-72;3;2;1;3;2;1;-3;3;2;1;3;2;1;-97;3;2;1;3;2;1;-229;1;-1;-2;-3;-3;-3;-3;72;-1;-2;-3;-3; + -3;-3;0;-1;-2;-3;-3;-3;-3;72;-1;-2;-3;-3;-3;-3;-25;-1;-2;-3;-3;-3;-3;-157;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;72;-1; + -2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;72;-1;-2;-2;-2;-2;1;-25;-1;-2;-2;-2;-2;1;-157;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2; + 1;72;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;72;-1;-1;-1;-1;2;1;-25;-1;-1;-1;-1;2;1;-157;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;72;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;72;-1;-2;-3;3;2;1;-25;-1;-2;-3;3;2;1;-157;-1;-2;-3;3;2;1;1; + 1;-1;-2;3;2;1;1;72;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;72;-1;-2;3;2;1;1;-25;-1;-2;3;2;1;1;-157;-1;-2;3;2; + 1;2;1;1;-1;3;2;1;2;1;72;-1;3;2;1;2;1;0;-1;3;2;1;2;1;72;-1;3;2;1;2;1;-25;-1;3;2;1;2;1;-157;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;72;3;2;1;3;2;1;0;3;2;1;3;2;1;72;3;2;1;3;2;1;-25;3;2;1;3;2; + 1;-157;1;-1;-2;-3;-3;-3;-3;3;-1;-2;-3;-3;-3;-3;-72;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-97;-1;-2;-3;-3;-3;-3;-229;-1;-2; + -3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;3;-1;-2;-2;-2;-2;1;-72;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-97;-1;-2;-2;-2;-2;1; + -229;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;3;-1;-1;-1;-1;2;1;-72;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-97;-1;-1;-1; + -1;2;1;-229;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;3;-1;-2;-3;3;2;1;-72;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-97; + -1;-2;-3;3;2;1;-229;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;3;-1;-2;3;2;1;1;-72;-1;-2;3;2;1;1;0;-1;-2;3;2; + 1;1;-97;-1;-2;3;2;1;1;-229;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;3;-1;3;2;1;2;1;-72;-1;3;2;1;2;1;0;-1; + 3;2;1;2;1;-97;-1;3;2;1;2;1;-229;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;3;3;2;1;3;2;1;-72;3;2;1;3;2; + 1;0;3;2;1;3;2;1;-97;3;2;1;3;2;1;-229;1;-1;-2;-3;-3;-3;-3;97;-1;-2;-3;-3;-3;-3;25;-1;-2;-3;-3;-3;-3;97;-1;-2; + -3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-132;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;97;-1;-2;-2;-2;-2;1;25;-1;-2;-2;-2;-2;1; + 97;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-132;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;97;-1;-1;-1;-1;2;1;25;-1;-1;-1; + -1;2;1;97;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-132;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;97;-1;-2;-3;3;2;1;25; + -1;-2;-3;3;2;1;97;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-132;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;97;-1;-2;3;2; + 1;1;25;-1;-2;3;2;1;1;97;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-132;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;97;-1; + 3;2;1;2;1;25;-1;3;2;1;2;1;97;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-132;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;97;3;2;1;3;2;1;25;3;2;1;3;2;1;97;3;2;1;3;2;1;0;3;2;1;3;2;1;-132;1;-1;-2;-3;-3;-3;-3;229;-1;-2; + -3;-3;-3;-3;157;-1;-2;-3;-3;-3;-3;229;-1;-2;-3;-3;-3;-3;132;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1; + 229;-1;-2;-2;-2;-2;1;157;-1;-2;-2;-2;-2;1;229;-1;-2;-2;-2;-2;1;132;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1; + -1;2;1;229;-1;-1;-1;-1;2;1;157;-1;-1;-1;-1;2;1;229;-1;-1;-1;-1;2;1;132;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;229;-1;-2;-3;3;2;1;157;-1;-2;-3;3;2;1;229;-1;-2;-3;3;2;1;132;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2; + 1;1;1;-1;-2;3;2;1;1;229;-1;-2;3;2;1;1;157;-1;-2;3;2;1;1;229;-1;-2;3;2;1;1;132;-1;-2;3;2;1;1;0;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;229;-1;3;2;1;2;1;157;-1;3;2;1;2;1;229;-1;3;2;1;2;1;132;-1;3;2;1;2;1; + 0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;229;3;2;1;3;2;1;157;3;2;1;3;2;1;229;3;2;1;3;2;1;132;3;2;1; + 3;2;1;0 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.I.less_than``() = + validate (Strings.Collection.UnionWrapArray) C.I.less_than [| + 0;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;1;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 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;1;0;0;0;0;0; + 0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;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;0;0;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;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;0;0;0 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Strings.Collection.UnionWrapArray) C.I.less_or_equal [| + 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;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;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;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;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;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;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;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.I.greater_than``() = + validate (Strings.Collection.UnionWrapArray) C.I.greater_than [| + 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;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;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;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;0;0;0;0;0;0;1;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;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;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;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;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;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Strings.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;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; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;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;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 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;0;1;1;1;1;1; + 1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;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;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.N.equals``() = + validate (Strings.Collection.UnionWrapArray) C.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.N.equal``() = + validate (Strings.Collection.UnionWrapArray) C.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.N.not_equal``() = + validate (Strings.Collection.UnionWrapArray) C.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.N.compare``() = + validate (Strings.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2; + 1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + -1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-72;-1;-2;-3;-3;-3;-3;-3;-1;-2;-3;-3; + -3;-3;-97;-1;-2;-3;-3;-3;-3;-229;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-72;-1;-2;-2;-2;-2;1;-3;-1; + -2;-2;-2;-2;1;-97;-1;-2;-2;-2;-2;1;-229;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-72;-1;-1;-1;-1;2; + 1;-3;-1;-1;-1;-1;2;1;-97;-1;-1;-1;-1;2;1;-229;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-72;-1;-2; + -3;3;2;1;-3;-1;-2;-3;3;2;1;-97;-1;-2;-3;3;2;1;-229;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1; + -72;-1;-2;3;2;1;1;-3;-1;-2;3;2;1;1;-97;-1;-2;3;2;1;1;-229;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2; + 1;2;1;-72;-1;3;2;1;2;1;-3;-1;3;2;1;2;1;-97;-1;3;2;1;2;1;-229;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0; + 3;2;1;3;2;1;-72;3;2;1;3;2;1;-3;3;2;1;3;2;1;-97;3;2;1;3;2;1;-229;1;-1;-2;-3;-3;-3;-3;72;-1;-2;-3;-3; + -3;-3;0;-1;-2;-3;-3;-3;-3;72;-1;-2;-3;-3;-3;-3;-25;-1;-2;-3;-3;-3;-3;-157;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;72;-1; + -2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;72;-1;-2;-2;-2;-2;1;-25;-1;-2;-2;-2;-2;1;-157;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2; + 1;72;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;72;-1;-1;-1;-1;2;1;-25;-1;-1;-1;-1;2;1;-157;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;72;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;72;-1;-2;-3;3;2;1;-25;-1;-2;-3;3;2;1;-157;-1;-2;-3;3;2;1;1; + 1;-1;-2;3;2;1;1;72;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;72;-1;-2;3;2;1;1;-25;-1;-2;3;2;1;1;-157;-1;-2;3;2; + 1;2;1;1;-1;3;2;1;2;1;72;-1;3;2;1;2;1;0;-1;3;2;1;2;1;72;-1;3;2;1;2;1;-25;-1;3;2;1;2;1;-157;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;72;3;2;1;3;2;1;0;3;2;1;3;2;1;72;3;2;1;3;2;1;-25;3;2;1;3;2; + 1;-157;1;-1;-2;-3;-3;-3;-3;3;-1;-2;-3;-3;-3;-3;-72;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-97;-1;-2;-3;-3;-3;-3;-229;-1;-2; + -3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;3;-1;-2;-2;-2;-2;1;-72;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-97;-1;-2;-2;-2;-2;1; + -229;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;3;-1;-1;-1;-1;2;1;-72;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-97;-1;-1;-1; + -1;2;1;-229;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;3;-1;-2;-3;3;2;1;-72;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-97; + -1;-2;-3;3;2;1;-229;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;3;-1;-2;3;2;1;1;-72;-1;-2;3;2;1;1;0;-1;-2;3;2; + 1;1;-97;-1;-2;3;2;1;1;-229;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;3;-1;3;2;1;2;1;-72;-1;3;2;1;2;1;0;-1; + 3;2;1;2;1;-97;-1;3;2;1;2;1;-229;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;3;3;2;1;3;2;1;-72;3;2;1;3;2; + 1;0;3;2;1;3;2;1;-97;3;2;1;3;2;1;-229;1;-1;-2;-3;-3;-3;-3;97;-1;-2;-3;-3;-3;-3;25;-1;-2;-3;-3;-3;-3;97;-1;-2; + -3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-132;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;97;-1;-2;-2;-2;-2;1;25;-1;-2;-2;-2;-2;1; + 97;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-132;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;97;-1;-1;-1;-1;2;1;25;-1;-1;-1; + -1;2;1;97;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-132;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;97;-1;-2;-3;3;2;1;25; + -1;-2;-3;3;2;1;97;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-132;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;97;-1;-2;3;2; + 1;1;25;-1;-2;3;2;1;1;97;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-132;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;97;-1; + 3;2;1;2;1;25;-1;3;2;1;2;1;97;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-132;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;97;3;2;1;3;2;1;25;3;2;1;3;2;1;97;3;2;1;3;2;1;0;3;2;1;3;2;1;-132;1;-1;-2;-3;-3;-3;-3;229;-1;-2; + -3;-3;-3;-3;157;-1;-2;-3;-3;-3;-3;229;-1;-2;-3;-3;-3;-3;132;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1; + 229;-1;-2;-2;-2;-2;1;157;-1;-2;-2;-2;-2;1;229;-1;-2;-2;-2;-2;1;132;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1; + -1;2;1;229;-1;-1;-1;-1;2;1;157;-1;-1;-1;-1;2;1;229;-1;-1;-1;-1;2;1;132;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;229;-1;-2;-3;3;2;1;157;-1;-2;-3;3;2;1;229;-1;-2;-3;3;2;1;132;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2; + 1;1;1;-1;-2;3;2;1;1;229;-1;-2;3;2;1;1;157;-1;-2;3;2;1;1;229;-1;-2;3;2;1;1;132;-1;-2;3;2;1;1;0;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;229;-1;3;2;1;2;1;157;-1;3;2;1;2;1;229;-1;3;2;1;2;1;132;-1;3;2;1;2;1; + 0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;229;3;2;1;3;2;1;157;3;2;1;3;2;1;229;3;2;1;3;2;1;132;3;2;1; + 3;2;1;0 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.N.less_than``() = + validate (Strings.Collection.UnionWrapArray) C.N.less_than [| + 0;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;1;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 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;1;0;0;0;0;0; + 0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;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;0;0;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;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;0;0;0 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Strings.Collection.UnionWrapArray) C.N.less_or_equal [| + 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;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;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;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;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;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;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;0;0;1 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.N.greater_than``() = + validate (Strings.Collection.UnionWrapArray) C.N.greater_than [| + 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;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;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;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;0;0;0;0;0;0;1;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;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;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;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;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;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Strings.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Strings.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;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; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;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;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 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;0;1;1;1;1;1; + 1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;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;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1 + |] + + [] + member __.``Strings.Collection.ValueArray C.I.equals``() = + validate (Strings.Collection.ValueArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueArray C.I.equal``() = + validate (Strings.Collection.ValueArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueArray C.I.not_equal``() = + validate (Strings.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ValueArray C.I.compare``() = + validate (Strings.Collection.ValueArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.ValueArray C.I.less_than``() = + validate (Strings.Collection.ValueArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.ValueArray C.I.less_or_equal``() = + validate (Strings.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueArray C.I.greater_than``() = + validate (Strings.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ValueArray C.I.greater_or_equal``() = + validate (Strings.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.ValueArray C.N.equals``() = + validate (Strings.Collection.ValueArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueArray C.N.equal``() = + validate (Strings.Collection.ValueArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueArray C.N.not_equal``() = + validate (Strings.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ValueArray C.N.compare``() = + validate (Strings.Collection.ValueArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.ValueArray C.N.less_than``() = + validate (Strings.Collection.ValueArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.ValueArray C.N.less_or_equal``() = + validate (Strings.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueArray C.N.greater_than``() = + validate (Strings.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ValueArray C.N.greater_or_equal``() = + validate (Strings.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.I.equals``() = + validate (Strings.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.I.equal``() = + validate (Strings.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.I.not_equal``() = + validate (Strings.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.I.compare``() = + validate (Strings.Collection.ValueWrapArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.I.less_than``() = + validate (Strings.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Strings.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.I.greater_than``() = + validate (Strings.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Strings.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.N.equals``() = + validate (Strings.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.N.equal``() = + validate (Strings.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.N.not_equal``() = + validate (Strings.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.N.compare``() = + validate (Strings.Collection.ValueWrapArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.N.less_than``() = + validate (Strings.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Strings.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.N.greater_than``() = + validate (Strings.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Strings.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.ArrayArray C.I.equals``() = + validate (Strings.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray C.I.equal``() = + validate (Strings.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray C.I.not_equal``() = + validate (Strings.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ArrayArray C.I.compare``() = + validate (Strings.Collection.ArrayArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;-1;-1;-1;-1;-1;-1;1;72;0;72;-25;-157;-1;-1;-1;-1;-1;-1;1;3;-72;0; + -97;-229;-1;-1;-1;-1;-1;-1;1;97;25;97;0;-132;-1;-1;-1;-1;-1;-1;1;229;157;229;132;0;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;0;-1; + -1;-1;-1;-1;1;1;1;1;1;1;1;0;-72;-3;-97;-229;1;1;1;1;1;1;1;72;0;72;-25;-157;1;1;1;1;1;1;1;3;-72;0;-97;-229; + 1;1;1;1;1;1;1;97;25;97;0;-132;1;1;1;1;1;1;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.ArrayArray C.I.less_than``() = + validate (Strings.Collection.ArrayArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0; + 1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;0;1; + 1;1;1;1;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.ArrayArray C.I.less_or_equal``() = + validate (Strings.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;1;1;1;1;1;1;1;1;0;0;1;1; + 1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1; + 1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;1;1;1; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray C.I.greater_than``() = + validate (Strings.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;0;0;0;0;0;0;0;0;1;1;0;0; + 0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0; + 0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;0;0;0; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Strings.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1; + 0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;1;0; + 0;0;0;0;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.ArrayArray C.N.equals``() = + validate (Strings.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray C.N.equal``() = + validate (Strings.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray C.N.not_equal``() = + validate (Strings.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ArrayArray C.N.compare``() = + validate (Strings.Collection.ArrayArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;-1;-1;-1;-1;-1;-1;1;72;0;72;-25;-157;-1;-1;-1;-1;-1;-1;1;3;-72;0; + -97;-229;-1;-1;-1;-1;-1;-1;1;97;25;97;0;-132;-1;-1;-1;-1;-1;-1;1;229;157;229;132;0;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;0;-1; + -1;-1;-1;-1;1;1;1;1;1;1;1;0;-72;-3;-97;-229;1;1;1;1;1;1;1;72;0;72;-25;-157;1;1;1;1;1;1;1;3;-72;0;-97;-229; + 1;1;1;1;1;1;1;97;25;97;0;-132;1;1;1;1;1;1;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.ArrayArray C.N.less_than``() = + validate (Strings.Collection.ArrayArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0; + 1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;0;1; + 1;1;1;1;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.ArrayArray C.N.less_or_equal``() = + validate (Strings.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;1;1;1;1;1;1;1;1;0;0;1;1; + 1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1; + 1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;1;1;1; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray C.N.greater_than``() = + validate (Strings.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;0;0;0;0;0;0;0;0;1;1;0;0; + 0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0; + 0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;0;0;0; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Strings.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1; + 0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;1;0; + 0;0;0;0;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.ListArray C.I.equals``() = + validate (Strings.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ListArray C.I.equal``() = + validate (Strings.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ListArray C.I.not_equal``() = + validate (Strings.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ListArray C.I.compare``() = + validate (Strings.Collection.ListArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-72;-3;-97;-229;1;72;0;72;-25;-157;1;72;-1;72;-25;-157;1;3;-72;0; + -97;-229;1;3;-72;-1;-97;-229;1;97;25;97;0;-132;1;97;25;97;-1;-132;1;229;157;229;132;0;1;229;157;229;132;-1;1;-1;-1;-1;-1;-1;0;-1; + -1;-1;-1;-1;1;1;-72;-3;-97;-229;1;0;-72;-3;-97;-229;1;72;1;72;-25;-157;1;72;0;72;-25;-157;1;3;-72;1;-97;-229;1;3;-72;0;-97;-229; + 1;97;25;97;1;-132;1;97;25;97;0;-132;1;229;157;229;132;1;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.ListArray C.I.less_than``() = + validate (Strings.Collection.ListArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0; + 1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;0;1; + 1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.ListArray C.I.less_or_equal``() = + validate (Strings.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;1;1;0;0;1;1; + 1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;1;1;1;1;1;1; + 1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0;1;1;0;0;1;1;1;1; + 0;0;0;0;0;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ListArray C.I.greater_than``() = + validate (Strings.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;0;0;1;1;0;0; + 0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;0;0;0;0;0;0; + 0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;0;1;0;0;1;1;0;0;0;0; + 1;1;1;1;1;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ListArray C.I.greater_or_equal``() = + validate (Strings.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;0;1; + 0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;1;0; + 0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;0;1;0;0; + 1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.ListArray C.N.equals``() = + validate (Strings.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ListArray C.N.equal``() = + validate (Strings.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ListArray C.N.not_equal``() = + validate (Strings.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ListArray C.N.compare``() = + validate (Strings.Collection.ListArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-72;-3;-97;-229;1;72;0;72;-25;-157;1;72;-1;72;-25;-157;1;3;-72;0; + -97;-229;1;3;-72;-1;-97;-229;1;97;25;97;0;-132;1;97;25;97;-1;-132;1;229;157;229;132;0;1;229;157;229;132;-1;1;-1;-1;-1;-1;-1;0;-1; + -1;-1;-1;-1;1;1;-72;-3;-97;-229;1;0;-72;-3;-97;-229;1;72;1;72;-25;-157;1;72;0;72;-25;-157;1;3;-72;1;-97;-229;1;3;-72;0;-97;-229; + 1;97;25;97;1;-132;1;97;25;97;0;-132;1;229;157;229;132;1;1;229;157;229;132;0 + |] + + [] + member __.``Strings.Collection.ListArray C.N.less_than``() = + validate (Strings.Collection.ListArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0; + 1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;0;1; + 1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.ListArray C.N.less_or_equal``() = + validate (Strings.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;1;1;0;0;1;1; + 1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;1;1;1;1;1;1; + 1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0;1;1;0;0;1;1;1;1; + 0;0;0;0;0;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ListArray C.N.greater_than``() = + validate (Strings.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;0;0;1;1;0;0; + 0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;0;0;0;0;0;0; + 0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;0;1;0;0;1;1;0;0;0;0; + 1;1;1;1;1;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ListArray C.N.greater_or_equal``() = + validate (Strings.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;0;1; + 0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;1;0; + 0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;0;1;0;0; + 1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-3;-3;-97;1;1;72;0;72;-25;-157;1;72;72;72;-25;1;1;3;-72;0; + -97;-229;1;3;-1;-1;-97;1;1;97;25;97;0;-132;1;97;97;97;-1;1;1;229;157;229;132;0;1;229;229;229;132;1;1;-1;-1;-1;-1;-1;0;-1; + -1;-1;-1;-229;1;1;-72;-3;-97;-229;1;0;-3;-3;-97;1;1;3;-72;1;-97;-229;1;3;0;-25;-97;1;1;3;-72;1;-97;-229;1;3;25;0;-97;1; + 1;97;25;97;1;-132;1;97;97;97;0;1;1;-1;-1;-1;-1;-1;229;-1;-1;-1;-1;0 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;1;0; + 1;1;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;1; + 1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;0;0;0;1;0;1;1;0;0;0;1;1;0;0;0;1;0;1;1;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;1;0;0;0;1;1; + 1;1;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1; + 1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;1;1;1;0;0;0;1;0;1;1;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;0;1;1;1;1;0;1;1;1;0;0; + 0;0;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0; + 0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;0;1;1;0;0;0;1;1;1;0;1;0;0;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;0;1; + 0;0;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0; + 0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;1;1;1;0;1;0;0;1;1;1;0;0;1;1;1;0;1;0;0;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-3;-3;-97;1;1;72;0;72;-25;-157;1;72;72;72;-25;1;1;3;-72;0; + -97;-229;1;3;-1;-1;-97;1;1;97;25;97;0;-132;1;97;97;97;-1;1;1;229;157;229;132;0;1;229;229;229;132;1;1;-1;-1;-1;-1;-1;0;-1; + -1;-1;-1;-229;1;1;-72;-3;-97;-229;1;0;-3;-3;-97;1;1;3;-72;1;-97;-229;1;3;0;-25;-97;1;1;3;-72;1;-97;-229;1;3;25;0;-97;1; + 1;97;25;97;1;-132;1;97;97;97;0;1;1;-1;-1;-1;-1;-1;229;-1;-1;-1;-1;0 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;1;0; + 1;1;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;1; + 1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;0;0;0;1;0;1;1;0;0;0;1;1;0;0;0;1;0;1;1;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;1;0;0;0;1;1; + 1;1;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1; + 1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;1;1;1;0;0;0;1;0;1;1;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;0;1;1;1;1;0;1;1;1;0;0; + 0;0;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0; + 0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;0;1;1;0;0;0;1;1;1;0;1;0;0;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0 + |] + + [] + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;0;1; + 0;0;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0; + 0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;1;1;1;0;1;0;0;1;1;1;0;0;1;1;1;0;1;0;0;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.Array C.I.equals``() = + validate (Decimals.Collection.Array) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.Array C.I.equal``() = + validate (Decimals.Collection.Array) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.Array C.I.not_equal``() = + validate (Decimals.Collection.Array) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.Array C.I.compare``() = + validate (Decimals.Collection.Array) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.Array C.I.less_than``() = + validate (Decimals.Collection.Array) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.Array C.I.less_or_equal``() = + validate (Decimals.Collection.Array) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.Array C.I.greater_than``() = + validate (Decimals.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.Array C.I.greater_or_equal``() = + validate (Decimals.Collection.Array) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.Array C.N.equals``() = + validate (Decimals.Collection.Array) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.Array C.N.equal``() = + validate (Decimals.Collection.Array) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.Array C.N.not_equal``() = + validate (Decimals.Collection.Array) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.Array C.N.compare``() = + validate (Decimals.Collection.Array) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.Array C.N.less_than``() = + validate (Decimals.Collection.Array) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.Array C.N.less_or_equal``() = + validate (Decimals.Collection.Array) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.Array C.N.greater_than``() = + validate (Decimals.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.Array C.N.greater_or_equal``() = + validate (Decimals.Collection.Array) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.OptionArray C.I.equals``() = + validate (Decimals.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.OptionArray C.I.equal``() = + validate (Decimals.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.OptionArray C.I.not_equal``() = + validate (Decimals.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.OptionArray C.I.compare``() = + validate (Decimals.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.OptionArray C.I.less_than``() = + validate (Decimals.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.OptionArray C.I.less_or_equal``() = + validate (Decimals.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.OptionArray C.I.greater_than``() = + validate (Decimals.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.OptionArray C.I.greater_or_equal``() = + validate (Decimals.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.OptionArray C.N.equals``() = + validate (Decimals.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.OptionArray C.N.equal``() = + validate (Decimals.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.OptionArray C.N.not_equal``() = + validate (Decimals.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.OptionArray C.N.compare``() = + validate (Decimals.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.OptionArray C.N.less_than``() = + validate (Decimals.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.OptionArray C.N.less_or_equal``() = + validate (Decimals.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.OptionArray C.N.greater_than``() = + validate (Decimals.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.OptionArray C.N.greater_or_equal``() = + validate (Decimals.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.RefArray C.I.equals``() = + validate (Decimals.Collection.RefArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefArray C.I.equal``() = + validate (Decimals.Collection.RefArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefArray C.I.not_equal``() = + validate (Decimals.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefArray C.I.compare``() = + validate (Decimals.Collection.RefArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefArray C.I.less_than``() = + validate (Decimals.Collection.RefArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.RefArray C.I.less_or_equal``() = + validate (Decimals.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefArray C.I.greater_than``() = + validate (Decimals.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefArray C.I.greater_or_equal``() = + validate (Decimals.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.RefArray C.N.equals``() = + validate (Decimals.Collection.RefArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefArray C.N.equal``() = + validate (Decimals.Collection.RefArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefArray C.N.not_equal``() = + validate (Decimals.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefArray C.N.compare``() = + validate (Decimals.Collection.RefArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefArray C.N.less_than``() = + validate (Decimals.Collection.RefArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.RefArray C.N.less_or_equal``() = + validate (Decimals.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefArray C.N.greater_than``() = + validate (Decimals.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefArray C.N.greater_or_equal``() = + validate (Decimals.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.I.equals``() = + validate (Decimals.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.I.equal``() = + validate (Decimals.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.I.not_equal``() = + validate (Decimals.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.I.compare``() = + validate (Decimals.Collection.RefWrapArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.I.less_than``() = + validate (Decimals.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Decimals.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.I.greater_than``() = + validate (Decimals.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Decimals.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.N.equals``() = + validate (Decimals.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.N.equal``() = + validate (Decimals.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.N.not_equal``() = + validate (Decimals.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.N.compare``() = + validate (Decimals.Collection.RefWrapArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.N.less_than``() = + validate (Decimals.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Decimals.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.N.greater_than``() = + validate (Decimals.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Decimals.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.UnionArray C.I.equals``() = + validate (Decimals.Collection.UnionArray) C.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Decimals.Collection.UnionArray C.I.equal``() = + validate (Decimals.Collection.UnionArray) C.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Decimals.Collection.UnionArray C.I.not_equal``() = + validate (Decimals.Collection.UnionArray) C.I.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Decimals.Collection.UnionArray C.I.compare``() = + validate (Decimals.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Decimals.Collection.UnionArray C.I.less_than``() = + validate (Decimals.Collection.UnionArray) C.I.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Decimals.Collection.UnionArray C.I.less_or_equal``() = + validate (Decimals.Collection.UnionArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.UnionArray C.I.greater_than``() = + validate (Decimals.Collection.UnionArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.UnionArray C.I.greater_or_equal``() = + validate (Decimals.Collection.UnionArray) C.I.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Decimals.Collection.UnionArray C.N.equals``() = + validate (Decimals.Collection.UnionArray) C.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Decimals.Collection.UnionArray C.N.equal``() = + validate (Decimals.Collection.UnionArray) C.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Decimals.Collection.UnionArray C.N.not_equal``() = + validate (Decimals.Collection.UnionArray) C.N.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Decimals.Collection.UnionArray C.N.compare``() = + validate (Decimals.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Decimals.Collection.UnionArray C.N.less_than``() = + validate (Decimals.Collection.UnionArray) C.N.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Decimals.Collection.UnionArray C.N.less_or_equal``() = + validate (Decimals.Collection.UnionArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.UnionArray C.N.greater_than``() = + validate (Decimals.Collection.UnionArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.UnionArray C.N.greater_or_equal``() = + validate (Decimals.Collection.UnionArray) C.N.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.I.equals``() = + validate (Decimals.Collection.UnionWrapArray) C.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.I.equal``() = + validate (Decimals.Collection.UnionWrapArray) C.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.I.not_equal``() = + validate (Decimals.Collection.UnionWrapArray) C.I.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.I.compare``() = + validate (Decimals.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.I.less_than``() = + validate (Decimals.Collection.UnionWrapArray) C.I.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Decimals.Collection.UnionWrapArray) C.I.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.I.greater_than``() = + validate (Decimals.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Decimals.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.N.equals``() = + validate (Decimals.Collection.UnionWrapArray) C.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.N.equal``() = + validate (Decimals.Collection.UnionWrapArray) C.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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; + 1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.N.not_equal``() = + validate (Decimals.Collection.UnionWrapArray) C.N.not_equal [| + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1;0;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;1; + 0;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;1;0;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;1;0;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;1;0;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;1;0 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.N.compare``() = + validate (Decimals.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1; + -1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1; + -1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1; + 1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2; + -2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;2;1; + 1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.N.less_than``() = + validate (Decimals.Collection.UnionWrapArray) C.N.less_than [| + 0;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;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Decimals.Collection.UnionWrapArray) C.N.less_or_equal [| + 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;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.N.greater_than``() = + validate (Decimals.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Decimals.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;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;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Decimals.Collection.ValueArray C.I.equals``() = + validate (Decimals.Collection.ValueArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueArray C.I.equal``() = + validate (Decimals.Collection.ValueArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueArray C.I.not_equal``() = + validate (Decimals.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueArray C.I.compare``() = + validate (Decimals.Collection.ValueArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueArray C.I.less_than``() = + validate (Decimals.Collection.ValueArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.ValueArray C.I.less_or_equal``() = + validate (Decimals.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueArray C.I.greater_than``() = + validate (Decimals.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueArray C.I.greater_or_equal``() = + validate (Decimals.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.ValueArray C.N.equals``() = + validate (Decimals.Collection.ValueArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueArray C.N.equal``() = + validate (Decimals.Collection.ValueArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueArray C.N.not_equal``() = + validate (Decimals.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueArray C.N.compare``() = + validate (Decimals.Collection.ValueArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueArray C.N.less_than``() = + validate (Decimals.Collection.ValueArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.ValueArray C.N.less_or_equal``() = + validate (Decimals.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueArray C.N.greater_than``() = + validate (Decimals.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueArray C.N.greater_or_equal``() = + validate (Decimals.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.I.equals``() = + validate (Decimals.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.I.equal``() = + validate (Decimals.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.I.not_equal``() = + validate (Decimals.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.I.compare``() = + validate (Decimals.Collection.ValueWrapArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.I.less_than``() = + validate (Decimals.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Decimals.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.I.greater_than``() = + validate (Decimals.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Decimals.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.N.equals``() = + validate (Decimals.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.N.equal``() = + validate (Decimals.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.N.not_equal``() = + validate (Decimals.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.N.compare``() = + validate (Decimals.Collection.ValueWrapArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.N.less_than``() = + validate (Decimals.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Decimals.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.N.greater_than``() = + validate (Decimals.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Decimals.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.I.equals``() = + validate (Decimals.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.I.equal``() = + validate (Decimals.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.I.not_equal``() = + validate (Decimals.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.I.compare``() = + validate (Decimals.Collection.ArrayArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.I.less_than``() = + validate (Decimals.Collection.ArrayArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.I.less_or_equal``() = + validate (Decimals.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.I.greater_than``() = + validate (Decimals.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Decimals.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.N.equals``() = + validate (Decimals.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.N.equal``() = + validate (Decimals.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.N.not_equal``() = + validate (Decimals.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.N.compare``() = + validate (Decimals.Collection.ArrayArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; + 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; + 1;1;1;1;1;1;-1;1;0;-1;1;1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.N.less_than``() = + validate (Decimals.Collection.ArrayArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; + 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; + 0;0;0;0;0;0;1;0;0;1;0;0;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.N.less_or_equal``() = + validate (Decimals.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; + 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; + 0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.N.greater_than``() = + validate (Decimals.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; + 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; + 1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Decimals.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; + 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; + 1;1;1;1;1;1;0;1;1;0;1;1;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.ListArray C.I.equals``() = + validate (Decimals.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ListArray C.I.equal``() = + validate (Decimals.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ListArray C.I.not_equal``() = + validate (Decimals.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ListArray C.I.compare``() = + validate (Decimals.Collection.ListArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; + 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; + 1;-1;1;1;-1;1;-1;1;0;-1;1;-1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ListArray C.I.less_than``() = + validate (Decimals.Collection.ListArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.ListArray C.I.less_or_equal``() = + validate (Decimals.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.ListArray C.I.greater_than``() = + validate (Decimals.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.ListArray C.I.greater_or_equal``() = + validate (Decimals.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.ListArray C.N.equals``() = + validate (Decimals.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ListArray C.N.equal``() = + validate (Decimals.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ListArray C.N.not_equal``() = + validate (Decimals.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ListArray C.N.compare``() = + validate (Decimals.Collection.ListArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; + 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; + 1;-1;1;1;-1;1;-1;1;0;-1;1;-1;1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ListArray C.N.less_than``() = + validate (Decimals.Collection.ListArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; + 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;0;0;0;0;1;0;0;0 + |] + + [] + member __.``Decimals.Collection.ListArray C.N.less_or_equal``() = + validate (Decimals.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; + 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; + 0;1;0;0;1;0;1;0;1;1;0;1;0;0;0;0;1;0;0;1 + |] + + [] + member __.``Decimals.Collection.ListArray C.N.greater_than``() = + validate (Decimals.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; + 1;0;1;1;0;1;0;1;0;0;1;0;1;1;1;1;0;1;1;0 + |] + + [] + member __.``Decimals.Collection.ListArray C.N.greater_or_equal``() = + validate (Decimals.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; + 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; + 1;0;1;1;0;1;0;1;1;0;1;0;1;1;1;1;0;1;1;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; + 0;1;0;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; + 1;0;1;1;0;1;1;1;0;1;1;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; + 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; + 1;-1;1;1;-1;1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; + 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; + 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; + 0;1;0;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; + 1;0;1;1;0;1;1;1;0;1;1;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; + 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; + 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.Array E.I.equals``() = + validate (NullableDecimals.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.Array E.I.equal``() = + validate (NullableDecimals.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.Array E.I.not_equal``() = + validate (NullableDecimals.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.Array E.N.equals``() = + validate (NullableDecimals.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.Array E.N.equal``() = + validate (NullableDecimals.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.Array E.N.not_equal``() = + validate (NullableDecimals.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.OptionArray E.I.equals``() = + validate (NullableDecimals.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.OptionArray E.I.equal``() = + validate (NullableDecimals.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.OptionArray E.I.not_equal``() = + validate (NullableDecimals.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.OptionArray E.N.equals``() = + validate (NullableDecimals.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.OptionArray E.N.equal``() = + validate (NullableDecimals.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.OptionArray E.N.not_equal``() = + validate (NullableDecimals.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.RefArray E.I.equals``() = + validate (NullableDecimals.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.RefArray E.I.equal``() = + validate (NullableDecimals.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.RefArray E.I.not_equal``() = + validate (NullableDecimals.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.RefArray E.N.equals``() = + validate (NullableDecimals.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.RefArray E.N.equal``() = + validate (NullableDecimals.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.RefArray E.N.not_equal``() = + validate (NullableDecimals.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.RefWrapArray E.I.equals``() = + validate (NullableDecimals.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.RefWrapArray E.I.equal``() = + validate (NullableDecimals.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableDecimals.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.RefWrapArray E.N.equals``() = + validate (NullableDecimals.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.RefWrapArray E.N.equal``() = + validate (NullableDecimals.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableDecimals.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.UnionArray E.I.equals``() = + validate (NullableDecimals.Collection.UnionArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.UnionArray E.I.equal``() = + validate (NullableDecimals.Collection.UnionArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.UnionArray E.I.not_equal``() = + validate (NullableDecimals.Collection.UnionArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.UnionArray E.N.equals``() = + validate (NullableDecimals.Collection.UnionArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.UnionArray E.N.equal``() = + validate (NullableDecimals.Collection.UnionArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.UnionArray E.N.not_equal``() = + validate (NullableDecimals.Collection.UnionArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.UnionWrapArray E.I.equals``() = + validate (NullableDecimals.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.UnionWrapArray E.I.equal``() = + validate (NullableDecimals.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableDecimals.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.UnionWrapArray E.N.equals``() = + validate (NullableDecimals.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.UnionWrapArray E.N.equal``() = + validate (NullableDecimals.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1; + 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;0; + 0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0; + 0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0;1;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;0;0;0; + 1;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; + 0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableDecimals.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;1;1;1;1;1; + 1;1;1;0;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;1;1; + 1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0; + 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;1;1;1;1;1;1; + 1;1;0;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;1;1;1; + 1;1;1;1;1;0;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; + 1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1; + 1;0;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;1;1;1;1; + 1;1;1;1;0;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;1; + 1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1; + 0;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;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.ValueArray E.I.equals``() = + validate (NullableDecimals.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ValueArray E.I.equal``() = + validate (NullableDecimals.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ValueArray E.I.not_equal``() = + validate (NullableDecimals.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.ValueArray E.N.equals``() = + validate (NullableDecimals.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ValueArray E.N.equal``() = + validate (NullableDecimals.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ValueArray E.N.not_equal``() = + validate (NullableDecimals.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.ValueWrapArray E.I.equals``() = + validate (NullableDecimals.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ValueWrapArray E.I.equal``() = + validate (NullableDecimals.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableDecimals.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.ValueWrapArray E.N.equals``() = + validate (NullableDecimals.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ValueWrapArray E.N.equal``() = + validate (NullableDecimals.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableDecimals.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.ArrayArray E.I.equals``() = + validate (NullableDecimals.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ArrayArray E.I.equal``() = + validate (NullableDecimals.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ArrayArray E.I.not_equal``() = + validate (NullableDecimals.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.ArrayArray E.N.equals``() = + validate (NullableDecimals.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ArrayArray E.N.equal``() = + validate (NullableDecimals.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ArrayArray E.N.not_equal``() = + validate (NullableDecimals.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.ListArray E.I.equals``() = + validate (NullableDecimals.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ListArray E.I.equal``() = + validate (NullableDecimals.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ListArray E.I.not_equal``() = + validate (NullableDecimals.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDecimals.Collection.ListArray E.N.equals``() = + validate (NullableDecimals.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ListArray E.N.equal``() = + validate (NullableDecimals.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDecimals.Collection.ListArray E.N.not_equal``() = + validate (NullableDecimals.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Floats.Collection.Array C.I.equals``() = + validate (Floats.Collection.Array) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.Array C.I.equal``() = + validate (Floats.Collection.Array) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.Array C.I.not_equal``() = + validate (Floats.Collection.Array) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.Array C.I.compare``() = + validate (Floats.Collection.Array) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.Array C.I.less_than``() = + validate (Floats.Collection.Array) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Floats.Collection.Array C.I.less_or_equal``() = + validate (Floats.Collection.Array) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Floats.Collection.Array C.I.greater_than``() = + validate (Floats.Collection.Array) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Floats.Collection.Array C.I.greater_or_equal``() = + validate (Floats.Collection.Array) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Floats.Collection.Array C.N.equals``() = + validate (Floats.Collection.Array) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.Array C.N.equal``() = + validate (Floats.Collection.Array) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.Array C.N.not_equal``() = + validate (Floats.Collection.Array) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.Array C.N.compare``() = + validate (Floats.Collection.Array) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.Array C.N.less_than``() = + validate (Floats.Collection.Array) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Floats.Collection.Array C.N.less_or_equal``() = + validate (Floats.Collection.Array) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Floats.Collection.Array C.N.greater_than``() = + validate (Floats.Collection.Array) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Floats.Collection.Array C.N.greater_or_equal``() = + validate (Floats.Collection.Array) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Floats.Collection.OptionArray C.I.equals``() = + validate (Floats.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.OptionArray C.I.equal``() = + validate (Floats.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.OptionArray C.I.not_equal``() = + validate (Floats.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Floats.Collection.OptionArray C.I.compare``() = + validate (Floats.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; + 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; + 1;1;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Floats.Collection.OptionArray C.I.less_than``() = + validate (Floats.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; + 0;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0;1;0;0;0 + |] + + [] + member __.``Floats.Collection.OptionArray C.I.less_or_equal``() = + validate (Floats.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; + 0;0;1;1;0;0;1;0;1;1;0;0;1;0;0;0;1;0;0;1 + |] + + [] + member __.``Floats.Collection.OptionArray C.I.greater_than``() = + validate (Floats.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; + 1;1;0;0;0;1;0;1;0;0;1;1;0;1;0;1;0;1;1;0 + |] + + [] + member __.``Floats.Collection.OptionArray C.I.greater_or_equal``() = + validate (Floats.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; + 1;1;0;0;0;1;0;1;1;0;1;1;0;1;0;1;0;1;1;1 + |] + + [] + member __.``Floats.Collection.OptionArray C.N.equals``() = + validate (Floats.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.OptionArray C.N.equal``() = + validate (Floats.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.OptionArray C.N.not_equal``() = + validate (Floats.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Floats.Collection.OptionArray C.N.compare``() = + validate (Floats.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; + 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; + 1;1;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Floats.Collection.OptionArray C.N.less_than``() = + validate (Floats.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; + 0;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0;1;0;0;0 + |] + + [] + member __.``Floats.Collection.OptionArray C.N.less_or_equal``() = + validate (Floats.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; + 0;0;1;1;0;0;1;0;1;1;0;0;1;0;0;0;1;0;0;1 + |] + + [] + member __.``Floats.Collection.OptionArray C.N.greater_than``() = + validate (Floats.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; + 1;1;0;0;0;1;0;1;0;0;1;1;0;1;0;1;0;1;1;0 + |] + + [] + member __.``Floats.Collection.OptionArray C.N.greater_or_equal``() = + validate (Floats.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; + 1;1;0;0;0;1;0;1;1;0;1;1;0;1;0;1;0;1;1;1 + |] + + [] + member __.``Floats.Collection.RefArray C.I.equals``() = + validate (Floats.Collection.RefArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefArray C.I.equal``() = + validate (Floats.Collection.RefArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefArray C.I.not_equal``() = + validate (Floats.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefArray C.I.compare``() = + validate (Floats.Collection.RefArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefArray C.I.less_than``() = + validate (Floats.Collection.RefArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Floats.Collection.RefArray C.I.less_or_equal``() = + validate (Floats.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefArray C.I.greater_than``() = + validate (Floats.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefArray C.I.greater_or_equal``() = + validate (Floats.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Floats.Collection.RefArray C.N.equals``() = + validate (Floats.Collection.RefArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefArray C.N.equal``() = + validate (Floats.Collection.RefArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefArray C.N.not_equal``() = + validate (Floats.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefArray C.N.compare``() = + validate (Floats.Collection.RefArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefArray C.N.less_than``() = + validate (Floats.Collection.RefArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Floats.Collection.RefArray C.N.less_or_equal``() = + validate (Floats.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefArray C.N.greater_than``() = + validate (Floats.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefArray C.N.greater_or_equal``() = + validate (Floats.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.I.equals``() = + validate (Floats.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.I.equal``() = + validate (Floats.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.I.not_equal``() = + validate (Floats.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.I.compare``() = + validate (Floats.Collection.RefWrapArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.I.less_than``() = + validate (Floats.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Floats.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.I.greater_than``() = + validate (Floats.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Floats.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.N.equals``() = + validate (Floats.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.N.equal``() = + validate (Floats.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.N.not_equal``() = + validate (Floats.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.N.compare``() = + validate (Floats.Collection.RefWrapArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.N.less_than``() = + validate (Floats.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Floats.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.N.greater_than``() = + validate (Floats.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Floats.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Floats.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Floats.Collection.UnionArray C.I.equals``() = + validate (Floats.Collection.UnionArray) C.I.equals [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionArray C.I.equal``() = + validate (Floats.Collection.UnionArray) C.I.equal [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionArray C.I.not_equal``() = + validate (Floats.Collection.UnionArray) C.I.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``Floats.Collection.UnionArray C.I.compare``() = + validate (Floats.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + -1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1; + 0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + -1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3; + -3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2; + 1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2; + -3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1; + -1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3; + 2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1; + 3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2; + 1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1; + 3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1; + -1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3; + 3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3; + 2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2; + 1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1; + 0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3; + 2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1; + -1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Floats.Collection.UnionArray C.I.less_than``() = + validate (Floats.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Floats.Collection.UnionArray C.I.less_or_equal``() = + validate (Floats.Collection.UnionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionArray C.I.greater_than``() = + validate (Floats.Collection.UnionArray) C.I.greater_than [| + 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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;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;1;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;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Floats.Collection.UnionArray C.I.greater_or_equal``() = + validate (Floats.Collection.UnionArray) C.I.greater_or_equal [| + 1;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;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;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;1;1;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;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Floats.Collection.UnionArray C.N.equals``() = + validate (Floats.Collection.UnionArray) C.N.equals [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionArray C.N.equal``() = + validate (Floats.Collection.UnionArray) C.N.equal [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionArray C.N.not_equal``() = + validate (Floats.Collection.UnionArray) C.N.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``Floats.Collection.UnionArray C.N.compare``() = + validate (Floats.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + -1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1; + 0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + -1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3; + -3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2; + 1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2; + -3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1; + -1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3; + 2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1; + 3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2; + 1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1; + 3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1; + -1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3; + 3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3; + 2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2; + 1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1; + 0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3; + 2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1; + -1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Floats.Collection.UnionArray C.N.less_than``() = + validate (Floats.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Floats.Collection.UnionArray C.N.less_or_equal``() = + validate (Floats.Collection.UnionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionArray C.N.greater_than``() = + validate (Floats.Collection.UnionArray) C.N.greater_than [| + 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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;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;1;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;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Floats.Collection.UnionArray C.N.greater_or_equal``() = + validate (Floats.Collection.UnionArray) C.N.greater_or_equal [| + 1;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;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;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;1;1;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;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.I.equals``() = + validate (Floats.Collection.UnionWrapArray) C.I.equals [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.I.equal``() = + validate (Floats.Collection.UnionWrapArray) C.I.equal [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.I.not_equal``() = + validate (Floats.Collection.UnionWrapArray) C.I.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.I.compare``() = + validate (Floats.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + -1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1; + 0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + -1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3; + -3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2; + 1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2; + -3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1; + -1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3; + 2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1; + 3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2; + 1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1; + 3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1; + -1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3; + 3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3; + 2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2; + 1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1; + 0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3; + 2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1; + -1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.I.less_than``() = + validate (Floats.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Floats.Collection.UnionWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.I.greater_than``() = + validate (Floats.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;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;1;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;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Floats.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;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;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;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;1;1;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;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.N.equals``() = + validate (Floats.Collection.UnionWrapArray) C.N.equals [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.N.equal``() = + validate (Floats.Collection.UnionWrapArray) C.N.equal [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.N.not_equal``() = + validate (Floats.Collection.UnionWrapArray) C.N.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.N.compare``() = + validate (Floats.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + -1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1; + 0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + -1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3; + -3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2; + 1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2; + -3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1; + -1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3; + 2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1; + 3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2; + 1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1; + 3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1; + -1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3; + 3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3; + 2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2; + 1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1; + 0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3; + 2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1; + -1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.N.less_than``() = + validate (Floats.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Floats.Collection.UnionWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.N.greater_than``() = + validate (Floats.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;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;1;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;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Floats.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Floats.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;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;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;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;1;1;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;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Floats.Collection.ValueArray C.I.equals``() = + validate (Floats.Collection.ValueArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueArray C.I.equal``() = + validate (Floats.Collection.ValueArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueArray C.I.not_equal``() = + validate (Floats.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueArray C.I.compare``() = + validate (Floats.Collection.ValueArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueArray C.I.less_than``() = + validate (Floats.Collection.ValueArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Floats.Collection.ValueArray C.I.less_or_equal``() = + validate (Floats.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueArray C.I.greater_than``() = + validate (Floats.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueArray C.I.greater_or_equal``() = + validate (Floats.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Floats.Collection.ValueArray C.N.equals``() = + validate (Floats.Collection.ValueArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueArray C.N.equal``() = + validate (Floats.Collection.ValueArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueArray C.N.not_equal``() = + validate (Floats.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueArray C.N.compare``() = + validate (Floats.Collection.ValueArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueArray C.N.less_than``() = + validate (Floats.Collection.ValueArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Floats.Collection.ValueArray C.N.less_or_equal``() = + validate (Floats.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueArray C.N.greater_than``() = + validate (Floats.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueArray C.N.greater_or_equal``() = + validate (Floats.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.I.equals``() = + validate (Floats.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.I.equal``() = + validate (Floats.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.I.not_equal``() = + validate (Floats.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.I.compare``() = + validate (Floats.Collection.ValueWrapArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.I.less_than``() = + validate (Floats.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Floats.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.I.greater_than``() = + validate (Floats.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Floats.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.N.equals``() = + validate (Floats.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.N.equal``() = + validate (Floats.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.N.not_equal``() = + validate (Floats.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.N.compare``() = + validate (Floats.Collection.ValueWrapArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.N.less_than``() = + validate (Floats.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Floats.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.N.greater_than``() = + validate (Floats.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Floats.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Floats.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Floats.Collection.ArrayArray C.I.equals``() = + validate (Floats.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray C.I.equal``() = + validate (Floats.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray C.I.not_equal``() = + validate (Floats.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray C.I.compare``() = + validate (Floats.Collection.ArrayArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; + 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;-1;1;1;-1;0;-1;-1;-1;-1;-1; + -1;-1;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;1;1;1;-1;1;1;0;-1;-1;-1;-1;-1;-1;-1; + -1;-1;1;1;1;1;1;1;1;1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;-1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1;1;1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;1;1;1;1;1; + 1;1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + -1;-1;1;1;-1;0;-1;-1;1;1;1;1;1;1;1;1;1;1;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;1;1;1;1;1;-1;1;1;1; + -1;1;1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray C.I.less_than``() = + validate (Floats.Collection.ArrayArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; + 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;0;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1; + 1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;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;1;1;1;0;0;1;1;1;1;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; + 1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;0;0 + |] + + [] + member __.``Floats.Collection.ArrayArray C.I.less_or_equal``() = + validate (Floats.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; + 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1; + 1;1;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;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;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray C.I.greater_than``() = + validate (Floats.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;1;1;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;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0; + 0;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1; + 0;1;1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Floats.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; + 1;0;1;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0; + 0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1; + 1;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1; + 0;1;1;1 + |] + + [] + member __.``Floats.Collection.ArrayArray C.N.equals``() = + validate (Floats.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray C.N.equal``() = + validate (Floats.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray C.N.not_equal``() = + validate (Floats.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray C.N.compare``() = + validate (Floats.Collection.ArrayArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; + 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;-1;1;1;-1;0;-1;-1;-1;-1;-1; + -1;-1;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;1;1;1;-1;1;1;0;-1;-1;-1;-1;-1;-1;-1; + -1;-1;1;1;1;1;1;1;1;1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;-1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1;1;1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;1;1;1;1;1; + 1;1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + -1;-1;1;1;-1;0;-1;-1;1;1;1;1;1;1;1;1;1;1;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;1;1;1;1;1;-1;1;1;1; + -1;1;1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray C.N.less_than``() = + validate (Floats.Collection.ArrayArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; + 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;0;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1; + 1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;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;1;1;1;0;0;1;1;1;1;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; + 1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;0;0 + |] + + [] + member __.``Floats.Collection.ArrayArray C.N.less_or_equal``() = + validate (Floats.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; + 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1; + 1;1;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;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;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray C.N.greater_than``() = + validate (Floats.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;1;1;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;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0; + 0;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1; + 0;1;1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Floats.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; + 1;0;1;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0; + 0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1; + 1;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1; + 0;1;1;1 + |] + + [] + member __.``Floats.Collection.ListArray C.I.equals``() = + validate (Floats.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ListArray C.I.equal``() = + validate (Floats.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ListArray C.I.not_equal``() = + validate (Floats.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Floats.Collection.ListArray C.I.compare``() = + validate (Floats.Collection.ListArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; + 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;-1;1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1; + 1;1;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;-1;1;1;-1;1;-1;-1;1;-1;1;1;1;-1;1;1;0;1;-1;1;1;1;-1;1; + 1;-1;1;-1;-1;1;1;-1;-1;-1;-1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;1;1;1;-1;1;1;1;1;0;1;1;1;-1;1;1;1;1;-1; + 1;1;1;-1;1;1;-1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1;1;-1; + -1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;1;-1;-1;1; + -1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1;1;1;-1;1;1;1; + -1;1;1;0 + |] + + [] + member __.``Floats.Collection.ListArray C.I.less_than``() = + validate (Floats.Collection.ListArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; + 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; + 1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1; + 0;0;1;1;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0; + 0;1;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1; + 0;0;0;1;0;0;1;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1; + 1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0; + 1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0; + 1;0;0;0 + |] + + [] + member __.``Floats.Collection.ListArray C.I.less_or_equal``() = + validate (Floats.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; + 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1; + 0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;1;0;1;0;0;0;1;0; + 0;1;0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1; + 0;0;0;1;0;0;1;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1; + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;0;1;1;0; + 1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0; + 1;0;0;1 + |] + + [] + member __.``Floats.Collection.ListArray C.I.greater_than``() = + validate (Floats.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; + 1;0;1;1;0;1;0;0;0;1;0;1;1;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;1;1;1;0;1;0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0; + 0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;0;1;0;1;0;1;0;1; + 1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0; + 1;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;1;0;0;1; + 0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1; + 0;1;1;0 + |] + + [] + member __.``Floats.Collection.ListArray C.I.greater_or_equal``() = + validate (Floats.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; + 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0; + 0;1;0;0;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1; + 1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;1;1;0;1;0;1;1;1;1;0; + 1;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1; + 0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1; + 0;1;1;1 + |] + + [] + member __.``Floats.Collection.ListArray C.N.equals``() = + validate (Floats.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ListArray C.N.equal``() = + validate (Floats.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ListArray C.N.not_equal``() = + validate (Floats.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Floats.Collection.ListArray C.N.compare``() = + validate (Floats.Collection.ListArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; + 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;-1;1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1; + 1;1;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;-1;1;1;-1;1;-1;-1;1;-1;1;1;1;-1;1;1;0;1;-1;1;1;1;-1;1; + 1;-1;1;-1;-1;1;1;-1;-1;-1;-1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;1;1;1;-1;1;1;1;1;0;1;1;1;-1;1;1;1;1;-1; + 1;1;1;-1;1;1;-1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1;1;-1; + -1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;1;-1;-1;1; + -1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1;1;1;-1;1;1;1; + -1;1;1;0 + |] + + [] + member __.``Floats.Collection.ListArray C.N.less_than``() = + validate (Floats.Collection.ListArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; + 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; + 1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1; + 0;0;1;1;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0; + 0;1;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1; + 0;0;0;1;0;0;1;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1; + 1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0; + 1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0; + 1;0;0;0 + |] + + [] + member __.``Floats.Collection.ListArray C.N.less_or_equal``() = + validate (Floats.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; + 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1; + 0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;1;0;1;0;0;0;1;0; + 0;1;0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1; + 0;0;0;1;0;0;1;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1; + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;0;1;1;0; + 1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0; + 1;0;0;1 + |] + + [] + member __.``Floats.Collection.ListArray C.N.greater_than``() = + validate (Floats.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; + 1;0;1;1;0;1;0;0;0;1;0;1;1;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;1;1;1;0;1;0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0; + 0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;0;1;0;1;0;1;0;1; + 1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0; + 1;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;1;0;0;1; + 0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1; + 0;1;1;0 + |] + + [] + member __.``Floats.Collection.ListArray C.N.greater_or_equal``() = + validate (Floats.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; + 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0; + 0;1;0;0;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1; + 1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;1;1;0;1;0;1;1;1;1;0; + 1;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1; + 0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1; + 0;1;1;1 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; + 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;1;1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;1; + 1;1;-1;-1;-1;1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;1;1;-1;1;1;-1;1;1;1;-1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;-1;-1;1;1;-1;-1;-1;-1;0;-1;1;1;1;-1;-1;-1;1;1;-1;1;1;1;-1;1;1;-1;1;0;1;1;1;1;1;1;1;-1;-1; + -1;1;-1;-1;-1;-1;-1;-1;-1;0;1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1;1;-1; + -1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;-1;-1;1;-1;1;1;1;0;1;-1;1;1;-1;-1;1;1;-1;1;-1;-1;1; + -1;1;1;1;-1;0;-1;1;1;-1;-1;1;1;-1;1;1;-1;1;-1;1;1;1;1;1;0;1;1;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1; + -1;-1;-1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;0; + 0;0;1;1;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;1;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;0;0;1;1;1;1;0;1;0;0;0;1;1;1;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1; + 1;0;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;0;0;1;0;0;1;1;0;0;1;0;1;1;0; + 1;0;0;0;1;0;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0; + 1;1;1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; + 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;0;1;0; + 0;0;1;1;1;0;0;1;1;0;0;1;0;1;1;0;1;0;0;0;0;0;1;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0; + 0;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;0;0;1;0;0;0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1; + 1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;1;0;0;1;0;1;1;0; + 1;0;0;0;1;1;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;1;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0; + 1;1;1;1 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; + 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;0;0;1;0;1; + 1;1;0;0;0;1;1;0;0;1;1;0;1;0;0;1;0;1;1;1;1;1;0;1;1;0;1;1;1;0;1;1;0;1;1;1;1;1;1;1; + 1;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;1;1;0;1;1;1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0; + 0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;1;1;0;1;0;0;1;0;1;1;1;0;1;0;1;1;0;0;1;1;0;1;0;0;1; + 0;1;1;1;0;0;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;0;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1; + 0;0;0;0 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;0;1;0;0;1;0;1; + 1;1;0;0;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;0;1;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;1;1;0;0;0;0;1;0;1;1;1;0;0;0;1;1;0;1;1;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0; + 0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;0;0;1;1;0;1;0;0;1;0;1;1;1;1;1;0;1;1;0;0;1;1;0;1;0;0;1; + 0;1;1;1;0;1;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; + 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;1;1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;1; + 1;1;-1;-1;-1;1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;1;1;-1;1;1;-1;1;1;1;-1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;-1;-1;1;1;-1;-1;-1;-1;0;-1;1;1;1;-1;-1;-1;1;1;-1;1;1;1;-1;1;1;-1;1;0;1;1;1;1;1;1;1;-1;-1; + -1;1;-1;-1;-1;-1;-1;-1;-1;0;1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1;1;-1; + -1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;-1;-1;1;-1;1;1;1;0;1;-1;1;1;-1;-1;1;1;-1;1;-1;-1;1; + -1;1;1;1;-1;0;-1;1;1;-1;-1;1;1;-1;1;1;-1;1;-1;1;1;1;1;1;0;1;1;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1; + -1;-1;-1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;0; + 0;0;1;1;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;1;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;0;0;1;1;1;1;0;1;0;0;0;1;1;1;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1; + 1;0;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;0;0;1;0;0;1;1;0;0;1;0;1;1;0; + 1;0;0;0;1;0;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0; + 1;1;1;0 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; + 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;0;1;0; + 0;0;1;1;1;0;0;1;1;0;0;1;0;1;1;0;1;0;0;0;0;0;1;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0; + 0;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;0;0;1;0;0;0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1; + 1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;1;0;0;1;0;1;1;0; + 1;0;0;0;1;1;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;1;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0; + 1;1;1;1 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; + 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;0;0;1;0;1; + 1;1;0;0;0;1;1;0;0;1;1;0;1;0;0;1;0;1;1;1;1;1;0;1;1;0;1;1;1;0;1;1;0;1;1;1;1;1;1;1; + 1;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;1;1;0;1;1;1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0; + 0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;1;1;0;1;0;0;1;0;1;1;1;0;1;0;1;1;0;0;1;1;0;1;0;0;1; + 0;1;1;1;0;0;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;0;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1; + 0;0;0;0 + |] + + [] + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;0;1;0;0;1;0;1; + 1;1;0;0;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;0;1;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;1;1;0;0;0;0;1;0;1;1;1;0;0;0;1;1;0;1;1;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0; + 0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;0;0;1;1;0;1;0;0;1;0;1;1;1;1;1;0;1;1;0;0;1;1;0;1;0;0;1; + 0;1;1;1;0;1;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1; + 0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.Array E.I.equals``() = + validate (NullableFloats.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.Array E.I.equal``() = + validate (NullableFloats.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.Array E.I.not_equal``() = + validate (NullableFloats.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.Array E.N.equals``() = + validate (NullableFloats.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.Array E.N.equal``() = + validate (NullableFloats.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.Array E.N.not_equal``() = + validate (NullableFloats.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.OptionArray E.I.equals``() = + validate (NullableFloats.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableFloats.Collection.OptionArray E.I.equal``() = + validate (NullableFloats.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableFloats.Collection.OptionArray E.I.not_equal``() = + validate (NullableFloats.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NullableFloats.Collection.OptionArray E.N.equals``() = + validate (NullableFloats.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableFloats.Collection.OptionArray E.N.equal``() = + validate (NullableFloats.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableFloats.Collection.OptionArray E.N.not_equal``() = + validate (NullableFloats.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NullableFloats.Collection.RefArray E.I.equals``() = + validate (NullableFloats.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.RefArray E.I.equal``() = + validate (NullableFloats.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.RefArray E.I.not_equal``() = + validate (NullableFloats.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.RefArray E.N.equals``() = + validate (NullableFloats.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.RefArray E.N.equal``() = + validate (NullableFloats.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.RefArray E.N.not_equal``() = + validate (NullableFloats.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.RefWrapArray E.I.equals``() = + validate (NullableFloats.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.RefWrapArray E.I.equal``() = + validate (NullableFloats.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableFloats.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.RefWrapArray E.N.equals``() = + validate (NullableFloats.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.RefWrapArray E.N.equal``() = + validate (NullableFloats.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableFloats.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.UnionArray E.I.equals``() = + validate (NullableFloats.Collection.UnionArray) E.I.equals [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloats.Collection.UnionArray E.I.equal``() = + validate (NullableFloats.Collection.UnionArray) E.I.equal [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloats.Collection.UnionArray E.I.not_equal``() = + validate (NullableFloats.Collection.UnionArray) E.I.not_equal [| + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;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; + 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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1; + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.UnionArray E.N.equals``() = + validate (NullableFloats.Collection.UnionArray) E.N.equals [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloats.Collection.UnionArray E.N.equal``() = + validate (NullableFloats.Collection.UnionArray) E.N.equal [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloats.Collection.UnionArray E.N.not_equal``() = + validate (NullableFloats.Collection.UnionArray) E.N.not_equal [| + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;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; + 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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1; + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.UnionWrapArray E.I.equals``() = + validate (NullableFloats.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloats.Collection.UnionWrapArray E.I.equal``() = + validate (NullableFloats.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloats.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableFloats.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;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; + 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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1; + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.UnionWrapArray E.N.equals``() = + validate (NullableFloats.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloats.Collection.UnionWrapArray E.N.equal``() = + validate (NullableFloats.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloats.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableFloats.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;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; + 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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1; + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.ValueArray E.I.equals``() = + validate (NullableFloats.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ValueArray E.I.equal``() = + validate (NullableFloats.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ValueArray E.I.not_equal``() = + validate (NullableFloats.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.ValueArray E.N.equals``() = + validate (NullableFloats.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ValueArray E.N.equal``() = + validate (NullableFloats.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ValueArray E.N.not_equal``() = + validate (NullableFloats.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.ValueWrapArray E.I.equals``() = + validate (NullableFloats.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ValueWrapArray E.I.equal``() = + validate (NullableFloats.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableFloats.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.ValueWrapArray E.N.equals``() = + validate (NullableFloats.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ValueWrapArray E.N.equal``() = + validate (NullableFloats.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableFloats.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.ArrayArray E.I.equals``() = + validate (NullableFloats.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ArrayArray E.I.equal``() = + validate (NullableFloats.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ArrayArray E.I.not_equal``() = + validate (NullableFloats.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.ArrayArray E.N.equals``() = + validate (NullableFloats.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ArrayArray E.N.equal``() = + validate (NullableFloats.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ArrayArray E.N.not_equal``() = + validate (NullableFloats.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.ListArray E.I.equals``() = + validate (NullableFloats.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ListArray E.I.equal``() = + validate (NullableFloats.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ListArray E.I.not_equal``() = + validate (NullableFloats.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloats.Collection.ListArray E.N.equals``() = + validate (NullableFloats.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ListArray E.N.equal``() = + validate (NullableFloats.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloats.Collection.ListArray E.N.not_equal``() = + validate (NullableFloats.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Float32s.Collection.Array C.I.equals``() = + validate (Float32s.Collection.Array) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.Array C.I.equal``() = + validate (Float32s.Collection.Array) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.Array C.I.not_equal``() = + validate (Float32s.Collection.Array) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.Array C.I.compare``() = + validate (Float32s.Collection.Array) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.Array C.I.less_than``() = + validate (Float32s.Collection.Array) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Float32s.Collection.Array C.I.less_or_equal``() = + validate (Float32s.Collection.Array) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.Array C.I.greater_than``() = + validate (Float32s.Collection.Array) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.Array C.I.greater_or_equal``() = + validate (Float32s.Collection.Array) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Float32s.Collection.Array C.N.equals``() = + validate (Float32s.Collection.Array) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.Array C.N.equal``() = + validate (Float32s.Collection.Array) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.Array C.N.not_equal``() = + validate (Float32s.Collection.Array) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.Array C.N.compare``() = + validate (Float32s.Collection.Array) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.Array C.N.less_than``() = + validate (Float32s.Collection.Array) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Float32s.Collection.Array C.N.less_or_equal``() = + validate (Float32s.Collection.Array) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.Array C.N.greater_than``() = + validate (Float32s.Collection.Array) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.Array C.N.greater_or_equal``() = + validate (Float32s.Collection.Array) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Float32s.Collection.OptionArray C.I.equals``() = + validate (Float32s.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.OptionArray C.I.equal``() = + validate (Float32s.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.OptionArray C.I.not_equal``() = + validate (Float32s.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Float32s.Collection.OptionArray C.I.compare``() = + validate (Float32s.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; + 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; + 1;1;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Float32s.Collection.OptionArray C.I.less_than``() = + validate (Float32s.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; + 0;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0;1;0;0;0 + |] + + [] + member __.``Float32s.Collection.OptionArray C.I.less_or_equal``() = + validate (Float32s.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; + 0;0;1;1;0;0;1;0;1;1;0;0;1;0;0;0;1;0;0;1 + |] + + [] + member __.``Float32s.Collection.OptionArray C.I.greater_than``() = + validate (Float32s.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; + 1;1;0;0;0;1;0;1;0;0;1;1;0;1;0;1;0;1;1;0 + |] + + [] + member __.``Float32s.Collection.OptionArray C.I.greater_or_equal``() = + validate (Float32s.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; + 1;1;0;0;0;1;0;1;1;0;1;1;0;1;0;1;0;1;1;1 + |] + + [] + member __.``Float32s.Collection.OptionArray C.N.equals``() = + validate (Float32s.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.OptionArray C.N.equal``() = + validate (Float32s.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.OptionArray C.N.not_equal``() = + validate (Float32s.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Float32s.Collection.OptionArray C.N.compare``() = + validate (Float32s.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; + 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; + 1;1;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;1;-1;1;1;0 + |] + + [] + member __.``Float32s.Collection.OptionArray C.N.less_than``() = + validate (Float32s.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; + 0;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0;1;0;0;0 + |] + + [] + member __.``Float32s.Collection.OptionArray C.N.less_or_equal``() = + validate (Float32s.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; + 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; + 0;0;1;1;0;0;1;0;1;1;0;0;1;0;0;0;1;0;0;1 + |] + + [] + member __.``Float32s.Collection.OptionArray C.N.greater_than``() = + validate (Float32s.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; + 1;1;0;0;0;1;0;1;0;0;1;1;0;1;0;1;0;1;1;0 + |] + + [] + member __.``Float32s.Collection.OptionArray C.N.greater_or_equal``() = + validate (Float32s.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; + 1;1;0;0;0;1;0;1;1;0;1;1;0;1;0;1;0;1;1;1 + |] + + [] + member __.``Float32s.Collection.RefArray C.I.equals``() = + validate (Float32s.Collection.RefArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefArray C.I.equal``() = + validate (Float32s.Collection.RefArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefArray C.I.not_equal``() = + validate (Float32s.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefArray C.I.compare``() = + validate (Float32s.Collection.RefArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefArray C.I.less_than``() = + validate (Float32s.Collection.RefArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Float32s.Collection.RefArray C.I.less_or_equal``() = + validate (Float32s.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefArray C.I.greater_than``() = + validate (Float32s.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefArray C.I.greater_or_equal``() = + validate (Float32s.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Float32s.Collection.RefArray C.N.equals``() = + validate (Float32s.Collection.RefArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefArray C.N.equal``() = + validate (Float32s.Collection.RefArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefArray C.N.not_equal``() = + validate (Float32s.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefArray C.N.compare``() = + validate (Float32s.Collection.RefArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefArray C.N.less_than``() = + validate (Float32s.Collection.RefArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Float32s.Collection.RefArray C.N.less_or_equal``() = + validate (Float32s.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefArray C.N.greater_than``() = + validate (Float32s.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefArray C.N.greater_or_equal``() = + validate (Float32s.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.I.equals``() = + validate (Float32s.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.I.equal``() = + validate (Float32s.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.I.not_equal``() = + validate (Float32s.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.I.compare``() = + validate (Float32s.Collection.RefWrapArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.I.less_than``() = + validate (Float32s.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Float32s.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.I.greater_than``() = + validate (Float32s.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Float32s.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.N.equals``() = + validate (Float32s.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.N.equal``() = + validate (Float32s.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.N.not_equal``() = + validate (Float32s.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.N.compare``() = + validate (Float32s.Collection.RefWrapArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.N.less_than``() = + validate (Float32s.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Float32s.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.N.greater_than``() = + validate (Float32s.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Float32s.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Float32s.Collection.UnionArray C.I.equals``() = + validate (Float32s.Collection.UnionArray) C.I.equals [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionArray C.I.equal``() = + validate (Float32s.Collection.UnionArray) C.I.equal [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionArray C.I.not_equal``() = + validate (Float32s.Collection.UnionArray) C.I.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``Float32s.Collection.UnionArray C.I.compare``() = + validate (Float32s.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + -1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1; + 0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + -1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3; + -3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2; + 1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2; + -3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1; + -1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3; + 2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1; + 3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2; + 1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1; + 3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1; + -1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3; + 3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3; + 2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2; + 1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1; + 0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3; + 2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1; + -1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Float32s.Collection.UnionArray C.I.less_than``() = + validate (Float32s.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Float32s.Collection.UnionArray C.I.less_or_equal``() = + validate (Float32s.Collection.UnionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionArray C.I.greater_than``() = + validate (Float32s.Collection.UnionArray) C.I.greater_than [| + 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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;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;1;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;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Float32s.Collection.UnionArray C.I.greater_or_equal``() = + validate (Float32s.Collection.UnionArray) C.I.greater_or_equal [| + 1;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;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;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;1;1;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;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Float32s.Collection.UnionArray C.N.equals``() = + validate (Float32s.Collection.UnionArray) C.N.equals [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionArray C.N.equal``() = + validate (Float32s.Collection.UnionArray) C.N.equal [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionArray C.N.not_equal``() = + validate (Float32s.Collection.UnionArray) C.N.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``Float32s.Collection.UnionArray C.N.compare``() = + validate (Float32s.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + -1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1; + 0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + -1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3; + -3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2; + 1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2; + -3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1; + -1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3; + 2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1; + 3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2; + 1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1; + 3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1; + -1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3; + 3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3; + 2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2; + 1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1; + 0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3; + 2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1; + -1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Float32s.Collection.UnionArray C.N.less_than``() = + validate (Float32s.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Float32s.Collection.UnionArray C.N.less_or_equal``() = + validate (Float32s.Collection.UnionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionArray C.N.greater_than``() = + validate (Float32s.Collection.UnionArray) C.N.greater_than [| + 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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;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;1;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;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Float32s.Collection.UnionArray C.N.greater_or_equal``() = + validate (Float32s.Collection.UnionArray) C.N.greater_or_equal [| + 1;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;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;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;1;1;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;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.I.equals``() = + validate (Float32s.Collection.UnionWrapArray) C.I.equals [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.I.equal``() = + validate (Float32s.Collection.UnionWrapArray) C.I.equal [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.I.not_equal``() = + validate (Float32s.Collection.UnionWrapArray) C.I.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.I.compare``() = + validate (Float32s.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + -1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1; + 0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + -1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3; + -3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2; + 1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2; + -3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1; + -1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3; + 2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1; + 3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2; + 1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1; + 3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1; + -1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3; + 3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3; + 2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2; + 1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1; + 0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3; + 2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1; + -1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.I.less_than``() = + validate (Float32s.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Float32s.Collection.UnionWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.I.greater_than``() = + validate (Float32s.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;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;1;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;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Float32s.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;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;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;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;1;1;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;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.N.equals``() = + validate (Float32s.Collection.UnionWrapArray) C.N.equals [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.N.equal``() = + validate (Float32s.Collection.UnionWrapArray) C.N.equal [| + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;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; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.N.not_equal``() = + validate (Float32s.Collection.UnionWrapArray) C.N.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.N.compare``() = + validate (Float32s.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + -1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1; + 0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + -1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3; + -3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2; + 1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2; + 1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2; + -3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1; + -1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2; + 1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3; + 3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1; + -1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3; + 2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1; + -2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2; + 1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3;3; + 2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2; + -3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2; + 1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1; + 3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2; + 1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1; + 3;2;1;-1;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1; + -1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1; + 0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;-1;-1;-2;-3; + 3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1; + 1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3; + 2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3; + 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2; + -2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1; + -2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2; + 1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2; + -3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2; + 3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1; + 0;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1; + 3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3; + 2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3; + -3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2; + -2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1; + 2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1;-1; + -2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + 0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3; + 2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1; + -2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2; + 1;-1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2; + 1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1;-1; + -2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1; + 0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1; + -1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2; + 1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2; + 3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;0;-1;-2;3;2;1;1;-1; + -1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1; + 2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3; + 2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1; + 0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3; + -3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2; + 1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1; + -1;-1;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1; + 0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2; + 1;2;1;-1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1;1;3;2;1;3;2; + 1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.N.less_than``() = + validate (Float32s.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Float32s.Collection.UnionWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;0;0;1;1;1;1;1;0;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0; + 0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1; + 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;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.N.greater_than``() = + validate (Float32s.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;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;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;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;1;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;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Float32s.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Float32s.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;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;1;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;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0; + 0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1; + 1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1; + 1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; + 0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1; + 1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1; + 1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;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;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0; + 0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1; + 1;1;1;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;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1; + 1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1; + 1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; + 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;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;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;1;1;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;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0; + 0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0; + 0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;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;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0; + 0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0; + 0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;0; + 0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1; + 1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1 + |] + + [] + member __.``Float32s.Collection.ValueArray C.I.equals``() = + validate (Float32s.Collection.ValueArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueArray C.I.equal``() = + validate (Float32s.Collection.ValueArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueArray C.I.not_equal``() = + validate (Float32s.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueArray C.I.compare``() = + validate (Float32s.Collection.ValueArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueArray C.I.less_than``() = + validate (Float32s.Collection.ValueArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Float32s.Collection.ValueArray C.I.less_or_equal``() = + validate (Float32s.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueArray C.I.greater_than``() = + validate (Float32s.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueArray C.I.greater_or_equal``() = + validate (Float32s.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Float32s.Collection.ValueArray C.N.equals``() = + validate (Float32s.Collection.ValueArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueArray C.N.equal``() = + validate (Float32s.Collection.ValueArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueArray C.N.not_equal``() = + validate (Float32s.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueArray C.N.compare``() = + validate (Float32s.Collection.ValueArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueArray C.N.less_than``() = + validate (Float32s.Collection.ValueArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Float32s.Collection.ValueArray C.N.less_or_equal``() = + validate (Float32s.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueArray C.N.greater_than``() = + validate (Float32s.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueArray C.N.greater_or_equal``() = + validate (Float32s.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.I.equals``() = + validate (Float32s.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.I.equal``() = + validate (Float32s.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.I.not_equal``() = + validate (Float32s.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.I.compare``() = + validate (Float32s.Collection.ValueWrapArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.I.less_than``() = + validate (Float32s.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Float32s.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.I.greater_than``() = + validate (Float32s.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Float32s.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.N.equals``() = + validate (Float32s.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.N.equal``() = + validate (Float32s.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.N.not_equal``() = + validate (Float32s.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.N.compare``() = + validate (Float32s.Collection.ValueWrapArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; + 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.N.less_than``() = + validate (Float32s.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; + 0 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Float32s.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; + 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; + 1 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.N.greater_than``() = + validate (Float32s.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; + 0 + |] + + [] + member __.``Float32s.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Float32s.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; + 1 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.I.equals``() = + validate (Float32s.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.I.equal``() = + validate (Float32s.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.I.not_equal``() = + validate (Float32s.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.I.compare``() = + validate (Float32s.Collection.ArrayArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; + 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;-1;1;1;-1;0;-1;-1;-1;-1;-1; + -1;-1;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;1;1;1;-1;1;1;0;-1;-1;-1;-1;-1;-1;-1; + -1;-1;1;1;1;1;1;1;1;1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;-1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1;1;1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;1;1;1;1;1; + 1;1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + -1;-1;1;1;-1;0;-1;-1;1;1;1;1;1;1;1;1;1;1;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;1;1;1;1;1;-1;1;1;1; + -1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.I.less_than``() = + validate (Float32s.Collection.ArrayArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; + 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;0;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1; + 1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;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;1;1;1;0;0;1;1;1;1;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; + 1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;0;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.I.less_or_equal``() = + validate (Float32s.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; + 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1; + 1;1;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;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;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.I.greater_than``() = + validate (Float32s.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;1;1;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;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0; + 0;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1; + 0;1;1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Float32s.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; + 1;0;1;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0; + 0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1; + 1;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1; + 0;1;1;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.N.equals``() = + validate (Float32s.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.N.equal``() = + validate (Float32s.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.N.not_equal``() = + validate (Float32s.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.N.compare``() = + validate (Float32s.Collection.ArrayArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; + 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;-1;1;1;-1;0;-1;-1;-1;-1;-1; + -1;-1;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;1;1;1;-1;1;1;0;-1;-1;-1;-1;-1;-1;-1; + -1;-1;1;1;1;1;1;1;1;1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;-1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1;1;1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;1;1;1;1;1; + 1;1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + -1;-1;1;1;-1;0;-1;-1;1;1;1;1;1;1;1;1;1;1;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;1;1;1;1;1;-1;1;1;1; + -1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.N.less_than``() = + validate (Float32s.Collection.ArrayArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; + 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;0;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1; + 1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;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;1;1;1;0;0;1;1;1;1;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; + 1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;0;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.N.less_or_equal``() = + validate (Float32s.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; + 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;1;1;1;1;1;1;1;1; + 1;1;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;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;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.N.greater_than``() = + validate (Float32s.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; + 1;0;1;1;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;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0; + 0;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1; + 1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1; + 0;1;1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Float32s.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; + 1;0;1;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0; + 0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1; + 1;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1; + 0;1;1;1 + |] + + [] + member __.``Float32s.Collection.ListArray C.I.equals``() = + validate (Float32s.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ListArray C.I.equal``() = + validate (Float32s.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ListArray C.I.not_equal``() = + validate (Float32s.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ListArray C.I.compare``() = + validate (Float32s.Collection.ListArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; + 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;-1;1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1; + 1;1;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;-1;1;1;-1;1;-1;-1;1;-1;1;1;1;-1;1;1;0;1;-1;1;1;1;-1;1; + 1;-1;1;-1;-1;1;1;-1;-1;-1;-1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;1;1;1;-1;1;1;1;1;0;1;1;1;-1;1;1;1;1;-1; + 1;1;1;-1;1;1;-1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1;1;-1; + -1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;1;-1;-1;1; + -1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1;1;1;-1;1;1;1; + -1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ListArray C.I.less_than``() = + validate (Float32s.Collection.ListArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; + 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; + 1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1; + 0;0;1;1;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0; + 0;1;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1; + 0;0;0;1;0;0;1;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1; + 1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0; + 1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0; + 1;0;0;0 + |] + + [] + member __.``Float32s.Collection.ListArray C.I.less_or_equal``() = + validate (Float32s.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; + 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1; + 0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;1;0;1;0;0;0;1;0; + 0;1;0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1; + 0;0;0;1;0;0;1;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1; + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;0;1;1;0; + 1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0; + 1;0;0;1 + |] + + [] + member __.``Float32s.Collection.ListArray C.I.greater_than``() = + validate (Float32s.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; + 1;0;1;1;0;1;0;0;0;1;0;1;1;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;1;1;1;0;1;0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0; + 0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;0;1;0;1;0;1;0;1; + 1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0; + 1;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;1;0;0;1; + 0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1; + 0;1;1;0 + |] + + [] + member __.``Float32s.Collection.ListArray C.I.greater_or_equal``() = + validate (Float32s.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; + 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0; + 0;1;0;0;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1; + 1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;1;1;0;1;0;1;1;1;1;0; + 1;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1; + 0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1; + 0;1;1;1 + |] + + [] + member __.``Float32s.Collection.ListArray C.N.equals``() = + validate (Float32s.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ListArray C.N.equal``() = + validate (Float32s.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ListArray C.N.not_equal``() = + validate (Float32s.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ListArray C.N.compare``() = + validate (Float32s.Collection.ListArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; + 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;-1;1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1; + 1;1;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;-1;1;1;-1;1;-1;-1;1;-1;1;1;1;-1;1;1;0;1;-1;1;1;1;-1;1; + 1;-1;1;-1;-1;1;1;-1;-1;-1;-1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;1;1;1;-1;1;1;1;1;0;1;1;1;-1;1;1;1;1;-1; + 1;1;1;-1;1;1;-1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1;1;-1; + -1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;1;-1;-1;1; + -1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1;1;1;-1;1;1;1; + -1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ListArray C.N.less_than``() = + validate (Float32s.Collection.ListArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; + 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; + 1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1; + 0;0;1;1;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0; + 0;1;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1; + 0;0;0;1;0;0;1;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1; + 1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0; + 1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0; + 1;0;0;0 + |] + + [] + member __.``Float32s.Collection.ListArray C.N.less_or_equal``() = + validate (Float32s.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; + 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1; + 0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;1;0;1;0;0;0;1;0; + 0;1;0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1; + 0;0;0;1;0;0;1;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1; + 1;1;1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;0;1;1;0; + 1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;0;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0; + 1;0;0;1 + |] + + [] + member __.``Float32s.Collection.ListArray C.N.greater_than``() = + validate (Float32s.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; + 1;0;1;1;0;1;0;0;0;1;0;1;1;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;1;1;1;0;1;0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0; + 0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;0;1;0;1;0;1;0;1; + 1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0; + 1;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;1;0;0;1; + 0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1; + 0;1;1;0 + |] + + [] + member __.``Float32s.Collection.ListArray C.N.greater_or_equal``() = + validate (Float32s.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; + 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0; + 0;1;0;0;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1; + 1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;1;1;0;1;0;1;1;1;1;0; + 1;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1; + 0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1; + 0;1;1;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; + 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;1;1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;1; + 1;1;-1;-1;-1;1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;1;1;-1;1;1;-1;1;1;1;-1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;-1;-1;1;1;-1;-1;-1;-1;0;-1;1;1;1;-1;-1;-1;1;1;-1;1;1;1;-1;1;1;-1;1;0;1;1;1;1;1;1;1;-1;-1; + -1;1;-1;-1;-1;-1;-1;-1;-1;0;1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1;1;-1; + -1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;-1;-1;1;-1;1;1;1;0;1;-1;1;1;-1;-1;1;1;-1;1;-1;-1;1; + -1;1;1;1;-1;0;-1;1;1;-1;-1;1;1;-1;1;1;-1;1;-1;1;1;1;1;1;0;1;1;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1; + -1;-1;-1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;0; + 0;0;1;1;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;1;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;0;0;1;1;1;1;0;1;0;0;0;1;1;1;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1; + 1;0;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;0;0;1;0;0;1;1;0;0;1;0;1;1;0; + 1;0;0;0;1;0;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0; + 1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; + 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;0;1;0; + 0;0;1;1;1;0;0;1;1;0;0;1;0;1;1;0;1;0;0;0;0;0;1;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0; + 0;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;0;0;1;0;0;0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1; + 1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;1;0;0;1;0;1;1;0; + 1;0;0;0;1;1;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;1;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0; + 1;1;1;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; + 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;0;0;1;0;1; + 1;1;0;0;0;1;1;0;0;1;1;0;1;0;0;1;0;1;1;1;1;1;0;1;1;0;1;1;1;0;1;1;0;1;1;1;1;1;1;1; + 1;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;1;1;0;1;1;1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0; + 0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;1;1;0;1;0;0;1;0;1;1;1;0;1;0;1;1;0;0;1;1;0;1;0;0;1; + 0;1;1;1;0;0;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;0;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1; + 0;0;0;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;0;1;0;0;1;0;1; + 1;1;0;0;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;0;1;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;1;1;0;0;0;0;1;0;1;1;1;0;0;0;1;1;0;1;1;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0; + 0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;0;0;1;1;0;1;0;0;1;0;1;1;1;1;1;0;1;1;0;0;1;1;0;1;0;0;1; + 0;1;1;1;0;1;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; + 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; + -1;-1;-1;1;1;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;1; + 1;1;-1;-1;-1;1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;1;1;-1;1;1;-1;1;1;1;-1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;-1;-1;1;1;-1;-1;-1;-1;0;-1;1;1;1;-1;-1;-1;1;1;-1;1;1;1;-1;1;1;-1;1;0;1;1;1;1;1;1;1;-1;-1; + -1;1;-1;-1;-1;-1;-1;-1;-1;0;1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1;1;-1; + -1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;1;-1;-1;1;1;-1;1;-1;-1;1;-1;1;1;1;0;1;-1;1;1;-1;-1;1;1;-1;1;-1;-1;1; + -1;1;1;1;-1;0;-1;1;1;-1;-1;1;1;-1;1;1;-1;1;-1;1;1;1;1;1;0;1;1;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1; + -1;-1;-1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;0; + 0;0;1;1;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;1;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;1;1;0;0;1;1;1;1;0;1;0;0;0;1;1;1;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1; + 1;0;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;0;0;1;0;0;1;1;0;0;1;0;1;1;0; + 1;0;0;0;1;0;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0; + 1;1;1;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; + 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;1;1;0;1;0; + 0;0;1;1;1;0;0;1;1;0;0;1;0;1;1;0;1;0;0;0;0;0;1;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0; + 0;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;0;0;1;0;0;0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1; + 1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;1;0;0;1;1;0;0;1;0;1;1;0; + 1;0;0;0;1;1;1;0;0;1;1;0;0;1;0;0;1;0;1;0;0;0;0;0;1;0;0;1;1;0;0;1;1;1;1;1;1;0;0;0; + 1;1;1;1 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; + 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;0;0;1;0;1; + 1;1;0;0;0;1;1;0;0;1;1;0;1;0;0;1;0;1;1;1;1;1;0;1;1;0;1;1;1;0;1;1;0;1;1;1;1;1;1;1; + 1;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;1;1;0;1;1;1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0; + 0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;1;1;0;1;0;0;1;0;1;1;1;0;1;0;1;1;0;0;1;1;0;1;0;0;1; + 0;1;1;1;0;0;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;0;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1; + 0;0;0;0 + |] + + [] + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;0;1;0;0;1;0;1; + 1;1;0;0;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;0;1;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;0;0;1;1;0;0;0;0;1;0;1;1;1;0;0;0;1;1;0;1;1;1;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0; + 0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;1;1;0;0;0;0;1;0;0;1;1;0;1;0;0;1;0;1;1;1;1;1;0;1;1;0;0;1;1;0;1;0;0;1; + 0;1;1;1;0;1;0;1;1;0;0;1;1;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;1;0;0;0;0;0;0;1;1;1; + 0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.Array E.I.equals``() = + validate (NullableFloat32s.Collection.Array) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.Array E.I.equal``() = + validate (NullableFloat32s.Collection.Array) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.Array E.I.not_equal``() = + validate (NullableFloat32s.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.Array E.N.equals``() = + validate (NullableFloat32s.Collection.Array) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.Array E.N.equal``() = + validate (NullableFloat32s.Collection.Array) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.Array E.N.not_equal``() = + validate (NullableFloat32s.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.OptionArray E.I.equals``() = + validate (NullableFloat32s.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableFloat32s.Collection.OptionArray E.I.equal``() = + validate (NullableFloat32s.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableFloat32s.Collection.OptionArray E.I.not_equal``() = + validate (NullableFloat32s.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NullableFloat32s.Collection.OptionArray E.N.equals``() = + validate (NullableFloat32s.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableFloat32s.Collection.OptionArray E.N.equal``() = + validate (NullableFloat32s.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``NullableFloat32s.Collection.OptionArray E.N.not_equal``() = + validate (NullableFloat32s.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``NullableFloat32s.Collection.RefArray E.I.equals``() = + validate (NullableFloat32s.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.RefArray E.I.equal``() = + validate (NullableFloat32s.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.RefArray E.I.not_equal``() = + validate (NullableFloat32s.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.RefArray E.N.equals``() = + validate (NullableFloat32s.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.RefArray E.N.equal``() = + validate (NullableFloat32s.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.RefArray E.N.not_equal``() = + validate (NullableFloat32s.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.RefWrapArray E.I.equals``() = + validate (NullableFloat32s.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.RefWrapArray E.I.equal``() = + validate (NullableFloat32s.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableFloat32s.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.RefWrapArray E.N.equals``() = + validate (NullableFloat32s.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.RefWrapArray E.N.equal``() = + validate (NullableFloat32s.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableFloat32s.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.UnionArray E.I.equals``() = + validate (NullableFloat32s.Collection.UnionArray) E.I.equals [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloat32s.Collection.UnionArray E.I.equal``() = + validate (NullableFloat32s.Collection.UnionArray) E.I.equal [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloat32s.Collection.UnionArray E.I.not_equal``() = + validate (NullableFloat32s.Collection.UnionArray) E.I.not_equal [| + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;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; + 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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1; + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.UnionArray E.N.equals``() = + validate (NullableFloat32s.Collection.UnionArray) E.N.equals [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloat32s.Collection.UnionArray E.N.equal``() = + validate (NullableFloat32s.Collection.UnionArray) E.N.equal [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloat32s.Collection.UnionArray E.N.not_equal``() = + validate (NullableFloat32s.Collection.UnionArray) E.N.not_equal [| + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;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; + 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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1; + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.UnionWrapArray E.I.equals``() = + validate (NullableFloat32s.Collection.UnionWrapArray) E.I.equals [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloat32s.Collection.UnionWrapArray E.I.equal``() = + validate (NullableFloat32s.Collection.UnionWrapArray) E.I.equal [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloat32s.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableFloat32s.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;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; + 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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1; + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.UnionWrapArray E.N.equals``() = + validate (NullableFloat32s.Collection.UnionWrapArray) E.N.equals [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloat32s.Collection.UnionWrapArray E.N.equal``() = + validate (NullableFloat32s.Collection.UnionWrapArray) E.N.equal [| + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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; + 1;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; + 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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1; + 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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1;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;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;1 + |] + + [] + member __.``NullableFloat32s.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableFloat32s.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;0;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; + 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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1; + 0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0; + 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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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; + 1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0;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;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;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.ValueArray E.I.equals``() = + validate (NullableFloat32s.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ValueArray E.I.equal``() = + validate (NullableFloat32s.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ValueArray E.I.not_equal``() = + validate (NullableFloat32s.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.ValueArray E.N.equals``() = + validate (NullableFloat32s.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ValueArray E.N.equal``() = + validate (NullableFloat32s.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ValueArray E.N.not_equal``() = + validate (NullableFloat32s.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.ValueWrapArray E.I.equals``() = + validate (NullableFloat32s.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ValueWrapArray E.I.equal``() = + validate (NullableFloat32s.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableFloat32s.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.ValueWrapArray E.N.equals``() = + validate (NullableFloat32s.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ValueWrapArray E.N.equal``() = + validate (NullableFloat32s.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableFloat32s.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.ArrayArray E.I.equals``() = + validate (NullableFloat32s.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ArrayArray E.I.equal``() = + validate (NullableFloat32s.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ArrayArray E.I.not_equal``() = + validate (NullableFloat32s.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.ArrayArray E.N.equals``() = + validate (NullableFloat32s.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ArrayArray E.N.equal``() = + validate (NullableFloat32s.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ArrayArray E.N.not_equal``() = + validate (NullableFloat32s.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.ListArray E.I.equals``() = + validate (NullableFloat32s.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ListArray E.I.equal``() = + validate (NullableFloat32s.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ListArray E.I.not_equal``() = + validate (NullableFloat32s.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableFloat32s.Collection.ListArray E.N.equals``() = + validate (NullableFloat32s.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ListArray E.N.equal``() = + validate (NullableFloat32s.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableFloat32s.Collection.ListArray E.N.not_equal``() = + validate (NullableFloat32s.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;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;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;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;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;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.Array C.I.equals``() = + validate (DateTimes.Collection.Array) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.Array C.I.equal``() = + validate (DateTimes.Collection.Array) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.Array C.I.not_equal``() = + validate (DateTimes.Collection.Array) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.Array C.I.compare``() = + validate (DateTimes.Collection.Array) C.I.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.Array C.I.less_than``() = + validate (DateTimes.Collection.Array) C.I.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.Array C.I.less_or_equal``() = + validate (DateTimes.Collection.Array) C.I.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.Array C.I.greater_than``() = + validate (DateTimes.Collection.Array) C.I.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.Array C.I.greater_or_equal``() = + validate (DateTimes.Collection.Array) C.I.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.Array C.N.equals``() = + validate (DateTimes.Collection.Array) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.Array C.N.equal``() = + validate (DateTimes.Collection.Array) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.Array C.N.not_equal``() = + validate (DateTimes.Collection.Array) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.Array C.N.compare``() = + validate (DateTimes.Collection.Array) C.N.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.Array C.N.less_than``() = + validate (DateTimes.Collection.Array) C.N.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.Array C.N.less_or_equal``() = + validate (DateTimes.Collection.Array) C.N.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.Array C.N.greater_than``() = + validate (DateTimes.Collection.Array) C.N.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.Array C.N.greater_or_equal``() = + validate (DateTimes.Collection.Array) C.N.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.I.equals``() = + validate (DateTimes.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.I.equal``() = + validate (DateTimes.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.I.not_equal``() = + validate (DateTimes.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.I.compare``() = + validate (DateTimes.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;1;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.I.less_than``() = + validate (DateTimes.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;0;0;1;1;0;0;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.I.less_or_equal``() = + validate (DateTimes.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;0;1;1;1;0;0;1;0;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.I.greater_than``() = + validate (DateTimes.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;1;0;0;0;1;1;0;1;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.I.greater_or_equal``() = + validate (DateTimes.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;1;1;0;0;1;1;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.N.equals``() = + validate (DateTimes.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.N.equal``() = + validate (DateTimes.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.N.not_equal``() = + validate (DateTimes.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.N.compare``() = + validate (DateTimes.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;1;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.N.less_than``() = + validate (DateTimes.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;0;0;1;1;0;0;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.N.less_or_equal``() = + validate (DateTimes.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;0;1;1;1;0;0;1;0;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.N.greater_than``() = + validate (DateTimes.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;1;0;0;0;1;1;0;1;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.OptionArray C.N.greater_or_equal``() = + validate (DateTimes.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;1;1;0;0;1;1;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.RefArray C.I.equals``() = + validate (DateTimes.Collection.RefArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.RefArray C.I.equal``() = + validate (DateTimes.Collection.RefArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.RefArray C.I.not_equal``() = + validate (DateTimes.Collection.RefArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.RefArray C.I.compare``() = + validate (DateTimes.Collection.RefArray) C.I.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.RefArray C.I.less_than``() = + validate (DateTimes.Collection.RefArray) C.I.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.RefArray C.I.less_or_equal``() = + validate (DateTimes.Collection.RefArray) C.I.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.RefArray C.I.greater_than``() = + validate (DateTimes.Collection.RefArray) C.I.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.RefArray C.I.greater_or_equal``() = + validate (DateTimes.Collection.RefArray) C.I.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.RefArray C.N.equals``() = + validate (DateTimes.Collection.RefArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.RefArray C.N.equal``() = + validate (DateTimes.Collection.RefArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.RefArray C.N.not_equal``() = + validate (DateTimes.Collection.RefArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.RefArray C.N.compare``() = + validate (DateTimes.Collection.RefArray) C.N.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.RefArray C.N.less_than``() = + validate (DateTimes.Collection.RefArray) C.N.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.RefArray C.N.less_or_equal``() = + validate (DateTimes.Collection.RefArray) C.N.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.RefArray C.N.greater_than``() = + validate (DateTimes.Collection.RefArray) C.N.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.RefArray C.N.greater_or_equal``() = + validate (DateTimes.Collection.RefArray) C.N.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.I.equals``() = + validate (DateTimes.Collection.RefWrapArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.I.equal``() = + validate (DateTimes.Collection.RefWrapArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.I.not_equal``() = + validate (DateTimes.Collection.RefWrapArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.I.compare``() = + validate (DateTimes.Collection.RefWrapArray) C.I.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.I.less_than``() = + validate (DateTimes.Collection.RefWrapArray) C.I.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.I.less_or_equal``() = + validate (DateTimes.Collection.RefWrapArray) C.I.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.I.greater_than``() = + validate (DateTimes.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (DateTimes.Collection.RefWrapArray) C.I.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.N.equals``() = + validate (DateTimes.Collection.RefWrapArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.N.equal``() = + validate (DateTimes.Collection.RefWrapArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.N.not_equal``() = + validate (DateTimes.Collection.RefWrapArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.N.compare``() = + validate (DateTimes.Collection.RefWrapArray) C.N.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.N.less_than``() = + validate (DateTimes.Collection.RefWrapArray) C.N.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.N.less_or_equal``() = + validate (DateTimes.Collection.RefWrapArray) C.N.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.N.greater_than``() = + validate (DateTimes.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (DateTimes.Collection.RefWrapArray) C.N.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.I.equals``() = + validate (DateTimes.Collection.UnionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.I.equal``() = + validate (DateTimes.Collection.UnionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.I.not_equal``() = + validate (DateTimes.Collection.UnionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.I.compare``() = + validate (DateTimes.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.I.less_than``() = + validate (DateTimes.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.I.less_or_equal``() = + validate (DateTimes.Collection.UnionArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.I.greater_than``() = + validate (DateTimes.Collection.UnionArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.I.greater_or_equal``() = + validate (DateTimes.Collection.UnionArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.N.equals``() = + validate (DateTimes.Collection.UnionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.N.equal``() = + validate (DateTimes.Collection.UnionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.N.not_equal``() = + validate (DateTimes.Collection.UnionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.N.compare``() = + validate (DateTimes.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.N.less_than``() = + validate (DateTimes.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.N.less_or_equal``() = + validate (DateTimes.Collection.UnionArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.N.greater_than``() = + validate (DateTimes.Collection.UnionArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionArray C.N.greater_or_equal``() = + validate (DateTimes.Collection.UnionArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.I.equals``() = + validate (DateTimes.Collection.UnionWrapArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.I.equal``() = + validate (DateTimes.Collection.UnionWrapArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.I.not_equal``() = + validate (DateTimes.Collection.UnionWrapArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.I.compare``() = + validate (DateTimes.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.I.less_than``() = + validate (DateTimes.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (DateTimes.Collection.UnionWrapArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.I.greater_than``() = + validate (DateTimes.Collection.UnionWrapArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (DateTimes.Collection.UnionWrapArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.N.equals``() = + validate (DateTimes.Collection.UnionWrapArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.N.equal``() = + validate (DateTimes.Collection.UnionWrapArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.N.not_equal``() = + validate (DateTimes.Collection.UnionWrapArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.N.compare``() = + validate (DateTimes.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; + -1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3; + 2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3; + -3;1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1; + -1;-1;-1;2;1;1;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;1;-1;3;2;1;3;2;1;1; + 3;2;1;3;2;1;0;3;2;1;3;2;1;1;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1; + 1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;0;-1;-2;3; + 2;1;2;1;1;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;0;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;-1;3;2;1;3;2;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.N.less_than``() = + validate (DateTimes.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (DateTimes.Collection.UnionWrapArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; + 1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0; + 0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0; + 0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0; + 0;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.N.greater_than``() = + validate (DateTimes.Collection.UnionWrapArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 0 + |] + + [] + member __.``DateTimes.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (DateTimes.Collection.UnionWrapArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; + 0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1; + 1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; + 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; + 1;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; + 1 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.I.equals``() = + validate (DateTimes.Collection.ValueArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.I.equal``() = + validate (DateTimes.Collection.ValueArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.I.not_equal``() = + validate (DateTimes.Collection.ValueArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.I.compare``() = + validate (DateTimes.Collection.ValueArray) C.I.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.I.less_than``() = + validate (DateTimes.Collection.ValueArray) C.I.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.I.less_or_equal``() = + validate (DateTimes.Collection.ValueArray) C.I.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.I.greater_than``() = + validate (DateTimes.Collection.ValueArray) C.I.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.I.greater_or_equal``() = + validate (DateTimes.Collection.ValueArray) C.I.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.N.equals``() = + validate (DateTimes.Collection.ValueArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.N.equal``() = + validate (DateTimes.Collection.ValueArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.N.not_equal``() = + validate (DateTimes.Collection.ValueArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.N.compare``() = + validate (DateTimes.Collection.ValueArray) C.N.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.N.less_than``() = + validate (DateTimes.Collection.ValueArray) C.N.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.N.less_or_equal``() = + validate (DateTimes.Collection.ValueArray) C.N.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.N.greater_than``() = + validate (DateTimes.Collection.ValueArray) C.N.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.ValueArray C.N.greater_or_equal``() = + validate (DateTimes.Collection.ValueArray) C.N.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.I.equals``() = + validate (DateTimes.Collection.ValueWrapArray) C.I.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.I.equal``() = + validate (DateTimes.Collection.ValueWrapArray) C.I.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.I.not_equal``() = + validate (DateTimes.Collection.ValueWrapArray) C.I.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.I.compare``() = + validate (DateTimes.Collection.ValueWrapArray) C.I.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.I.less_than``() = + validate (DateTimes.Collection.ValueWrapArray) C.I.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (DateTimes.Collection.ValueWrapArray) C.I.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.I.greater_than``() = + validate (DateTimes.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (DateTimes.Collection.ValueWrapArray) C.I.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.N.equals``() = + validate (DateTimes.Collection.ValueWrapArray) C.N.equals [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.N.equal``() = + validate (DateTimes.Collection.ValueWrapArray) C.N.equal [| + 1;0;0;0;1;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.N.not_equal``() = + validate (DateTimes.Collection.ValueWrapArray) C.N.not_equal [| + 0;1;1;1;0;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.N.compare``() = + validate (DateTimes.Collection.ValueWrapArray) C.N.compare [| + 0;-1;-1;1;0;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.N.less_than``() = + validate (DateTimes.Collection.ValueWrapArray) C.N.less_than [| + 0;1;1;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (DateTimes.Collection.ValueWrapArray) C.N.less_or_equal [| + 1;1;1;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.N.greater_than``() = + validate (DateTimes.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (DateTimes.Collection.ValueWrapArray) C.N.greater_or_equal [| + 1;0;0;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.I.equals``() = + validate (DateTimes.Collection.ArrayArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.I.equal``() = + validate (DateTimes.Collection.ArrayArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.I.not_equal``() = + validate (DateTimes.Collection.ArrayArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.I.compare``() = + validate (DateTimes.Collection.ArrayArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;1;-1;-1;-1;1;-1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;1;1;1;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.I.less_than``() = + validate (DateTimes.Collection.ArrayArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.I.less_or_equal``() = + validate (DateTimes.Collection.ArrayArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;0;1;1;1;0;1;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;0;0;0;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.I.greater_than``() = + validate (DateTimes.Collection.ArrayArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;1;0;0;0;1;0;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;1;1;1;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.I.greater_or_equal``() = + validate (DateTimes.Collection.ArrayArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;1;0;0;0;1;0;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.N.equals``() = + validate (DateTimes.Collection.ArrayArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.N.equal``() = + validate (DateTimes.Collection.ArrayArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.N.not_equal``() = + validate (DateTimes.Collection.ArrayArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.N.compare``() = + validate (DateTimes.Collection.ArrayArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;1;-1;-1;-1;1;-1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;1;1;1;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.N.less_than``() = + validate (DateTimes.Collection.ArrayArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.N.less_or_equal``() = + validate (DateTimes.Collection.ArrayArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;0;1;1;1;0;1;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;0;0;0;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.N.greater_than``() = + validate (DateTimes.Collection.ArrayArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;1;0;0;0;1;0;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;1;1;1;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray C.N.greater_or_equal``() = + validate (DateTimes.Collection.ArrayArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;1;0;0;0;1;0;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.ListArray C.I.equals``() = + validate (DateTimes.Collection.ListArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ListArray C.I.equal``() = + validate (DateTimes.Collection.ListArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ListArray C.I.not_equal``() = + validate (DateTimes.Collection.ListArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ListArray C.I.compare``() = + validate (DateTimes.Collection.ListArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;1;1;-1;1;1;-1;0;1;-1;-1;1;-1;-1;0;-1;-1;1;1;1;1;0;1;1;-1;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.ListArray C.I.less_than``() = + validate (DateTimes.Collection.ListArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0;0;0;1;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.ListArray C.I.less_or_equal``() = + validate (DateTimes.Collection.ListArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.ListArray C.I.greater_than``() = + validate (DateTimes.Collection.ListArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.ListArray C.I.greater_or_equal``() = + validate (DateTimes.Collection.ListArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1;1;1;0;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.ListArray C.N.equals``() = + validate (DateTimes.Collection.ListArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ListArray C.N.equal``() = + validate (DateTimes.Collection.ListArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ListArray C.N.not_equal``() = + validate (DateTimes.Collection.ListArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ListArray C.N.compare``() = + validate (DateTimes.Collection.ListArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;1;1;-1;1;1;-1;0;1;-1;-1;1;-1;-1;0;-1;-1;1;1;1;1;0;1;1;-1;1;1;-1;0 + |] + + [] + member __.``DateTimes.Collection.ListArray C.N.less_than``() = + validate (DateTimes.Collection.ListArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0;0;0;1;0;0;1;0 + |] + + [] + member __.``DateTimes.Collection.ListArray C.N.less_or_equal``() = + validate (DateTimes.Collection.ListArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1 + |] + + [] + member __.``DateTimes.Collection.ListArray C.N.greater_than``() = + validate (DateTimes.Collection.ListArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0 + |] + + [] + member __.``DateTimes.Collection.ListArray C.N.greater_or_equal``() = + validate (DateTimes.Collection.ListArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1;1;1;0;1;1;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;-1;0;1;-1;1;1;-1;-1;0;-1;1;1;-1;1;1;0;1;1;-1;-1;-1;-1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;-1;0;1;-1;1;1;-1;-1;0;-1;1;1;-1;1;1;0;1;1;-1;-1;-1;-1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0 + |] + + [] + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.Array E.I.equals``() = + validate (NullableDateTimes.Collection.Array) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.Array E.I.equal``() = + validate (NullableDateTimes.Collection.Array) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.Array E.I.not_equal``() = + validate (NullableDateTimes.Collection.Array) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.Array E.N.equals``() = + validate (NullableDateTimes.Collection.Array) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.Array E.N.equal``() = + validate (NullableDateTimes.Collection.Array) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.Array E.N.not_equal``() = + validate (NullableDateTimes.Collection.Array) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.OptionArray E.I.equals``() = + validate (NullableDateTimes.Collection.OptionArray) E.I.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.OptionArray E.I.equal``() = + validate (NullableDateTimes.Collection.OptionArray) E.I.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.OptionArray E.I.not_equal``() = + validate (NullableDateTimes.Collection.OptionArray) E.I.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.OptionArray E.N.equals``() = + validate (NullableDateTimes.Collection.OptionArray) E.N.equals [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.OptionArray E.N.equal``() = + validate (NullableDateTimes.Collection.OptionArray) E.N.equal [| + 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.OptionArray E.N.not_equal``() = + validate (NullableDateTimes.Collection.OptionArray) E.N.not_equal [| + 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.RefArray E.I.equals``() = + validate (NullableDateTimes.Collection.RefArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.RefArray E.I.equal``() = + validate (NullableDateTimes.Collection.RefArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.RefArray E.I.not_equal``() = + validate (NullableDateTimes.Collection.RefArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.RefArray E.N.equals``() = + validate (NullableDateTimes.Collection.RefArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.RefArray E.N.equal``() = + validate (NullableDateTimes.Collection.RefArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.RefArray E.N.not_equal``() = + validate (NullableDateTimes.Collection.RefArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.RefWrapArray E.I.equals``() = + validate (NullableDateTimes.Collection.RefWrapArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.RefWrapArray E.I.equal``() = + validate (NullableDateTimes.Collection.RefWrapArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.RefWrapArray E.I.not_equal``() = + validate (NullableDateTimes.Collection.RefWrapArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.RefWrapArray E.N.equals``() = + validate (NullableDateTimes.Collection.RefWrapArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.RefWrapArray E.N.equal``() = + validate (NullableDateTimes.Collection.RefWrapArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.RefWrapArray E.N.not_equal``() = + validate (NullableDateTimes.Collection.RefWrapArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.UnionArray E.I.equals``() = + validate (NullableDateTimes.Collection.UnionArray) E.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableDateTimes.Collection.UnionArray E.I.equal``() = + validate (NullableDateTimes.Collection.UnionArray) E.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableDateTimes.Collection.UnionArray E.I.not_equal``() = + validate (NullableDateTimes.Collection.UnionArray) E.I.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableDateTimes.Collection.UnionArray E.N.equals``() = + validate (NullableDateTimes.Collection.UnionArray) E.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableDateTimes.Collection.UnionArray E.N.equal``() = + validate (NullableDateTimes.Collection.UnionArray) E.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableDateTimes.Collection.UnionArray E.N.not_equal``() = + validate (NullableDateTimes.Collection.UnionArray) E.N.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableDateTimes.Collection.UnionWrapArray E.I.equals``() = + validate (NullableDateTimes.Collection.UnionWrapArray) E.I.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableDateTimes.Collection.UnionWrapArray E.I.equal``() = + validate (NullableDateTimes.Collection.UnionWrapArray) E.I.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableDateTimes.Collection.UnionWrapArray E.I.not_equal``() = + validate (NullableDateTimes.Collection.UnionWrapArray) E.I.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableDateTimes.Collection.UnionWrapArray E.N.equals``() = + validate (NullableDateTimes.Collection.UnionWrapArray) E.N.equals [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableDateTimes.Collection.UnionWrapArray E.N.equal``() = + validate (NullableDateTimes.Collection.UnionWrapArray) E.N.equal [| + 1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1; + 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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``NullableDateTimes.Collection.UnionWrapArray E.N.not_equal``() = + validate (NullableDateTimes.Collection.UnionWrapArray) E.N.not_equal [| + 0;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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 + |] + + [] + member __.``NullableDateTimes.Collection.ValueArray E.I.equals``() = + validate (NullableDateTimes.Collection.ValueArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ValueArray E.I.equal``() = + validate (NullableDateTimes.Collection.ValueArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ValueArray E.I.not_equal``() = + validate (NullableDateTimes.Collection.ValueArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.ValueArray E.N.equals``() = + validate (NullableDateTimes.Collection.ValueArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ValueArray E.N.equal``() = + validate (NullableDateTimes.Collection.ValueArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ValueArray E.N.not_equal``() = + validate (NullableDateTimes.Collection.ValueArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.ValueWrapArray E.I.equals``() = + validate (NullableDateTimes.Collection.ValueWrapArray) E.I.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ValueWrapArray E.I.equal``() = + validate (NullableDateTimes.Collection.ValueWrapArray) E.I.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ValueWrapArray E.I.not_equal``() = + validate (NullableDateTimes.Collection.ValueWrapArray) E.I.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.ValueWrapArray E.N.equals``() = + validate (NullableDateTimes.Collection.ValueWrapArray) E.N.equals [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ValueWrapArray E.N.equal``() = + validate (NullableDateTimes.Collection.ValueWrapArray) E.N.equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ValueWrapArray E.N.not_equal``() = + validate (NullableDateTimes.Collection.ValueWrapArray) E.N.not_equal [| + 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.ArrayArray E.I.equals``() = + validate (NullableDateTimes.Collection.ArrayArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ArrayArray E.I.equal``() = + validate (NullableDateTimes.Collection.ArrayArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ArrayArray E.I.not_equal``() = + validate (NullableDateTimes.Collection.ArrayArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.ArrayArray E.N.equals``() = + validate (NullableDateTimes.Collection.ArrayArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ArrayArray E.N.equal``() = + validate (NullableDateTimes.Collection.ArrayArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ArrayArray E.N.not_equal``() = + validate (NullableDateTimes.Collection.ArrayArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.ListArray E.I.equals``() = + validate (NullableDateTimes.Collection.ListArray) E.I.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ListArray E.I.equal``() = + validate (NullableDateTimes.Collection.ListArray) E.I.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ListArray E.I.not_equal``() = + validate (NullableDateTimes.Collection.ListArray) E.I.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``NullableDateTimes.Collection.ListArray E.N.equals``() = + validate (NullableDateTimes.Collection.ListArray) E.N.equals [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ListArray E.N.equal``() = + validate (NullableDateTimes.Collection.ListArray) E.N.equal [| + 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; + 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``NullableDateTimes.Collection.ListArray E.N.not_equal``() = + validate (NullableDateTimes.Collection.ListArray) E.N.not_equal [| + 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; + 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.Array C.I.equals``() = + validate (Tuple2s.Collection.Array) C.I.equals [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.Array C.I.equal``() = + validate (Tuple2s.Collection.Array) C.I.equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.Array C.I.not_equal``() = + validate (Tuple2s.Collection.Array) C.I.not_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.Array C.I.compare``() = + validate (Tuple2s.Collection.Array) C.I.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.Array C.I.less_than``() = + validate (Tuple2s.Collection.Array) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.Array C.I.less_or_equal``() = + validate (Tuple2s.Collection.Array) C.I.less_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.Array C.I.greater_than``() = + validate (Tuple2s.Collection.Array) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.Array C.I.greater_or_equal``() = + validate (Tuple2s.Collection.Array) C.I.greater_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.Array C.N.equals``() = + validate (Tuple2s.Collection.Array) C.N.equals [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.Array C.N.equal``() = + validate (Tuple2s.Collection.Array) C.N.equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.Array C.N.not_equal``() = + validate (Tuple2s.Collection.Array) C.N.not_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.Array C.N.compare``() = + validate (Tuple2s.Collection.Array) C.N.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.Array C.N.less_than``() = + validate (Tuple2s.Collection.Array) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.Array C.N.less_or_equal``() = + validate (Tuple2s.Collection.Array) C.N.less_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.Array C.N.greater_than``() = + validate (Tuple2s.Collection.Array) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.Array C.N.greater_or_equal``() = + validate (Tuple2s.Collection.Array) C.N.greater_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.I.equals``() = + validate (Tuple2s.Collection.OptionArray) C.I.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.I.equal``() = + validate (Tuple2s.Collection.OptionArray) C.I.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.I.not_equal``() = + validate (Tuple2s.Collection.OptionArray) C.I.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.I.compare``() = + validate (Tuple2s.Collection.OptionArray) C.I.compare [| + 0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0;-1;-1;1;1;1;0;-1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.I.less_than``() = + validate (Tuple2s.Collection.OptionArray) C.I.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.I.less_or_equal``() = + validate (Tuple2s.Collection.OptionArray) C.I.less_or_equal [| + 1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.I.greater_than``() = + validate (Tuple2s.Collection.OptionArray) C.I.greater_than [| + 0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.I.greater_or_equal``() = + validate (Tuple2s.Collection.OptionArray) C.I.greater_or_equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.N.equals``() = + validate (Tuple2s.Collection.OptionArray) C.N.equals [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.N.equal``() = + validate (Tuple2s.Collection.OptionArray) C.N.equal [| + 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.N.not_equal``() = + validate (Tuple2s.Collection.OptionArray) C.N.not_equal [| + 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.N.compare``() = + validate (Tuple2s.Collection.OptionArray) C.N.compare [| + 0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0;-1;-1;1;1;1;0;-1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.N.less_than``() = + validate (Tuple2s.Collection.OptionArray) C.N.less_than [| + 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.N.less_or_equal``() = + validate (Tuple2s.Collection.OptionArray) C.N.less_or_equal [| + 1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.N.greater_than``() = + validate (Tuple2s.Collection.OptionArray) C.N.greater_than [| + 0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.OptionArray C.N.greater_or_equal``() = + validate (Tuple2s.Collection.OptionArray) C.N.greater_or_equal [| + 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.I.equals``() = + validate (Tuple2s.Collection.RefArray) C.I.equals [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.I.equal``() = + validate (Tuple2s.Collection.RefArray) C.I.equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.I.not_equal``() = + validate (Tuple2s.Collection.RefArray) C.I.not_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.I.compare``() = + validate (Tuple2s.Collection.RefArray) C.I.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.I.less_than``() = + validate (Tuple2s.Collection.RefArray) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.I.less_or_equal``() = + validate (Tuple2s.Collection.RefArray) C.I.less_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.I.greater_than``() = + validate (Tuple2s.Collection.RefArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.I.greater_or_equal``() = + validate (Tuple2s.Collection.RefArray) C.I.greater_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.N.equals``() = + validate (Tuple2s.Collection.RefArray) C.N.equals [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.N.equal``() = + validate (Tuple2s.Collection.RefArray) C.N.equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.N.not_equal``() = + validate (Tuple2s.Collection.RefArray) C.N.not_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.N.compare``() = + validate (Tuple2s.Collection.RefArray) C.N.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.N.less_than``() = + validate (Tuple2s.Collection.RefArray) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.N.less_or_equal``() = + validate (Tuple2s.Collection.RefArray) C.N.less_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.N.greater_than``() = + validate (Tuple2s.Collection.RefArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.RefArray C.N.greater_or_equal``() = + validate (Tuple2s.Collection.RefArray) C.N.greater_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.I.equals``() = + validate (Tuple2s.Collection.RefWrapArray) C.I.equals [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.I.equal``() = + validate (Tuple2s.Collection.RefWrapArray) C.I.equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.I.not_equal``() = + validate (Tuple2s.Collection.RefWrapArray) C.I.not_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.I.compare``() = + validate (Tuple2s.Collection.RefWrapArray) C.I.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.I.less_than``() = + validate (Tuple2s.Collection.RefWrapArray) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.I.less_or_equal``() = + validate (Tuple2s.Collection.RefWrapArray) C.I.less_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.I.greater_than``() = + validate (Tuple2s.Collection.RefWrapArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.I.greater_or_equal``() = + validate (Tuple2s.Collection.RefWrapArray) C.I.greater_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.N.equals``() = + validate (Tuple2s.Collection.RefWrapArray) C.N.equals [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.N.equal``() = + validate (Tuple2s.Collection.RefWrapArray) C.N.equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.N.not_equal``() = + validate (Tuple2s.Collection.RefWrapArray) C.N.not_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.N.compare``() = + validate (Tuple2s.Collection.RefWrapArray) C.N.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.N.less_than``() = + validate (Tuple2s.Collection.RefWrapArray) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.N.less_or_equal``() = + validate (Tuple2s.Collection.RefWrapArray) C.N.less_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.N.greater_than``() = + validate (Tuple2s.Collection.RefWrapArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.RefWrapArray C.N.greater_or_equal``() = + validate (Tuple2s.Collection.RefWrapArray) C.N.greater_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.I.equals``() = + validate (Tuple2s.Collection.UnionArray) C.I.equals [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.I.equal``() = + validate (Tuple2s.Collection.UnionArray) C.I.equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.I.not_equal``() = + validate (Tuple2s.Collection.UnionArray) C.I.not_equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;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;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;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;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;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;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 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.I.compare``() = + validate (Tuple2s.Collection.UnionArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3; + 2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3; + -3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1; + -1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1; + -2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.I.less_than``() = + validate (Tuple2s.Collection.UnionArray) C.I.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;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;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;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;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 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;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.I.less_or_equal``() = + validate (Tuple2s.Collection.UnionArray) C.I.less_or_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;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;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;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;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 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;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.I.greater_than``() = + validate (Tuple2s.Collection.UnionArray) C.I.greater_than [| + 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;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.I.greater_or_equal``() = + validate (Tuple2s.Collection.UnionArray) C.I.greater_or_equal [| + 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;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.N.equals``() = + validate (Tuple2s.Collection.UnionArray) C.N.equals [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.N.equal``() = + validate (Tuple2s.Collection.UnionArray) C.N.equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.N.not_equal``() = + validate (Tuple2s.Collection.UnionArray) C.N.not_equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;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;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;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;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;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;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 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.N.compare``() = + validate (Tuple2s.Collection.UnionArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3; + 2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3; + -3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1; + -1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1; + -2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.N.less_than``() = + validate (Tuple2s.Collection.UnionArray) C.N.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;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;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;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;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 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;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.N.less_or_equal``() = + validate (Tuple2s.Collection.UnionArray) C.N.less_or_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;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;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;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;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 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;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.N.greater_than``() = + validate (Tuple2s.Collection.UnionArray) C.N.greater_than [| + 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;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.UnionArray C.N.greater_or_equal``() = + validate (Tuple2s.Collection.UnionArray) C.N.greater_or_equal [| + 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;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.I.equals``() = + validate (Tuple2s.Collection.UnionWrapArray) C.I.equals [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.I.equal``() = + validate (Tuple2s.Collection.UnionWrapArray) C.I.equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.I.not_equal``() = + validate (Tuple2s.Collection.UnionWrapArray) C.I.not_equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;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;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;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;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;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;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 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.I.compare``() = + validate (Tuple2s.Collection.UnionWrapArray) C.I.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3; + 2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3; + -3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1; + -1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1; + -2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.I.less_than``() = + validate (Tuple2s.Collection.UnionWrapArray) C.I.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;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;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;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;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 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;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.I.less_or_equal``() = + validate (Tuple2s.Collection.UnionWrapArray) C.I.less_or_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;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;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;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;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 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;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.I.greater_than``() = + validate (Tuple2s.Collection.UnionWrapArray) C.I.greater_than [| + 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;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.I.greater_or_equal``() = + validate (Tuple2s.Collection.UnionWrapArray) C.I.greater_or_equal [| + 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;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.N.equals``() = + validate (Tuple2s.Collection.UnionWrapArray) C.N.equals [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.N.equal``() = + validate (Tuple2s.Collection.UnionWrapArray) C.N.equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;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;1;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;1;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;1;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;1;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;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.N.not_equal``() = + validate (Tuple2s.Collection.UnionWrapArray) C.N.not_equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;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;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;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;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;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;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 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.N.compare``() = + validate (Tuple2s.Collection.UnionWrapArray) C.N.compare [| + 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; + -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; + -1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;0;-1;-2;3; + 2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1;2;1;-1; + -1;3;2;1;2;1;-1;-1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3; + -3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1; + -1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1; + 3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;0; + -1;-2;3;2;1;1;-1;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1;3;2;1; + 2;1;-1;-1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1; + -1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2; + -2;1;-1;-1;-2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;1; + -1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2; + 1;1;0;-1;-2;3;2;1;1;-1;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;2;1;-1;-1; + 3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0;3;2;1;3;2;1;-1;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3; + -3;-3;1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;0;-1; + -2;-2;-2;-2;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;1;-1;-1;-1;-1;2;1;0;-1;-1;-1;-1;3;2;1;1;-1;-2;-3;3; + 2;1;1;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;0;-1;-2;-3;3;2;1;1;1;-1;-2;3;2;1;1;1;-1;-2;3;2;1;1;1;-1; + -2;3;2;1;1;0;-1;-2;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;1;-1;3;2;1;2;1;0;-1;3;2;1;3; + 2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;1;3;2;1;3;2;1;0 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.N.less_than``() = + validate (Tuple2s.Collection.UnionWrapArray) C.N.less_than [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;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;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;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;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 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;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;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 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.N.less_or_equal``() = + validate (Tuple2s.Collection.UnionWrapArray) C.N.less_or_equal [| + 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0; + 1;0;0;0;0;0;0;1;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;1;1;1; + 1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0; + 0;0;0;1;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;1;1;1;1;1;1;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0; + 0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1; + 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;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1; + 1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1; + 1;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;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;1 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.N.greater_than``() = + validate (Tuple2s.Collection.UnionWrapArray) C.N.greater_than [| + 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;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.UnionWrapArray C.N.greater_or_equal``() = + validate (Tuple2s.Collection.UnionWrapArray) C.N.greater_or_equal [| + 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;1;0;0;0;0;0;0;1;0;0;0;0; + 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1; + 1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0; + 0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0; + 1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0; + 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; + 1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;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;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0; + 0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0; + 0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; + 1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0; + 1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0; + 0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1; + 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0; + 0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1; + 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.I.equals``() = + validate (Tuple2s.Collection.ValueArray) C.I.equals [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.I.equal``() = + validate (Tuple2s.Collection.ValueArray) C.I.equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.I.not_equal``() = + validate (Tuple2s.Collection.ValueArray) C.I.not_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.I.compare``() = + validate (Tuple2s.Collection.ValueArray) C.I.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.I.less_than``() = + validate (Tuple2s.Collection.ValueArray) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.I.less_or_equal``() = + validate (Tuple2s.Collection.ValueArray) C.I.less_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.I.greater_than``() = + validate (Tuple2s.Collection.ValueArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.I.greater_or_equal``() = + validate (Tuple2s.Collection.ValueArray) C.I.greater_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.N.equals``() = + validate (Tuple2s.Collection.ValueArray) C.N.equals [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.N.equal``() = + validate (Tuple2s.Collection.ValueArray) C.N.equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.N.not_equal``() = + validate (Tuple2s.Collection.ValueArray) C.N.not_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.N.compare``() = + validate (Tuple2s.Collection.ValueArray) C.N.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.N.less_than``() = + validate (Tuple2s.Collection.ValueArray) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.N.less_or_equal``() = + validate (Tuple2s.Collection.ValueArray) C.N.less_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.N.greater_than``() = + validate (Tuple2s.Collection.ValueArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ValueArray C.N.greater_or_equal``() = + validate (Tuple2s.Collection.ValueArray) C.N.greater_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.I.equals``() = + validate (Tuple2s.Collection.ValueWrapArray) C.I.equals [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.I.equal``() = + validate (Tuple2s.Collection.ValueWrapArray) C.I.equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.I.not_equal``() = + validate (Tuple2s.Collection.ValueWrapArray) C.I.not_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.I.compare``() = + validate (Tuple2s.Collection.ValueWrapArray) C.I.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.I.less_than``() = + validate (Tuple2s.Collection.ValueWrapArray) C.I.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.I.less_or_equal``() = + validate (Tuple2s.Collection.ValueWrapArray) C.I.less_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.I.greater_than``() = + validate (Tuple2s.Collection.ValueWrapArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.I.greater_or_equal``() = + validate (Tuple2s.Collection.ValueWrapArray) C.I.greater_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.N.equals``() = + validate (Tuple2s.Collection.ValueWrapArray) C.N.equals [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.N.equal``() = + validate (Tuple2s.Collection.ValueWrapArray) C.N.equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.N.not_equal``() = + validate (Tuple2s.Collection.ValueWrapArray) C.N.not_equal [| + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.N.compare``() = + validate (Tuple2s.Collection.ValueWrapArray) C.N.compare [| + 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.N.less_than``() = + validate (Tuple2s.Collection.ValueWrapArray) C.N.less_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.N.less_or_equal``() = + validate (Tuple2s.Collection.ValueWrapArray) C.N.less_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.N.greater_than``() = + validate (Tuple2s.Collection.ValueWrapArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ValueWrapArray C.N.greater_or_equal``() = + validate (Tuple2s.Collection.ValueWrapArray) C.N.greater_or_equal [| + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.I.equals``() = + validate (Tuple2s.Collection.ArrayArray) C.I.equals [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.I.equal``() = + validate (Tuple2s.Collection.ArrayArray) C.I.equal [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.I.not_equal``() = + validate (Tuple2s.Collection.ArrayArray) C.I.not_equal [| + 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;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;1;1 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.I.compare``() = + validate (Tuple2s.Collection.ArrayArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; + 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.I.less_than``() = + validate (Tuple2s.Collection.ArrayArray) C.I.less_than [| + 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.I.less_or_equal``() = + validate (Tuple2s.Collection.ArrayArray) C.I.less_or_equal [| + 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.I.greater_than``() = + validate (Tuple2s.Collection.ArrayArray) C.I.greater_than [| + 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;1;1;1;1;0;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.I.greater_or_equal``() = + validate (Tuple2s.Collection.ArrayArray) C.I.greater_or_equal [| + 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;1;0;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.N.equals``() = + validate (Tuple2s.Collection.ArrayArray) C.N.equals [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.N.equal``() = + validate (Tuple2s.Collection.ArrayArray) C.N.equal [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.N.not_equal``() = + validate (Tuple2s.Collection.ArrayArray) C.N.not_equal [| + 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;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;1;1 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.N.compare``() = + validate (Tuple2s.Collection.ArrayArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; + 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.N.less_than``() = + validate (Tuple2s.Collection.ArrayArray) C.N.less_than [| + 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.N.less_or_equal``() = + validate (Tuple2s.Collection.ArrayArray) C.N.less_or_equal [| + 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.N.greater_than``() = + validate (Tuple2s.Collection.ArrayArray) C.N.greater_than [| + 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;1;1;1;1;0;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray C.N.greater_or_equal``() = + validate (Tuple2s.Collection.ArrayArray) C.N.greater_or_equal [| + 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;1;0;0;0;0;1;1;1;1;0;0;0;0; + 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.I.equals``() = + validate (Tuple2s.Collection.ListArray) C.I.equals [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.I.equal``() = + validate (Tuple2s.Collection.ListArray) C.I.equal [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.I.not_equal``() = + validate (Tuple2s.Collection.ListArray) C.I.not_equal [| + 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;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;1;1 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.I.compare``() = + validate (Tuple2s.Collection.ListArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;-1;1;1;0;-1;1;1;-1;-1;1;1;1;0;1;1;1;-1;1;-1;-1;-1;0;-1;-1;-1; + 1;1;-1;-1;1;0;-1;-1;1;1;1;-1;1;1;0;-1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.I.less_than``() = + validate (Tuple2s.Collection.ListArray) C.I.less_than [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.I.less_or_equal``() = + validate (Tuple2s.Collection.ListArray) C.I.less_or_equal [| + 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;1;0;0;0;1;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 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.I.greater_than``() = + validate (Tuple2s.Collection.ListArray) C.I.greater_than [| + 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;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.I.greater_or_equal``() = + validate (Tuple2s.Collection.ListArray) C.I.greater_or_equal [| + 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;1;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;1;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.N.equals``() = + validate (Tuple2s.Collection.ListArray) C.N.equals [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.N.equal``() = + validate (Tuple2s.Collection.ListArray) C.N.equal [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.N.not_equal``() = + validate (Tuple2s.Collection.ListArray) C.N.not_equal [| + 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;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;1;1 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.N.compare``() = + validate (Tuple2s.Collection.ListArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;-1;1;1;0;-1;1;1;-1;-1;1;1;1;0;1;1;1;-1;1;-1;-1;-1;0;-1;-1;-1; + 1;1;-1;-1;1;0;-1;-1;1;1;1;-1;1;1;0;-1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.N.less_than``() = + validate (Tuple2s.Collection.ListArray) C.N.less_than [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.N.less_or_equal``() = + validate (Tuple2s.Collection.ListArray) C.N.less_or_equal [| + 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;1;0;0;0;1;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 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.N.greater_than``() = + validate (Tuple2s.Collection.ListArray) C.N.greater_than [| + 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;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ListArray C.N.greater_or_equal``() = + validate (Tuple2s.Collection.ListArray) C.N.greater_or_equal [| + 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;1;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;1;0;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| + 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;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;1;1 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;1;1;1;0;-1;1;1;-1;1;1;1;1;0;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1; + 1;1;-1;-1;1;0;-1;1;1;1;1;-1;1;1;0;1;1;-1;-1;-1;1;-1;-1;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| + 0;1;1;1;1;1;1;1;0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1; + 0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;0;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| + 1;1;1;1;1;1;1;1;0;1;1;1;0;1;1;0;0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;1;1;1; + 0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;1;1;1;0;1;1;1 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| + 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0; + 1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;0;0;0;1;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| + 1;0;0;0;0;0;0;0;1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;0;0; + 1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;1;0;0;1 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| + 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;1;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 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| + 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;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;1;1 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;1;1;1;0;-1;1;1;-1;1;1;1;1;0;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1; + 1;1;-1;-1;1;0;-1;1;1;1;1;-1;1;1;0;1;1;-1;-1;-1;1;-1;-1;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| + 0;1;1;1;1;1;1;1;0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1; + 0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;0;1;1;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| + 1;1;1;1;1;1;1;1;0;1;1;1;0;1;1;0;0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;1;1;1; + 0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;1;1;1;0;1;1;1 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| + 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0; + 1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;0;0;0;1;0;0;0 + |] + + [] + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| + 1;0;0;0;0;0;0;0;1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;0;0; + 1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;1;0;0;1 + |] + + [] + member __.``Tuple3s.Collection.Array C.I.equals``() = + validate (Tuple3s.Collection.Array) C.I.equals [| + 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;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple3s.Collection.Array C.I.equal``() = + validate (Tuple3s.Collection.Array) C.I.equal [| + 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;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple3s.Collection.Array C.I.not_equal``() = + validate (Tuple3s.Collection.Array) C.I.not_equal [| + 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;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 + |] + + [] + member __.``Tuple3s.Collection.Array C.I.compare``() = + validate (Tuple3s.Collection.Array) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; + 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple3s.Collection.Array C.I.less_than``() = + validate (Tuple3s.Collection.Array) C.I.less_than [| + 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;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 + |] + + [] + member __.``Tuple3s.Collection.Array C.I.less_or_equal``() = + validate (Tuple3s.Collection.Array) C.I.less_or_equal [| + 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;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple3s.Collection.Array C.I.greater_than``() = + validate (Tuple3s.Collection.Array) C.I.greater_than [| + 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;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 + |] + + [] + member __.``Tuple3s.Collection.Array C.I.greater_or_equal``() = + validate (Tuple3s.Collection.Array) C.I.greater_or_equal [| + 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;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple3s.Collection.Array C.N.equals``() = + validate (Tuple3s.Collection.Array) C.N.equals [| + 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;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple3s.Collection.Array C.N.equal``() = + validate (Tuple3s.Collection.Array) C.N.equal [| + 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;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple3s.Collection.Array C.N.not_equal``() = + validate (Tuple3s.Collection.Array) C.N.not_equal [| + 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;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 + |] + + [] + member __.``Tuple3s.Collection.Array C.N.compare``() = + validate (Tuple3s.Collection.Array) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; + 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple3s.Collection.Array C.N.less_than``() = + validate (Tuple3s.Collection.Array) C.N.less_than [| + 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;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 + |] + + [] + member __.``Tuple3s.Collection.Array C.N.less_or_equal``() = + validate (Tuple3s.Collection.Array) C.N.less_or_equal [| + 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;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple3s.Collection.Array C.N.greater_than``() = + validate (Tuple3s.Collection.Array) C.N.greater_than [| + 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;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 + |] + + [] + member __.``Tuple3s.Collection.Array C.N.greater_or_equal``() = + validate (Tuple3s.Collection.Array) C.N.greater_or_equal [| + 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;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple4s.Collection.Array C.I.equals``() = + validate (Tuple4s.Collection.Array) C.I.equals [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple4s.Collection.Array C.I.equal``() = + validate (Tuple4s.Collection.Array) C.I.equal [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple4s.Collection.Array C.I.not_equal``() = + validate (Tuple4s.Collection.Array) C.I.not_equal [| + 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;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;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;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;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;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;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;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple4s.Collection.Array C.I.compare``() = + validate (Tuple4s.Collection.Array) C.I.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1; + -1;-1;-1;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1; + 1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;1;0; + -1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;0;-1;-1;-1;-1;-1;-1; + 1;1;1;1;1;1;1;1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;-1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple4s.Collection.Array C.I.less_than``() = + validate (Tuple4s.Collection.Array) C.I.less_than [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple4s.Collection.Array C.I.less_or_equal``() = + validate (Tuple4s.Collection.Array) C.I.less_or_equal [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple4s.Collection.Array C.I.greater_than``() = + validate (Tuple4s.Collection.Array) C.I.greater_than [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple4s.Collection.Array C.I.greater_or_equal``() = + validate (Tuple4s.Collection.Array) C.I.greater_or_equal [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple4s.Collection.Array C.N.equals``() = + validate (Tuple4s.Collection.Array) C.N.equals [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple4s.Collection.Array C.N.equal``() = + validate (Tuple4s.Collection.Array) C.N.equal [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple4s.Collection.Array C.N.not_equal``() = + validate (Tuple4s.Collection.Array) C.N.not_equal [| + 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;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;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;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;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;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;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;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple4s.Collection.Array C.N.compare``() = + validate (Tuple4s.Collection.Array) C.N.compare [| + 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1; + -1;-1;-1;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1; + 1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;1;0; + -1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;0;-1;-1;-1;-1;-1;-1; + 1;1;1;1;1;1;1;1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;1;1; + 1;1;1;1;0;-1;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;-1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 + |] + + [] + member __.``Tuple4s.Collection.Array C.N.less_than``() = + validate (Tuple4s.Collection.Array) C.N.less_than [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple4s.Collection.Array C.N.less_or_equal``() = + validate (Tuple4s.Collection.Array) C.N.less_or_equal [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple4s.Collection.Array C.N.greater_than``() = + validate (Tuple4s.Collection.Array) C.N.greater_than [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple4s.Collection.Array C.N.greater_or_equal``() = + validate (Tuple4s.Collection.Array) C.N.greater_or_equal [| + 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;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;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;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;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;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;0;0;0;0;0;0; + 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple5s.Collection.Array C.I.equals``() = + validate (Tuple5s.Collection.Array) C.I.equals [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple5s.Collection.Array C.I.equal``() = + validate (Tuple5s.Collection.Array) C.I.equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple5s.Collection.Array C.I.not_equal``() = + validate (Tuple5s.Collection.Array) C.I.not_equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;1;1;1;0 + |] + + [] + member __.``Tuple5s.Collection.Array C.I.compare``() = + validate (Tuple5s.Collection.Array) C.I.compare [| + 0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0; + -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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0 + |] + + [] + member __.``Tuple5s.Collection.Array C.I.less_than``() = + validate (Tuple5s.Collection.Array) C.I.less_than [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple5s.Collection.Array C.I.less_or_equal``() = + validate (Tuple5s.Collection.Array) C.I.less_or_equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple5s.Collection.Array C.I.greater_than``() = + validate (Tuple5s.Collection.Array) C.I.greater_than [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple5s.Collection.Array C.I.greater_or_equal``() = + validate (Tuple5s.Collection.Array) C.I.greater_or_equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple5s.Collection.Array C.N.equals``() = + validate (Tuple5s.Collection.Array) C.N.equals [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple5s.Collection.Array C.N.equal``() = + validate (Tuple5s.Collection.Array) C.N.equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple5s.Collection.Array C.N.not_equal``() = + validate (Tuple5s.Collection.Array) C.N.not_equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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; + 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;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;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;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;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;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;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;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;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;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;1;1;1;0 + |] + + [] + member __.``Tuple5s.Collection.Array C.N.compare``() = + validate (Tuple5s.Collection.Array) C.N.compare [| + 0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0; + -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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0;-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;0 + |] + + [] + member __.``Tuple5s.Collection.Array C.N.less_than``() = + validate (Tuple5s.Collection.Array) C.N.less_than [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple5s.Collection.Array C.N.less_or_equal``() = + validate (Tuple5s.Collection.Array) C.N.less_or_equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;1 + |] + + [] + member __.``Tuple5s.Collection.Array C.N.greater_than``() = + validate (Tuple5s.Collection.Array) C.N.greater_than [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;0 + |] + + [] + member __.``Tuple5s.Collection.Array C.N.greater_or_equal``() = + validate (Tuple5s.Collection.Array) C.N.greater_or_equal [| + 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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;0;0;0;0;0;0;0;0;0;1 + |] + diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/CreateComparersRegression.fsx b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/CreateComparersRegression.fsx new file mode 100644 index 00000000000..0bcd55d1c0c --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/CreateComparersRegression.fsx @@ -0,0 +1,6 @@ +// run as "fsi --exec CreateComparersRegression.fsx > tmp.txt" +// and then copy text in tmp.txt into the bottom of ComparersRegression.fs + +#r @"..\..\..\..\Release\net40\bin\FSharp.Core.Unittests.dll" + +FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Core.ComparersRegression.createData () \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/DiscrimantedUnionType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/DiscrimantedUnionType.fs index ef2c7c9fcf6..42f038b67bc 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/DiscrimantedUnionType.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/DiscrimantedUnionType.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Core open System diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Lazy.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Lazy.fs deleted file mode 100644 index d8490c7399c..00000000000 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Lazy.fs +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace SystematicUnitTests.FSharp_Core.Microsoft_FSharp_Control - -open System -open NUnit.Framework - -open Microsoft.FSharp.Collections -open SystematicUnitTests.LibraryTestFx - -// Various tests for the: -// Microsoft.FSharp.Collections prim types - -(* -[Test Strategy] -Make sure each method works on: -* Integer (value type) -* String (reference type) -* Null -*) - -[] -type LazyType() = - - [] - member this.Create() = - - // int - let intLazy = Lazy.Create(fun () -> 2) - Assert.AreEqual(intLazy.Value,2) - - // string - let stringLazy = Lazy.Create(fun () -> "string") - Assert.AreEqual(stringLazy.Value,"string") - - //null - let nullLazy = Lazy.Create(fun () -> ()) - Assert.AreEqual(nullLazy.Value,null) - - [] - member this.CreateFromValue() = - - // int - let intLazy = Lazy.CreateFromValue( 2) - Assert.AreEqual(intLazy.Value,2) - - // string - let stringLazy = Lazy.CreateFromValue( "string") - Assert.AreEqual(stringLazy.Value,"string") - - //null - let nullLazy = Lazy.CreateFromValue(null) - Assert.AreEqual(nullLazy.Value,null) - - - [] - member this.Force() = - - // int - let intLazy = Lazy.CreateFromValue( 2) - let intForce = intLazy.Force() - Assert.AreEqual(intForce,2) - - // string - let stringLazy = Lazy.CreateFromValue( "string") - let stringForce = stringLazy.Force() - Assert.AreEqual(stringForce,"string") - - //null - let nullLazy = Lazy.CreateFromValue(null) - let nullForce = nullLazy.Force() - Assert.AreEqual(nullForce,null) - - - [] - member this.SynchronizedForce() = - - // int - let intLazy = Lazy.CreateFromValue( 2) - let intSynchronizedForce = intLazy.SynchronizedForce() - Assert.AreEqual(intSynchronizedForce,2) - - // string - let stringLazy = Lazy.CreateFromValue( "string") - let stringSynchronizedForce = stringLazy.SynchronizedForce() - Assert.AreEqual(stringSynchronizedForce,"string") - - //null - let nullLazy = Lazy.CreateFromValue(null) - let nullSynchronizedForce = nullLazy.SynchronizedForce() - Assert.AreEqual(nullSynchronizedForce,null) - - - [] - member this.UnsynchronizedForce() = - - // int - let intLazy = Lazy.CreateFromValue( 2) - let intUnsynchronizedForce = intLazy.UnsynchronizedForce() - Assert.AreEqual(intUnsynchronizedForce,2) - - // string - let stringLazy = Lazy.CreateFromValue( "string") - let stringUnsynchronizedForce = stringLazy.UnsynchronizedForce() - Assert.AreEqual(stringUnsynchronizedForce,"string") - - //null - let nullLazy = Lazy.CreateFromValue(null) - let nullUnsynchronizedForce = nullLazy.UnsynchronizedForce() - Assert.AreEqual(nullUnsynchronizedForce,null) - - - - [] - member this.Value() = - - // int - let intLazy = Lazy.CreateFromValue( 2) - Assert.AreEqual(intLazy.Value,2) - - // string - let stringLazy = Lazy.CreateFromValue( "string") - Assert.AreEqual(stringLazy.Value,"string") - - //null - let nullLazy = Lazy.CreateFromValue(null) - Assert.AreEqual(nullLazy.Value,null) - - [] - member this.IsDelayed() = - - // int - let intLazy = Lazy.Create( fun () -> 1) - Assert.AreEqual( intLazy.IsDelayed,true) - let resultIsDelayed = intLazy.Force() - Assert.AreEqual( intLazy.IsDelayed,false) - - // string - let stringLazy = Lazy.Create( fun () -> "string") - Assert.AreEqual( stringLazy.IsDelayed,true) - let resultIsDelayed = stringLazy.Force() - Assert.AreEqual( stringLazy.IsDelayed,false) - - - //null - let nullLazy = Lazy.Create(fun () -> null) - Assert.AreEqual( nullLazy.IsDelayed,true) - let resultIsDelayed = nullLazy.Force() - Assert.AreEqual( nullLazy.IsDelayed,false) - - [] - member this.IsForced() = - - // int - let intLazy = Lazy.Create( fun () -> 1) - Assert.AreEqual( intLazy.IsForced,false) - let resultIsForced = intLazy.Force() - Assert.AreEqual( intLazy.IsForced,true) - - // string - let stringLazy = Lazy.Create( fun () -> "string") - Assert.AreEqual( stringLazy.IsForced,false) - let resultIsForced = stringLazy.Force() - Assert.AreEqual( stringLazy.IsForced,true) - - - //null - let nullLazy = Lazy.Create(fun () -> null) - Assert.AreEqual( nullLazy.IsForced,false) - let resultIsForced = nullLazy.Force() - Assert.AreEqual( nullLazy.IsForced,true) - diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs index 36992582823..6c18cceca08 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array2Module.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.Array2D module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs index 29b104bfaa6..f335036803c 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array3Module.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.Array3D module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs index ea56a5fe8f4..f38b805cf33 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Array4Module.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.Array4D module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs index 70f24a15c74..30b04d52904 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.Array module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule2.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule2.fs index 888f9eb709e..fb4f35e9ab1 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule2.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule2.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.Array module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayProperties.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayProperties.fs new file mode 100644 index 00000000000..8327346ec57 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayProperties.fs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections.ArrayProperties + +open System +open System.Collections.Generic +open NUnit.Framework +open FsCheck + +let isStable sorted = sorted |> Seq.pairwise |> Seq.forall (fun ((ia, a),(ib, b)) -> if a = b then ia < ib else true) + +let distinctByStable<'a when 'a : comparison> (xs : 'a []) = + let indexed = xs |> Seq.indexed |> Seq.toArray + let sorted = indexed |> Array.distinctBy snd + isStable sorted + +[] +let ``Seq.distinctBy is stable`` () = + Check.QuickThrowOnFailure distinctByStable + Check.QuickThrowOnFailure distinctByStable diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/CollectionModulesConsistency.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/CollectionModulesConsistency.fs new file mode 100644 index 00000000000..ee38bedebb4 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/CollectionModulesConsistency.fs @@ -0,0 +1,1239 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections.CollectionModulesConsistency + +open System +open System.Collections.Generic +open NUnit.Framework +open FsCheck +open Utils + +let append<'a when 'a : equality> (xs : list<'a>) (xs2 : list<'a>) = + let s = xs |> Seq.append xs2 + let l = xs |> List.append xs2 + let a = xs |> Seq.toArray |> Array.append (Seq.toArray xs2) + Seq.toArray s = a && List.toArray l = a + +[] +let ``append is consistent`` () = + Check.QuickThrowOnFailure append + Check.QuickThrowOnFailure append + Check.QuickThrowOnFailure append + +let averageFloat (xs : NormalFloat []) = + let xs = xs |> Array.map float + let s = run (fun () -> xs |> Seq.average) + let l = run (fun () -> xs |> List.ofArray |> List.average) + let a = run (fun () -> xs |> Array.average) + s = a && l = a + +[] +let ``average is consistent`` () = + Check.QuickThrowOnFailure averageFloat + +let averageBy (xs : float []) f = + let xs = xs |> Array.map float + let f x = (f x : NormalFloat) |> float + let s = run (fun () -> xs |> Seq.averageBy f) + let l = run (fun () -> xs |> List.ofArray |> List.averageBy f) + let a = run (fun () -> xs |> Array.averageBy f) + s = a && l = a + +[] +let ``averageBy is consistent`` () = + Check.QuickThrowOnFailure averageBy + +let contains<'a when 'a : equality> (xs : 'a []) x = + let s = xs |> Seq.contains x + let l = xs |> List.ofArray |> List.contains x + let a = xs |> Array.contains x + s = a && l = a + +[] +let ``contains is consistent`` () = + Check.QuickThrowOnFailure contains + Check.QuickThrowOnFailure contains + Check.QuickThrowOnFailure contains + +let choose<'a when 'a : equality> (xs : 'a []) f = + let s = xs |> Seq.choose f + let l = xs |> List.ofArray |> List.choose f + let a = xs |> Array.choose f + Seq.toArray s = a && List.toArray l = a + +[] +let ``choose is consistent`` () = + Check.QuickThrowOnFailure choose + Check.QuickThrowOnFailure choose + Check.QuickThrowOnFailure choose + +let chunkBySize<'a when 'a : equality> (xs : 'a []) size = + let s = run (fun () -> xs |> Seq.chunkBySize size |> Seq.map Seq.toArray |> Seq.toArray) + let l = run (fun () -> xs |> List.ofArray |> List.chunkBySize size |> Seq.map Seq.toArray |> Seq.toArray) + let a = run (fun () -> xs |> Array.chunkBySize size |> Seq.map Seq.toArray |> Seq.toArray) + s = a && l = a + +[] +let ``chunkBySize is consistent`` () = + Check.QuickThrowOnFailure chunkBySize + Check.QuickThrowOnFailure chunkBySize + Check.QuickThrowOnFailure chunkBySize + +let collect<'a> (xs : 'a []) f = + let s = xs |> Seq.collect f + let l = xs |> List.ofArray |> List.collect (fun x -> f x |> List.ofArray) + let a = xs |> Array.collect f + Seq.toArray s = a && List.toArray l = a + +[] +let ``collect is consistent`` () = + Check.QuickThrowOnFailure collect + Check.QuickThrowOnFailure collect + Check.QuickThrowOnFailure collect + +let compareWith<'a>(xs : 'a []) (xs2 : 'a []) f = + let s = (xs, xs2) ||> Seq.compareWith f + let l = (List.ofArray xs, List.ofArray xs2) ||> List.compareWith f + let a = (xs, xs2) ||> Array.compareWith f + s = a && l = a + +[] +let ``compareWith is consistent`` () = + Check.QuickThrowOnFailure compareWith + Check.QuickThrowOnFailure compareWith + Check.QuickThrowOnFailure compareWith + +let concat<'a when 'a : equality> (xs : 'a [][]) = + let s = xs |> Seq.concat + let l = xs |> List.ofArray |> List.map List.ofArray |> List.concat + let a = xs |> Array.concat + Seq.toArray s = a && List.toArray l = a + +[] +let ``concat is consistent`` () = + Check.QuickThrowOnFailure concat + Check.QuickThrowOnFailure concat + Check.QuickThrowOnFailure concat + +let countBy<'a> (xs : 'a []) f = + let s = xs |> Seq.countBy f + let l = xs |> List.ofArray |> List.countBy f + let a = xs |> Array.countBy f + Seq.toArray s = a && List.toArray l = a + +[] +let ``countBy is consistent`` () = + Check.QuickThrowOnFailure countBy + Check.QuickThrowOnFailure countBy + Check.QuickThrowOnFailure countBy + +let distinct<'a when 'a : comparison> (xs : 'a []) = + let s = xs |> Seq.distinct + let l = xs |> List.ofArray |> List.distinct + let a = xs |> Array.distinct + Seq.toArray s = a && List.toArray l = a + +[] +let ``distinct is consistent`` () = + Check.QuickThrowOnFailure distinct + Check.QuickThrowOnFailure distinct + Check.QuickThrowOnFailure distinct + +let distinctBy<'a when 'a : equality> (xs : 'a []) f = + let s = xs |> Seq.distinctBy f + let l = xs |> List.ofArray |> List.distinctBy f + let a = xs |> Array.distinctBy f + Seq.toArray s = a && List.toArray l = a + +[] +let ``distinctBy is consistent`` () = + Check.QuickThrowOnFailure distinctBy + Check.QuickThrowOnFailure distinctBy + Check.QuickThrowOnFailure distinctBy + +let exactlyOne<'a when 'a : comparison> (xs : 'a []) = + let s = runAndCheckErrorType (fun () -> xs |> Seq.exactlyOne) + let l = runAndCheckErrorType (fun () -> xs |> List.ofArray |> List.exactlyOne) + let a = runAndCheckErrorType (fun () -> xs |> Array.exactlyOne) + s = a && l = a + +[] +let ``exactlyOne is consistent`` () = + Check.QuickThrowOnFailure exactlyOne + Check.QuickThrowOnFailure exactlyOne + Check.QuickThrowOnFailure exactlyOne + +let except<'a when 'a : equality> (xs : 'a []) (itemsToExclude: 'a []) = + let s = xs |> Seq.except itemsToExclude + let l = xs |> List.ofArray |> List.except itemsToExclude + let a = xs |> Array.except itemsToExclude + Seq.toArray s = a && List.toArray l = a + +[] +let ``except is consistent`` () = + Check.QuickThrowOnFailure except + Check.QuickThrowOnFailure except + Check.QuickThrowOnFailure except + +let exists<'a when 'a : equality> (xs : 'a []) f = + let s = xs |> Seq.exists f + let l = xs |> List.ofArray |> List.exists f + let a = xs |> Array.exists f + s = a && l = a + +[] +let ``exists is consistent`` () = + Check.QuickThrowOnFailure exists + Check.QuickThrowOnFailure exists + Check.QuickThrowOnFailure exists + +let exists2<'a when 'a : equality> (xs':('a*'a) []) f = + let xs = Array.map fst xs' + let xs2 = Array.map snd xs' + let s = runAndCheckErrorType (fun () -> Seq.exists2 f xs xs2) + let l = runAndCheckErrorType (fun () -> List.exists2 f (List.ofSeq xs) (List.ofSeq xs2)) + let a = runAndCheckErrorType (fun () -> Array.exists2 f (Array.ofSeq xs) (Array.ofSeq xs2)) + s = a && l = a + +[] +let ``exists2 is consistent for collections with equal length`` () = + Check.QuickThrowOnFailure exists2 + Check.QuickThrowOnFailure exists2 + Check.QuickThrowOnFailure exists2 + +let filter<'a when 'a : equality> (xs : 'a []) predicate = + let s = xs |> Seq.filter predicate + let l = xs |> List.ofArray |> List.filter predicate + let a = xs |> Array.filter predicate + Seq.toArray s = a && List.toArray l = a + +[] +let ``filter is consistent`` () = + Check.QuickThrowOnFailure filter + Check.QuickThrowOnFailure filter + Check.QuickThrowOnFailure filter + +let find<'a when 'a : equality> (xs : 'a []) predicate = + let s = run (fun () -> xs |> Seq.find predicate) + let l = run (fun () -> xs |> List.ofArray |> List.find predicate) + let a = run (fun () -> xs |> Array.find predicate) + s = a && l = a + +[] +let ``find is consistent`` () = + Check.QuickThrowOnFailure find + Check.QuickThrowOnFailure find + Check.QuickThrowOnFailure find + +let findBack<'a when 'a : equality> (xs : 'a []) predicate = + let s = run (fun () -> xs |> Seq.findBack predicate) + let l = run (fun () -> xs |> List.ofArray |> List.findBack predicate) + let a = run (fun () -> xs |> Array.findBack predicate) + s = a && l = a + +[] +let ``findBack is consistent`` () = + Check.QuickThrowOnFailure findBack + Check.QuickThrowOnFailure findBack + Check.QuickThrowOnFailure findBack + +let findIndex<'a when 'a : equality> (xs : 'a []) predicate = + let s = run (fun () -> xs |> Seq.findIndex predicate) + let l = run (fun () -> xs |> List.ofArray |> List.findIndex predicate) + let a = run (fun () -> xs |> Array.findIndex predicate) + s = a && l = a + +[] +let ``findIndex is consistent`` () = + Check.QuickThrowOnFailure findIndex + Check.QuickThrowOnFailure findIndex + Check.QuickThrowOnFailure findIndex + +let findIndexBack<'a when 'a : equality> (xs : 'a []) predicate = + let s = run (fun () -> xs |> Seq.findIndexBack predicate) + let l = run (fun () -> xs |> List.ofArray |> List.findIndexBack predicate) + let a = run (fun () -> xs |> Array.findIndexBack predicate) + s = a && l = a + +[] +let ``findIndexBack is consistent`` () = + Check.QuickThrowOnFailure findIndexBack + Check.QuickThrowOnFailure findIndexBack + Check.QuickThrowOnFailure findIndexBack + +let fold<'a,'b when 'b : equality> (xs : 'a []) f (start:'b) = + let s = run (fun () -> xs |> Seq.fold f start) + let l = run (fun () -> xs |> List.ofArray |> List.fold f start) + let a = run (fun () -> xs |> Array.fold f start) + s = a && l = a + +[] +let ``fold is consistent`` () = + Check.QuickThrowOnFailure fold + Check.QuickThrowOnFailure fold + Check.QuickThrowOnFailure fold + Check.QuickThrowOnFailure fold + +let fold2<'a,'b,'c when 'c : equality> (xs': ('a*'b)[]) f (start:'c) = + let xs = xs' |> Array.map fst + let xs2 = xs' |> Array.map snd + let s = run (fun () -> Seq.fold2 f start xs xs2) + let l = run (fun () -> List.fold2 f start (List.ofArray xs) (List.ofArray xs2)) + let a = run (fun () -> Array.fold2 f start xs xs2) + s = a && l = a + +[] +let ``fold2 is consistent`` () = + Check.QuickThrowOnFailure fold2 + Check.QuickThrowOnFailure fold2 + Check.QuickThrowOnFailure fold2 + Check.QuickThrowOnFailure fold2 + Check.QuickThrowOnFailure fold2 + Check.QuickThrowOnFailure fold2 + +let foldBack<'a,'b when 'b : equality> (xs : 'a []) f (start:'b) = + let s = run (fun () -> Seq.foldBack f xs start) + let l = run (fun () -> List.foldBack f (xs |> List.ofArray) start) + let a = run (fun () -> Array.foldBack f xs start) + s = a && l = a + +[] +let ``foldBack is consistent`` () = + Check.QuickThrowOnFailure foldBack + Check.QuickThrowOnFailure foldBack + Check.QuickThrowOnFailure foldBack + Check.QuickThrowOnFailure foldBack + +let foldBack2<'a,'b,'c when 'c : equality> (xs': ('a*'b)[]) f (start:'c) = + let xs = xs' |> Array.map fst + let xs2 = xs' |> Array.map snd + let s = run (fun () -> Seq.foldBack2 f xs xs2 start) + let l = run (fun () -> List.foldBack2 f (List.ofArray xs) (List.ofArray xs2) start) + let a = run (fun () -> Array.foldBack2 f xs xs2 start) + s = a && l = a + +[] +let ``foldBack2 is consistent`` () = + Check.QuickThrowOnFailure foldBack2 + Check.QuickThrowOnFailure foldBack2 + Check.QuickThrowOnFailure foldBack2 + Check.QuickThrowOnFailure foldBack2 + Check.QuickThrowOnFailure foldBack2 + Check.QuickThrowOnFailure foldBack2 + +let forall<'a when 'a : equality> (xs : 'a []) f = + let s = xs |> Seq.forall f + let l = xs |> List.ofArray |> List.forall f + let a = xs |> Array.forall f + s = a && l = a + +[] +let ``forall is consistent`` () = + Check.QuickThrowOnFailure forall + Check.QuickThrowOnFailure forall + Check.QuickThrowOnFailure forall + +let forall2<'a when 'a : equality> (xs':('a*'a) []) f = + let xs = Array.map fst xs' + let xs2 = Array.map snd xs' + let s = runAndCheckErrorType (fun () -> Seq.forall2 f xs xs2) + let l = runAndCheckErrorType (fun () -> List.forall2 f (List.ofSeq xs) (List.ofSeq xs2)) + let a = runAndCheckErrorType (fun () -> Array.forall2 f (Array.ofSeq xs) (Array.ofSeq xs2)) + s = a && l = a + +[] +let ``forall2 is consistent for collections with equal length`` () = + Check.QuickThrowOnFailure forall2 + Check.QuickThrowOnFailure forall2 + Check.QuickThrowOnFailure forall2 + +let groupBy<'a when 'a : equality> (xs : 'a []) f = + let s = run (fun () -> xs |> Seq.groupBy f |> Seq.toArray |> Array.map (fun (x,xs) -> x,xs |> Seq.toArray)) + let l = run (fun () -> xs |> List.ofArray |> List.groupBy f |> Seq.toArray |> Array.map (fun (x,xs) -> x,xs |> Seq.toArray)) + let a = run (fun () -> xs |> Array.groupBy f |> Array.map (fun (x,xs) -> x,xs |> Seq.toArray)) + s = a && l = a + +[] +let ``groupBy is consistent`` () = + Check.QuickThrowOnFailure groupBy + Check.QuickThrowOnFailure groupBy + Check.QuickThrowOnFailure groupBy + +let head<'a when 'a : equality> (xs : 'a []) = + let s = runAndCheckIfAnyError (fun () -> xs |> Seq.head) + let l = runAndCheckIfAnyError (fun () -> xs |> List.ofArray |> List.head) + let a = runAndCheckIfAnyError (fun () -> xs |> Array.head) + s = a && l = a + +[] +let ``head is consistent`` () = + Check.QuickThrowOnFailure head + Check.QuickThrowOnFailure head + Check.QuickThrowOnFailure head + +let indexed<'a when 'a : equality> (xs : 'a []) = + let s = xs |> Seq.indexed + let l = xs |> List.ofArray |> List.indexed + let a = xs |> Array.indexed + Seq.toArray s = a && List.toArray l = a + +[] +let ``indexed is consistent`` () = + Check.QuickThrowOnFailure indexed + Check.QuickThrowOnFailure indexed + Check.QuickThrowOnFailure indexed + +let init<'a when 'a : equality> count f = + let s = run (fun () -> Seq.init count f |> Seq.toArray) + let l = run (fun () -> List.init count f |> Seq.toArray) + let a = run (fun () -> Array.init count f) + s = a && l = a + +[] +let ``init is consistent`` () = + Check.QuickThrowOnFailure init + Check.QuickThrowOnFailure init + Check.QuickThrowOnFailure init + +let isEmpty<'a when 'a : equality> (xs : 'a []) = + let s = xs |> Seq.isEmpty + let l = xs |> List.ofArray |> List.isEmpty + let a = xs |> Array.isEmpty + s = a && l = a + +[] +let ``isEmpty is consistent`` () = + Check.QuickThrowOnFailure isEmpty + Check.QuickThrowOnFailure isEmpty + Check.QuickThrowOnFailure isEmpty + +let item<'a when 'a : equality> (xs : 'a []) index = + let s = runAndCheckIfAnyError (fun () -> xs |> Seq.item index) + let l = runAndCheckIfAnyError (fun () -> xs |> List.ofArray |> List.item index) + let a = runAndCheckIfAnyError (fun () -> xs |> Array.item index) + s = a && l = a + +[] +let ``item is consistent`` () = + Check.QuickThrowOnFailure item + Check.QuickThrowOnFailure item + Check.QuickThrowOnFailure item + +let iter<'a when 'a : equality> (xs : 'a []) f' = + let list = System.Collections.Generic.List<'a>() + let f x = + list.Add x + f' x + + let s = xs |> Seq.iter f + let l = xs |> List.ofArray |> List.iter f + let a = xs |> Array.iter f + + let xs = Seq.toList xs + list |> Seq.toList = (xs @ xs @ xs) + +[] +let ``iter looks at every element exactly once and in order - consistenly over all collections`` () = + Check.QuickThrowOnFailure iter + Check.QuickThrowOnFailure iter + Check.QuickThrowOnFailure iter + +let iter2<'a when 'a : equality> (xs' : ('a*'a) []) f' = + let xs = xs' |> Array.map fst + let xs2 = xs' |> Array.map snd + let list = System.Collections.Generic.List<'a*'a>() + let f x y = + list.Add <| (x,y) + f' x y + + let s = Seq.iter2 f xs xs2 + let l = List.iter2 f (xs |> List.ofArray) (xs2 |> List.ofArray) + let a = Array.iter2 f xs xs2 + + let xs = Seq.toList xs' + list |> Seq.toList = (xs @ xs @ xs) + +[] +let ``iter2 looks at every element exactly once and in order - consistenly over all collections when size is equal`` () = + Check.QuickThrowOnFailure iter2 + Check.QuickThrowOnFailure iter2 + Check.QuickThrowOnFailure iter2 + +let iteri<'a when 'a : equality> (xs : 'a []) f' = + let list = System.Collections.Generic.List<'a>() + let indices = System.Collections.Generic.List() + let f i x = + list.Add x + indices.Add i + f' i x + + let s = xs |> Seq.iteri f + let l = xs |> List.ofArray |> List.iteri f + let a = xs |> Array.iteri f + + let xs = Seq.toList xs + list |> Seq.toList = (xs @ xs @ xs) && + indices |> Seq.toList = ([0..xs.Length-1] @ [0..xs.Length-1] @ [0..xs.Length-1]) + +[] +let ``iteri looks at every element exactly once and in order - consistenly over all collections`` () = + Check.QuickThrowOnFailure iteri + Check.QuickThrowOnFailure iteri + Check.QuickThrowOnFailure iteri + +let iteri2<'a when 'a : equality> (xs' : ('a*'a) []) f' = + let xs = xs' |> Array.map fst + let xs2 = xs' |> Array.map snd + let list = System.Collections.Generic.List<'a*'a>() + let indices = System.Collections.Generic.List() + let f i x y = + list.Add <| (x,y) + indices.Add i + f' x y + + let s = Seq.iteri2 f xs xs2 + let l = List.iteri2 f (xs |> List.ofArray) (xs2 |> List.ofArray) + let a = Array.iteri2 f xs xs2 + + let xs = Seq.toList xs' + list |> Seq.toList = (xs @ xs @ xs) && + indices |> Seq.toList = ([0..xs.Length-1] @ [0..xs.Length-1] @ [0..xs.Length-1]) + +[] +let ``iteri2 looks at every element exactly once and in order - consistenly over all collections when size is equal`` () = + Check.QuickThrowOnFailure iteri2 + Check.QuickThrowOnFailure iteri2 + Check.QuickThrowOnFailure iteri2 + +let last<'a when 'a : equality> (xs : 'a []) = + let s = runAndCheckIfAnyError (fun () -> xs |> Seq.last) + let l = runAndCheckIfAnyError (fun () -> xs |> List.ofArray |> List.last) + let a = runAndCheckIfAnyError (fun () -> xs |> Array.last) + s = a && l = a + +[] +let ``last is consistent`` () = + Check.QuickThrowOnFailure last + Check.QuickThrowOnFailure last + Check.QuickThrowOnFailure last + +let length<'a when 'a : equality> (xs : 'a []) = + let s = xs |> Seq.length + let l = xs |> List.ofArray |> List.length + let a = xs |> Array.length + s = a && l = a + +[] +let ``length is consistent`` () = + Check.QuickThrowOnFailure length + Check.QuickThrowOnFailure length + Check.QuickThrowOnFailure length + +let map<'a when 'a : equality> (xs : 'a []) f = + let s = xs |> Seq.map f + let l = xs |> List.ofArray |> List.map f + let a = xs |> Array.map f + Seq.toArray s = a && List.toArray l = a + +[] +let ``map is consistent`` () = + Check.QuickThrowOnFailure map + Check.QuickThrowOnFailure map + Check.QuickThrowOnFailure map + +let map2<'a when 'a : equality> (xs' : ('a*'a) []) f' = + let xs = xs' |> Array.map fst + let xs2 = xs' |> Array.map snd + let list = System.Collections.Generic.List<'a*'a>() + let f x y = + list.Add <| (x,y) + f' x y + + let s = Seq.map2 f xs xs2 + let l = List.map2 f (xs |> List.ofArray) (xs2 |> List.ofArray) + let a = Array.map2 f xs xs2 + + let xs = Seq.toList xs' + Seq.toArray s = a && List.toArray l = a && + list |> Seq.toList = (xs @ xs @ xs) + +[] +let ``map2 looks at every element exactly once and in order - consistenly over all collections when size is equal`` () = + Check.QuickThrowOnFailure map2 + Check.QuickThrowOnFailure map2 + Check.QuickThrowOnFailure map2 + +let map3<'a when 'a : equality> (xs' : ('a*'a*'a) []) f' = + let xs = xs' |> Array.map (fun (x,y,z) -> x) + let xs2 = xs' |> Array.map (fun (x,y,z) -> y) + let xs3 = xs' |> Array.map (fun (x,y,z) -> z) + let list = System.Collections.Generic.List<'a*'a*'a>() + let f x y z = + list.Add <| (x,y,z) + f' x y z + + let s = Seq.map3 f xs xs2 xs3 + let l = List.map3 f (xs |> List.ofArray) (xs2 |> List.ofArray) (xs3 |> List.ofArray) + let a = Array.map3 f xs xs2 xs3 + + let xs = Seq.toList xs' + Seq.toArray s = a && List.toArray l = a && + list |> Seq.toList = (xs @ xs @ xs) + +[] +let ``map3 looks at every element exactly once and in order - consistenly over all collections when size is equal`` () = + Check.QuickThrowOnFailure map3 + Check.QuickThrowOnFailure map3 + Check.QuickThrowOnFailure map3 + +let mapFold<'a when 'a : equality> (xs : 'a []) f start = + let s,sr = xs |> Seq.mapFold f start + let l,lr = xs |> List.ofArray |> List.mapFold f start + let a,ar = xs |> Array.mapFold f start + Seq.toArray s = a && List.toArray l = a && + sr = lr && sr = ar + +[] +let ``mapFold is consistent`` () = + Check.QuickThrowOnFailure mapFold + Check.QuickThrowOnFailure mapFold + Check.QuickThrowOnFailure mapFold + +let mapFoldBack<'a when 'a : equality> (xs : 'a []) f start = + let s,sr = Seq.mapFoldBack f xs start + let l,lr = List.mapFoldBack f (xs |> List.ofArray) start + let a,ar = Array.mapFoldBack f xs start + Seq.toArray s = a && List.toArray l = a && + sr = lr && sr = ar + +[] +let ``mapFold2 is consistent`` () = + Check.QuickThrowOnFailure mapFoldBack + Check.QuickThrowOnFailure mapFoldBack + Check.QuickThrowOnFailure mapFoldBack + +let mapi<'a when 'a : equality> (xs : 'a []) f = + let s = xs |> Seq.mapi f + let l = xs |> List.ofArray |> List.mapi f + let a = xs |> Array.mapi f + Seq.toArray s = a && List.toArray l = a + +[] +let ``mapi is consistent`` () = + Check.QuickThrowOnFailure mapi + Check.QuickThrowOnFailure mapi + Check.QuickThrowOnFailure mapi + +let mapi2<'a when 'a : equality> (xs' : ('a*'a) []) f' = + let xs = xs' |> Array.map fst + let xs2 = xs' |> Array.map snd + let list = System.Collections.Generic.List<'a*'a>() + let indices = System.Collections.Generic.List() + let f i x y = + indices.Add i + list.Add <| (x,y) + f' x y + + let s = Seq.mapi2 f xs xs2 + let l = List.mapi2 f (xs |> List.ofArray) (xs2 |> List.ofArray) + let a = Array.mapi2 f xs xs2 + + let xs = Seq.toList xs' + Seq.toArray s = a && List.toArray l = a && + list |> Seq.toList = (xs @ xs @ xs) && + (Seq.toList indices = [0..xs.Length-1] @ [0..xs.Length-1] @ [0..xs.Length-1]) + +[] +let ``mapi2 looks at every element exactly once and in order - consistenly over all collections when size is equal`` () = + Check.QuickThrowOnFailure mapi2 + Check.QuickThrowOnFailure mapi2 + Check.QuickThrowOnFailure mapi2 + +let max<'a when 'a : comparison> (xs : 'a []) = + let s = runAndCheckIfAnyError (fun () -> xs |> Seq.max) + let l = runAndCheckIfAnyError (fun () -> xs |> List.ofArray |> List.max) + let a = runAndCheckIfAnyError (fun () -> xs |> Array.max) + s = a && l = a + +[] +let ``max is consistent`` () = + Check.QuickThrowOnFailure max + Check.QuickThrowOnFailure max + Check.QuickThrowOnFailure max + +let maxBy<'a when 'a : comparison> (xs : 'a []) f = + let s = runAndCheckIfAnyError (fun () -> xs |> Seq.maxBy f) + let l = runAndCheckIfAnyError (fun () -> xs |> List.ofArray |> List.maxBy f) + let a = runAndCheckIfAnyError (fun () -> xs |> Array.maxBy f) + s = a && l = a + +[] +let ``maxBy is consistent`` () = + Check.QuickThrowOnFailure maxBy + Check.QuickThrowOnFailure maxBy + Check.QuickThrowOnFailure maxBy + +let min<'a when 'a : comparison> (xs : 'a []) = + let s = runAndCheckIfAnyError (fun () -> xs |> Seq.min) + let l = runAndCheckIfAnyError (fun () -> xs |> List.ofArray |> List.min) + let a = runAndCheckIfAnyError (fun () -> xs |> Array.min) + s = a && l = a + +[] +let ``min is consistent`` () = + Check.QuickThrowOnFailure min + Check.QuickThrowOnFailure min + Check.QuickThrowOnFailure min + +let minBy<'a when 'a : comparison> (xs : 'a []) f = + let s = runAndCheckIfAnyError (fun () -> xs |> Seq.minBy f) + let l = runAndCheckIfAnyError (fun () -> xs |> List.ofArray |> List.minBy f) + let a = runAndCheckIfAnyError (fun () -> xs |> Array.minBy f) + s = a && l = a + +[] +let ``minBy is consistent`` () = + Check.QuickThrowOnFailure minBy + Check.QuickThrowOnFailure minBy + Check.QuickThrowOnFailure minBy + +let pairwise<'a when 'a : comparison> (xs : 'a []) = + let s = run (fun () -> xs |> Seq.pairwise |> Seq.toArray) + let l = run (fun () -> xs |> List.ofArray |> List.pairwise |> List.toArray) + let a = run (fun () -> xs |> Array.pairwise) + s = a && l = a + +[] +let ``pairwise is consistent`` () = + Check.QuickThrowOnFailure pairwise + Check.QuickThrowOnFailure pairwise + Check.QuickThrowOnFailure pairwise + +let partition<'a when 'a : comparison> (xs : 'a []) f = + // no seq version + let l1,l2 = xs |> List.ofArray |> List.partition f + let a1,a2 = xs |> Array.partition f + List.toArray l1 = a1 && + List.toArray l2 = a2 + +[] +let ``partition is consistent`` () = + Check.QuickThrowOnFailure partition + Check.QuickThrowOnFailure partition + Check.QuickThrowOnFailure partition + +let permute<'a when 'a : comparison> (xs' : list) = + let xs = List.map snd xs' + + let permutations = + List.map fst xs' + |> List.indexed + |> List.sortBy snd + |> List.map fst + |> List.indexed + |> dict + + let permutation x = permutations.[x] + + let s = run (fun () -> xs |> Seq.permute permutation |> Seq.toArray) + let l = run (fun () -> xs |> List.permute permutation |> List.toArray) + let a = run (fun () -> xs |> Array.ofSeq |> Array.permute permutation) + s = a && l = a + +[] +let ``permute is consistent`` () = + Check.QuickThrowOnFailure permute + Check.QuickThrowOnFailure permute + Check.QuickThrowOnFailure permute + +let pick<'a when 'a : comparison> (xs : 'a []) f = + let s = run (fun () -> xs |> Seq.pick f) + let l = run (fun () -> xs |> List.ofArray |> List.pick f) + let a = run (fun () -> xs |> Array.pick f) + s = a && l = a + +[] +let ``pick is consistent`` () = + Check.QuickThrowOnFailure pick + Check.QuickThrowOnFailure pick + Check.QuickThrowOnFailure pick + +let reduce<'a when 'a : equality> (xs : 'a []) f = + let s = runAndCheckErrorType (fun () -> xs |> Seq.reduce f) + let l = runAndCheckErrorType (fun () -> xs |> List.ofArray |> List.reduce f) + let a = runAndCheckErrorType (fun () -> xs |> Array.reduce f) + s = a && l = a + +[] +let ``reduce is consistent`` () = + Check.QuickThrowOnFailure reduce + Check.QuickThrowOnFailure reduce + Check.QuickThrowOnFailure reduce + +let reduceBack<'a when 'a : equality> (xs : 'a []) f = + let s = runAndCheckErrorType (fun () -> xs |> Seq.reduceBack f) + let l = runAndCheckErrorType (fun () -> xs |> List.ofArray |> List.reduceBack f) + let a = runAndCheckErrorType (fun () -> xs |> Array.reduceBack f) + s = a && l = a + +[] +let ``reduceBack is consistent`` () = + Check.QuickThrowOnFailure reduceBack + Check.QuickThrowOnFailure reduceBack + Check.QuickThrowOnFailure reduceBack + +let replicate<'a when 'a : equality> x count = + let s = runAndCheckIfAnyError (fun () -> Seq.replicate count x |> Seq.toArray) + let l = runAndCheckIfAnyError (fun () -> List.replicate count x |> List.toArray) + let a = runAndCheckIfAnyError (fun () -> Array.replicate count x) + s = a && l = a + +[] +let ``replicate is consistent`` () = + Check.QuickThrowOnFailure replicate + Check.QuickThrowOnFailure replicate + Check.QuickThrowOnFailure replicate + +let rev<'a when 'a : equality> (xs : 'a []) = + let s = Seq.rev xs |> Seq.toArray + let l = xs |> List.ofArray |> List.rev |> List.toArray + let a = Array.rev xs + s = a && l = a + +[] +let ``rev is consistent`` () = + Check.QuickThrowOnFailure rev + Check.QuickThrowOnFailure rev + Check.QuickThrowOnFailure rev + +let scan<'a,'b when 'b : equality> (xs : 'a []) f (start:'b) = + let s = run (fun () -> xs |> Seq.scan f start |> Seq.toArray) + let l = run (fun () -> xs |> List.ofArray |> List.scan f start |> Seq.toArray) + let a = run (fun () -> xs |> Array.scan f start) + s = a && l = a + +[] +let ``scan is consistent`` () = + Check.QuickThrowOnFailure scan + Check.QuickThrowOnFailure scan + Check.QuickThrowOnFailure scan + Check.QuickThrowOnFailure scan + +let scanBack<'a,'b when 'b : equality> (xs : 'a []) f (start:'b) = + let s = run (fun () -> Seq.scanBack f xs start |> Seq.toArray) + let l = run (fun () -> List.scanBack f (xs |> List.ofArray) start |> Seq.toArray) + let a = run (fun () -> Array.scanBack f xs start) + s = a && l = a + +[] +let ``scanBack is consistent`` () = + Check.QuickThrowOnFailure scanBack + Check.QuickThrowOnFailure scanBack + Check.QuickThrowOnFailure scanBack + Check.QuickThrowOnFailure scanBack + +let singleton<'a when 'a : equality> (x : 'a) = + let s = Seq.singleton x |> Seq.toArray + let l = List.singleton x |> List.toArray + let a = Array.singleton x + s = a && l = a + +[] +let ``singleton is consistent`` () = + Check.QuickThrowOnFailure singleton + Check.QuickThrowOnFailure singleton + Check.QuickThrowOnFailure singleton + +let skip<'a when 'a : equality> (xs : 'a []) count = + let s = runAndCheckIfAnyError (fun () -> Seq.skip count xs |> Seq.toArray) + let l = runAndCheckIfAnyError (fun () -> List.skip count (Seq.toList xs) |> List.toArray) + let a = runAndCheckIfAnyError (fun () -> Array.skip count xs) + s = a && l = a + +[] +let ``skip is consistent`` () = + Check.QuickThrowOnFailure skip + Check.QuickThrowOnFailure skip + Check.QuickThrowOnFailure skip + +let skipWhile<'a when 'a : equality> (xs : 'a []) f = + let s = runAndCheckIfAnyError (fun () -> Seq.skipWhile f xs |> Seq.toArray) + let l = runAndCheckIfAnyError (fun () -> List.skipWhile f (Seq.toList xs) |> List.toArray) + let a = runAndCheckIfAnyError (fun () -> Array.skipWhile f xs) + s = a && l = a + +[] +let ``skipWhile is consistent`` () = + Check.QuickThrowOnFailure skipWhile + Check.QuickThrowOnFailure skipWhile + Check.QuickThrowOnFailure skipWhile + +let sort<'a when 'a : comparison> (xs : 'a []) = + let s = xs |> Seq.sort + let l = xs |> List.ofArray |> List.sort + let a = xs |> Array.sort + Seq.toArray s = a && List.toArray l = a + +[] +let ``sort is consistent`` () = + Check.QuickThrowOnFailure sort + Check.QuickThrowOnFailure sort + Check.QuickThrowOnFailure sort + +let sortBy<'a,'b when 'a : comparison and 'b : comparison> (xs : 'a []) (f:'a -> 'b) = + let s = xs |> Seq.sortBy f + let l = xs |> List.ofArray |> List.sortBy f + let a = xs |> Array.sortBy f + + isSorted (Seq.map f s) && isSorted (Seq.map f l) && isSorted (Seq.map f a) && + haveSameElements s xs && haveSameElements l xs && haveSameElements a xs + +[] +let ``sortBy actually sorts (but is inconsistent in regards of stability)`` () = + Check.QuickThrowOnFailure sortBy + Check.QuickThrowOnFailure sortBy + Check.QuickThrowOnFailure sortBy + Check.QuickThrowOnFailure sortBy + Check.QuickThrowOnFailure sortBy + +let sortWith<'a,'b when 'a : comparison and 'b : comparison> (xs : 'a []) (f:'a -> 'a -> int) = + let dict = System.Collections.Generic.Dictionary<_,_>() + let f x y = + if x = y then 0 else + if x = Unchecked.defaultof<_> && y <> Unchecked.defaultof<_> then -1 else + if y = Unchecked.defaultof<_> && x <> Unchecked.defaultof<_> then 1 else + let r = f x y |> sign // only use one side + if x < y then r else r * -1 + + let s = xs |> Seq.sortWith f + let l = xs |> List.ofArray |> List.sortWith f + let a = xs |> Array.sortWith f + let isSorted sorted = sorted |> Seq.pairwise |> Seq.forall (fun (a,b) -> f a b <= 0 || a = b) + + isSorted s && isSorted l && isSorted a && + haveSameElements s xs && haveSameElements l xs && haveSameElements a xs + +[] +let ``sortWith actually sorts (but is inconsistent in regards of stability)`` () = + Check.QuickThrowOnFailure sortWith + Check.QuickThrowOnFailure sortWith + Check.QuickThrowOnFailure sortWith + Check.QuickThrowOnFailure sortWith + Check.QuickThrowOnFailure sortWith + +let sortDescending<'a when 'a : comparison> (xs : 'a []) = + let s = xs |> Seq.sortDescending + let l = xs |> List.ofArray |> List.sortDescending + let a = xs |> Array.sortDescending + Seq.toArray s = a && List.toArray l = a + +[] +let ``sortDescending is consistent`` () = + Check.QuickThrowOnFailure sortDescending + Check.QuickThrowOnFailure sortDescending + Check.QuickThrowOnFailure sortDescending + +let sortByDescending<'a,'b when 'a : comparison and 'b : comparison> (xs : 'a []) (f:'a -> 'b) = + let s = xs |> Seq.sortByDescending f + let l = xs |> List.ofArray |> List.sortByDescending f + let a = xs |> Array.sortByDescending f + + isSorted (Seq.map f s |> Seq.rev) && isSorted (Seq.map f l |> Seq.rev) && isSorted (Seq.map f a |> Seq.rev) && + haveSameElements s xs && haveSameElements l xs && haveSameElements a xs + +[] +let ``sortByDescending actually sorts (but is inconsistent in regards of stability)`` () = + Check.QuickThrowOnFailure sortByDescending + Check.QuickThrowOnFailure sortByDescending + Check.QuickThrowOnFailure sortByDescending + Check.QuickThrowOnFailure sortByDescending + Check.QuickThrowOnFailure sortByDescending + +let sum (xs : int []) = + let s = run (fun () -> xs |> Seq.sum) + let l = run (fun () -> xs |> Array.toList |> List.sum) + let a = run (fun () -> xs |> Array.sum) + s = a && l = a + +[] +let ``sum is consistent`` () = + Check.QuickThrowOnFailure sum + +let sumBy<'a> (xs : 'a []) (f:'a -> int) = + let s = run (fun () -> xs |> Seq.sumBy f) + let l = run (fun () -> xs |> Array.toList |> List.sumBy f) + let a = run (fun () -> xs |> Array.sumBy f) + s = a && l = a + +[] +let ``sumBy is consistent`` () = + Check.QuickThrowOnFailure sumBy + Check.QuickThrowOnFailure sumBy + Check.QuickThrowOnFailure sumBy + +let splitAt<'a when 'a : equality> (xs : 'a []) index = + // no seq version + let l = run (fun () -> xs |> List.ofArray |> List.splitAt index |> fun (a,b) -> List.toArray a,List.toArray b) + let a = run (fun () -> xs |> Array.splitAt index) + l = a + +[] +let ``splitAt is consistent`` () = + Check.QuickThrowOnFailure splitAt + Check.QuickThrowOnFailure splitAt + Check.QuickThrowOnFailure splitAt + +let splitInto<'a when 'a : equality> (xs : 'a []) count = + let s = run (fun () -> xs |> Seq.splitInto count |> Seq.map Seq.toArray |> Seq.toArray) + let l = run (fun () -> xs |> List.ofArray |> List.splitInto count |> Seq.map Seq.toArray |> Seq.toArray) + let a = run (fun () -> xs |> Array.splitInto count |> Seq.map Seq.toArray |> Seq.toArray) + s = a && l = a + +[] +let ``splitInto is consistent`` () = + Check.QuickThrowOnFailure splitInto + Check.QuickThrowOnFailure splitInto + Check.QuickThrowOnFailure splitInto + +let tail<'a when 'a : equality> (xs : 'a []) = + let s = runAndCheckIfAnyError (fun () -> xs |> Seq.tail |> Seq.toArray) + let l = runAndCheckIfAnyError (fun () -> xs |> List.ofArray |> List.tail |> Seq.toArray) + let a = runAndCheckIfAnyError (fun () -> xs |> Array.tail) + s = a && l = a + +[] +let ``tail is consistent`` () = + Check.QuickThrowOnFailure tail + Check.QuickThrowOnFailure tail + Check.QuickThrowOnFailure tail + +let take<'a when 'a : equality> (xs : 'a []) count = + let s = runAndCheckIfAnyError (fun () -> Seq.take count xs |> Seq.toArray) + let l = runAndCheckIfAnyError (fun () -> List.take count (Seq.toList xs) |> List.toArray) + let a = runAndCheckIfAnyError (fun () -> Array.take count xs) + s = a && l = a + +[] +let ``take is consistent`` () = + Check.QuickThrowOnFailure take + Check.QuickThrowOnFailure take + Check.QuickThrowOnFailure take + +let takeWhile<'a when 'a : equality> (xs : 'a []) f = + let s = runAndCheckIfAnyError (fun () -> Seq.takeWhile f xs |> Seq.toArray) + let l = runAndCheckIfAnyError (fun () -> List.takeWhile f (Seq.toList xs) |> List.toArray) + let a = runAndCheckIfAnyError (fun () -> Array.takeWhile f xs) + s = a && l = a + +[] +let ``takeWhile is consistent`` () = + Check.QuickThrowOnFailure takeWhile + Check.QuickThrowOnFailure takeWhile + Check.QuickThrowOnFailure takeWhile + +let truncate<'a when 'a : equality> (xs : 'a []) count = + let s = runAndCheckIfAnyError (fun () -> Seq.truncate count xs |> Seq.toArray) + let l = runAndCheckIfAnyError (fun () -> List.truncate count (Seq.toList xs) |> List.toArray) + let a = runAndCheckIfAnyError (fun () -> Array.truncate count xs) + s = a && l = a + +[] +let ``truncate is consistent`` () = + Check.QuickThrowOnFailure truncate + Check.QuickThrowOnFailure truncate + Check.QuickThrowOnFailure truncate + +let tryFind<'a when 'a : equality> (xs : 'a []) predicate = + let s = xs |> Seq.tryFind predicate + let l = xs |> List.ofArray |> List.tryFind predicate + let a = xs |> Array.tryFind predicate + s = a && l = a + +[] +let ``tryFind is consistent`` () = + Check.QuickThrowOnFailure tryFind + Check.QuickThrowOnFailure tryFind + Check.QuickThrowOnFailure tryFind + +let tryFindBack<'a when 'a : equality> (xs : 'a []) predicate = + let s = xs |> Seq.tryFindBack predicate + let l = xs |> List.ofArray |> List.tryFindBack predicate + let a = xs |> Array.tryFindBack predicate + s = a && l = a + +[] +let ``tryFindBack is consistent`` () = + Check.QuickThrowOnFailure tryFindBack + Check.QuickThrowOnFailure tryFindBack + Check.QuickThrowOnFailure tryFindBack + +let tryFindIndex<'a when 'a : equality> (xs : 'a []) predicate = + let s = xs |> Seq.tryFindIndex predicate + let l = xs |> List.ofArray |> List.tryFindIndex predicate + let a = xs |> Array.tryFindIndex predicate + s = a && l = a + +[] +let ``tryFindIndex is consistent`` () = + Check.QuickThrowOnFailure tryFindIndex + Check.QuickThrowOnFailure tryFindIndex + Check.QuickThrowOnFailure tryFindIndex + +let tryFindIndexBack<'a when 'a : equality> (xs : 'a []) predicate = + let s = xs |> Seq.tryFindIndexBack predicate + let l = xs |> List.ofArray |> List.tryFindIndexBack predicate + let a = xs |> Array.tryFindIndexBack predicate + s = a && l = a + +[] +let ``tryFindIndexBack is consistent`` () = + Check.QuickThrowOnFailure tryFindIndexBack + Check.QuickThrowOnFailure tryFindIndexBack + Check.QuickThrowOnFailure tryFindIndexBack + +let tryHead<'a when 'a : equality> (xs : 'a []) = + let s = xs |> Seq.tryHead + let l = xs |> List.ofArray |> List.tryHead + let a = xs |> Array.tryHead + s = a && l = a + +[] +let ``tryHead is consistent`` () = + Check.QuickThrowOnFailure tryHead + Check.QuickThrowOnFailure tryHead + Check.QuickThrowOnFailure tryHead + +let tryItem<'a when 'a : equality> (xs : 'a []) index = + let s = xs |> Seq.tryItem index + let l = xs |> List.ofArray |> List.tryItem index + let a = xs |> Array.tryItem index + s = a && l = a + +[] +let ``tryItem is consistent`` () = + Check.QuickThrowOnFailure tryItem + Check.QuickThrowOnFailure tryItem + Check.QuickThrowOnFailure tryItem + +let tryLast<'a when 'a : equality> (xs : 'a []) = + let s = xs |> Seq.tryLast + let l = xs |> List.ofArray |> List.tryLast + let a = xs |> Array.tryLast + s = a && l = a + +[] +let ``tryLast is consistent`` () = + Check.QuickThrowOnFailure tryLast + Check.QuickThrowOnFailure tryLast + Check.QuickThrowOnFailure tryLast + +let tryPick<'a when 'a : comparison> (xs : 'a []) f = + let s = xs |> Seq.tryPick f + let l = xs |> List.ofArray |> List.tryPick f + let a = xs |> Array.tryPick f + s = a && l = a + +[] +let ``tryPick is consistent`` () = + Check.QuickThrowOnFailure tryPick + Check.QuickThrowOnFailure tryPick + Check.QuickThrowOnFailure tryPick + +let unfold<'a,'b when 'b : equality> f (start:'a) = + let f() = + let c = ref 0 + fun x -> + if !c > 100 then None else // prevent infinity seqs + c := !c + 1 + f x + + + let s : 'b [] = Seq.unfold (f()) start |> Seq.toArray + let l = List.unfold (f()) start |> List.toArray + let a = Array.unfold (f()) start + s = a && l = a + + +[] +let ``unfold is consistent`` () = + Check.QuickThrowOnFailure unfold + Check.QuickThrowOnFailure unfold + Check.QuickThrowOnFailure unfold + Check.QuickThrowOnFailure unfold + +let unzip<'a when 'a : equality> (xs:('a*'a) []) = + // no seq version + let l = runAndCheckErrorType (fun () -> List.unzip (List.ofSeq xs) |> fun (a,b) -> List.toArray a, List.toArray b) + let a = runAndCheckErrorType (fun () -> Array.unzip xs) + l = a + +[] +let ``unzip is consistent`` () = + Check.QuickThrowOnFailure unzip + Check.QuickThrowOnFailure unzip + Check.QuickThrowOnFailure unzip + +let unzip3<'a when 'a : equality> (xs:('a*'a*'a) []) = + // no seq version + let l = runAndCheckErrorType (fun () -> List.unzip3 (List.ofSeq xs) |> fun (a,b,c) -> List.toArray a, List.toArray b, List.toArray c) + let a = runAndCheckErrorType (fun () -> Array.unzip3 xs) + l = a + +[] +let ``unzip3 is consistent`` () = + Check.QuickThrowOnFailure unzip3 + Check.QuickThrowOnFailure unzip3 + Check.QuickThrowOnFailure unzip3 + +let where<'a when 'a : equality> (xs : 'a []) predicate = + let s = xs |> Seq.where predicate + let l = xs |> List.ofArray |> List.where predicate + let a = xs |> Array.where predicate + Seq.toArray s = a && List.toArray l = a + +[] +let ``where is consistent`` () = + Check.QuickThrowOnFailure where + Check.QuickThrowOnFailure where + Check.QuickThrowOnFailure where + +let windowed<'a when 'a : equality> (xs : 'a []) windowSize = + let s = run (fun () -> xs |> Seq.windowed windowSize |> Seq.toArray |> Array.map Seq.toArray) + let l = run (fun () -> xs |> List.ofArray |> List.windowed windowSize |> List.toArray |> Array.map Seq.toArray) + let a = run (fun () -> xs |> Array.windowed windowSize) + s = a && l = a + +[] +let ``windowed is consistent`` () = + Check.QuickThrowOnFailure windowed + Check.QuickThrowOnFailure windowed + Check.QuickThrowOnFailure windowed + +let zip<'a when 'a : equality> (xs':('a*'a) []) = + let xs = Array.map fst xs' + let xs2 = Array.map snd xs' + let s = runAndCheckErrorType (fun () -> Seq.zip xs xs2 |> Seq.toArray) + let l = runAndCheckErrorType (fun () -> List.zip (List.ofSeq xs) (List.ofSeq xs2) |> List.toArray) + let a = runAndCheckErrorType (fun () -> Array.zip (Array.ofSeq xs) (Array.ofSeq xs2)) + s = a && l = a + +[] +let ``zip is consistent for collections with equal length`` () = + Check.QuickThrowOnFailure zip + Check.QuickThrowOnFailure zip + Check.QuickThrowOnFailure zip + +let zip3<'a when 'a : equality> (xs':('a*'a*'a) []) = + let xs = Array.map (fun (x,y,z) -> x) xs' + let xs2 = Array.map (fun (x,y,z) -> y) xs' + let xs3 = Array.map (fun (x,y,z) -> z) xs' + let s = runAndCheckErrorType (fun () -> Seq.zip3 xs xs2 xs3 |> Seq.toArray) + let l = runAndCheckErrorType (fun () -> List.zip3 (List.ofSeq xs) (List.ofSeq xs2) (List.ofSeq xs3) |> List.toArray) + let a = runAndCheckErrorType (fun () -> Array.zip3 (Array.ofSeq xs) (Array.ofSeq xs2) (Array.ofSeq xs3)) + s = a && l = a + +[] +let ``zip3 is consistent for collections with equal length`` () = + Check.QuickThrowOnFailure zip3 + Check.QuickThrowOnFailure zip3 + Check.QuickThrowOnFailure zip3 diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ComparisonIdentityModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ComparisonIdentityModule.fs index 156056b2ef1..bab3b1eac21 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ComparisonIdentityModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ComparisonIdentityModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.ComparisonIdentity module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/HashIdentityModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/HashIdentityModule.fs index e85511ae069..d4e35649f9c 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/HashIdentityModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/HashIdentityModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.HashIdentity module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs index 6722bf2c057..5a65d9eeac3 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.List module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs index 33a24f9059a..a8e59e79590 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.List module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListProperties.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListProperties.fs new file mode 100644 index 00000000000..24a54a819c7 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListProperties.fs @@ -0,0 +1,825 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections.ListProperties + +open System +open System.Collections.Generic +open NUnit.Framework +open FsCheck +open Utils + +let chunkBySize_and_collect<'a when 'a : equality> (xs : 'a list) size = + size > 0 ==> (lazy + let a = List.chunkBySize size xs + let b = List.collect id a + b = xs) + +[] +let ``chunkBySize is reversable with collect`` () = + Check.QuickThrowOnFailure chunkBySize_and_collect + Check.QuickThrowOnFailure chunkBySize_and_collect + Check.QuickThrowOnFailure chunkBySize_and_collect + +let windowed_and_length<'a when 'a : equality> (xs : 'a list) size = + size > 0 ==> (lazy + List.windowed size xs + |> List.forall (fun x -> x.Length = size)) + + +[] +let ``windowed returns list with correct length`` () = + Check.QuickThrowOnFailure windowed_and_length + Check.QuickThrowOnFailure windowed_and_length + Check.QuickThrowOnFailure windowed_and_length + +let windowed_and_order<'a when 'a : equality> (listsize:PositiveInt) size = + size > 1 ==> (lazy + let xs = [1..(int listsize)] + + List.windowed size xs + |> List.forall (fun w -> w = List.sort w)) + +[] +let ``windowed returns succeeding elements`` () = + Check.QuickThrowOnFailure windowed_and_order + Check.QuickThrowOnFailure windowed_and_order + Check.QuickThrowOnFailure windowed_and_order + +let partition_and_sort<'a when 'a : comparison> (xs : 'a list) = + let rec qsort xs = + match xs with + | [] -> [] + | (x:'a)::xs -> + let smaller,larger = List.partition (fun y -> y <= x) xs + qsort smaller @ [x] @ qsort larger + + qsort xs = (List.sort xs) + +[] +let ``partition can be used to sort`` () = + Check.QuickThrowOnFailure partition_and_sort + Check.QuickThrowOnFailure partition_and_sort + Check.QuickThrowOnFailure partition_and_sort + +let windowed_and_pairwise<'a when 'a : equality> (xs : 'a list) = + let a = List.windowed 2 xs + let b = List.pairwise xs |> List.map (fun (x,y) -> [x;y]) + + a = b + +[] +let ``windowed 2 is like pairwise`` () = + Check.QuickThrowOnFailure windowed_and_pairwise + Check.QuickThrowOnFailure windowed_and_pairwise + Check.QuickThrowOnFailure windowed_and_pairwise + +[] +let ``chunkBySize produces chunks exactly of size `chunkSize`, except the last one, which can be smaller, but not empty``() = + let prop (a: _ list) (PositiveInt chunkSize) = + match a |> List.chunkBySize chunkSize |> Seq.toList with + | [] -> a = [] + | h :: [] -> h.Length <= chunkSize + | chunks -> + let lastChunk = chunks |> List.last + let headChunks = chunks |> Seq.take (chunks.Length - 1) |> Seq.toList + + headChunks |> List.forall (List.length >> (=) chunkSize) + && + lastChunk <> [] + && + lastChunk.Length <= chunkSize + + Check.QuickThrowOnFailure prop + +let splitInto_and_collect<'a when 'a : equality> (xs : 'a list) count = + count > 0 ==> (lazy + let a = List.splitInto count xs + let b = List.collect id a + b = xs) + +[] +let ``splitInto is reversable with collect`` () = + Check.QuickThrowOnFailure splitInto_and_collect + Check.QuickThrowOnFailure splitInto_and_collect + Check.QuickThrowOnFailure splitInto_and_collect + +let splitAt_and_append<'a when 'a : equality> (xs : 'a list) index = + (index >= 0 && index <= xs.Length) ==> (lazy + let a1,a2 = List.splitAt index xs + let b = List.append a1 a2 + b = xs && a1.Length = index) + +[] +let ``splitAt is reversable with append`` () = + Check.QuickThrowOnFailure splitAt_and_append + Check.QuickThrowOnFailure splitAt_and_append + Check.QuickThrowOnFailure splitAt_and_append + +let indexed_and_zip<'a when 'a : equality> (xs : 'a list) = + let a = [0..xs.Length-1] + let b = List.indexed xs + b = List.zip a xs + +[] +let ``indexed is adding correct indexes`` () = + Check.QuickThrowOnFailure indexed_and_zip + Check.QuickThrowOnFailure indexed_and_zip + Check.QuickThrowOnFailure indexed_and_zip + +let zip_and_zip3<'a when 'a : equality> (xs' : ('a*'a*'a) list) = + let xs = List.map (fun (x,y,z) -> x) xs' + let xs2 = List.map (fun (x,y,z) -> y) xs' + let xs3 = List.map (fun (x,y,z) -> z) xs' + + let a = List.zip3 xs xs2 xs3 + let b = List.zip (List.zip xs xs2) xs3 |> List.map (fun ((a,b),c) -> a,b,c) + a = b + +[] +let ``two zips can be used for zip3`` () = + Check.QuickThrowOnFailure zip_and_zip3 + Check.QuickThrowOnFailure zip_and_zip3 + Check.QuickThrowOnFailure zip_and_zip3 + +let zip_and_unzip<'a when 'a : equality> (xs' : ('a*'a) list) = + let xs,xs2 = List.unzip xs' + List.zip xs xs2 = xs' + +[] +let ``zip and unzip are dual`` () = + Check.QuickThrowOnFailure zip_and_unzip + Check.QuickThrowOnFailure zip_and_unzip + Check.QuickThrowOnFailure zip_and_unzip + +let zip3_and_unzip3<'a when 'a : equality> (xs' : ('a*'a*'a) list) = + let xs,xs2,xs3 = List.unzip3 xs' + List.zip3 xs xs2 xs3 = xs' + +[] +let ``zip3 and unzip3 are dual`` () = + Check.QuickThrowOnFailure zip3_and_unzip3 + Check.QuickThrowOnFailure zip3_and_unzip3 + Check.QuickThrowOnFailure zip3_and_unzip3 + +[] +let ``splitInto produces chunks exactly `count` chunks with equal size (+/- 1)``() = + let prop (a: _ list) (PositiveInt count') = + let count = min a.Length count' + match a |> List.splitInto count' |> Seq.toList with + | [] -> a = [] + | h :: [] -> (a.Length = 1 || count = 1) && h = a + | chunks -> + let lastChunk = chunks |> List.last + let lastLength = lastChunk |> List.length + + chunks.Length = count + && + chunks |> List.forall (fun c -> List.length c = lastLength || List.length c = lastLength + 1) + + Check.QuickThrowOnFailure prop + +let sort_and_sortby (xs : list) (xs2 : list) = + let a = List.sortBy id xs |> Seq.toArray + let b = List.sort xs |> Seq.toArray + let result = ref true + for i in 0 .. a.Length - 1 do + if a.[i] <> b.[i] then + if System.Double.IsNaN a.[i] <> System.Double.IsNaN b.[i] then + result := false + !result + +[] +let ``sort behaves like sortby id`` () = + Check.QuickThrowOnFailure sort_and_sortby + +let filter_and_except<'a when 'a : comparison> (xs : list<'a>) (itemsToExclude : Set<'a>) = + let a = List.filter (fun x -> Set.contains x itemsToExclude |> not) xs |> List.distinct + let b = List.except itemsToExclude xs + a = b + +[] +let ``filter and except work similar`` () = + Check.QuickThrowOnFailure filter_and_except + Check.QuickThrowOnFailure filter_and_except + Check.QuickThrowOnFailure filter_and_except + +let filter_and_where<'a when 'a : comparison> (xs : list<'a>) predicate = + let a = List.filter predicate xs + let b = List.where predicate xs + a = b + +[] +let ``filter and where work similar`` () = + Check.QuickThrowOnFailure filter_and_where + Check.QuickThrowOnFailure filter_and_where + Check.QuickThrowOnFailure filter_and_where + +let find_and_pick<'a when 'a : comparison> (xs : list<'a>) predicate = + let a = runAndCheckIfAnyError (fun () -> List.find predicate xs) + let b = runAndCheckIfAnyError (fun () -> List.pick (fun x -> if predicate x then Some x else None) xs) + a = b + +[] +let ``pick works like find`` () = + Check.QuickThrowOnFailure find_and_pick + Check.QuickThrowOnFailure find_and_pick + Check.QuickThrowOnFailure find_and_pick + +let choose_and_pick<'a when 'a : comparison> (xs : list<'a>) predicate = + let a = runAndCheckIfAnyError (fun () -> List.choose predicate xs |> List.head) + let b = runAndCheckIfAnyError (fun () -> List.pick predicate xs) + a = b + +[] +let ``pick works like choose + head`` () = + Check.QuickThrowOnFailure choose_and_pick + Check.QuickThrowOnFailure choose_and_pick + Check.QuickThrowOnFailure choose_and_pick + +let head_and_tail<'a when 'a : comparison> (xs : list<'a>) = + xs <> [] ==> (lazy + let h = List.head xs + let t = List.tail xs + xs = h :: t) + +[] +let ``head and tail gives the list`` () = + Check.QuickThrowOnFailure head_and_tail + Check.QuickThrowOnFailure head_and_tail + Check.QuickThrowOnFailure head_and_tail + +let tryHead_and_tail<'a when 'a : comparison> (xs : list<'a>) = + match xs with + | [] -> List.tryHead xs = None + | _ -> + let h = (List.tryHead xs).Value + let t = List.tail xs + xs = h :: t + +[] +let ``tryHead and tail gives the list`` () = + Check.QuickThrowOnFailure tryHead_and_tail + Check.QuickThrowOnFailure tryHead_and_tail + Check.QuickThrowOnFailure tryHead_and_tail + +let skip_and_take<'a when 'a : comparison> (xs : list<'a>) (count:NonNegativeInt) = + let count = int count + if xs <> [] && count <= xs.Length then + let s = List.skip count xs + let t = List.take count xs + xs = t @ s + else true + +[] +let ``skip and take gives the list`` () = + Check.QuickThrowOnFailure skip_and_take + Check.QuickThrowOnFailure skip_and_take + Check.QuickThrowOnFailure skip_and_take + +let truncate_and_take<'a when 'a : comparison> (xs : list<'a>) (count:NonNegativeInt) = + let count = int count + if xs <> [] && count <= xs.Length then + let a = List.take (min count xs.Length) xs + let b = List.truncate count xs + a = b + else true + +[] +let ``truncate and take work similar`` () = + Check.QuickThrowOnFailure truncate_and_take + Check.QuickThrowOnFailure truncate_and_take + Check.QuickThrowOnFailure truncate_and_take + +let skipWhile_and_takeWhile<'a when 'a : comparison> (xs : list<'a>) f = + if xs <> [] then + let s = List.skipWhile f xs + let t = List.takeWhile f xs + xs = t @ s + else true + +[] +let ``skipWhile and takeWhile gives the list`` () = + Check.QuickThrowOnFailure skipWhile_and_takeWhile + Check.QuickThrowOnFailure skipWhile_and_takeWhile + Check.QuickThrowOnFailure skipWhile_and_takeWhile + +let find_and_exists<'a when 'a : comparison> (xs : list<'a>) f = + let a = + try + List.find f xs |> ignore + true + with + | _ -> false + let b = List.exists f xs + a = b + +[] +let ``find and exists work similar`` () = + Check.QuickThrowOnFailure find_and_exists + Check.QuickThrowOnFailure find_and_exists + Check.QuickThrowOnFailure find_and_exists + +let exists_and_forall<'a when 'a : comparison> (xs : list<'a>) (F (_, predicate)) = + let a = List.forall (predicate >> not) xs + let b = List.exists predicate xs + a = not b + +[] +let ``exists and forall are dual`` () = + Check.QuickThrowOnFailure exists_and_forall + Check.QuickThrowOnFailure exists_and_forall + Check.QuickThrowOnFailure exists_and_forall + +let head_and_isEmpty<'a when 'a : comparison> (xs : list<'a>) = + let a = + try + List.head xs |> ignore + true + with + | _ -> false + let b = List.isEmpty xs + + a = not b + +[] +let ``head fails when list isEmpty`` () = + Check.QuickThrowOnFailure head_and_isEmpty + Check.QuickThrowOnFailure head_and_isEmpty + Check.QuickThrowOnFailure head_and_isEmpty + +let head_and_last<'a when 'a : comparison> (xs : list<'a>) = + let a = run (fun () -> xs |> List.rev |> List.last) + let b = run (fun () -> List.head xs) + + a = b + +[] +let ``head is the same as last of a reversed list`` () = + Check.QuickThrowOnFailure head_and_last + Check.QuickThrowOnFailure head_and_last + Check.QuickThrowOnFailure head_and_last + +let head_and_item<'a when 'a : comparison> (xs : list<'a>) = + let a = runAndCheckErrorType (fun () -> xs |> List.item 0) + let b = runAndCheckErrorType (fun () -> List.head xs) + + a = b + +[] +let ``head is the same as item 0`` () = + Check.QuickThrowOnFailure head_and_item + Check.QuickThrowOnFailure head_and_item + Check.QuickThrowOnFailure head_and_item + +let item_and_tryItem<'a when 'a : comparison> (xs : list<'a>) pos = + let a = runAndCheckErrorType (fun () -> xs |> List.item pos) + let b = List.tryItem pos xs + + match a with + | Success a -> b.Value = a + | _ -> b = None + +[] +let ``tryItem is safe item`` () = + Check.QuickThrowOnFailure item_and_tryItem + Check.QuickThrowOnFailure item_and_tryItem + Check.QuickThrowOnFailure item_and_tryItem + +let pick_and_tryPick<'a when 'a : comparison> (xs : list<'a>) f = + let a = runAndCheckErrorType (fun () -> xs |> List.pick f) + let b = List.tryPick f xs + + match a with + | Success a -> b.Value = a + | _ -> b = None + +[] +let ``tryPick is safe pick`` () = + Check.QuickThrowOnFailure pick_and_tryPick + Check.QuickThrowOnFailure pick_and_tryPick + Check.QuickThrowOnFailure pick_and_tryPick + +let last_and_tryLast<'a when 'a : comparison> (xs : list<'a>) = + let a = runAndCheckErrorType (fun () -> xs |> List.last) + let b = List.tryLast xs + + match a with + | Success a -> b.Value = a + | _ -> b = None + +[] +let ``tryLast is safe last`` () = + Check.QuickThrowOnFailure last_and_tryLast + Check.QuickThrowOnFailure last_and_tryLast + Check.QuickThrowOnFailure last_and_tryLast + +let length_and_isEmpty<'a when 'a : comparison> (xs : list<'a>) = + let a = List.length xs = 0 + let b = List.isEmpty xs + + a = b + +[] +let ``list isEmpty if and only if length is 0`` () = + Check.QuickThrowOnFailure length_and_isEmpty + Check.QuickThrowOnFailure length_and_isEmpty + Check.QuickThrowOnFailure length_and_isEmpty + +let min_and_max (xs : list) = + let a = run (fun () -> List.min xs) + let b = run (fun () -> xs |> List.map ((*) -1) |> List.max |> fun x -> -x) + + a = b + +[] +let ``min is opposite of max`` () = + Check.QuickThrowOnFailure min_and_max + +let minBy_and_maxBy (xs : list) f = + let a = run (fun () -> List.minBy f xs) + let b = run (fun () -> xs |> List.map ((*) -1) |> List.maxBy f |> fun x -> -x) + + a = b + +[] +let ``minBy is opposite of maxBy`` () = + Check.QuickThrowOnFailure minBy_and_maxBy + +let minBy_and_min (xs : list) = + let a = run (fun () -> List.minBy id xs) + let b = run (fun () -> xs |> List.min) + + a = b + +[] +let ``minBy id is same as min`` () = + Check.QuickThrowOnFailure minBy_and_min + +let min_and_sort<'a when 'a : comparison> (xs : list<'a>) = + let a = runAndCheckErrorType (fun () -> List.min xs) + let b = runAndCheckErrorType (fun () -> xs |> List.sort |> List.head) + + a = b + +[] +let ``head element after sort is min element`` () = + Check.QuickThrowOnFailure min_and_sort + Check.QuickThrowOnFailure min_and_sort + Check.QuickThrowOnFailure min_and_sort + +let pairwise<'a when 'a : comparison> (xs : list<'a>) = + let xs' = List.pairwise xs + let f = xs' |> List.map fst + let s = xs' |> List.map snd + let a = List.length xs' + let b = List.length xs + + if xs = [] then + xs' = [] + else + a = b - 1 && + f = (xs |> List.rev |> List.tail |> List.rev) && // all elements but last one + s = (xs |> List.tail) // all elements but first one + +[] +let ``pairwise works as expected`` () = + Check.QuickThrowOnFailure pairwise + Check.QuickThrowOnFailure pairwise + Check.QuickThrowOnFailure pairwise + +let permute<'a when 'a : comparison> (xs' : list) = + let xs = List.map snd xs' + + let permutations = + List.map fst xs' + |> List.indexed + |> List.sortBy snd + |> List.map fst + |> List.indexed + |> dict + + let permutation x = permutations.[x] + + + match run (fun () -> xs |> List.indexed |> List.permute permutation) with + | Success s -> + let originals = s |> List.map fst + let rs = s |> List.map snd + for o in originals do + let x' = xs |> List.item o + let x = rs |> List.item (permutation o) + Assert.AreEqual(x',x) + true + | _ -> true + +[] +let ``permute works as expected`` () = + Check.QuickThrowOnFailure permute + Check.QuickThrowOnFailure permute + Check.QuickThrowOnFailure permute + +let mapi_and_map<'a when 'a : comparison> (xs : list<'a>) f = + let indices = System.Collections.Generic.List() + let f' i x = + indices.Add i + f x + let a = List.map f xs + let b = List.mapi f' xs + + a = b && (Seq.toList indices = [0..xs.Length-1]) + +[] +let ``mapi behaves like map with correct order`` () = + Check.QuickThrowOnFailure mapi_and_map + Check.QuickThrowOnFailure mapi_and_map + Check.QuickThrowOnFailure mapi_and_map + +let reduce_and_fold<'a when 'a : comparison> (xs : list<'a>) seed (F (_, f)) = + match xs with + | [] -> List.fold f seed xs = seed + | _ -> + let ar = xs |> List.fold f seed + let br = seed :: xs |> List.reduce f + ar = br + +[] +let ``reduce works like fold with given seed`` () = + Check.QuickThrowOnFailure reduce_and_fold + Check.QuickThrowOnFailure reduce_and_fold + Check.QuickThrowOnFailure reduce_and_fold + +let scan_and_fold<'a when 'a : comparison> (xs : list<'a>) seed (F (_, f)) = + let ar : 'a list = List.scan f seed xs + let f' (l,c) x = + let c' = f c x + c'::l,c' + + let br,_ = List.fold f' ([seed],seed) xs + ar = List.rev br + + +[] +let ``scan works like fold but returns intermediate values`` () = + Check.QuickThrowOnFailure scan_and_fold + Check.QuickThrowOnFailure scan_and_fold + Check.QuickThrowOnFailure scan_and_fold + +let scanBack_and_foldBack<'a when 'a : comparison> (xs : list<'a>) seed (F (_, f)) = + let ar : 'a list = List.scanBack f xs seed + let f' x (l,c) = + let c' = f x c + c'::l,c' + + let br,_ = List.foldBack f' xs ([seed],seed) + ar = br + + +[] +let ``scanBack works like foldBack but returns intermediate values`` () = + Check.QuickThrowOnFailure scanBack_and_foldBack + Check.QuickThrowOnFailure scanBack_and_foldBack + Check.QuickThrowOnFailure scanBack_and_foldBack + +let reduceBack_and_foldBack<'a when 'a : comparison> (xs : list<'a>) seed (F (_, f)) = + match xs with + | [] -> List.foldBack f xs seed = seed + | _ -> + let ar = List.foldBack f xs seed + let br = List.reduceBack f (xs @ [seed]) + ar = br + +[] +let ``reduceBack works like foldBack with given seed`` () = + Check.QuickThrowOnFailure reduceBack_and_foldBack + Check.QuickThrowOnFailure reduceBack_and_foldBack + Check.QuickThrowOnFailure reduceBack_and_foldBack + +let replicate<'a when 'a : comparison> (x:'a) (count:NonNegativeInt) = + let count = int count + let xs = List.replicate count x + xs.Length = count && List.forall ((=) x) xs + +[] +let ``replicate creates n instances of the given element`` () = + Check.QuickThrowOnFailure replicate + Check.QuickThrowOnFailure replicate + Check.QuickThrowOnFailure replicate + +let singleton_and_replicate<'a when 'a : comparison> (x:'a) (count:NonNegativeInt) = + let count = int count + let xs = List.replicate count x + let ys = [for i in 1..count -> List.singleton x] |> List.concat + xs = ys + +[] +let ``singleton can be used to replicate`` () = + Check.QuickThrowOnFailure singleton_and_replicate + Check.QuickThrowOnFailure singleton_and_replicate + Check.QuickThrowOnFailure singleton_and_replicate + +let mapFold_and_map_and_fold<'a when 'a : comparison> (xs : list<'a>) mapF foldF start = + let f s x = + let x' = mapF x + let s' = foldF s x' + x',s' + + let a,ar = xs |> List.mapFold f start + let b = xs |> List.map mapF + let br = b |> List.fold foldF start + a = b && ar = br + +[] +let ``mapFold works like map + fold`` () = + Check.QuickThrowOnFailure mapFold_and_map_and_fold + Check.QuickThrowOnFailure mapFold_and_map_and_fold + Check.QuickThrowOnFailure mapFold_and_map_and_fold + +let mapFoldBack_and_map_and_foldBack<'a when 'a : comparison> (xs : list<'a>) mapF foldF start = + let f x s = + let x' = mapF x + let s' = foldF x' s + x',s' + + let a,ar = List.mapFoldBack f xs start + let b = xs |> List.map mapF + let br = List.foldBack foldF b start + a = b && ar = br + +[] +let ``mapFoldBack works like map + foldBack`` () = + Check.QuickThrowOnFailure mapFoldBack_and_map_and_foldBack + Check.QuickThrowOnFailure mapFoldBack_and_map_and_foldBack + Check.QuickThrowOnFailure mapFoldBack_and_map_and_foldBack + +let findBack_and_exists<'a when 'a : comparison> (xs : list<'a>) f = + let a = + try + List.findBack f xs |> ignore + true + with + | _ -> false + let b = List.exists f xs + a = b + +[] +let ``findBack and exists work similar`` () = + Check.QuickThrowOnFailure findBack_and_exists + Check.QuickThrowOnFailure findBack_and_exists + Check.QuickThrowOnFailure findBack_and_exists + +let findBack_and_find<'a when 'a : comparison> (xs : list<'a>) predicate = + let a = run (fun () -> xs |> List.findBack predicate) + let b = run (fun () -> xs |> List.rev |> List.find predicate) + a = b + +[] +let ``findBack and find work in reverse`` () = + Check.QuickThrowOnFailure findBack_and_find + Check.QuickThrowOnFailure findBack_and_find + Check.QuickThrowOnFailure findBack_and_find + +let tryFindBack_and_tryFind<'a when 'a : comparison> (xs : list<'a>) predicate = + let a = xs |> List.tryFindBack predicate + let b = xs |> List.rev |> List.tryFind predicate + a = b + +[] +let ``tryFindBack and tryFind work in reverse`` () = + Check.QuickThrowOnFailure tryFindBack_and_tryFind + Check.QuickThrowOnFailure tryFindBack_and_tryFind + Check.QuickThrowOnFailure tryFindBack_and_tryFind + +let tryFindIndexBack_and_tryFindIndex<'a when 'a : comparison> (xs : list<'a>) predicate = + let a = xs |> List.tryFindIndexBack predicate + let b = xs |> List.rev |> List.tryFindIndex predicate + match a,b with + | Some a, Some b -> a = (xs.Length - b - 1) + | _ -> a = b + +[] +let ``tryFindIndexBack and tryIndexFind work in reverse`` () = + Check.QuickThrowOnFailure tryFindIndexBack_and_tryFindIndex + Check.QuickThrowOnFailure tryFindIndexBack_and_tryFindIndex + Check.QuickThrowOnFailure tryFindIndexBack_and_tryFindIndex + +let rev<'a when 'a : comparison> (xs : list<'a>) = + let list = System.Collections.Generic.List<_>() + for x in xs do + list.Insert(0,x) + + xs |> List.rev |> List.rev = xs && Seq.toList list = List.rev xs + +[] +let ``rev reverses a list`` () = + Check.QuickThrowOnFailure rev + Check.QuickThrowOnFailure rev + Check.QuickThrowOnFailure rev + +let findIndexBack_and_findIndex<'a when 'a : comparison> (xs : list<'a>) (F (_, predicate)) = + let a = run (fun () -> xs |> List.findIndex predicate) + let b = run (fun () -> xs |> List.rev |> List.findIndexBack predicate) + match a,b with + | Success a, Success b -> a = (xs.Length - b - 1) + | _ -> a = b + +[] +let ``findIndexBack and findIndex work in reverse`` () = + Check.QuickThrowOnFailure findIndexBack_and_findIndex + Check.QuickThrowOnFailure findIndexBack_and_findIndex + Check.QuickThrowOnFailure findIndexBack_and_findIndex + +let skip_and_skipWhile<'a when 'a : comparison> (xs : list<'a>) (count:NonNegativeInt) = + let count = int count + count <= xs.Length ==> (lazy + let ys = List.indexed xs + let a = runAndCheckErrorType (fun () -> List.skip count ys) + let b = runAndCheckErrorType (fun () -> List.skipWhile (fun (p,_) -> p < count) ys) + + a = b) + +[] +let ``skip and skipWhile are consistent`` () = + Check.QuickThrowOnFailure skip_and_skipWhile + Check.QuickThrowOnFailure skip_and_skipWhile + Check.QuickThrowOnFailure skip_and_skipWhile + +let distinct_works_like_set<'a when 'a : comparison> (xs : 'a list) = + let a = List.distinct xs + let b = Set.ofList xs + + let result = ref (a.Length = b.Count) + for x in a do + if Set.contains x b |> not then + result := false + + for x in b do + if List.exists ((=) x) a |> not then + result := false + !result + +[] +let ``distinct creates same elements like a set`` () = + Check.QuickThrowOnFailure distinct_works_like_set + Check.QuickThrowOnFailure distinct_works_like_set + Check.QuickThrowOnFailure distinct_works_like_set + +let sort_and_sortDescending<'a when 'a : comparison> (xs : list<'a>) = + let a = run (fun () -> xs |> List.sort) + let b = run (fun () -> xs |> List.sortDescending |> List.rev) + a = b + +[] +let ``sort and sortDescending work in reverse`` () = + Check.QuickThrowOnFailure sort_and_sortDescending + Check.QuickThrowOnFailure sort_and_sortDescending + Check.QuickThrowOnFailure sort_and_sortDescending + +let sortByStable<'a when 'a : comparison> (xs : 'a []) = + let indexed = xs |> Seq.indexed |> Seq.toList + let sorted = indexed |> List.sortBy snd + isStable sorted + +[] +let ``List.sortBy is stable`` () = + Check.QuickThrowOnFailure sortByStable + Check.QuickThrowOnFailure sortByStable + +let sortWithStable<'a when 'a : comparison> (xs : 'a []) = + let indexed = xs |> Seq.indexed |> Seq.toList + let sorted = indexed |> List.sortWith (fun x y -> compare (snd x) (snd y)) + isStable sorted + +[] +let ``List.sortWithStable is stable`` () = + Check.QuickThrowOnFailure sortWithStable + Check.QuickThrowOnFailure sortWithStable + +let distinctByStable<'a when 'a : comparison> (xs : 'a []) = + let indexed = xs |> Seq.indexed |> Seq.toList + let sorted = indexed |> List.distinctBy snd + isStable sorted + +[] +let ``List.distinctBy is stable`` () = + Check.QuickThrowOnFailure distinctByStable + Check.QuickThrowOnFailure distinctByStable + +[] +let ``List.sum calculates the sum`` () = + let sum (xs : int list) = + let s = List.sum xs + let r = ref 0 + for x in xs do r := !r + x + s = !r + Check.QuickThrowOnFailure sum + +let sumBy<'a> (xs : 'a list) (f:'a -> int) = + let s = xs |> List.map f |> List.sum + let r = List.sumBy f xs + r = s + +[] +let ``List.sumBy calculates the sum of the mapped list`` () = + Check.QuickThrowOnFailure sumBy + Check.QuickThrowOnFailure sumBy + Check.QuickThrowOnFailure sumBy diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs index d47b4409668..2de09dc105a 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.List type diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/MapModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/MapModule.fs index 6fbba9f74fa..720c4df54b8 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/MapModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/MapModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.Map module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/MapType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/MapType.fs index 6a06fa3ad45..60b581d41f8 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/MapType.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/MapType.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.Map type diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteListFunctions.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteListFunctions.fs index 877eb2af96e..ac2ab24e5ce 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteListFunctions.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteListFunctions.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #nowarn "44" // This construct is deprecated. please use List.item namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteSeqFunctions.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteSeqFunctions.fs index 0667148599a..7981d61c67f 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteSeqFunctions.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteSeqFunctions.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #nowarn "44" // This construct is deprecated. please use Seq.item namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule.fs index 71105a8a3b1..9d68a145884 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections @@ -260,7 +260,19 @@ type SeqModule() = let expectedNullSeq = seq [null;null] VerifySeqsEqual expectedNullSeq NullSeq - + + CheckThrowsExn(fun () -> + let strings = + integerArray + |> Seq.cast + for o in strings do ()) + + CheckThrowsExn(fun () -> + let strings = + integerArray + |> Seq.cast + :> System.Collections.IEnumerable // without this upcast the for loop throws, so it should with this upcast too + for o in strings do ()) () diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs index 31de923bcc3..79057bd8fa3 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqProperties.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqProperties.fs new file mode 100644 index 00000000000..f5ccc34a171 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqProperties.fs @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections.SeqProperties + +open System +open System.Collections.Generic +open NUnit.Framework +open FsCheck +open Utils + +let sortByStable<'a when 'a : comparison> (xs : 'a []) = + let indexed = xs |> Seq.indexed + let sorted = indexed |> Seq.sortBy snd + isStable sorted + +[] +let ``Seq.sortBy is stable`` () = + Check.QuickThrowOnFailure sortByStable + Check.QuickThrowOnFailure sortByStable + +let sortWithStable<'a when 'a : comparison> (xs : 'a []) = + let indexed = xs |> Seq.indexed |> Seq.toList + let sorted = indexed |> Seq.sortWith (fun x y -> compare (snd x) (snd y)) + isStable sorted + +[] +let ``Seq.sortWithStable is stable`` () = + Check.QuickThrowOnFailure sortWithStable + Check.QuickThrowOnFailure sortWithStable + +let distinctByStable<'a when 'a : comparison> (xs : 'a []) = + let indexed = xs |> Seq.indexed + let sorted = indexed |> Seq.distinctBy snd + isStable sorted + +[] +let ``Seq.distinctBy is stable`` () = + Check.QuickThrowOnFailure distinctByStable + Check.QuickThrowOnFailure distinctByStable diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SetModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SetModule.fs index 52bb21f4197..899ef3406fa 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SetModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SetModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.Set module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SetType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SetType.fs index 648f1f75045..e5094f9f8bb 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SetType.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SetType.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Collections.Set type diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs index 40e396af9dd..dbe68a36406 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs new file mode 100644 index 00000000000..6a45b582b77 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/Utils.fs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections.Utils + +type Result<'a> = +| Success of 'a +| Error of string + +let run f = + try + Success(f()) + with + | exn -> Error(exn.Message) + +let runAndCheckErrorType f = + try + Success(f()) + with + | exn -> Error(exn.GetType().ToString()) + +let runAndCheckIfAnyError f = + try + Success(f()) + with + | exn -> Error("") + + +let isStable sorted = sorted |> Seq.pairwise |> Seq.forall (fun ((ia, a),(ib, b)) -> if a = b then ia < ib else true) + +let isSorted sorted = sorted |> Seq.pairwise |> Seq.forall (fun (a,b) -> a <= b) +let haveSameElements xs ys = xs |> Seq.forall (fun x -> ys |> Seq.exists ((=) x)) && xs |> Seq.forall (fun y -> xs |> Seq.exists ((=) y)) \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs index 07472d4e98f..9df6b81a791 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Control.Async module @@ -6,8 +6,128 @@ namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Control open System +open System.Threading open FSharp.Core.Unittests.LibraryTestFx open NUnit.Framework +#if !(FSHARP_CORE_PORTABLE || FSHARP_CORE_NETCORE_PORTABLE) +open FsCheck +#endif + +#if !(FSHARP_CORE_PORTABLE || FSHARP_CORE_NETCORE_PORTABLE) +[] +module ChoiceUtils = + + // FsCheck driven Async.Choice specification test + + exception ChoiceExn of index:int + + /// represents a child computation of a choice workflow + type ChoiceOp = + | NoneResultAfter of timeout:int + | SomeResultAfter of timeout:int + | ExceptionAfter of timeout:int + + member c.Timeout = + match c with + | NoneResultAfter t -> t + | SomeResultAfter t -> t + | ExceptionAfter t -> t + + /// represent a choice worfklow + type ChoiceWorkflow = ChoiceWorkflow of children:ChoiceOp list * cancelAfter:int option + + /// normalizes random timeout arguments + let normalize (ChoiceWorkflow(ops, cancelAfter)) = + let ms t = 2000 * (abs t % 15) // timeouts only positive multiples of 2 seconds, up to 30 seconds + let mkOp op = + match op with + | NoneResultAfter t -> NoneResultAfter (ms t) + | SomeResultAfter t -> SomeResultAfter (ms t) + | ExceptionAfter t -> ExceptionAfter (ms t) + + let ops = ops |> List.map mkOp + let cancelAfter = cancelAfter |> Option.map ms + ChoiceWorkflow(ops, cancelAfter) + + /// runs specified choice workflow and checks that + /// Async.Choice spec is satisfied + let runChoice (ChoiceWorkflow(ops, cancelAfter)) = + // Step 1. build a choice workflow from the abstract representation + let completed = ref 0 + let returnAfter time f = async { + do! Async.Sleep time + let _ = Interlocked.Increment completed + return f () + } + + let mkOp (index : int) = function + | NoneResultAfter t -> returnAfter t (fun () -> None) + | SomeResultAfter t -> returnAfter t (fun () -> Some index) + | ExceptionAfter t -> returnAfter t (fun () -> raise (ChoiceExn index)) + + let choiceWorkflow = ops |> List.mapi mkOp |> Async.Choice + + // Step 2. run the choice workflow and keep the results + let result = + let cancellationToken = + match cancelAfter with + | Some ca -> + let cts = new CancellationTokenSource() + cts.CancelAfter(ca) + Some cts.Token + | None -> None + + try Async.RunSynchronously(choiceWorkflow, ?cancellationToken = cancellationToken) |> Choice1Of2 + with e -> Choice2Of2 e + + // Step 3. check that results are up to spec + let getMinTime() = + seq { + yield Int32.MaxValue // "infinity": avoid exceptions if list is empty + + for op in ops do + match op with + | NoneResultAfter _ -> () + | op -> yield op.Timeout + + match cancelAfter with Some t -> yield t | None -> () + } |> Seq.min + + let verifyIndex index = + if index < 0 || index >= ops.Length then + Assert.Fail "Returned choice index is out of bounds." + + // Step 3a. check that output is up to spec + match result with + | Choice1Of2 (Some index) -> + verifyIndex index + match ops.[index] with + | SomeResultAfter timeout -> Assert.AreEqual(getMinTime(), timeout) + | op -> Assert.Fail <| sprintf "Should be 'Some' but got %A" op + + | Choice1Of2 None -> + Assert.True(ops |> List.forall (function NoneResultAfter _ -> true | _ -> false)) + + | Choice2Of2 (:? OperationCanceledException) -> + match cancelAfter with + | None -> Assert.Fail "Got unexpected cancellation exception." + | Some ca -> Assert.AreEqual(getMinTime(), ca) + + | Choice2Of2 (ChoiceExn index) -> + verifyIndex index + match ops.[index] with + | ExceptionAfter timeout -> Assert.AreEqual(getMinTime(), timeout) + | op -> Assert.Fail <| sprintf "Should be 'Exception' but got %A" op + + | Choice2Of2 e -> Assert.Fail(sprintf "Unexpected exception %O" e) + + // Step 3b. check that nested cancellation happens as expected + if not <| List.isEmpty ops then + let minTimeout = getMinTime() + let minTimeoutOps = ops |> Seq.filter (fun op -> op.Timeout <= minTimeout) |> Seq.length + Assert.LessOrEqual(!completed, minTimeoutOps) + +#endif module LeakUtils = // when testing for liveness, the things that we want to observe must always be created in @@ -294,6 +414,31 @@ type AsyncModule() = member this.``RaceBetweenCancellationAndError.Sleep``() = testErrorAndCancelRace (Async.Sleep (-5)) +#if !(FSHARP_CORE_PORTABLE || FSHARP_CORE_NETCORE_PORTABLE) + [] + member this.``Async.Choice specification test``() = + Check.QuickThrowOnFailure (normalize >> runChoice) +#endif + + [] + member this.``error on one workflow should cancel all others``() = + let counter = + async { + let counter = ref 0 + let job i = async { + if i = 55 then failwith "boom" + else + do! Async.Sleep 1000 + incr counter + } + + let! _ = Async.Parallel [ for i in 1 .. 100 -> job i ] |> Async.Catch + do! Async.Sleep 5000 + return !counter + } |> Async.RunSynchronously + + Assert.AreEqual(0, counter) + [] member this.``AwaitWaitHandle.ExceptionsAfterTimeout``() = let wh = new System.Threading.ManualResetEvent(false) diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs index 264ffbe23d6..5ed7a816f77 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Control.Async type @@ -79,6 +79,21 @@ type AsyncType() = () + [] + member this.AsyncRunSynchronouslyReusesThreadPoolThread() = + let action = async { async { () } |> Async.RunSynchronously } + let computation = + [| for i in 1 .. 1000 -> action |] + |> Async.Parallel + // This test needs approximately 1000 ThreadPool threads + // if Async.RunSynchronously doesn't reuse them. + // In such case TimeoutException is raised + // since ThreadPool cannot provide 1000 threads in 1 second + // (the number of threads in ThreadPool is adjusted slowly). + Assert.DoesNotThrow(fun () -> + Async.RunSynchronously(computation, timeout = 1000) + |> ignore) + [] member this.AsyncSleepCancellation1() = ignoreSynchCtx (fun () -> diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/Cancellation.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/Cancellation.fs index 4423c3112c6..831848965b3 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/Cancellation.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/Cancellation.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Control #nowarn "52" diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/ContinuationsThreadingDetailsStandaloneExe.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/ContinuationsThreadingDetailsStandaloneExe.fs index c13e7597d9e..df63d4de1bc 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/ContinuationsThreadingDetailsStandaloneExe.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/ContinuationsThreadingDetailsStandaloneExe.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. open System.Threading diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/EventModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/EventModule.fs index 71a2c89b351..523a08dcbcb 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/EventModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/EventModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Control.Event module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/LazyType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/LazyType.fs index ae0361efddf..9f8bc9a2af4 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/LazyType.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/LazyType.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Control diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs index a522e19ff48..6d549ce99a1 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Control.MailboxProcessor type diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/ObservableModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/ObservableModule.fs index 75982479eb4..96091585f30 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/ObservableModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/ObservableModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Control.Observable module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/BigIntType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/BigIntType.fs index 282a0a458cd..dd608ec8685 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/BigIntType.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/BigIntType.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // System.Numerics.BigInteger struct diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversions.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversions.fs index f74f3d1ba8f..b9e5a0091aa 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversions.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversions.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.FSharp_Core.FSharp.Core open System diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversionsGenerated.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversionsGenerated.fs index 721fa5405b7..09fd940c2d9 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversionsGenerated.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversionsGenerated.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // This file is automatically generated by IntConversionsTestGenerator.fsx namespace FSharp.Core.Unittests.FSharp_Core.FSharp.Core diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversionsTestGenerator.fsx b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversionsTestGenerator.fsx index 8e4a55c10be..85881ae99c5 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversionsTestGenerator.fsx +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/IntConversionsTestGenerator.fsx @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. open System.IO open System.Text diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs index 98aacbd0ada..b2010567f13 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Core diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs index c3a439fdfe1..c2fbf866927 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for: // Microsoft.FSharp.Core.ExtraTopLevelOperators.printf diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Math/BigIntStruct.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Math/BigIntStruct.fs deleted file mode 100644 index 0a3511f9f73..00000000000 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Math/BigIntStruct.fs +++ /dev/null @@ -1,374 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -// Various tests for bigint - -namespace SystematicUnitTests.FSharp_Core.Microsoft_FSharp_Math - -open System -open SystematicUnitTests.LibraryTestFx -open NUnit.Framework -open Microsoft.FSharp.Math - -(* -[Test Strategy] -Make sure each method works on: -* positive bigint -* negative bigint -* zero bugint -* large bigint -* DivideByZeroException -*) - - -[] -type BigIntStruct() = - // global variable - let bigPositiveA = 12345678901234567890I - let bigPositiveB = 98765432109876543210I - let bigNegativeA = -bigPositiveA - let bigNegativeB = -bigPositiveB - - // Interfaces - [] - member this.IComparable() = - // Legit IC - let ic = bigPositiveA :> IComparable - Assert.AreEqual(ic.CompareTo(bigPositiveA), 0) - - // Base class methods - [] - member this.ObjectToString() = - Assert.AreEqual(bigPositiveA.ToString(), - "12345678901234567890") - Assert.AreEqual((new bigint(0)).ToString(), "0") - Assert.AreEqual((new bigint(168)).ToString(), "168") - Assert.AreEqual(-168I.ToString(), "-168") - Assert.AreEqual(-0I.ToString(), "0") - - - [] - member this.ObjectEquals() = - // All three are different constructor, but have equivalent value - - let a = new bigint(168) - let b = 168I - let c = new bigint(168L) - Assert.IsTrue( (a = b) ) - Assert.IsTrue( (b = c) ) - Assert.IsTrue( (c = a) ) - Assert.IsTrue( a.Equals(b) ); Assert.IsTrue( b.Equals(a) ) - Assert.IsTrue( b.Equals(c) ); Assert.IsTrue( c.Equals(b) ) - Assert.IsTrue( c.Equals(a) ); Assert.IsTrue( a.Equals(c) ) - - // Self equality - let a = new bigint(168) - Assert.IsTrue( (a = a) ) - Assert.IsTrue(a.Equals(a)) - - // Null - Assert.IsFalse(a.Equals(null)) - - // static methods - [] - member this.Abs() = - Assert.AreEqual(bigint.Abs(bigPositiveA), - bigPositiveA) - Assert.AreEqual(bigint.Abs(bigPositiveB), - bigPositiveB) - Assert.AreEqual(bigint.Abs(bigNegativeA), - bigPositiveA) - Assert.AreEqual(bigint.Abs(bigNegativeB), - bigPositiveB) - Assert.AreEqual(bigint.Abs(0I), 0I) - - () - - [] - member this.DivRem() = - Assert.AreEqual(bigint.DivRem(100I, 123I), (0I, 100I)) - Assert.AreEqual(bigint.DivRem(123I, 100I), (1I, 23I)) - Assert.AreEqual(bigint.DivRem(123I, -100I), (-1I, 23I)) - Assert.AreEqual(bigint.DivRem(0I, 1I), (0I, 0I)) - Assert.AreEqual(bigint.DivRem(-100I, -123I), (0I, -100I)) - Assert.AreEqual(bigint.DivRem(-123I, -100I), (1I, -23I)) - Assert.AreEqual(bigint.DivRem(0I, 100I), (0I, 0I)) - CheckThrowsDivideByZeroException(fun() -> bigint.DivRem(100I, 0I) |> ignore) - - () - -(* - [] - member this.Factorial() = - Assert.AreEqual(bigint.Factorial(0I), 1I) - Assert.AreEqual(bigint.Factorial(1I), 1I) - Assert.AreEqual(bigint.Factorial(5I), 120I) - Assert.AreEqual(bigint.Factorial(10I), 3628800I) - CheckThrowsArgumentException(fun() -> bigint.Factorial(-10I) |> ignore) - - () -*) - - [] - member this.GCD() = - - Assert.AreEqual(bigint.Gcd(bigPositiveA, bigPositiveB), 900000000090I) - Assert.AreEqual(bigint.Gcd(bigNegativeA, bigNegativeB), 900000000090I) - Assert.AreEqual(bigint.Gcd(0I, bigPositiveA), bigPositiveA) - - () - - [] - member this.One() = - Assert.AreEqual(bigint.One, 1I) - - () - [] - member this.Parse() = - Assert.AreEqual(bigint.Parse("12345678901234567890"), - bigPositiveA) - Assert.AreEqual(bigint.Parse("168"), 168I) - Assert.AreEqual(bigint.Parse("000"), 0I) - CheckThrowsArgumentException(fun() -> bigint.Parse("abc168L") |> ignore) - CheckThrowsArgumentException(fun() -> bigint.Parse("") |> ignore) - - () - - [] - member this.Pow() = - Assert.AreEqual(bigint.Pow(2I, 3I), 8I) - Assert.AreEqual(bigint.Pow(0I, 100I), 0I) - Assert.AreEqual(bigint.Pow(-10I, 2I), 100I) - CheckThrowsArgumentException(fun() -> bigint.Pow(100I, -2I) |> ignore) - - () - - [] - member this.Sign() = - Assert.AreEqual(bigint.Sign(0I), 0) - Assert.AreEqual(bigint.Sign(bigPositiveA), 1) - Assert.AreEqual(bigint.Sign(bigNegativeA), -1) - - () - - [] - member this.ToDouble() = - Assert.AreEqual(double 0I, 0) - Assert.AreEqual(double 123I, 123.0) - Assert.AreEqual(double -123I, -123.0) - - () - - [] - member this.ToInt32() = - Assert.AreEqual(int32 0I, 0) - Assert.AreEqual(int32 123I, 123) - Assert.AreEqual(int32 -123I, -123) - - () - - [] - member this.ToInt64() = - Assert.AreEqual(int64 0I, 0) - Assert.AreEqual(int64 123I, 123L) - Assert.AreEqual(int64 -123I, -123L) - - () - - [] - member this.Zero() = - Assert.AreEqual(bigint.Zero, 0I) - - () - - // operators - [] - member this.op_Addition() = - Assert.AreEqual((123I + 456I), 579I) - Assert.AreEqual((-123I + (-456I)), -579I) - Assert.AreEqual((0I + 123I), 123I) - Assert.AreEqual((bigPositiveA + 0I), bigPositiveA) - Assert.AreEqual((bigPositiveA + bigNegativeA), 0I) - - () - - [] - member this.op_Division() = - Assert.AreEqual((123I / 124I), 0I) - Assert.AreEqual((123I / (-124I)), 0I) - Assert.AreEqual((0I / 123I), 0I) - - () - - [] - member this.op_Equality() = - Assert.AreEqual((bigPositiveA = bigPositiveA), true) - Assert.AreEqual((bigPositiveA = bigNegativeA), false) - Assert.AreEqual((bigNegativeA = bigPositiveA), false) - Assert.AreEqual((bigNegativeA = (-123I)), false) - Assert.AreEqual((0I = new bigint(0)), true) - - () - - [] - member this.op_GreaterThan() = - Assert.AreEqual((bigPositiveA > bigPositiveB), false) - Assert.AreEqual((bigNegativeA > bigPositiveB), false) - Assert.AreEqual((bigNegativeA > (-123I)), false) - Assert.AreEqual((0I > new bigint(0)), false) - - () - - [] - member this.op_GreaterThanOrEqual() = - Assert.AreEqual((bigPositiveA >= bigPositiveB), false) - Assert.AreEqual((bigPositiveA >= bigNegativeB), true) - Assert.AreEqual((bigPositiveB >= bigPositiveA), true) - Assert.AreEqual((bigNegativeA >= bigNegativeA), true) - Assert.AreEqual((0I >= new bigint(0)), true) - - () - - [] - member this.op_LessThan() = - Assert.AreEqual((bigPositiveA < bigPositiveB), true) - Assert.AreEqual((bigNegativeA < bigPositiveB), true) - Assert.AreEqual((bigPositiveA < bigNegativeB), false) - Assert.AreEqual((bigNegativeA < bigPositiveB), true) - Assert.AreEqual((0I < new bigint(0)), false) - - () - - [] - member this.op_LessThanOrEqual() = - Assert.AreEqual((bigPositiveA <= bigPositiveB), true) - Assert.AreEqual((bigPositiveA <= bigNegativeB), false) - Assert.AreEqual((bigNegativeB <= bigPositiveA), true) - Assert.AreEqual((bigNegativeA <= bigNegativeA), true) - Assert.AreEqual((0I <= new bigint(-0)), true) - - () - - [] - member this.op_Modulus() = - Assert.AreEqual((bigPositiveA % bigPositiveB), bigPositiveA) - Assert.AreEqual((bigNegativeA % bigNegativeB), bigNegativeA) - Assert.AreEqual((0I % bigPositiveA), 0I) - - () - - [] - member this.op_Multiply() = - Assert.AreEqual((123I * 100I), 12300I) - Assert.AreEqual((123I * (-100I)), -12300I) - Assert.AreEqual((-123I * (-100I)), 12300I) - Assert.AreEqual((0I * bigPositiveA), 0I) - Assert.AreEqual((1I * 0I), 0I) - - () - - [] - member this.op_Range() = - let resultPos = [123I..128I] - let seqPos = - [ - 123I - 124I - 125I - 126I - 127I - 128I - ] - VerifySeqsEqual resultPos seqPos - - let resultNeg = [(-128I)..(-123I)] - let seqNeg = - [ - -128I - -127I - -126I - -125I - -124I - -123I - ] - VerifySeqsEqual resultNeg seqNeg - - let resultSmall = [0I..5I] - let seqSmall = [0I;1I;2I;3I;4I;5I] - VerifySeqsEqual resultSmall seqSmall - - () - - - [] - member this.op_RangeStep() = - let resultPos = [100I..3I..109I] - let seqPos = - [ - 100I - 103I - 106I - 109I - ] - VerifySeqsEqual resultPos seqPos - - let resultNeg = [(-109I)..3I..(-100I)] - let seqNeg = - [ - -109I - -106I - -103I - -100I - ] - VerifySeqsEqual resultNeg seqNeg - - let resultSmall = [0I..3I..9I] - let seqSmall = [0I;3I;6I;9I] - VerifySeqsEqual resultSmall seqSmall - - () - - [] - member this.op_Subtraction() = - Assert.AreEqual((100I - 123I), -23I) - Assert.AreEqual((0I - bigPositiveB), bigNegativeB) - Assert.AreEqual((bigPositiveB - 0I), bigPositiveB) - Assert.AreEqual((-100I - (-123I)), 23I) - Assert.AreEqual((100I - (-123I)), 223I) - Assert.AreEqual((-100I - 123I), -223I) - - () - - [] - member this.op_UnaryNegation() = - Assert.AreEqual(-bigPositiveA, bigNegativeA) - Assert.AreEqual(-bigNegativeA, bigPositiveA) - Assert.AreEqual(-0I, 0I) - - () - - [] - member this.op_UnaryPlus() = - Assert.AreEqual(+bigPositiveA, bigPositiveA) - Assert.AreEqual(+bigNegativeA, bigNegativeA) - Assert.AreEqual(+0I, 0I) - - () - - // instance methods - [] - member this.New_int32() = - Assert.AreEqual(new bigint(0), 0I) - Assert.AreEqual(new bigint(-10), -10I) - Assert.AreEqual(new bigint(System.Int32.MinValue), -2147483648I) - - () - - [] - member this.New_int64() = - Assert.AreEqual(new bigint(0L), 0I) - Assert.AreEqual(new bigint(-100L), -100I) - Assert.AreEqual(new bigint(System.Int64.MinValue), -9223372036854775808I) - - () - - \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Math/BigNum.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Math/BigNum.fs deleted file mode 100644 index 7329c85a77b..00000000000 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Math/BigNum.fs +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -// Various tests for the: -// Microsoft.FSharp.Math.BigNum type - -namespace SystematicUnitTests.FSharp_Core.Microsoft_FSharp_Math - -open System -open SystematicUnitTests.LibraryTestFx -open NUnit.Framework -open Microsoft.FSharp.Math - -(* -[Test Strategy] -Make sure each method works on: -* positive bignum -* negative bignum -* zero bignum -* large bignum -* DivideByZeroException -*) - - -[] -type BigNum() = - let g_positive1 = 1000000000000000000000000000000000018N - let g_positive2 = 1000000000000000000000000000000000000N - let g_negative1 = -1000000000000000000000000000000000018N - let g_negative2 = -1000000000000000000000000000000000000N - let g_negative3 = -1000000000000000000000000000000000036N - let g_zero = 0N - let g_normal = 88N - let g_bigintpositive = 1000000000000000000000000000000000018I - let g_bigintnegative = -1000000000000000000000000000000000018I - - // Interfaces - [] - member this.IComparable() = - // Legit IC - let ic = g_positive1 :> IComparable - Assert.AreEqual(ic.CompareTo(g_positive1), 0) - CheckThrowsArgumentException( fun () -> ic.CompareTo(g_bigintpositive) |> ignore) - - // Base class methods - [] - member this.ObjectToString() = - Assert.AreEqual(g_positive1.ToString(), - "1000000000000000000000000000000000018") - Assert.AreEqual(g_zero.ToString(), "0") - Assert.AreEqual(g_normal.ToString(), "88") - - - [] - member this.GetHashCode() = - Assert.AreEqual(g_negative1.GetHashCode(), 1210897093) - Assert.AreEqual(g_normal.GetHashCode(), 89) - Assert.AreEqual(g_zero.GetHashCode(), 1) - () - - // Static methods - [] - member this.Abs() = - Assert.AreEqual(bignum.Abs(g_negative1), g_positive1) - Assert.AreEqual(bignum.Abs(g_negative2), g_positive2) - Assert.AreEqual(bignum.Abs(g_positive1), g_positive1) - Assert.AreEqual(bignum.Abs(g_normal), g_normal) - Assert.AreEqual(bignum.Abs(g_zero), g_zero) - () - - [] - member this.FromBigInt() = - Assert.AreEqual(bignum.FromBigInt(g_bigintpositive), - g_positive1) - Assert.AreEqual(bignum.FromBigInt(g_bigintnegative), - g_negative1) - Assert.AreEqual(bignum.FromBigInt(0I), g_zero) - Assert.AreEqual(bignum.FromBigInt(88I), g_normal) - () - - [] - member this.FromInt() = - Assert.AreEqual(bignum.FromInt(2147483647), 2147483647N) - Assert.AreEqual(bignum.FromInt(-2147483648), -2147483648N) - Assert.AreEqual(bignum.FromInt(0), 0N) - Assert.AreEqual(bignum.FromInt(88), 88N) - () - - [] - member this.One() = - Assert.AreEqual(bignum.One, 1N) - () - - [] - member this.Parse() = - Assert.AreEqual(bignum.Parse("100"), 100N) - Assert.AreEqual(bignum.Parse("-100"), -100N) - Assert.AreEqual(bignum.Parse("0"), g_zero) - Assert.AreEqual(bignum.Parse("88"), g_normal) - () - - [] - member this.PowN() = - Assert.AreEqual(bignum.PowN(100N, 2), 10000N) - Assert.AreEqual(bignum.PowN(-3N, 3), -27N) - Assert.AreEqual(bignum.PowN(g_zero, 2147483647), 0N) - Assert.AreEqual(bignum.PowN(g_normal, 0), 1N) - () - - - [] - member this.Sign() = - Assert.AreEqual(bignum.Sign(g_positive1), 1) - Assert.AreEqual(bignum.Sign(g_negative1), -1) - Assert.AreEqual(bignum.Sign(g_zero), 0) - Assert.AreEqual(bignum.Sign(g_normal), 1) - () - - - - [] - member this.ToBigInt() = - Assert.AreEqual(bignum.ToBigInt(g_positive1), g_bigintpositive) - Assert.AreEqual(bignum.ToBigInt(g_negative1), g_bigintnegative) - Assert.AreEqual(bignum.ToBigInt(g_zero), 0I) - Assert.AreEqual(bignum.ToBigInt(g_normal), 88I) - () - - - - [] - member this.ToDouble() = - Assert.AreEqual(double (179769N * 1000000000000000N), 1.79769E+20) - Assert.AreEqual(double (-179769N * 1000000000000000N), -1.79769E+20) - Assert.AreEqual(double 0N, 0.0) - Assert.AreEqual(double 88N, 88.0) - () - - - [] - member this.ToInt32() = - Assert.AreEqual(int32 2147483647N, 2147483647) - Assert.AreEqual(int32 -2147483648N, -2147483648) - Assert.AreEqual(int32 0N, 0) - Assert.AreEqual(int32 88N, 88) - - - - [] - member this.Zero() = - Assert.AreEqual(bignum.Zero, 0N) - () - - // operator methods - [] - member this.op_Addition() = - - Assert.AreEqual(100N + 200N, 300N) - Assert.AreEqual((-100N) + (-200N), -300N) - Assert.AreEqual(g_positive1 + g_negative1, 0N) - Assert.AreEqual(g_zero + g_zero, 0N) - Assert.AreEqual(g_normal + g_normal, 176N) - Assert.AreEqual(g_normal + g_normal, 176N) - () - - - - [] - member this.op_Division() = - Assert.AreEqual(g_positive1 / g_positive1, 1N) - Assert.AreEqual(-100N / 2N, -50N) - Assert.AreEqual(g_zero / g_positive1, 0N) - () - - [] - member this.op_Equality() = - - Assert.IsTrue((g_positive1 = g_positive1)) - Assert.IsTrue((g_negative1 = g_negative1)) - Assert.IsTrue((g_zero = g_zero)) - Assert.IsTrue((g_normal = g_normal)) - () - - [] - member this.op_GreaterThan() = - Assert.AreEqual((g_positive1 > g_positive2), true) - Assert.AreEqual((g_negative1 > g_negative2), false) - Assert.AreEqual((g_zero > g_zero), false) - Assert.AreEqual((g_normal > g_normal), false) - - - () - [] - member this.op_GreaterThanOrEqual() = - Assert.AreEqual((g_positive1 >= g_positive2), true) - Assert.AreEqual((g_positive2 >= g_positive1), false) - Assert.AreEqual((g_negative1 >= g_negative1), true) - Assert.AreEqual((0N >= g_zero), true) - - () - [] - member this.op_LessThan() = - Assert.AreEqual((g_positive1 < g_positive2), false) - Assert.AreEqual((g_negative1 < g_negative3), false) - Assert.AreEqual((0N < g_zero), false) - - () - [] - member this.op_LessThanOrEqual() = - Assert.AreEqual((g_positive1 <= g_positive2), false) - Assert.AreEqual((g_positive2 <= g_positive1), true) - Assert.AreEqual((g_negative1 <= g_negative1), true) - Assert.AreEqual((0N <= g_zero), true) - - () - - [] - member this.op_Multiply() = - Assert.AreEqual(3N * 5N, 15N) - Assert.AreEqual((-3N) * (-5N), 15N) - Assert.AreEqual((-3N) * 5N, -15N) - Assert.AreEqual(0N * 5N, 0N) - - () - - [] - member this.op_Range() = - let resultPos = [0N..2N] - let seqPos = [0N;1N;2N] - VerifySeqsEqual resultPos seqPos - - let resultNeg = [-2N..0N] - let seqNeg = [-2N;-1N;0N] - VerifySeqsEqual resultNeg seqNeg - - let resultSmall = [0N..5N] - let seqSmall = [0N;1N;2N;3N;4N;5N] - VerifySeqsEqual resultSmall seqSmall - - () - - - [] - member this.op_RangeStep() = - let resultPos = [0N..3N..6N] - let seqPos = [0N;3N;6N] - VerifySeqsEqual resultPos seqPos - - let resultNeg = [-6N..3N..0N] - let seqNeg = [-6N;-3N;0N] - VerifySeqsEqual resultNeg seqNeg - - let resultSmall = [0N..3N..9N] - let seqSmall = [0N;3N;6N;9N] - VerifySeqsEqual resultSmall seqSmall - - () - - [] - member this.op_Subtraction() = - Assert.AreEqual(g_positive1-g_positive2, 18N) - Assert.AreEqual(g_negative1-g_negative3, 18N) - Assert.AreEqual(0N-g_positive1, g_negative1) - () - - [] - member this.op_UnaryNegation() = - Assert.AreEqual(-g_positive1, g_negative1) - Assert.AreEqual(-g_negative1, g_positive1) - Assert.AreEqual(-0N, 0N) - - () - - [] - member this.op_UnaryPlus() = - Assert.AreEqual(+g_positive1, g_positive1) - Assert.AreEqual(+g_negative1, g_negative1) - Assert.AreEqual(+0N, 0N) - - () - - // instance methods - [] - member this.Denominator() = - Assert.AreEqual(g_positive1.Denominator, 1I) - Assert.AreEqual(g_negative1.Denominator, 1I) - Assert.AreEqual(0N.Denominator, 1I) - - () - - [] - member this.IsNegative() = - Assert.IsFalse(g_positive1.IsNegative) - Assert.IsTrue(g_negative1.IsNegative) - Assert.IsFalse(0N.IsNegative) - Assert.IsFalse(-0N.IsNegative) - - () - - - [] - member this.IsPositive() = - Assert.IsTrue(g_positive1.IsPositive) - Assert.IsFalse(g_negative1.IsPositive) - Assert.IsFalse(0N.IsPositive) - Assert.IsFalse(-0N.IsPositive) - - () - - [] - member this.Numerator() = - Assert.AreEqual(g_positive1.Numerator, g_bigintpositive) - Assert.AreEqual(g_negative1.Numerator, g_bigintnegative) - Assert.AreEqual(0N.Numerator, 0I) - - () - - - - - \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Quotations/FSharpQuotations.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Quotations/FSharpQuotations.fs index 8569f187d1e..6a3d21a45af 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Quotations/FSharpQuotations.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Quotations/FSharpQuotations.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for Microsoft.FSharp.Quotations diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs index 3153941e5f6..399fb6edfe0 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for Microsoft.FSharp.Reflection diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/OperatorsModule1.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/OperatorsModule1.fs index c376bd0ab04..9ed0e72b4b7 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/OperatorsModule1.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/OperatorsModule1.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Core.Operators module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/OperatorsModule2.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/OperatorsModule2.fs index 06fb03db30b..cf505773bd1 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/OperatorsModule2.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/OperatorsModule2.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Core.Operators module diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/PrimTypes.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/PrimTypes.fs index 1dd138f9ccc..8f23db3a41e 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/PrimTypes.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/PrimTypes.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for the: // Microsoft.FSharp.Core.LanguagePrimitives module diff --git a/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs b/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs index ade35128f10..c85224f2213 100644 --- a/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs +++ b/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module FSharp.Core.Unittests.LibraryTestFx @@ -10,7 +10,7 @@ open NUnit.Framework // Workaround for bug 3601, we are issuing an unnecessary warning #nowarn "0004" -/// Check that the lamda throws an exception of the given type. Otherwise +/// Check that the lambda throws an exception of the given type. Otherwise /// calls Assert.Fail() let CheckThrowsExn<'a when 'a :> exn> (f : unit -> unit) = let funcThrowsAsExpected = @@ -116,10 +116,13 @@ module SurfaceArea = |> Array.map (fun v -> sprintf "%s: %s" (v.ReflectedType.ToString()) (v.ToString())) #endif - types - |> Array.collect getTypeMemberStrings - |> Array.sort - |> String.concat "\r\n" + let actual = + types + |> Array.collect getTypeMemberStrings + |> Array.sort + |> String.concat "\r\n" + + asm,actual // verify public surface area matches expected let verify expected platform fileName = @@ -133,7 +136,8 @@ module SurfaceArea = let normalize (s:string) = Regex.Replace(s, "(\\r\\n|\\n)+", "\r\n").Trim([|'\r';'\n'|]) - let actual = getActual () |> normalize + let asm, actualNotNormalized = getActual () + let actual = actualNotNormalized |> normalize let expected = expected |> normalize - Assert.AreEqual(expected, actual, sprintf "\r\n%s\r\n\r\n Expected and actual surface area don't match. To see the delta, run\r\nwindiff %s %s" actual fileName logFile) + Assert.AreEqual(expected, actual, sprintf "\r\nAssembly: %A\r\n\r\n%s\r\n\r\n Expected and actual surface area don't match. To see the delta, run\r\nwindiff %s %s" asm actual fileName logFile) diff --git a/src/fsharp/FSharp.Core.Unittests/NUnitFrameworkShims.fs b/src/fsharp/FSharp.Core.Unittests/NUnitFrameworkShims.fs index e220295f66e..64cd839a641 100644 --- a/src/fsharp/FSharp.Core.Unittests/NUnitFrameworkShims.fs +++ b/src/fsharp/FSharp.Core.Unittests/NUnitFrameworkShims.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace NUnit.Framework open System diff --git a/src/fsharp/FSharp.Core.Unittests/Properties/AssemblyInfo.cs b/src/fsharp/FSharp.Core.Unittests/Properties/AssemblyInfo.cs index b6911a6dd5f..95837d585cb 100644 --- a/src/fsharp/FSharp.Core.Unittests/Properties/AssemblyInfo.cs +++ b/src/fsharp/FSharp.Core.Unittests/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Reflection; using System.Runtime.CompilerServices; diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.Silverlight.2.0.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.Silverlight.2.0.fs index b3dc06c4a32..3d933f40517 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.Silverlight.2.0.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.Silverlight.2.0.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.SurfaceArea open System.IO @@ -480,6 +480,7 @@ Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToContext(System.Threading.SynchronizationContext) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs index 47e4e70d6d1..c8caf782564 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.SurfaceArea @@ -551,6 +551,7 @@ Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToContext(System.Threading.SynchronizationContext) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs index 16f23c386f3..1faaa8e956d 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.SurfaceArea @@ -573,6 +573,7 @@ Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AwaitTask(System.Threading.Tasks.Task) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs index 2114a808c20..bbaa70bf894 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.Portable.SurfaceArea @@ -560,6 +560,7 @@ Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AwaitTask(System.Threading.Tasks.Task) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs index aaa2e562936..ebf1b029557 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.Portable.SurfaceArea @@ -557,6 +557,7 @@ Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AwaitTask(System.Threading.Tasks.Task) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs index a31efab40e3..3b948aa87b2 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.Portable.SurfaceArea @@ -573,6 +573,7 @@ Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AwaitTask(System.Threading.Tasks.Task) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs index aec1daf060a..8e3e9cb566c 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace FSharp.Core.Unittests.Portable.SurfaceArea @@ -560,6 +560,7 @@ Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AwaitTask(System.Threading.Tasks.Task) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) diff --git a/src/fsharp/FSharp.Core.Unittests/TypeForwarding.fs b/src/fsharp/FSharp.Core.Unittests/TypeForwarding.fs index 34719067524..6313a79df4c 100644 --- a/src/fsharp/FSharp.Core.Unittests/TypeForwarding.fs +++ b/src/fsharp/FSharp.Core.Unittests/TypeForwarding.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Various tests for Microsoft.FSharp.Core type forwarding diff --git a/src/fsharp/FSharp.Core/FSharp.Core.fsproj b/src/fsharp/FSharp.Core/FSharp.Core.fsproj index 9b8556b2751..45cc01a667a 100644 --- a/src/fsharp/FSharp.Core/FSharp.Core.fsproj +++ b/src/fsharp/FSharp.Core/FSharp.Core.fsproj @@ -1,5 +1,5 @@ - + ..\.. diff --git a/src/fsharp/FSharp.Core/Linq.fs b/src/fsharp/FSharp.Core/Linq.fs index 18b2eb6a04b..27abf3e11b5 100644 --- a/src/fsharp/FSharp.Core/Linq.fs +++ b/src/fsharp/FSharp.Core/Linq.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #nowarn "1204" @@ -167,11 +167,11 @@ open ReflectionAdapters module LeafExpressionConverter = - // The following is recognized as a LINQ 'member intialization pattern' in a quotation. + // The following is recognized as a LINQ 'member initialization pattern' in a quotation. let MemberInitializationHelper (_x:'T) : 'T = raise (NotSupportedException "This function should not be called directly") - // The following is recognized as a LINQ 'member intialization pattern' in a quotation. + // The following is recognized as a LINQ 'member initialization pattern' in a quotation. let NewAnonymousObjectHelper (_x:'T) : 'T = raise (NotSupportedException "This function should not be called directly") // This is used to mark expressions inserted to satisfy C#'s design where, inside C#-compiler generated diff --git a/src/fsharp/FSharp.Core/Linq.fsi b/src/fsharp/FSharp.Core/Linq.fsi index a8032e830f8..3b48eda399d 100644 --- a/src/fsharp/FSharp.Core/Linq.fsi +++ b/src/fsharp/FSharp.Core/Linq.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Linq diff --git a/src/fsharp/FSharp.Core/MutableTuple.fs b/src/fsharp/FSharp.Core/MutableTuple.fs index 0cf410f3fbf..77d82d6652e 100644 --- a/src/fsharp/FSharp.Core/MutableTuple.fs +++ b/src/fsharp/FSharp.Core/MutableTuple.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Linq.RuntimeHelpers diff --git a/src/fsharp/FSharp.Core/Query.fs b/src/fsharp/FSharp.Core/Query.fs index d1752d6ef18..1bd69d575fd 100644 --- a/src/fsharp/FSharp.Core/Query.fs +++ b/src/fsharp/FSharp.Core/Query.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Linq @@ -148,7 +148,7 @@ type QueryBuilder() = acc <- plus acc (selector e.Current) count <- count + 1 if count = 0 then - invalidOp "source" (System.Linq.Enumerable.Average ([| |]: int[])) // raise the same error as LINQ + invalidOp "source" LanguagePrimitives.DivideByInt< (^U) > acc count member inline __.SumBy< 'T, 'Q, ^Value diff --git a/src/fsharp/FSharp.Core/Query.fsi b/src/fsharp/FSharp.Core/Query.fsi index ba22ff9b046..20a6d44ff1f 100644 --- a/src/fsharp/FSharp.Core/Query.fsi +++ b/src/fsharp/FSharp.Core/Query.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Linq diff --git a/src/fsharp/FSharp.Core/QueryExtensions.fs b/src/fsharp/FSharp.Core/QueryExtensions.fs index fabc5ab65f4..78a98f9c44a 100644 --- a/src/fsharp/FSharp.Core/QueryExtensions.fs +++ b/src/fsharp/FSharp.Core/QueryExtensions.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Linq.RuntimeHelpers diff --git a/src/fsharp/FSharp.Core/SI.fs b/src/fsharp/FSharp.Core/SI.fs index c7b651f3d8f..35e40b393e2 100644 --- a/src/fsharp/FSharp.Core/SI.fs +++ b/src/fsharp/FSharp.Core/SI.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// The International System of Units (SI) namespace Microsoft.FSharp.Data.UnitSystems.SI.UnitNames diff --git a/src/fsharp/FSharp.Core/SR.fs b/src/fsharp/FSharp.Core/SR.fs index 639604a1f63..3806349049a 100644 --- a/src/fsharp/FSharp.Core/SR.fs +++ b/src/fsharp/FSharp.Core/SR.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Core diff --git a/src/fsharp/FSharp.Core/array.fs b/src/fsharp/FSharp.Core/array.fs index 77654b56bcb..e6bd5644139 100644 --- a/src/fsharp/FSharp.Core/array.fs +++ b/src/fsharp/FSharp.Core/array.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections @@ -6,6 +6,7 @@ namespace Microsoft.FSharp.Collections open System.Diagnostics open System.Collections.Generic open System.Diagnostics.CodeAnalysis + open System.Reflection open Microsoft.FSharp.Core open Microsoft.FSharp.Core.CompilerServices open Microsoft.FSharp.Collections @@ -14,8 +15,7 @@ namespace Microsoft.FSharp.Collections open Microsoft.FSharp.Core.SR #if FX_NO_ICLONEABLE open Microsoft.FSharp.Core.ICloneableExtensions -#else -#endif +#endif /// Basic operations on arrays [] @@ -172,24 +172,39 @@ namespace Microsoft.FSharp.Collections Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 count array - [] - let countBy projection (array:'T[]) = - checkNonNull "array" array - let dict = new Dictionary,int>(Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer) + let inline countByImpl (comparer:IEqualityComparer<'SafeKey>) (projection:'T->'SafeKey) (getKey:'SafeKey->'Key) (array:'T[]) = + let dict = Dictionary comparer // Build the groupings for v in array do - let key = Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (projection v) + let safeKey = projection v let mutable prev = Unchecked.defaultof<_> - if dict.TryGetValue(key, &prev) then dict.[key] <- prev + 1 else dict.[key] <- 1 + if dict.TryGetValue(safeKey, &prev) then dict.[safeKey] <- prev + 1 else dict.[safeKey] <- 1 let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked dict.Count let mutable i = 0 for group in dict do - res.[i] <- group.Key.Value, group.Value + res.[i] <- getKey group.Key, group.Value i <- i + 1 res + // We avoid wrapping a StructBox, because under 64 JIT we get some "hard" tailcalls which affect performance + let countByValueType (projection:'T->'Key) (array:'T[]) = countByImpl HashIdentity.Structural<'Key> projection id array + + // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation + let countByRefType (projection:'T->'Key) (array:'T[]) = countByImpl Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (projection t)) (fun sb -> sb.Value) array + + [] + let countBy (projection:'T->'Key) (array:'T[]) = + checkNonNull "array" array +#if FX_RESHAPED_REFLECTION + if (typeof<'Key>).GetTypeInfo().IsValueType +#else + if typeof<'Key>.IsValueType +#endif + then countByValueType projection array + else countByRefType projection array + [] let append (array1:'T[]) (array2:'T[]) = checkNonNull "array1" array1 @@ -408,32 +423,47 @@ namespace Microsoft.FSharp.Collections let rec loop i = i >= len1 || (f.Invoke(array1.[i], array2.[i]) && loop (i+1)) loop 0 - [] - let groupBy keyf (array: 'T[]) = - checkNonNull "array" array - let dict = new Dictionary,ResizeArray<'T>>(RuntimeHelpers.StructBox<'Key>.Comparer) + let inline groupByImpl (comparer:IEqualityComparer<'SafeKey>) (keyf:'T->'SafeKey) (getKey:'SafeKey->'Key) (array: 'T[]) = + let dict = Dictionary<_,ResizeArray<_>> comparer // Build the groupings for i = 0 to (array.Length - 1) do let v = array.[i] - let key = RuntimeHelpers.StructBox (keyf v) - let ok, prev = dict.TryGetValue(key) - if ok then - prev.Add(v) + let safeKey = keyf v + let mutable prev = Unchecked.defaultof<_> + if dict.TryGetValue(safeKey, &prev) then + prev.Add v else - let prev = new ResizeArray<'T>(1) - dict.[key] <- prev - prev.Add(v) + let prev = ResizeArray () + dict.[safeKey] <- prev + prev.Add v // Return the array-of-arrays. let result = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked dict.Count let mutable i = 0 for group in dict do - result.[i] <- group.Key.Value, group.Value.ToArray() + result.[i] <- getKey group.Key, group.Value.ToArray() i <- i + 1 result + // We avoid wrapping a StructBox, because under 64 JIT we get some "hard" tailcalls which affect performance + let groupByValueType (keyf:'T->'Key) (array:'T[]) = groupByImpl HashIdentity.Structural<'Key> keyf id array + + // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation + let groupByRefType (keyf:'T->'Key) (array:'T[]) = groupByImpl Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (keyf t)) (fun sb -> sb.Value) array + + [] + let groupBy (keyf:'T->'Key) (array:'T[]) = + checkNonNull "array" array +#if FX_RESHAPED_REFLECTION + if (typeof<'Key>).GetTypeInfo().IsValueType +#else + if typeof<'Key>.IsValueType +#endif + then groupByValueType keyf array + else groupByRefType keyf array + [] let pick f (array: _[]) = checkNonNull "array" array diff --git a/src/fsharp/FSharp.Core/array.fsi b/src/fsharp/FSharp.Core/array.fsi index 95b8287436e..a3a37df7e5e 100644 --- a/src/fsharp/FSharp.Core/array.fsi +++ b/src/fsharp/FSharp.Core/array.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections @@ -716,7 +716,7 @@ namespace Microsoft.FSharp.Collections /// The input array. /// Thrown when the input array is null. /// Thrown when the input array is empty. - /// The final result of the redcutions. + /// The final result of the reductions. [] val reduce: reduction:('T -> 'T -> 'T) -> array:'T[] -> 'T @@ -1171,7 +1171,7 @@ namespace Microsoft.FSharp.Collections /// Create an array given the dimension and a generator function to compute the elements. /// /// Performs the operation in parallel using System.Threading.Parallel.For. - /// The order in which the given function is applied to indicies is not specified. + /// The order in which the given function is applied to indices is not specified. /// /// /// 'T[] @@ -1183,7 +1183,7 @@ namespace Microsoft.FSharp.Collections /// respectively /// /// Performs the operation in parallel using System.Threading.Parallel.For. - /// The order in which the given function is applied to indicies is not specified. + /// The order in which the given function is applied to indices is not specified. /// The function to test the input elements. /// The input array. /// 'T[] * 'T[] diff --git a/src/fsharp/FSharp.Core/array2.fs b/src/fsharp/FSharp.Core/array2.fs index 10af4df8cee..fd3784ad477 100644 --- a/src/fsharp/FSharp.Core/array2.fs +++ b/src/fsharp/FSharp.Core/array2.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections diff --git a/src/fsharp/FSharp.Core/array2.fsi b/src/fsharp/FSharp.Core/array2.fsi index a6ecaf55d6f..6571618a6e1 100644 --- a/src/fsharp/FSharp.Core/array2.fsi +++ b/src/fsharp/FSharp.Core/array2.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections @@ -39,7 +39,7 @@ namespace Microsoft.FSharp.Collections /// Builds a new array whose elements are the same as the input array. /// - /// For non-zero-based arrays the basing on an input array will be propogated to the output + /// For non-zero-based arrays the basing on an input array will be propagated to the output /// array. /// /// The input array. @@ -170,7 +170,7 @@ namespace Microsoft.FSharp.Collections /// Builds a new array whose elements are the results of applying the given function /// to each of the elements of the array. /// - /// For non-zero-based arrays the basing on an input array will be propogated to the output + /// For non-zero-based arrays the basing on an input array will be propagated to the output /// array. /// /// A function that is applied to transform each item of the input array. diff --git a/src/fsharp/FSharp.Core/array3.fs b/src/fsharp/FSharp.Core/array3.fs index 6f930c7af93..db94d654894 100644 --- a/src/fsharp/FSharp.Core/array3.fs +++ b/src/fsharp/FSharp.Core/array3.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections diff --git a/src/fsharp/FSharp.Core/array3.fsi b/src/fsharp/FSharp.Core/array3.fsi index 248d7941dad..01736c88b2a 100644 --- a/src/fsharp/FSharp.Core/array3.fsi +++ b/src/fsharp/FSharp.Core/array3.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections @@ -45,7 +45,7 @@ namespace Microsoft.FSharp.Collections [] val iter: action:('T -> unit) -> array:'T[,,] -> unit - /// Applies the given function to each element of the array. The integer indicies passed to the + /// Applies the given function to each element of the array. The integer indices passed to the /// function indicates the index of element. /// The function to apply to each element of the array. /// The input array. @@ -73,7 +73,7 @@ namespace Microsoft.FSharp.Collections /// Builds a new array whose elements are the results of applying the given function /// to each of the elements of the array. /// - /// For non-zero-based arrays the basing on an input array will be propogated to the output + /// For non-zero-based arrays the basing on an input array will be propagated to the output /// array. /// The function to transform each element of the array. /// The input array. @@ -85,7 +85,7 @@ namespace Microsoft.FSharp.Collections /// to each of the elements of the array. The integer indices passed to the /// function indicates the element being transformed. /// - /// For non-zero-based arrays the basing on an input array will be propogated to the output + /// For non-zero-based arrays the basing on an input array will be propagated to the output /// array. /// The function to transform the elements at each index in the array. /// The input array. diff --git a/src/fsharp/FSharp.Core/collections.fs b/src/fsharp/FSharp.Core/collections.fs index 6c4e2b23fa8..07e207db164 100644 --- a/src/fsharp/FSharp.Core/collections.fs +++ b/src/fsharp/FSharp.Core/collections.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections diff --git a/src/fsharp/FSharp.Core/collections.fsi b/src/fsharp/FSharp.Core/collections.fsi index 10e71fceb96..46abd6bb6d8 100644 --- a/src/fsharp/FSharp.Core/collections.fsi +++ b/src/fsharp/FSharp.Core/collections.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// This namespace contains some common collections in a style primarily designed for use from F#. diff --git a/src/fsharp/FSharp.Core/control.fs b/src/fsharp/FSharp.Core/control.fs index 43c39459ee8..861852b8d1b 100644 --- a/src/fsharp/FSharp.Core/control.fs +++ b/src/fsharp/FSharp.Core/control.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #if FX_NO_CANCELLATIONTOKEN_CLASSES namespace System @@ -1226,7 +1226,7 @@ namespace Microsoft.FSharp.Control module CancellationTokenOps = /// Run the asynchronous workflow and wait for its result. - let RunSynchronously (token:CancellationToken,computation,timeout) = + let private RunSynchronouslyInAnotherThread (token:CancellationToken,computation,timeout) = let token,innerCTS = // If timeout is provided, we govern the async by our own CTS, to cancel // when execution times out. Otherwise, the user-supplied token governs the async. @@ -1261,6 +1261,40 @@ namespace Microsoft.FSharp.Control | None -> () commit res + let private RunSynchronouslyInCurrentThread (token:CancellationToken,computation) = + use resultCell = new ResultCell>() + let trampolineHolder = TrampolineHolder() + + trampolineHolder.Protect + (fun () -> + startA + token + trampolineHolder + (fun res -> resultCell.RegisterResult(Ok(res),reuseThread=true)) + (fun edi -> resultCell.RegisterResult(Error(edi),reuseThread=true)) + (fun exn -> resultCell.RegisterResult(Canceled(exn),reuseThread=true)) + computation) + |> unfake + + commit (resultCell.TryWaitForResultSynchronously() |> Option.get) + + let RunSynchronously (token:CancellationToken,computation,timeout) = + // Reuse the current ThreadPool thread if possible. Unfortunately + // Thread.IsThreadPoolThread isn't available on all profiles so + // we approximate it by testing synchronization context for null. + match SynchronizationContext.Current, timeout with + | null, None -> RunSynchronouslyInCurrentThread (token, computation) + // When the timeout is given we need a dedicated thread + // which cancels the computation. + // Performing the cancellation in the ThreadPool eg. by using + // Timer from System.Threading or CancellationTokenSource.CancelAfter + // (which internally uses Timer) won't work properly + // when the ThreadPool is busy. + // + // And so when the timeout is given we always use the current thread + // for the cancellation and run the computation in another thread. + | _ -> RunSynchronouslyInAnotherThread (token, computation, timeout) + let Start (token:CancellationToken,computation) = queueAsync token @@ -1287,7 +1321,7 @@ namespace Microsoft.FSharp.Control // The contract: // a) cancellation signal should always propagate to task - // b) CancellationTokenSource that produced a token must not be disposed until the the task.IsComplete + // b) CancellationTokenSource that produced a token must not be disposed until the task.IsComplete // We are: // 1) registering for cancellation signal here so that not to miss the signal // 2) disposing the registration just before setting result/exception on TaskCompletionSource - @@ -1414,8 +1448,7 @@ namespace Microsoft.FSharp.Control let count = ref tasks.Length let firstExn = ref None let results = Array.zeroCreate tasks.Length - // Attept to cancel the individual operations if an exception happens on any the other threads - //let failureCTS = new CancellationTokenSource() + // Attept to cancel the individual operations if an exception happens on any of the other threads let innerCTS = new LinkedSubSource(aux.token) let trampolineHolder = aux.trampolineHolder @@ -1463,6 +1496,54 @@ namespace Microsoft.FSharp.Control |> unfake); FakeUnit)) + static member Choice(computations : Async<'T option> seq) : Async<'T option> = + unprotectedPrimitive(fun args -> + let result = + try Seq.toArray computations |> Choice1Of2 + with exn -> ExceptionDispatchInfo.RestoreOrCapture exn |> Choice2Of2 + + match result with + | Choice2Of2 edi -> args.aux.econt edi + | Choice1Of2 [||] -> args.cont None + | Choice1Of2 computations -> + protectedPrimitiveCore args (fun args -> + let ({ aux = aux } as args) = delimitSyncContext args + let noneCount = ref 0 + let exnCount = ref 0 + let innerCts = new LinkedSubSource(aux.token) + let trampolineHolder = aux.trampolineHolder + + let scont (result : 'T option) = + match result with + | Some _ -> + if Interlocked.Increment exnCount = 1 then + innerCts.Cancel(); trampolineHolder.Protect(fun () -> args.cont result) + else + FakeUnit + + | None -> + if Interlocked.Increment noneCount = computations.Length then + innerCts.Cancel(); trampolineHolder.Protect(fun () -> args.cont None) + else + FakeUnit + + let econt (exn : ExceptionDispatchInfo) = + if Interlocked.Increment exnCount = 1 then + innerCts.Cancel(); trampolineHolder.Protect(fun () -> args.aux.econt exn) + else + FakeUnit + + let ccont (exn : OperationCanceledException) = + if Interlocked.Increment exnCount = 1 then + innerCts.Cancel(); trampolineHolder.Protect(fun () -> args.aux.ccont exn) + else + FakeUnit + + for c in computations do + queueAsync innerCts.Token scont econt ccont c |> unfake + + FakeUnit)) + #if FX_NO_TASK #else // Contains helpers that will attach continuation to the given task. @@ -1769,7 +1850,7 @@ namespace Microsoft.FSharp.Control // Call the cancellation routine match cancelAction with | None -> - // Register the result. This may race with a sucessful result, but + // Register the result. This may race with a successful result, but // ResultCell allows a race and throws away whichever comes last. once.Do(fun () -> let canceledResult = Canceled (OperationCanceledException()) @@ -1936,7 +2017,7 @@ namespace Microsoft.FSharp.Control | None -> // We've been cancelled without a cancel action. Stop listening to events event.RemoveHandler(del) - // Register the result. This may race with a sucessful result, but + // Register the result. This may race with a successful result, but // ResultCell allows a race and throws away whichever comes last. once.Do(fun () -> resultCell.RegisterResult(Canceled (OperationCanceledException()),reuseThread=true) |> unfake) | Some cancel -> @@ -2360,7 +2441,7 @@ namespace Microsoft.FSharp.Control // That continuation is a no-op now, but it is still a registered reader for arriving messages. // Therefore we just abandon it - a brutal way of canceling. // This ugly non-compositionality is only needed because we only support a single mailbox reader - // (i.e. the user is not allowed to run several Recieve/TryRecieve/Scan/TryScan in parallel) - otherwise + // (i.e. the user is not allowed to run several Receive/TryReceive/Scan/TryScan in parallel) - otherwise // we would just have an extra no-op reader in the queue. savedCont <- None) diff --git a/src/fsharp/FSharp.Core/control.fsi b/src/fsharp/FSharp.Core/control.fsi index ea3959af4d9..d9477f582e5 100644 --- a/src/fsharp/FSharp.Core/control.fsi +++ b/src/fsharp/FSharp.Core/control.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #if FX_NO_CANCELLATIONTOKEN_CLASSES namespace System @@ -264,10 +264,25 @@ namespace Microsoft.FSharp.Control /// The overall computation will respond to cancellation while executing the child computations. /// If cancelled, the computation will cancel any remaining child computations but will still wait /// for the other child computations to complete. - /// A sequence of distinct computations to be parallelized. + /// A sequence of distinct computations to be parallelized. /// A computation that returns an array of values from the sequence of input computations. static member Parallel : computations:seq> -> Async<'T[]> + /// Creates an asynchronous computation that executes all given asynchronous computations in parallel, + /// returning the result of the first succeeding computation (one whose result is 'Some x'). + /// If all child computations complete with None, the parent computation also returns None. + /// + /// + /// If any child computation raises an exception, then the overall computation will trigger an + /// exception, and cancel the others. + /// + /// The overall computation will respond to cancellation while executing the child computations. + /// If cancelled, the computation will cancel any remaining child computations but will still wait + /// for the other child computations to complete. + /// A sequence of computations to be parallelized. + /// A computation that returns the first succeeding computation. + static member Choice : computations:seq> -> Async<'T option> + //---------- Thread Control /// Creates an asynchronous computation that creates a new thread and runs @@ -375,7 +390,7 @@ namespace Microsoft.FSharp.Control static member FromBeginEnd : beginAction:(System.AsyncCallback * obj -> System.IAsyncResult) * endAction:(System.IAsyncResult -> 'T) * ?cancelAction : (unit -> unit) -> Async<'T> /// Creates an asynchronous computation in terms of a Begin/End pair of actions in - /// the style used in CLI APIs. This overlaod should be used if the operation is + /// the style used in CLI APIs. This overload should be used if the operation is /// qualified by one argument. For example, /// Async.FromBeginEnd(place,ws.BeginGetWeather,ws.EndGetWeather) /// When the computation is run, beginFunc is executed, with @@ -396,7 +411,7 @@ namespace Microsoft.FSharp.Control static member FromBeginEnd : arg:'Arg1 * beginAction:('Arg1 * System.AsyncCallback * obj -> System.IAsyncResult) * endAction:(System.IAsyncResult -> 'T) * ?cancelAction : (unit -> unit) -> Async<'T> /// Creates an asynchronous computation in terms of a Begin/End pair of actions in - /// the style used in CLI APIs. This overlaod should be used if the operation is + /// the style used in CLI APIs. This overload should be used if the operation is /// qualified by two arguments. For example, /// Async.FromBeginEnd(arg1,arg2,ws.BeginGetWeather,ws.EndGetWeather) /// When the computation is run, beginFunc is executed, with @@ -418,7 +433,7 @@ namespace Microsoft.FSharp.Control static member FromBeginEnd : arg1:'Arg1 * arg2:'Arg2 * beginAction:('Arg1 * 'Arg2 * System.AsyncCallback * obj -> System.IAsyncResult) * endAction:(System.IAsyncResult -> 'T) * ?cancelAction : (unit -> unit) -> Async<'T> /// Creates an asynchronous computation in terms of a Begin/End pair of actions in - /// the style used in CLI APIs. This overlaod should be used if the operation is + /// the style used in CLI APIs. This overload should be used if the operation is /// qualified by three arguments. For example, /// Async.FromBeginEnd(arg1,arg2,arg3,ws.BeginGetWeather,ws.EndGetWeather) /// When the computation is run, beginFunc is executed, with @@ -629,7 +644,7 @@ namespace Microsoft.FSharp.Control /// The input computation. /// The action to be run after computation completes or raises an /// exception (including cancellation). - /// An asynchronous computation that executes computation and compensation aftewards or + /// An asynchronous computation that executes computation and compensation afterwards or /// when an exception is raised. member TryFinally : computation:Async<'T> * compensation:(unit -> unit) -> Async<'T> @@ -809,7 +824,7 @@ namespace Microsoft.FSharp.Control /// the message to be sent. /// An optional timeout parameter (in milliseconds) to wait for a reply message. /// Defaults to -1 which corresponds to System.Threading.Timeout.Infinite. - /// An asychronous computation that will wait for the reply from the agent. + /// An asynchronous computation that will wait for the reply from the agent. member PostAndAsyncReply : buildMessage:(AsyncReplyChannel<'Reply> -> 'Msg) * ?timeout : int -> Async<'Reply> /// Like PostAndReply, but returns None if no reply within the timeout period. diff --git a/src/fsharp/FSharp.Core/event.fs b/src/fsharp/FSharp.Core/event.fs index 205f3f4f594..f5e1c87ff31 100644 --- a/src/fsharp/FSharp.Core/event.fs +++ b/src/fsharp/FSharp.Core/event.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Control diff --git a/src/fsharp/FSharp.Core/event.fsi b/src/fsharp/FSharp.Core/event.fsi index 21061a558b0..520137ee0fc 100644 --- a/src/fsharp/FSharp.Core/event.fsi +++ b/src/fsharp/FSharp.Core/event.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Control diff --git a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs index 0fa7edf74e2..ff70ac66a50 100644 --- a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs +++ b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Core @@ -8,6 +8,7 @@ module ExtraTopLevelOperators = open System.Collections.Generic open System.IO open System.Diagnostics + open System.Reflection open Microsoft.FSharp open Microsoft.FSharp.Core open Microsoft.FSharp.Core.Operators @@ -30,65 +31,84 @@ module ExtraTopLevelOperators = [] let set l = Collections.Set.ofSeq l - [] - let dict l = - // Use a dictionary (this requires hashing and equality on the key type) - // Wrap keys in a StructBox in case they are null (when System.Collections.Generic.Dictionary fails). - let t = new Dictionary,_>(RuntimeHelpers.StructBox<'Key>.Comparer) + let dummyArray = [||] + let inline dont_tail_call f = + let result = f () + dummyArray.Length |> ignore // pretty stupid way to avoid tail call, would be better if attribute existed, but this should be inlineable by the JIT + result + + let inline ICollection_Contains<'collection,'item when 'collection :> ICollection<'item>> (collection:'collection) (item:'item) = + collection.Contains item + + let inline dictImpl (comparer:IEqualityComparer<'SafeKey>) (makeSafeKey:'Key->'SafeKey) (getKey:'SafeKey->'Key) (l:seq<'Key*'T>) = + let t = Dictionary comparer for (k,v) in l do - t.[RuntimeHelpers.StructBox(k)] <- v - let d = (t :> IDictionary<_,_>) - let c = (t :> ICollection<_>) + t.[makeSafeKey k] <- v // Give a read-only view of the dictionary { new IDictionary<'Key, 'T> with member s.Item - with get x = d.[RuntimeHelpers.StructBox(x)] + with get x = dont_tail_call (fun () -> t.[makeSafeKey x]) and set x v = raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))) member s.Keys = - let keys = d.Keys + let keys = t.Keys { new ICollection<'Key> with member s.Add(x) = raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))); member s.Clear() = raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))); member s.Remove(x) = raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))); - member s.Contains(x) = keys.Contains(RuntimeHelpers.StructBox(x)) + member s.Contains(x) = t.ContainsKey (makeSafeKey x) member s.CopyTo(arr,i) = let mutable n = 0 for k in keys do - arr.[i+n] <- k.Value + arr.[i+n] <- getKey k n <- n + 1 member s.IsReadOnly = true member s.Count = keys.Count interface IEnumerable<'Key> with - member s.GetEnumerator() = (keys |> Seq.map (fun v -> v.Value)).GetEnumerator() + member s.GetEnumerator() = (keys |> Seq.map getKey).GetEnumerator() interface System.Collections.IEnumerable with - member s.GetEnumerator() = ((keys |> Seq.map (fun v -> v.Value)) :> System.Collections.IEnumerable).GetEnumerator() } + member s.GetEnumerator() = ((keys |> Seq.map getKey) :> System.Collections.IEnumerable).GetEnumerator() } - member s.Values = d.Values + member s.Values = upcast t.Values member s.Add(k,v) = raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))) - member s.ContainsKey(k) = d.ContainsKey(RuntimeHelpers.StructBox(k)) + member s.ContainsKey(k) = dont_tail_call (fun () -> t.ContainsKey(makeSafeKey k)) member s.TryGetValue(k,r) = - let key = RuntimeHelpers.StructBox(k) - if d.ContainsKey(key) then (r <- d.[key]; true) else false + let safeKey = makeSafeKey k + if t.ContainsKey(safeKey) then (r <- t.[safeKey]; true) else false member s.Remove(k : 'Key) = (raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))) : bool) interface ICollection> with member s.Add(x) = raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))); member s.Clear() = raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))); member s.Remove(x) = raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))); - member s.Contains(KeyValue(k,v)) = c.Contains(KeyValuePair<_,_>(RuntimeHelpers.StructBox(k),v)) + member s.Contains(KeyValue(k,v)) = ICollection_Contains t (KeyValuePair<_,_>(makeSafeKey k,v)) member s.CopyTo(arr,i) = let mutable n = 0 - for (KeyValue(k,v)) in c do - arr.[i+n] <- KeyValuePair<_,_>(k.Value,v) + for (KeyValue(k,v)) in t do + arr.[i+n] <- KeyValuePair<_,_>(getKey k,v) n <- n + 1 member s.IsReadOnly = true - member s.Count = c.Count + member s.Count = t.Count interface IEnumerable> with member s.GetEnumerator() = - (c |> Seq.map (fun (KeyValue(k,v)) -> KeyValuePair<_,_>(k.Value,v))).GetEnumerator() + (t |> Seq.map (fun (KeyValue(k,v)) -> KeyValuePair<_,_>(getKey k,v))).GetEnumerator() interface System.Collections.IEnumerable with member s.GetEnumerator() = - ((c |> Seq.map (fun (KeyValue(k,v)) -> KeyValuePair<_,_>(k.Value,v))) :> System.Collections.IEnumerable).GetEnumerator() } + ((t |> Seq.map (fun (KeyValue(k,v)) -> KeyValuePair<_,_>(getKey k,v))) :> System.Collections.IEnumerable).GetEnumerator() } + // We avoid wrapping a StructBox, because under 64 JIT we get some "hard" tailcalls which affect performance + let dictValueType (l:seq<'Key*'T>) = dictImpl HashIdentity.Structural<'Key> id id l + + // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation + let dictRefType (l:seq<'Key*'T>) = dictImpl RuntimeHelpers.StructBox<'Key>.Comparer (fun k -> RuntimeHelpers.StructBox k) (fun sb -> sb.Value) l + + [] + let dict (l:seq<'Key*'T>) = +#if FX_RESHAPED_REFLECTION + if (typeof<'Key>).GetTypeInfo().IsValueType +#else + if typeof<'Key>.IsValueType +#endif + then dictValueType l + else dictRefType l let getArray (vals : seq<'T>) = match vals with diff --git a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi index 1fbedfad29c..33a3c9a03e6 100644 --- a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi +++ b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Pervasives: Additional bindings available at the top level namespace Microsoft.FSharp.Core @@ -73,7 +73,7 @@ module ExtraTopLevelOperators = [] val set : elements:seq<'T> -> Set<'T> - /// Builds an aysnchronous workflow using computation expression syntax. + /// Builds an asynchronous workflow using computation expression syntax. [] val async : Microsoft.FSharp.Control.AsyncBuilder diff --git a/src/fsharp/FSharp.Core/list.fs b/src/fsharp/FSharp.Core/list.fs index 541e5e31fc3..f05e9097f1a 100644 --- a/src/fsharp/FSharp.Core/list.fs +++ b/src/fsharp/FSharp.Core/list.fs @@ -1,8 +1,9 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections open System.Diagnostics + open System.Reflection open Microsoft.FSharp.Core open Microsoft.FSharp.Core.Operators open Microsoft.FSharp.Core.LanguagePrimitives @@ -41,23 +42,38 @@ namespace Microsoft.FSharp.Collections [] let concat lists = Microsoft.FSharp.Primitives.Basics.List.concat lists - [] - let countBy projection (list:'T list) = - let dict = new Dictionary,int>(Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer) + let inline countByImpl (comparer:IEqualityComparer<'SafeKey>) (projection:'T->'SafeKey) (getKey:'SafeKey->'Key) (list:'T list) = + let dict = Dictionary comparer let rec loop srcList = match srcList with | [] -> () | h::t -> - let key = Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (projection h) + let safeKey = projection h let mutable prev = 0 - if dict.TryGetValue(key, &prev) then dict.[key] <- prev + 1 else dict.[key] <- 1 + if dict.TryGetValue(safeKey, &prev) then dict.[safeKey] <- prev + 1 else dict.[safeKey] <- 1 loop t loop list let mutable result = [] for group in dict do - result <- (group.Key.Value, group.Value) :: result + result <- (getKey group.Key, group.Value) :: result result |> rev + // We avoid wrapping a StructBox, because under 64 JIT we get some "hard" tailcalls which affect performance + let countByValueType (projection:'T->'Key) (list:'T list) = countByImpl HashIdentity.Structural<'Key> projection id list + + // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation + let countByRefType (projection:'T->'Key) (list:'T list) = countByImpl Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (projection t)) (fun sb -> sb.Value) list + + [] + let countBy (projection:'T->'Key) (list:'T list) = +#if FX_RESHAPED_REFLECTION + if (typeof<'Key>).GetTypeInfo().IsValueType +#else + if typeof<'Key>.IsValueType +#endif + then countByValueType projection list + else countByRefType projection list + [] let map f list = Microsoft.FSharp.Primitives.Basics.List.map f list @@ -434,31 +450,46 @@ namespace Microsoft.FSharp.Collections [] let where f x = Microsoft.FSharp.Primitives.Basics.List.filter f x - [] - let groupBy keyf (list: 'T list) = - let dict = new Dictionary,ResizeArray<'T>>(Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer) + let inline groupByImpl (comparer:IEqualityComparer<'SafeKey>) (keyf:'T->'SafeKey) (getKey:'SafeKey->'Key) (list: 'T list) = + let dict = Dictionary<_,ResizeArray<_>> comparer // Build the groupings let rec loop list = match list with | v :: t -> - let key = Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (keyf v) - let ok,prev = dict.TryGetValue(key) - if ok then - prev.Add(v) + let safeKey = keyf v + let mutable prev = Unchecked.defaultof<_> + if dict.TryGetValue(safeKey, &prev) then + prev.Add v else - let prev = new ResizeArray<'T>(1) - dict.[key] <- prev - prev.Add(v) + let prev = ResizeArray () + dict.[safeKey] <- prev + prev.Add v loop t | _ -> () loop list // Return the list-of-lists. dict - |> Seq.map (fun group -> (group.Key.Value, Seq.toList group.Value)) + |> Seq.map (fun group -> (getKey group.Key, Seq.toList group.Value)) |> Seq.toList + // We avoid wrapping a StructBox, because under 64 JIT we get some "hard" tailcalls which affect performance + let groupByValueType (keyf:'T->'Key) (list:'T list) = groupByImpl HashIdentity.Structural<'Key> keyf id list + + // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation + let groupByRefType (keyf:'T->'Key) (list:'T list) = groupByImpl Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer (fun t -> Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (keyf t)) (fun sb -> sb.Value) list + + [] + let groupBy (keyf:'T->'Key) (list:'T list) = +#if FX_RESHAPED_REFLECTION + if (typeof<'Key>).GetTypeInfo().IsValueType +#else + if typeof<'Key>.IsValueType +#endif + then groupByValueType keyf list + else groupByRefType keyf list + [] let partition p x = Microsoft.FSharp.Primitives.Basics.List.partition p x diff --git a/src/fsharp/FSharp.Core/list.fsi b/src/fsharp/FSharp.Core/list.fsi index dfffdce32ea..81ff331539b 100644 --- a/src/fsharp/FSharp.Core/list.fsi +++ b/src/fsharp/FSharp.Core/list.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index ae109683b7e..6c19f151d29 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Primitives.Basics diff --git a/src/fsharp/FSharp.Core/local.fsi b/src/fsharp/FSharp.Core/local.fsi index 8c3f604096f..8896bf5ebed 100644 --- a/src/fsharp/FSharp.Core/local.fsi +++ b/src/fsharp/FSharp.Core/local.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Definitions internal for this library. namespace Microsoft.FSharp.Primitives.Basics diff --git a/src/fsharp/FSharp.Core/map.fs b/src/fsharp/FSharp.Core/map.fs index be2d96db02d..ce7910eea56 100644 --- a/src/fsharp/FSharp.Core/map.fs +++ b/src/fsharp/FSharp.Core/map.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections diff --git a/src/fsharp/FSharp.Core/map.fsi b/src/fsharp/FSharp.Core/map.fsi index c5ba89e74bd..4ea9622c3c6 100644 --- a/src/fsharp/FSharp.Core/map.fsi +++ b/src/fsharp/FSharp.Core/map.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections @@ -16,7 +16,8 @@ namespace Microsoft.FSharp.Collections [] [] type Map<[]'Key,[]'Value when 'Key : comparison> = - /// Returns a new map with the binding added to the given map. + /// Returns a new map with the binding added to the given map. + /// If a binding with the given key already exists in the input map, the existing binding is replaced by the new binding in the result map. /// The input key. /// The resulting map. member Add: key:'Key * value:'Value -> Map<'Key,'Value> @@ -67,7 +68,8 @@ namespace Microsoft.FSharp.Collections [] module Map = - /// Returns a new map with the binding added to the given map. + /// Returns a new map with the binding added to the given map. + /// If a binding with the given key already exists in the input map, the existing binding is replaced by the new binding in the result map. /// The input key. /// The input value. /// The input map. diff --git a/src/fsharp/FSharp.Core/math/n.fs b/src/fsharp/FSharp.Core/math/n.fs index 09b779b9dee..9dd5f1e7de1 100644 --- a/src/fsharp/FSharp.Core/math/n.fs +++ b/src/fsharp/FSharp.Core/math/n.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Math diff --git a/src/fsharp/FSharp.Core/math/n.fsi b/src/fsharp/FSharp.Core/math/n.fsi index 32e8af84fcd..56a56a02aba 100644 --- a/src/fsharp/FSharp.Core/math/n.fsi +++ b/src/fsharp/FSharp.Core/math/n.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Math diff --git a/src/fsharp/FSharp.Core/math/z.fs b/src/fsharp/FSharp.Core/math/z.fs index 6cdce310cfd..ae03db625d1 100644 --- a/src/fsharp/FSharp.Core/math/z.fs +++ b/src/fsharp/FSharp.Core/math/z.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #nowarn "44" // This construct is deprecated. This function is for use by compiled F# code and should not be used directly namespace System.Numerics diff --git a/src/fsharp/FSharp.Core/math/z.fsi b/src/fsharp/FSharp.Core/math/z.fsi index a87c2b50f0d..0cd32f7b3bb 100644 --- a/src/fsharp/FSharp.Core/math/z.fsi +++ b/src/fsharp/FSharp.Core/math/z.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace System.Numerics #if FX_NO_BIGINT @@ -83,26 +83,26 @@ namespace Microsoft.FSharp.Core type bigint = System.Numerics.BigInteger [] - /// Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + /// Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' module NumericLiterals = - /// Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + /// Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' module NumericLiteralI = open System.Numerics - /// Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + /// Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' val FromZero : value:unit -> 'T - /// Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + /// Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' val FromOne : value:unit -> 'T - /// Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + /// Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' val FromInt32 : value:int32 -> 'T - /// Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + /// Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' val FromInt64 : value:int64 -> 'T - /// Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + /// Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' val FromString : text:string -> 'T - /// Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + /// Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' val FromInt64Dynamic : value:int64 -> obj - /// Provides a default implementations of F# numeric literal syntax for literals fo the form 'dddI' + /// Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' val FromStringDynamic : text:string -> obj diff --git a/src/fsharp/FSharp.Core/nativeptr.fs b/src/fsharp/FSharp.Core/nativeptr.fs index 20bc60a99db..858fb66f480 100644 --- a/src/fsharp/FSharp.Core/nativeptr.fs +++ b/src/fsharp/FSharp.Core/nativeptr.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.NativeInterop diff --git a/src/fsharp/FSharp.Core/nativeptr.fsi b/src/fsharp/FSharp.Core/nativeptr.fsi index 912722548ec..867f4784fbf 100644 --- a/src/fsharp/FSharp.Core/nativeptr.fsi +++ b/src/fsharp/FSharp.Core/nativeptr.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.NativeInterop diff --git a/src/fsharp/FSharp.Core/option.fs b/src/fsharp/FSharp.Core/option.fs index eec8bf383a7..ff08b2e4cab 100644 --- a/src/fsharp/FSharp.Core/option.fs +++ b/src/fsharp/FSharp.Core/option.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Core diff --git a/src/fsharp/FSharp.Core/option.fsi b/src/fsharp/FSharp.Core/option.fsi index c9bea0f908e..27432956f03 100644 --- a/src/fsharp/FSharp.Core/option.fsi +++ b/src/fsharp/FSharp.Core/option.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Core diff --git a/src/fsharp/FSharp.Core/prim-types-prelude.fs b/src/fsharp/FSharp.Core/prim-types-prelude.fs index 3f30de26bb2..4f4966ce652 100644 --- a/src/fsharp/FSharp.Core/prim-types-prelude.fs +++ b/src/fsharp/FSharp.Core/prim-types-prelude.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Core diff --git a/src/fsharp/FSharp.Core/prim-types-prelude.fsi b/src/fsharp/FSharp.Core/prim-types-prelude.fsi index e96bc75527a..13754b0cf57 100644 --- a/src/fsharp/FSharp.Core/prim-types-prelude.fsi +++ b/src/fsharp/FSharp.Core/prim-types-prelude.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #nowarn "35" // This construct is deprecated: the treatment of this operator is now handled directly by the F# compiler and its meaning may not be redefined. #nowarn "61" // The containing type can use null as a representation value for its nullary union case. This member will be compiled as a static member. diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 24e6f71c967..bf1168b597d 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #nowarn "25" // Incomplete match expressions #nowarn "35" // This construct is deprecated: the treatment of this operator is now handled directly by the F# compiler and its meaning may not be redefined. @@ -402,7 +402,9 @@ namespace Microsoft.FSharp.Core type System.Type with member inline this.IsGenericType = this.GetTypeInfo().IsGenericType member inline this.IsValueType = this.GetTypeInfo().IsValueType + member inline this.IsSealed = this.GetTypeInfo().IsSealed member inline this.IsAssignableFrom(otherTy : Type) = this.GetTypeInfo().IsAssignableFrom(otherTy.GetTypeInfo()) + member inline this.GetGenericArguments() = this.GetTypeInfo().GenericTypeArguments member inline this.GetProperty(name) = this.GetRuntimeProperty(name) member inline this.GetMethod(name, parameterTypes) = this.GetRuntimeMethod(name, parameterTypes) member inline this.GetCustomAttributes(attrTy : Type, inherits : bool) : obj[] = @@ -412,7 +414,6 @@ namespace Microsoft.FSharp.Core #endif - module BasicInlinedOperations = let inline unboxPrim<'T>(x:obj) = (# "unbox.any !0" type ('T) x : 'T #) let inline box (x:'T) = (# "box !0" type ('T) x : obj #) @@ -719,32 +720,33 @@ namespace Microsoft.FSharp.Core // duplicated from above since we're using integers in this section let CompilationRepresentationFlags_PermitNull = 8 + let getTypeInfo (ty:Type) = + if ty.IsValueType + then TypeNullnessSemantics_NullNever else + let mappingAttrs = ty.GetCustomAttributes(typeof, false) + if mappingAttrs.Length = 0 + then TypeNullnessSemantics_NullIsExtraValue + elif ty.Equals(typeof) then + TypeNullnessSemantics_NullTrueValue + elif typeof.IsAssignableFrom(ty) then + TypeNullnessSemantics_NullIsExtraValue + elif ty.GetCustomAttributes(typeof, false).Length > 0 then + TypeNullnessSemantics_NullIsExtraValue + else + let reprAttrs = ty.GetCustomAttributes(typeof, false) + if reprAttrs.Length = 0 then + TypeNullnessSemantics_NullNotLiked + else + let reprAttr = get reprAttrs 0 + let reprAttr = (# "unbox.any !0" type (CompilationRepresentationAttribute) reprAttr : CompilationRepresentationAttribute #) + if (# "and" reprAttr.Flags CompilationRepresentationFlags_PermitNull : int #) = 0 + then TypeNullnessSemantics_NullNotLiked + else TypeNullnessSemantics_NullTrueValue + [] type TypeInfo<'T>() = // Compute an on-demand per-instantiation static field - static let info = - let ty = typeof<'T> - if ty.IsValueType - then TypeNullnessSemantics_NullNever else - let mappingAttrs = ty.GetCustomAttributes(typeof, false) - if mappingAttrs.Length = 0 - then TypeNullnessSemantics_NullIsExtraValue - elif ty.Equals(typeof) then - TypeNullnessSemantics_NullTrueValue - elif typeof.IsAssignableFrom(ty) then - TypeNullnessSemantics_NullIsExtraValue - elif ty.GetCustomAttributes(typeof, false).Length > 0 then - TypeNullnessSemantics_NullIsExtraValue - else - let reprAttrs = ty.GetCustomAttributes(typeof, false) - if reprAttrs.Length = 0 then - TypeNullnessSemantics_NullNotLiked - else - let reprAttr = get reprAttrs 0 - let reprAttr = (# "unbox.any !0" type (CompilationRepresentationAttribute) reprAttr : CompilationRepresentationAttribute #) - if (# "and" reprAttr.Flags CompilationRepresentationFlags_PermitNull : int #) = 0 - then TypeNullnessSemantics_NullNotLiked - else TypeNullnessSemantics_NullTrueValue + static let info = getTypeInfo typeof<'T> // Publish the results of that compuation static member TypeInfo = info @@ -903,7 +905,10 @@ namespace Microsoft.FSharp.Core let anyToStringShowingNull x = anyToString "null" x module HashCompare = - + open System.Reflection + open System.Linq.Expressions + open System.Runtime.CompilerServices + //------------------------------------------------------------------------- // LangaugePrimitives.HashCompare: Physical Equality //------------------------------------------------------------------------- @@ -947,13 +952,20 @@ namespace Microsoft.FSharp.Core /// This type has two instances - fsComparerER and fsComparerThrow. /// - fsComparerER = ER semantics = no throw on NaN comparison = new GenericComparer(false) = GenericComparer = GenericComparison /// - fsComparerPER = PER semantics = local throw on NaN comparison = new GenericComparer(true) = LessThan/GreaterThan etc. - type GenericComparer(throwsOnPER:bool) = + type ComparerType = + | ER = 0 + | PER_lt = 1 + | PER_gt = 2 + + type GenericComparer(comparerType:ComparerType) = interface System.Collections.IComparer - member c.ThrowsOnPER = throwsOnPER + member c.ComparerType = comparerType - /// The unique exception object that is thrown locally when NaNs are compared in PER mode (by fsComparerPER) - /// This exception should never be observed by user code. - let NaNException = new System.Exception() + let getPERNaNCompareToResult (comp:GenericComparer) = + match comp.ComparerType with + | ComparerType.PER_gt -> -2 + | ComparerType.PER_lt -> 2 + | _ -> raise (Exception "Invalid logic") /// Implements generic comparison between two objects. This corresponds to the pseudo-code in the F# /// specification. The treatment of NaNs is governed by "comp". @@ -978,17 +990,21 @@ namespace Microsoft.FSharp.Core | (:? IStructuralComparable as x),_ -> x.CompareTo(yobj,comp) // Check for IComparable - | (:? System.IComparable as x),_ -> - if comp.ThrowsOnPER then - match xobj,yobj with - | (:? float as x),(:? float as y) -> - if (System.Double.IsNaN x || System.Double.IsNaN y) then - raise NaNException - | (:? float32 as x),(:? float32 as y) -> - if (System.Single.IsNaN x || System.Single.IsNaN y) then - raise NaNException - | _ -> () - x.CompareTo(yobj) + | (:? System.IComparable as x),_ -> + if comp.ComparerType.Equals ComparerType.ER then + x.CompareTo yobj + else + match xobj, yobj with + | (:? float as x), (:? float as y) -> + if System.Double.IsNaN x || System.Double.IsNaN y + then getPERNaNCompareToResult comp + else x.CompareTo y + | (:? float32 as x), (:? float32 as y) -> + if System.Single.IsNaN x || System.Single.IsNaN y + then getPERNaNCompareToResult comp + else x.CompareTo y + | _ -> x.CompareTo yobj + | (:? nativeint as x),(:? nativeint as y) -> if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) | (:? unativeint as x),(:? unativeint as y) -> if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) | _,(:? IStructuralComparable as yc) -> @@ -1179,13 +1195,917 @@ namespace Microsoft.FSharp.Core type GenericComparer with interface System.Collections.IComparer with override c.Compare(x:obj,y:obj) = GenericCompare c (x,y) - + /// The unique object for comparing values in PER mode (where local exceptions are thrown when NaNs are compared) - let fsComparerPER = GenericComparer(true) + let fsComparerPER_gt = GenericComparer ComparerType.PER_gt + let fsComparerPER_lt = GenericComparer ComparerType.PER_lt /// The unique object for comparing values in ER mode (where "0" is returned when NaNs are compared) - let fsComparerER = GenericComparer(false) - + let fsComparerER = GenericComparer ComparerType.ER :> System.Collections.IComparer + + // eliminate_tail_call_xxx are to elimate tail calls which are a problem with value types > 64 bits + // and the 64-bit JIT due to the amd64 calling convention which needs to do some magic. + let inline eliminate_tail_call_int x = 0 + x + let inline eliminate_tail_call_bool x = + // previously: not (not (x)) + // but found that the following also removes tail calls, although this could obviously + // change if the fsharp optimizer is changed... + match x with + | true -> true + | false -> false + + // Used to denote the use of a struct that is not initialized, because we are using them to + // denote pure functions that have no state + let phantom<'t> = unsafeDefault<'t> + + type IEssenceOfCompareTo<'a> = + abstract Ensorcel : IComparer * 'a * 'a -> int + + type IEssenceOfEquals<'a> = + abstract Ensorcel : IEqualityComparer * 'a * 'a -> bool + + type IEssenceOfGetHashCode<'a> = + abstract Ensorcel : IEqualityComparer * 'a -> int + + module ComparerTypes = + let getPERNaNResult (comp:IComparer) = + match comp with + | :? GenericComparer as comp -> getPERNaNCompareToResult comp + | _ -> raise (Exception "invalid logic") + + [] + type FloatPER = + interface IEssenceOfCompareTo with + member __.Ensorcel (c,x,y) = + if System.Double.IsNaN x || System.Double.IsNaN y + then getPERNaNResult c + else x.CompareTo y + + [] + type Float32PER = + interface IEssenceOfCompareTo with + member __.Ensorcel (c,x,y) = + if System.Single.IsNaN x || System.Single.IsNaN y + then getPERNaNResult c + else x.CompareTo y + + [] + type NullableFloatPER = + interface IEssenceOfCompareTo> with + member __.Ensorcel (c,x,y) = + match x.HasValue, y.HasValue with + | false, false -> 0 + | false, _ -> -1 + | _, false -> +1 + | _ -> + if System.Double.IsNaN x.Value || System.Double.IsNaN y.Value + then getPERNaNResult c + else x.Value.CompareTo y.Value + + [] + type NullableFloat32PER = + interface IEssenceOfCompareTo> with + member __.Ensorcel (c,x,y) = + match x.HasValue, y.HasValue with + | false, false -> 0 + | false, _ -> -1 + | _, false -> +1 + | _ -> + if System.Single.IsNaN x.Value || System.Single.IsNaN y.Value + then getPERNaNResult c + else x.Value.CompareTo y.Value + + [] + type FloatER = + interface IEssenceOfCompareTo with + member __.Ensorcel (_,x,y) = x.CompareTo y + + [] + type Float32ER = + interface IEssenceOfCompareTo with + member __.Ensorcel (_,x,y) = x.CompareTo y + + [] + type NullableFloatER = + interface IEssenceOfCompareTo> with + member __.Ensorcel (_,x,y) = + match x.HasValue, y.HasValue with + | false, false -> 0 + | false, _ -> -1 + | _, false -> +1 + | _ -> x.Value.CompareTo y.Value + + [] + type NullableFloat32ER = + interface IEssenceOfCompareTo> with + member __.Ensorcel (_,x,y) = + match x.HasValue, y.HasValue with + | false, false -> 0 + | false, _ -> -1 + | _, false -> +1 + | _ -> x.Value.CompareTo y.Value + + + [] type Bool = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + [] type Sbyte = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = (# "" x : int #) - (# "" y : int #) + [] type Int16 = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = (# "" x : int #) - (# "" y : int #) + [] type Int32 = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + [] type Int64 = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + [] type Nativeint = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + [] type Byte = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = (# "" x : int #) - (# "" y : int #) + [] type Uint16 = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = (# "" x : int #) - (# "" y : int #) + [] type Uint32 = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) + [] type Uint64 = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) + [] type Unativeint = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) + [] type Char = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = (# "" x : int #) - (# "" y : int #) + [] type String = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = System.String.CompareOrdinal((# "" x : string #) ,(# "" y : string #)) + [] type Decimal = interface IEssenceOfCompareTo with member __.Ensorcel (_,x,y) = System.Decimal.Compare((# "" x:decimal #), (# "" y:decimal #)) + + [] + type Tuple<'a,'b, + 'comp1,'comp2 + when 'comp1 :> IEssenceOfCompareTo<'a> and 'comp1 : (new : unit -> 'comp1) and 'comp1 : struct + and 'comp2 :> IEssenceOfCompareTo<'b> and 'comp2 : (new : unit -> 'comp2) and 'comp2 : struct + > = + interface IEssenceOfCompareTo> with + member __.Ensorcel (comparer:IComparer, x:System.Tuple<'a,'b>, y:System.Tuple<'a,'b>) = + match x, y with + | null, null -> 0 + | null, _ -> -1 + | _, null -> +1 + | _, _ -> + match phantom<'comp1>.Ensorcel (comparer, x.Item1, y.Item1) with + | x when x <> 0 -> x + | _ -> + eliminate_tail_call_int (phantom<'comp2>.Ensorcel (comparer, x.Item2, y.Item2)) + + [] + type Tuple<'a,'b,'c, + 'comp1,'comp2,'comp3 + when 'comp1 :> IEssenceOfCompareTo<'a> and 'comp1 : (new : unit -> 'comp1) and 'comp1 : struct + and 'comp2 :> IEssenceOfCompareTo<'b> and 'comp2 : (new : unit -> 'comp2) and 'comp2 : struct + and 'comp3 :> IEssenceOfCompareTo<'c> and 'comp3 : (new : unit -> 'comp3) and 'comp3 : struct + > = + interface IEssenceOfCompareTo> with + member __.Ensorcel (comparer:IComparer, x:System.Tuple<'a,'b,'c>, y:System.Tuple<'a,'b,'c>) = + match x, y with + | null, null -> 0 + | null, _ -> -1 + | _, null -> +1 + | _, _ -> + match phantom<'comp1>.Ensorcel (comparer, x.Item1, y.Item1) with + | x when x <> 0 -> x + | _ -> + match phantom<'comp2>.Ensorcel (comparer, x.Item2, y.Item2) with + | x when x <> 0 -> x + | _ -> + eliminate_tail_call_int (phantom<'comp3>.Ensorcel (comparer, x.Item3, y.Item3)) + + + [] + type Tuple<'a,'b,'c,'d, + 'comp1,'comp2,'comp3,'comp4 + when 'comp1 :> IEssenceOfCompareTo<'a> and 'comp1 : (new : unit -> 'comp1) and 'comp1 : struct + and 'comp2 :> IEssenceOfCompareTo<'b> and 'comp2 : (new : unit -> 'comp2) and 'comp2 : struct + and 'comp3 :> IEssenceOfCompareTo<'c> and 'comp3 : (new : unit -> 'comp3) and 'comp3 : struct + and 'comp4 :> IEssenceOfCompareTo<'d> and 'comp4 : (new : unit -> 'comp4) and 'comp4 : struct + > = + interface IEssenceOfCompareTo> with + member __.Ensorcel (comparer:IComparer, x:System.Tuple<'a,'b,'c,'d>, y:System.Tuple<'a,'b,'c,'d>) = + match x, y with + | null, null -> 0 + | null, _ -> -1 + | _, null -> +1 + | _, _ -> + match phantom<'comp1>.Ensorcel (comparer, x.Item1, y.Item1) with + | x when x <> 0 -> x + | _ -> + match phantom<'comp2>.Ensorcel (comparer, x.Item2, y.Item2) with + | x when x <> 0 -> x + | _ -> + match phantom<'comp3>.Ensorcel (comparer, x.Item3, y.Item3) with + | x when x <> 0 -> x + | _ -> + eliminate_tail_call_int (phantom<'comp4>.Ensorcel (comparer, x.Item4, y.Item4)) + + [] + type Tuple<'a,'b,'c,'d,'e, + 'comp1,'comp2,'comp3,'comp4,'comp5 + when 'comp1 :> IEssenceOfCompareTo<'a> and 'comp1 : (new : unit -> 'comp1) and 'comp1 : struct + and 'comp2 :> IEssenceOfCompareTo<'b> and 'comp2 : (new : unit -> 'comp2) and 'comp2 : struct + and 'comp3 :> IEssenceOfCompareTo<'c> and 'comp3 : (new : unit -> 'comp3) and 'comp3 : struct + and 'comp4 :> IEssenceOfCompareTo<'d> and 'comp4 : (new : unit -> 'comp4) and 'comp4 : struct + and 'comp5 :> IEssenceOfCompareTo<'e> and 'comp5 : (new : unit -> 'comp5) and 'comp5 : struct + > = + interface IEssenceOfCompareTo> with + member __.Ensorcel (comparer:IComparer, x:System.Tuple<'a,'b,'c,'d,'e>, y:System.Tuple<'a,'b,'c,'d,'e>) = + match x, y with + | null, null -> 0 + | null, _ -> -1 + | _, null -> +1 + | _, _ -> + match phantom<'comp1>.Ensorcel (comparer, x.Item1, y.Item1) with + | x when x <> 0 -> x + | _ -> + match phantom<'comp2>.Ensorcel (comparer, x.Item2, y.Item2) with + | x when x <> 0 -> x + | _ -> + match phantom<'comp3>.Ensorcel (comparer, x.Item3, y.Item3) with + | x when x <> 0 -> x + | _ -> + match phantom<'comp4>.Ensorcel (comparer, x.Item4, y.Item4) with + | x when x <> 0 -> x + | _ -> + eliminate_tail_call_int (phantom<'comp5>.Ensorcel (comparer, x.Item5, y.Item5)) + + module Nullable = + [] + type StructuralComparable<'a when 'a : struct and 'a : (new : unit -> 'a) and 'a :> ValueType and 'a :> IStructuralComparable> = + interface IEssenceOfCompareTo> with + member __.Ensorcel (ec:IComparer, x:Nullable<'a>, y:Nullable<'a>) = + match x.HasValue, y.HasValue with + | false, false -> 0 + | false, _ -> -1 + | _, false -> +1 + | _, _ -> x.Value.CompareTo (box y.Value, ec) + + [] + type ComparableGeneric<'a when 'a : struct and 'a : (new : unit -> 'a) and 'a :> ValueType and 'a :> IComparable<'a>> = + interface IEssenceOfCompareTo> with + member __.Ensorcel (_:IComparer, x:Nullable<'a>, y:Nullable<'a>) = + match x.HasValue, y.HasValue with + | false, false -> 0 + | false, _ -> -1 + | _, false -> +1 + | _, _ -> x.Value.CompareTo y.Value + + [] + type Comparable<'a when 'a : struct and 'a : (new : unit -> 'a) and 'a :> ValueType and 'a :> IComparable> = + interface IEssenceOfCompareTo> with + member __.Ensorcel (_:IComparer, x:Nullable<'a>, y:Nullable<'a>) = + match x.HasValue, y.HasValue with + | false, false -> 0 + | false, _ -> -1 + | _, false -> +1 + | _, _ -> x.Value.CompareTo (box y.Value) + + module ValueType = + [] + type StructuralComparable<'a when 'a : struct and 'a :> IStructuralComparable> = + interface IEssenceOfCompareTo<'a> with + member __.Ensorcel (ec:IComparer, x:'a, y:'a) = + x.CompareTo (box y, ec) + + [] + type ComparableGeneric<'a when 'a : struct and 'a :> IComparable<'a>> = + interface IEssenceOfCompareTo<'a> with + member __.Ensorcel (_:IComparer, x:'a, y:'a) = + x.CompareTo y + + [] + type Comparable<'a when 'a : struct and 'a :> IComparable> = + interface IEssenceOfCompareTo<'a> with + member __.Ensorcel (_:IComparer, x:'a, y:'a) = + x.CompareTo y + + module RefType = + [] + type StructuralComparable<'a when 'a : not struct and 'a : null and 'a :> IStructuralComparable> = + interface IEssenceOfCompareTo<'a> with + member __.Ensorcel (ec:IComparer, x:'a, y:'a) = + match x, y with + | null, null -> 0 + | null, _ -> -1 + | _, null -> +1 + | _, _ -> x.CompareTo (box y, ec) + + [] + type ComparableGeneric<'a when 'a : not struct and 'a : null and 'a :> IComparable<'a>> = + interface IEssenceOfCompareTo<'a> with + member __.Ensorcel (_:IComparer, x:'a, y:'a) = + match x, y with + | null, null -> 0 + | null, _ -> -1 + | _, null -> +1 + | _, _ -> x.CompareTo y + + [] + type Comparable<'a when 'a : not struct and 'a : null and 'a :> IComparable> = + interface IEssenceOfCompareTo<'a> with + member __.Ensorcel (_:IComparer, x:'a, y:'a) = + match x, y with + | null, null -> 0 + | null, _ -> -1 + | _, null -> +1 + | _, _ -> x.CompareTo y + + module EqualsTypes = + [] + type FloatPER = + interface IEssenceOfEquals + with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + + [] + type Float32PER = + interface IEssenceOfEquals with + member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + + [] + type NullableFloatPER = + interface IEssenceOfEquals> with + member __.Ensorcel (_,x,y) = + match x.HasValue, y.HasValue with + | false, false -> true + | false, _ + | _, false -> false + | _ -> (# "ceq" x.Value y.Value : bool #) + + [] + type NullableFloat32PER = + interface IEssenceOfEquals> with + member __.Ensorcel (_,x,y) = + match x.HasValue, y.HasValue with + | false, false -> true + | false, _ + | _, false -> false + | _ -> (# "ceq" x.Value y.Value : bool #) + + [] + type FloatER = + interface IEssenceOfEquals + with member __.Ensorcel (_,x,y) = if not (# "ceq" x x : bool #) && not (# "ceq" y y : bool #) then true else (# "ceq" x y : bool #) + + [] + type Float32ER = + interface IEssenceOfEquals with + member __.Ensorcel (_,x,y) = if not (# "ceq" x x : bool #) && not (# "ceq" y y : bool #) then true else (# "ceq" x y : bool #) + + [] + type NullableFloatER = + interface IEssenceOfEquals> with + member __.Ensorcel (_,x,y) = + match x.HasValue, y.HasValue with + | false, false -> true + | false, _ + | _, false -> false + | _ -> if not (# "ceq" x.Value x.Value : bool #) && not (# "ceq" y.Value y.Value : bool #) then true else (# "ceq" x.Value y.Value : bool #) + + [] + type NullableFloat32ER = + interface IEssenceOfEquals> with + member __.Ensorcel (_,x,y) = + match x.HasValue, y.HasValue with + | false, false -> true + | false, _ + | _, false -> false + | _ -> if not (# "ceq" x.Value x.Value : bool #) && not (# "ceq" y.Value y.Value : bool #) then true else (# "ceq" x.Value y.Value : bool #) + + [] type Bool = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Sbyte = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Int16 = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Int32 = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Int64 = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Byte = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Uint16 = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Uint32 = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Uint64 = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Nativeint = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Unativeint = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type Char = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = (# "ceq" x y : bool #) + [] type String = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = System.String.Equals((# "" x : string #),(# "" y : string #)) + [] type Decimal = interface IEssenceOfEquals with member __.Ensorcel (_,x,y) = System.Decimal.op_Equality((# "" x:decimal #), (# "" y:decimal #)) + + [] + type Tuple<'a,'b, + 'eq1,'eq2 + when 'eq1 :> IEssenceOfEquals<'a> and 'eq1 : (new : unit -> 'eq1) and 'eq1 : struct + and 'eq2 :> IEssenceOfEquals<'b> and 'eq2 : (new : unit -> 'eq2) and 'eq2 : struct + > = + interface IEssenceOfEquals> with + member __.Ensorcel (ec:IEqualityComparer, x:System.Tuple<'a,'b>, y:System.Tuple<'a,'b>) = + match x, y with + | null, null -> true + | null, _ | _, null -> false + | _, _ -> + match phantom<'eq1>.Ensorcel (ec, x.Item1, y.Item1) with + | false -> false + | _ -> + phantom<'eq2>.Ensorcel (ec, x.Item2, y.Item2) + + [] + type Tuple<'a,'b,'c, + 'eq1,'eq2,'eq3 + when 'eq1 :> IEssenceOfEquals<'a> and 'eq1 : (new : unit -> 'eq1) and 'eq1 : struct + and 'eq2 :> IEssenceOfEquals<'b> and 'eq2 : (new : unit -> 'eq2) and 'eq2 : struct + and 'eq3 :> IEssenceOfEquals<'c> and 'eq3 : (new : unit -> 'eq3) and 'eq3 : struct + > = + interface IEssenceOfEquals> with + member __.Ensorcel (ec:IEqualityComparer, x:System.Tuple<'a,'b,'c>, y:System.Tuple<'a,'b,'c>) = + match x, y with + | null, null -> true + | null, _ | _, null -> false + | _, _ -> + match phantom<'eq1>.Ensorcel (ec, x.Item1, y.Item1) with + | false -> false + | _ -> + match phantom<'eq2>.Ensorcel (ec, x.Item2, y.Item2) with + | false -> false + | _ -> + phantom<'eq3>.Ensorcel (ec, x.Item3, y.Item3) + + [] + type Tuple<'a,'b,'c,'d, + 'eq1,'eq2,'eq3,'eq4 + when 'eq1 :> IEssenceOfEquals<'a> and 'eq1 : (new : unit -> 'eq1) and 'eq1 : struct + and 'eq2 :> IEssenceOfEquals<'b> and 'eq2 : (new : unit -> 'eq2) and 'eq2 : struct + and 'eq3 :> IEssenceOfEquals<'c> and 'eq3 : (new : unit -> 'eq3) and 'eq3 : struct + and 'eq4 :> IEssenceOfEquals<'d> and 'eq4 : (new : unit -> 'eq4) and 'eq4 : struct + > = + interface IEssenceOfEquals> with + member __.Ensorcel (ec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d>, y:System.Tuple<'a,'b,'c,'d>) = + match x, y with + | null, null -> true + | null, _ | _, null -> false + | _, _ -> + match phantom<'eq1>.Ensorcel (ec, x.Item1, y.Item1) with + | false -> false + | _ -> + match phantom<'eq2>.Ensorcel (ec, x.Item2, y.Item2) with + | false -> false + | _ -> + match phantom<'eq3>.Ensorcel (ec, x.Item3, y.Item3) with + | false -> false + | _ -> + phantom<'eq4>.Ensorcel (ec, x.Item4, y.Item4) + + [] + type Tuple<'a,'b,'c,'d,'e, + 'eq1,'eq2,'eq3,'eq4,'eq5 + when 'eq1 :> IEssenceOfEquals<'a> and 'eq1 : (new : unit -> 'eq1) and 'eq1 : struct + and 'eq2 :> IEssenceOfEquals<'b> and 'eq2 : (new : unit -> 'eq2) and 'eq2 : struct + and 'eq3 :> IEssenceOfEquals<'c> and 'eq3 : (new : unit -> 'eq3) and 'eq3 : struct + and 'eq4 :> IEssenceOfEquals<'d> and 'eq4 : (new : unit -> 'eq4) and 'eq4 : struct + and 'eq5 :> IEssenceOfEquals<'e> and 'eq5 : (new : unit -> 'eq5) and 'eq5 : struct + > = + interface IEssenceOfEquals> with + member __.Ensorcel (ec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e>, y:System.Tuple<'a,'b,'c,'d,'e>) = + match x, y with + | null, null -> true + | null, _ | _, null -> false + | _, _ -> + match phantom<'eq1>.Ensorcel (ec, x.Item1, y.Item1) with + | false -> false + | _ -> + match phantom<'eq2>.Ensorcel (ec, x.Item2, y.Item2) with + | false -> false + | _ -> + match phantom<'eq3>.Ensorcel (ec, x.Item3, y.Item3) with + | false -> false + | _ -> + match phantom<'eq4>.Ensorcel (ec, x.Item4, y.Item4) with + | false -> false + | _ -> + phantom<'eq5>.Ensorcel (ec, x.Item5, y.Item5) + + module GetHashCodeTypes = + [] type Bool = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Float = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Sbyte = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Int16 = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Int32 = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Int64 = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Byte = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Uint16 = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Uint32 = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Uint64 = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Nativeint = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Unativeint = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Char = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type String = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Decimal = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + [] type Float32 = interface IEssenceOfGetHashCode with member __.Ensorcel (_,a) = a.GetHashCode() + +(* + let inline mask (n:int) (m:int) = (# "and" n m : int #) + let inline opshl (x:int) (n:int) : int = (# "shl" x (mask n 31) : int #) + let inline opshr (x:int) (n:int) : int = (# "shr" x (mask n 31) : int #) + let inline opxor (x:int) (y:int) : int = (# "xor" x y : int32 #) + let inline combineTupleHashes (h1 : int) (h2 : int) = -1640531527 + (h2 + (opshl h1 6) + (opshr h1 2)) +*) + let inline cth a b = TupleUtils.combineTupleHashes a b + + [] + type Tuple<'a,'b, + 'ghc1,'ghc2 + when 'ghc1 :> IEssenceOfGetHashCode<'a> and 'ghc1 : (new : unit -> 'ghc1) and 'ghc1 : struct + and 'ghc2 :> IEssenceOfGetHashCode<'b> and 'ghc2 : (new : unit -> 'ghc2) and 'ghc2 : struct + > = + interface IEssenceOfGetHashCode> with + member __.Ensorcel (iec:IEqualityComparer, x:System.Tuple<'a,'b>) = + let a = phantom<'ghc1>.Ensorcel (iec, x.Item1) + let b = phantom<'ghc2>.Ensorcel (iec, x.Item2) + eliminate_tail_call_int (cth a b) + + [] + type Tuple<'a,'b,'c, + 'ghc1,'ghc2,'ghc3 + when 'ghc1 :> IEssenceOfGetHashCode<'a> and 'ghc1 : (new : unit -> 'ghc1) and 'ghc1 : struct + and 'ghc2 :> IEssenceOfGetHashCode<'b> and 'ghc2 : (new : unit -> 'ghc2) and 'ghc2 : struct + and 'ghc3 :> IEssenceOfGetHashCode<'c> and 'ghc3 : (new : unit -> 'ghc3) and 'ghc3 : struct + > = + interface IEssenceOfGetHashCode> with + member __.Ensorcel (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c>) = + let a = phantom<'ghc1>.Ensorcel (iec, x.Item1) + let b = phantom<'ghc2>.Ensorcel (iec, x.Item2) + let c = phantom<'ghc3>.Ensorcel (iec, x.Item3) + eliminate_tail_call_int (cth (cth a b) c) + + [] + type Tuple<'a,'b,'c,'d, + 'ghc1,'ghc2,'ghc3,'ghc4 + when 'ghc1 :> IEssenceOfGetHashCode<'a> and 'ghc1 : (new : unit -> 'ghc1) and 'ghc1 : struct + and 'ghc2 :> IEssenceOfGetHashCode<'b> and 'ghc2 : (new : unit -> 'ghc2) and 'ghc2 : struct + and 'ghc3 :> IEssenceOfGetHashCode<'c> and 'ghc3 : (new : unit -> 'ghc3) and 'ghc3 : struct + and 'ghc4 :> IEssenceOfGetHashCode<'d> and 'ghc4 : (new : unit -> 'ghc4) and 'ghc4 : struct + > = + interface IEssenceOfGetHashCode> with + member __.Ensorcel (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d>) = + let a = phantom<'ghc1>.Ensorcel (iec, x.Item1) + let b = phantom<'ghc2>.Ensorcel (iec, x.Item2) + let c = phantom<'ghc3>.Ensorcel (iec, x.Item3) + let d = phantom<'ghc4>.Ensorcel (iec, x.Item4) + eliminate_tail_call_int (cth (cth a b) (cth c d)) + + [] + type Tuple<'a,'b,'c,'d,'e, + 'ghc1,'ghc2,'ghc3,'ghc4,'ghc5 + when 'ghc1 :> IEssenceOfGetHashCode<'a> and 'ghc1 : (new : unit -> 'ghc1) and 'ghc1 : struct + and 'ghc2 :> IEssenceOfGetHashCode<'b> and 'ghc2 : (new : unit -> 'ghc2) and 'ghc2 : struct + and 'ghc3 :> IEssenceOfGetHashCode<'c> and 'ghc3 : (new : unit -> 'ghc3) and 'ghc3 : struct + and 'ghc4 :> IEssenceOfGetHashCode<'d> and 'ghc4 : (new : unit -> 'ghc4) and 'ghc4 : struct + and 'ghc5 :> IEssenceOfGetHashCode<'e> and 'ghc5 : (new : unit -> 'ghc5) and 'ghc5 : struct + > = + interface IEssenceOfGetHashCode> with + member __.Ensorcel (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e>) = + let a = phantom<'ghc1>.Ensorcel (iec, x.Item1) + let b = phantom<'ghc2>.Ensorcel (iec, x.Item2) + let c = phantom<'ghc3>.Ensorcel (iec, x.Item3) + let d = phantom<'ghc4>.Ensorcel (iec, x.Item4) + let e = phantom<'ghc5>.Ensorcel (iec, x.Item5) + eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) e) + + module CommonEqualityTypes = + module Nullable = + [] + type StructuralEquatable<'a when 'a : struct and 'a : (new : unit -> 'a) and 'a :> ValueType and 'a :> IStructuralEquatable> = + interface IEssenceOfEquals> with + member __.Ensorcel (ec:IEqualityComparer, x:Nullable<'a>, y:Nullable<'a>) = + match x.HasValue, y.HasValue with + | false, false -> true + | false, _ | _, false -> false + | _, _ -> x.Value.Equals (box y.Value, ec) + + interface IEssenceOfGetHashCode> with + member __.Ensorcel (ec:IEqualityComparer, x:Nullable<'a>) = + if x.HasValue then x.Value.GetHashCode (ec) + else 0 + + [] + type Equatable<'a when 'a : struct and 'a : (new : unit -> 'a) and 'a :> ValueType and 'a :> IEquatable<'a>> = + interface IEssenceOfEquals> with + member __.Ensorcel (_:IEqualityComparer, x:Nullable<'a>, y:Nullable<'a>) = + match x.HasValue, y.HasValue with + | false, false -> true + | false, _ | _, false -> false + | _, _ -> x.Value.Equals y.Value + + [] + type Equality<'a when 'a : struct and 'a : (new : unit -> 'a) and 'a :> ValueType and 'a : equality> = + interface IEssenceOfEquals> with + member __.Ensorcel (_:IEqualityComparer, x:Nullable<'a>, y:Nullable<'a>) = + match x.HasValue, y.HasValue with + | false, false -> true + | false, _ | _, false -> false + | _, _ -> x.Value.Equals y.Value + + interface IEssenceOfGetHashCode> with + member __.Ensorcel (_:IEqualityComparer, x:Nullable<'a>) = + if x.HasValue then x.Value.GetHashCode () + else 0 + + module ValueType = + [] + type StructuralEquatable<'a when 'a : struct and 'a :> IStructuralEquatable> = + interface IEssenceOfEquals<'a> with + member __.Ensorcel (ec:IEqualityComparer, x:'a, y:'a) = + x.Equals (box y, ec) + interface IEssenceOfGetHashCode<'a> with + member __.Ensorcel (ec:IEqualityComparer, x:'a) = + x.GetHashCode (ec) + + [] + type Equatable<'a when 'a : struct and 'a :> IEquatable<'a>> = + interface IEssenceOfEquals<'a> with + member __.Ensorcel (_:IEqualityComparer, x:'a, y:'a) = + x.Equals y + + [] + type Equality<'a when 'a : struct and 'a : equality> = + interface IEssenceOfEquals<'a> with + member __.Ensorcel (_:IEqualityComparer, x:'a, y:'a) = + x.Equals y + interface IEssenceOfGetHashCode<'a> with + member __.Ensorcel (_:IEqualityComparer, x:'a) = + x.GetHashCode () + + module RefType = + [] + type StructuralEquatable<'a when 'a : not struct and 'a : null and 'a :> IStructuralEquatable> = + interface IEssenceOfEquals<'a> with + member __.Ensorcel (ec:IEqualityComparer, x:'a, y:'a) = + match x, y with + | null, null -> true + | null, _ | _, null -> false + | _, _ -> x.Equals (box y, ec) + + interface IEssenceOfGetHashCode<'a> with + member __.Ensorcel (ec:IEqualityComparer, x:'a) = + match x with + | null -> 0 + | _ -> x.GetHashCode (ec) + + [] + type Equatable<'a when 'a : not struct and 'a : null and 'a :> IEquatable<'a>> = + interface IEssenceOfEquals<'a> with + member __.Ensorcel (_:IEqualityComparer, x:'a, y:'a) = + match x, y with + | null, null -> true + | null, _ | _, null -> false + | _, _ -> x.Equals y + + [] + type Equality<'a when 'a : not struct and 'a : null and 'a : equality> = + interface IEssenceOfEquals<'a> with + member __.Ensorcel (_:IEqualityComparer, x:'a, y:'a) = + match x, y with + | null, null -> true + | null, _ | _, null -> false + | _, _ -> x.Equals y + + interface IEssenceOfGetHashCode<'a> with + member __.Ensorcel (_:IEqualityComparer, x:'a) = + match x with + | null -> 0 + | _ -> x.GetHashCode () + + let doNotEat () = raise (Exception "not for consumption! this type only exist for getting typedef.") + [] + type DummyValueType = + interface IStructuralComparable with member __.CompareTo (_,_) = doNotEat () + interface IStructuralEquatable with member __.Equals (_,_) = doNotEat () + member __.GetHashCode _ = doNotEat () + + type private EquivalenceRelation = class end + type private PartialEquivalenceRelation = class end + + module mos = + type IGetType = + abstract Get : unit -> Type + + let makeType (ct:Type) (def:Type) : Type = + def.MakeGenericType [|ct|] + + let makeGenericType<'a> tys = + let typedef = typedefof<'a> + typedef.MakeGenericType tys + + let makeEquatableType ty = + makeGenericType> [|ty|] + + let makeComparableType ty = + makeGenericType> [|ty|] + +// portable47 doesn't support reflection in the way I'm using it; maybe someone with greater understanding +// of the configurations could provide a real solution +#if FX_ATLEAST_40 + let rec private tryFindObjectsInterfaceMethod (objectType:Type) (interfaceType:Type) (methodName:string) (methodArgTypes:array) = + if not (interfaceType.IsAssignableFrom objectType) then null + else + let methodInfo = interfaceType.GetMethod (methodName, methodArgTypes) + let interfaceMap = objectType.GetInterfaceMap interfaceType + let rec findTargetMethod index = + if index = interfaceMap.InterfaceMethods.Length then null + elif methodInfo.Equals (get interfaceMap.InterfaceMethods index) then (get interfaceMap.TargetMethods index) + else findTargetMethod (index+1) + findTargetMethod 0 + + let rec private isCompilerGeneratedInterfaceMethod objectType interfaceType methodName methodArgTypes = + match tryFindObjectsInterfaceMethod objectType interfaceType methodName methodArgTypes with + | null -> false + | m -> + match m.GetCustomAttribute typeof with + | null -> false + | _ -> true + + let rec private isCompilerGeneratedMethod (objectType:Type) (methodName:string) (methodArgTypes:array) = + match objectType.GetMethod (methodName, methodArgTypes) with + | null -> false + | m -> + match m.GetCustomAttribute typeof with + | null -> false + | _ -> true + + let hasFSharpCompilerGeneratedEquality (ty:Type) = + match ty.GetCustomAttribute typeof with + | :? CompilationMappingAttribute as m when (m.SourceConstructFlags.Equals SourceConstructFlags.ObjectType(*struct*)) || (m.SourceConstructFlags.Equals SourceConstructFlags.RecordType) -> + isCompilerGeneratedInterfaceMethod ty (makeEquatableType ty) "Equals" [|ty|] + && isCompilerGeneratedInterfaceMethod ty typeof "Equals" [|typeof; typeof|] + && isCompilerGeneratedMethod ty "Equals" [|typeof|] + | _ -> false + + let hasFSharpCompilerGeneratedComparison (ty:Type) = + match ty.GetCustomAttribute typeof with + | :? CompilationMappingAttribute as m when (m.SourceConstructFlags.Equals SourceConstructFlags.ObjectType(*struct*)) || (m.SourceConstructFlags.Equals SourceConstructFlags.RecordType) -> + isCompilerGeneratedInterfaceMethod ty (makeComparableType ty) "CompareTo" [|ty|] + && isCompilerGeneratedInterfaceMethod ty typeof "CompareTo" [|typeof; typeof|] + && isCompilerGeneratedInterfaceMethod ty typeof "CompareTo" [|typeof|] + | _ -> false +#else + let hasFSharpCompilerGeneratedEquality (_:Type) = false + let hasFSharpCompilerGeneratedComparison (_:Type) = false +#endif + + let takeFirstNonNull items = + let rec takeFirst idx = + if idx = length items then raise (Exception "invalid logic") + else + let f = get items idx + match f () with + | null -> takeFirst (idx+1) + | result -> result + takeFirst 0 + + let compositeType (getEssence:Type->Type) (args:Type[]) (genericCompositeEssenceType:Type) = + let compositeArgs : Type[] = unboxPrim (Array.CreateInstance (typeof, args.Length*2)) + for i = 0 to args.Length-1 do + let argType = get args i + let essenceType = getEssence argType + compositeArgs.SetValue (argType, i) + compositeArgs.SetValue (essenceType, i+args.Length) + genericCompositeEssenceType.MakeGenericType compositeArgs + + module GenericSpecializeCompareTo = + let floatingPointTypes (tyRelation:Type) (ty:Type) = + match tyRelation with + | r when r.Equals typeof -> + match ty with + | t when t.Equals typeof -> typeof + | t when t.Equals typeof -> typeof + | t when t.Equals typeof> -> typeof + | t when t.Equals typeof> -> typeof + | _ -> null + | r when r.Equals typeof -> + match ty with + | t when t.Equals typeof -> typeof + | t when t.Equals typeof -> typeof + | t when t.Equals typeof> -> typeof + | t when t.Equals typeof> -> typeof + | _ -> null + | _ -> raise (Exception "invalid logic") + + let standardTypes (t:Type) : Type = + if t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + else null + + let compilerGenerated tyRelation ty = + match tyRelation with + | r when r.Equals typeof -> + if mos.hasFSharpCompilerGeneratedComparison ty then + if ty.IsValueType + then mos.makeType ty typedefof> + else mos.makeType ty typedefof> + else null + | r when r.Equals typeof -> null + | _ -> raise (Exception "invalid logic") + + [] + type GenericComparerObj<'a> = + interface IEssenceOfCompareTo<'a> with + member __.Ensorcel (comp:IComparer, x:'a, y:'a) = comp.Compare (box x, box y) + + let arrays (t:Type) : Type = + if t.IsArray || typeof.IsAssignableFrom t then + // TODO: Future; for now just default back to previous functionality + mos.makeType t typedefof> + else null + + let nullableType (t:Type) : Type = + if t.IsGenericType && ((t.GetGenericTypeDefinition ()).Equals typedefof>) then + let underlying = get (t.GetGenericArguments()) 0 + let comparableGeneric = mos.makeComparableType underlying + let make = mos.makeType underlying + + if typeof.IsAssignableFrom underlying then make typedefof> + elif comparableGeneric.IsAssignableFrom underlying then make typedefof> + else make typedefof> + else null + + let comparisonInterfaces (t:Type) : Type = + let make = mos.makeType t + let comparableGeneric = mos.makeComparableType t + + if t.IsValueType && typeof.IsAssignableFrom t then make typedefof> + elif t.IsValueType && comparableGeneric.IsAssignableFrom t then make typedefof> + elif t.IsValueType && typeof.IsAssignableFrom t then make typedefof> + + elif typeof.IsAssignableFrom t then make typedefof>> + + // only sealed as a derived class might inherit from IStructuralComparable + elif t.IsSealed && comparableGeneric.IsAssignableFrom t then make typedefof> + elif t.IsSealed && typeof.IsAssignableFrom t then make typedefof> + + else null + + let defaultCompare ty = + mos.makeType ty typedefof> + + let getCompareEssenceType (tyRelation:Type) (ty:Type) tuples : Type = + mos.takeFirstNonNull [| + fun () -> tuples tyRelation ty + fun () -> floatingPointTypes tyRelation ty + fun () -> standardTypes ty + fun () -> compilerGenerated tyRelation ty + fun () -> arrays ty + fun () -> nullableType ty + fun () -> comparisonInterfaces ty + fun () -> defaultCompare ty + |] + + [] + type ComparerInvoker<'a>() = + class + abstract Invoke : IComparer * 'a * 'a -> int + end + + [] + type EssenceOfCompareWrapper<'a, 'comp + when 'comp :> IEssenceOfCompareTo<'a> and 'comp : (new : unit -> 'comp) and 'comp : struct>() = + inherit ComparerInvoker<'a>() + + override __.Invoke (comp, x:'a, y:'a) = + phantom<'comp>.Ensorcel (comp, x, y) + + let makeComparerInvoker (ty:Type) comp = + let wrapperTypeDef = typedefof> + let wrapperType = wrapperTypeDef.MakeGenericType [| ty; comp |] + Activator.CreateInstance wrapperType + + type t = ComparerTypes.Int32 + type Function<'relation, 'a>() = + static let essenceType : Type = + getCompareEssenceType typeof<'relation> typeof<'a> Helpers.tuplesCompareTo + + static let invoker : ComparerInvoker<'a> = + unboxPrim (makeComparerInvoker typeof<'a> essenceType) + + static member Invoker = invoker + + interface mos.IGetType with + member __.Get () = essenceType + and Helpers = + static member getEssenceOfCompareToType (tyRelation:Type) (ty:Type) = + let compareTo = mos.makeGenericType> [|tyRelation; ty|] + match Activator.CreateInstance compareTo with + | :? mos.IGetType as getter -> getter.Get () + | _ -> raise (Exception "invalid logic") + + static member tuplesCompareTo (tyRelation:Type) (ty:Type) : Type = + if ty.IsGenericType then + let tyDef = ty.GetGenericTypeDefinition () + let tyDefArgs = ty.GetGenericArguments () + let create = mos.compositeType (Helpers.getEssenceOfCompareToType tyRelation) tyDefArgs + if tyDef.Equals typedefof> then create typedefof> + elif tyDef.Equals typedefof> then create typedefof> + elif tyDef.Equals typedefof> then create typedefof> + elif tyDef.Equals typedefof> then create typedefof> + else null + else null + + let inline GenericComparisonForInequality comp x y = + GenericSpecializeCompareTo.Function.Invoker.Invoke (comp, x, y) /// Compare two values of the same generic type, using "comp". // // "comp" is assumed to be either fsComparerPER or fsComparerER (and hence 'Compare' is implemented via 'GenericCompare'). @@ -1193,7 +2113,44 @@ namespace Microsoft.FSharp.Core // NOTE: the compiler optimizer is aware of this function and devirtualizes in the // cases where it is known how a particular type implements generic comparison. let GenericComparisonWithComparerIntrinsic<'T> (comp:System.Collections.IComparer) (x:'T) (y:'T) : int = - comp.Compare(box x, box y) + match comp with + | :? GenericComparer as info -> + match info.ComparerType with + | ComparerType.ER -> eliminate_tail_call_int (GenericSpecializeCompareTo.Function.Invoker.Invoke (comp, x, y)) + | ComparerType.PER_gt + | ComparerType.PER_lt -> eliminate_tail_call_int (GenericComparisonForInequality comp x y) + | _ -> raise (Exception "invalid logic") + | c when obj.ReferenceEquals (c, Comparer<'T>.Default) -> + eliminate_tail_call_int (Comparer<'T>.Default.Compare (x, y)) + | _ -> + eliminate_tail_call_int (comp.Compare (box x, box y)) + + /// Generic comparison. Implements ER mode (where "0" is returned when NaNs are compared) + // + // The compiler optimizer is aware of this function (see use of generic_comparison_inner_vref in opt.fs) + // and devirtualizes calls to it based on "T". + let GenericComparisonIntrinsic<'T> (x:'T) (y:'T) : int = + eliminate_tail_call_int (GenericSpecializeCompareTo.Function.Invoker.Invoke (fsComparerER, x, y)) + + /// Generic less-than. Uses comparison implementation in PER mode but catches + /// the local exception that is thrown when NaN's are compared. + let GenericLessThanIntrinsic (x:'T) (y:'T) = + (# "clt" (GenericComparisonForInequality fsComparerPER_lt x y) 0 : bool #) + + /// Generic greater-than. Uses comparison implementation in PER mode but catches + /// the local exception that is thrown when NaN's are compared. + let GenericGreaterThanIntrinsic (x:'T) (y:'T) = + (# "cgt" (GenericComparisonForInequality fsComparerPER_gt x y) 0 : bool #) + + /// Generic greater-than-or-equal. Uses comparison implementation in PER mode but catches + /// the local exception that is thrown when NaN's are compared. + let GenericGreaterOrEqualIntrinsic (x:'T) (y:'T) = + (# "cgt" (GenericComparisonForInequality fsComparerPER_gt x y) (-1) : bool #) + + /// Generic less-than-or-equal. Uses comparison implementation in PER mode but catches + /// the local exception that is thrown when NaN's are compared. + let GenericLessOrEqualIntrinsic (x:'T) (y:'T) = + (# "clt" (GenericComparisonForInequality fsComparerPER_lt x y) 1 : bool #) /// Compare two values of the same generic type, in either PER or ER mode, but include static optimizations /// for various well-known cases. @@ -1230,49 +2187,6 @@ namespace Microsoft.FSharp.Core when 'T : decimal = System.Decimal.Compare((# "" x:decimal #), (# "" y:decimal #)) - /// Generic comparison. Implements ER mode (where "0" is returned when NaNs are compared) - // - // The compiler optimizer is aware of this function (see use of generic_comparison_inner_vref in opt.fs) - // and devirtualizes calls to it based on "T". - let GenericComparisonIntrinsic<'T> (x:'T) (y:'T) : int = - GenericComparisonWithComparerIntrinsic (fsComparerER :> IComparer) x y - - - /// Generic less-than. Uses comparison implementation in PER mode but catches - /// the local exception that is thrown when NaN's are compared. - let GenericLessThanIntrinsic (x:'T) (y:'T) = - try - (# "clt" (GenericComparisonWithComparerIntrinsic fsComparerPER x y) 0 : bool #) - with - | e when System.Runtime.CompilerServices.RuntimeHelpers.Equals(e, NaNException) -> false - - - /// Generic greater-than. Uses comparison implementation in PER mode but catches - /// the local exception that is thrown when NaN's are compared. - let GenericGreaterThanIntrinsic (x:'T) (y:'T) = - try - (# "cgt" (GenericComparisonWithComparerIntrinsic fsComparerPER x y) 0 : bool #) - with - | e when System.Runtime.CompilerServices.RuntimeHelpers.Equals(e, NaNException) -> false - - - /// Generic greater-than-or-equal. Uses comparison implementation in PER mode but catches - /// the local exception that is thrown when NaN's are compared. - let GenericGreaterOrEqualIntrinsic (x:'T) (y:'T) = - try - (# "cgt" (GenericComparisonWithComparerIntrinsic fsComparerPER x y) (-1) : bool #) - with - | e when System.Runtime.CompilerServices.RuntimeHelpers.Equals(e, NaNException) -> false - - - - /// Generic less-than-or-equal. Uses comparison implementation in PER mode but catches - /// the local exception that is thrown when NaN's are compared. - let GenericLessOrEqualIntrinsic (x:'T) (y:'T) = - try - (# "clt" (GenericComparisonWithComparerIntrinsic fsComparerPER x y) 1 : bool #) - with - | e when System.Runtime.CompilerServices.RuntimeHelpers.Equals(e, NaNException) -> false /// Compare two values of the same generic type, in ER mode, with static optimizations @@ -1653,28 +2567,203 @@ namespace Microsoft.FSharp.Core else i <- i + 1 res + type EqualityComparerInfo = + | PER = 0 + | ER = 1 + + type IEqualityComparerInfo = + abstract Info : EqualityComparerInfo /// One of the two unique instances of System.Collections.IEqualityComparer. Implements PER semantics /// where equality on NaN returns "false". let fsEqualityComparerNoHashingPER = { new System.Collections.IEqualityComparer with override iec.Equals(x:obj,y:obj) = GenericEqualityObj false iec (x,y) // PER Semantics - override iec.GetHashCode(x:obj) = raise (InvalidOperationException (SR.GetString(SR.notUsedForHashing))) } - + override iec.GetHashCode(x:obj) = raise (InvalidOperationException (SR.GetString(SR.notUsedForHashing))) + interface IEqualityComparerInfo with + member __.Info = EqualityComparerInfo.PER } + /// One of the two unique instances of System.Collections.IEqualityComparer. Implements ER semantics /// where equality on NaN returns "true". let fsEqualityComparerNoHashingER = { new System.Collections.IEqualityComparer with override iec.Equals(x:obj,y:obj) = GenericEqualityObj true iec (x,y) // ER Semantics - override iec.GetHashCode(x:obj) = raise (InvalidOperationException (SR.GetString(SR.notUsedForHashing))) } + override iec.GetHashCode(x:obj) = raise (InvalidOperationException (SR.GetString(SR.notUsedForHashing))) + interface IEqualityComparerInfo with + member __.Info = EqualityComparerInfo.ER } + + module GenericSpecializeEquals = + let floatingPointTypes (tyRelation:Type) (ty:Type) = + match tyRelation with + | r when r.Equals typeof -> + match ty with + | t when t.Equals typeof -> typeof + | t when t.Equals typeof -> typeof + | t when t.Equals typeof> -> typeof + | t when t.Equals typeof> -> typeof + | _ -> null + | r when r.Equals typeof -> + match ty with + | t when t.Equals typeof -> typeof + | t when t.Equals typeof -> typeof + | t when t.Equals typeof> -> typeof + | t when t.Equals typeof> -> typeof + | _ -> null + | _ -> raise (Exception "invalid logic") + + let standardTypes (t:Type) : Type = + if t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + else null + + let compilerGenerated tyRelation ty = + // if we are using the ER comparer, and we are a standard f# record or value type with compiler generated + // equality operators, then we can avoid the boxing of IStructuralEquatable and just call the + // IEquatable<'a>.Equals method. + match tyRelation with + | r when r.Equals typeof -> + if mos.hasFSharpCompilerGeneratedEquality ty then + if ty.IsValueType + then mos.makeType ty typedefof> + else mos.makeType ty typedefof> + else null + | r when r.Equals typeof -> null + | _ -> raise (Exception "invalid logic") + + [] + type GenericEqualityObj_ER<'a> = + interface IEssenceOfEquals<'a> with + member __.Ensorcel (ec:IEqualityComparer, x:'a, y:'a) = GenericEqualityObj true ec (box x, box y) + + [] + type GenericEqualityObj_PER<'a> = + interface IEssenceOfEquals<'a> with + member __.Ensorcel (ec:IEqualityComparer, x:'a, y:'a) = GenericEqualityObj false ec (box x, box y) + + let arrays (tyRelation:Type) (t:Type) : Type = + if t.IsArray || typeof.IsAssignableFrom t then + // TODO: Future; for now just default back to previous functionality + match tyRelation with + | r when r.Equals typeof -> mos.makeType t typedefof> + | r when r.Equals typeof -> mos.makeType t typedefof> + | _ -> raise (Exception "invalid logic") + else null + + let nullableType (t:Type) : Type = + if t.IsGenericType && ((t.GetGenericTypeDefinition ()).Equals typedefof>) then + let underlying = get (t.GetGenericArguments()) 0 + let equatable = mos.makeEquatableType underlying + let make = mos.makeType underlying + + if typeof.IsAssignableFrom underlying then make typedefof> + elif equatable.IsAssignableFrom underlying then make typedefof> + else make typedefof> + else null + + let equalityInterfaces (t:Type) : Type = + let make = mos.makeType t + let equatable = mos.makeEquatableType t + + if t.IsValueType && typeof.IsAssignableFrom t then make typedefof> + elif t.IsValueType && equatable.IsAssignableFrom t then make typedefof> + elif t.IsValueType then make typedefof> + + elif typeof.IsAssignableFrom t then make typedefof>> + + // only sealed as a derived class might inherit from IStructuralEquatable + elif t.IsSealed && equatable.IsAssignableFrom t then make typedefof> + elif t.IsSealed then make typedefof> + + else null + + let defaultEquality tyRelation ty = + match tyRelation with + | r when r.Equals typeof -> mos.makeType ty typedefof> + | r when r.Equals typeof -> mos.makeType ty typedefof> + | _ -> raise (Exception "invalid logic") + + let getEqualsEssenceType (tyRelation:Type) (ty:Type) tuples : Type = + mos.takeFirstNonNull [| + fun () -> tuples tyRelation ty + fun () -> floatingPointTypes tyRelation ty + fun () -> standardTypes ty + fun () -> compilerGenerated tyRelation ty + fun () -> arrays tyRelation ty + fun () -> nullableType ty + fun () -> equalityInterfaces ty + fun () -> defaultEquality tyRelation ty + |] + + [] + type EqualsInvoker<'a>() = + class + abstract Invoke : IEqualityComparer * 'a * 'a -> bool + end + + [] + type EssenceOfEqualsWrapper<'a, 'eq + when 'eq :> IEssenceOfEquals<'a> and 'eq : (new : unit -> 'eq) and 'eq : struct>() = + inherit EqualsInvoker<'a>() + + override __.Invoke (comp, x:'a, y:'a) = + phantom<'eq>.Ensorcel (comp, x, y) + + let makeEqualsWrapper (ty:Type) comp = + let wrapperTypeDef = typedefof> + let wrapperType = wrapperTypeDef.MakeGenericType [| ty; comp |] + Activator.CreateInstance wrapperType + + type u = EqualsTypes.Int32 + type Function<'relation, 'a>() = + static let essenceType : Type = + getEqualsEssenceType typeof<'relation> typeof<'a> Helpers.tuplesEquals + + static let invoker : EqualsInvoker<'a> = + unboxPrim (makeEqualsWrapper typeof<'a> essenceType) + + static member Invoker = invoker + + interface mos.IGetType with + member __.Get () = essenceType + and Helpers = + static member getEssenceOfEqualsType tyRelation ty = + let equals = mos.makeGenericType> [| tyRelation; ty|] + match Activator.CreateInstance equals with + | :? mos.IGetType as getter -> getter.Get () + | _ -> raise (Exception "invalid logic") + + static member tuplesEquals (tyRelation:Type) (ty:Type) : Type = + if ty.IsGenericType then + let tyDef = ty.GetGenericTypeDefinition () + let tyDefArgs = ty.GetGenericArguments () + let create = mos.compositeType (Helpers.getEssenceOfEqualsType tyRelation) tyDefArgs + if tyDef.Equals typedefof> then create typedefof> + elif tyDef.Equals typedefof> then create typedefof> + elif tyDef.Equals typedefof> then create typedefof> + elif tyDef.Equals typedefof> then create typedefof> + else null + else null + /// Implements generic equality between two values, with PER semantics for NaN (so equality on two NaN values returns false) // // The compiler optimizer is aware of this function (see use of generic_equality_per_inner_vref in opt.fs) // and devirtualizes calls to it based on "T". let GenericEqualityIntrinsic (x : 'T) (y : 'T) : bool = - GenericEqualityObj false fsEqualityComparerNoHashingPER ((box x), (box y)) - + eliminate_tail_call_bool (GenericSpecializeEquals.Function.Invoker.Invoke (fsEqualityComparerNoHashingPER, x, y)) + /// Implements generic equality between two values, with ER semantics for NaN (so equality on two NaN values returns true) // // ER semantics is used for recursive calls when implementing .Equals(that) for structural data, see the code generated for record and union types in augment.fs @@ -1682,16 +2771,28 @@ namespace Microsoft.FSharp.Core // The compiler optimizer is aware of this function (see use of generic_equality_er_inner_vref in opt.fs) // and devirtualizes calls to it based on "T". let GenericEqualityERIntrinsic (x : 'T) (y : 'T) : bool = - GenericEqualityObj true fsEqualityComparerNoHashingER ((box x), (box y)) + eliminate_tail_call_bool (GenericSpecializeEquals.Function.Invoker.Invoke (fsEqualityComparerNoHashingER, x, y)) /// Implements generic equality between two values using "comp" for recursive calls. // // The compiler optimizer is aware of this function (see use of generic_equality_withc_inner_vref in opt.fs) // and devirtualizes calls to it based on "T", and under the assumption that "comp" // is either fsEqualityComparerNoHashingER or fsEqualityComparerNoHashingPER. + // + // <> I think the above compiler optimization is misplaced, as it means that you can end + // up with differing functionality of generic and non-generic types when the IStructuralEquatable + // this is doucmented here- https://github.com/Microsoft/visualfsharp/pull/513#issuecomment-117995410 let GenericEqualityWithComparerIntrinsic (comp : System.Collections.IEqualityComparer) (x : 'T) (y : 'T) : bool = - comp.Equals((box x),(box y)) - + match comp with + | :? IEqualityComparerInfo as info -> + match info.Info with + | EqualityComparerInfo.ER -> eliminate_tail_call_bool (GenericEqualityERIntrinsic x y) + | EqualityComparerInfo.PER -> eliminate_tail_call_bool (GenericEqualityIntrinsic x y) + | _ -> raise (Exception "invalid logic") + | c when obj.ReferenceEquals (c, EqualityComparer<'T>.Default) -> + eliminate_tail_call_bool (EqualityComparer<'T>.Default.Equals (x, y)) + | _ -> + eliminate_tail_call_bool (comp.Equals (box x, box y)) /// Implements generic equality between two values, with ER semantics for NaN (so equality on two NaN values returns true) // @@ -1798,21 +2899,23 @@ namespace Microsoft.FSharp.Core new CountLimitedHasherPER(sz) interface IEqualityComparer + interface IEqualityComparerInfo /// The implementation of IEqualityComparer, using unlimited depth for hashing and ER semantics for NaN equality. type UnlimitedHasherER() = interface IEqualityComparer - + interface IEqualityComparerInfo + /// The implementation of IEqualityComparer, using unlimited depth for hashing and PER semantics for NaN equality. type UnlimitedHasherPER() = interface IEqualityComparer - + interface IEqualityComparerInfo /// The unique object for unlimited depth for hashing and ER semantics for equality. - let fsEqualityComparerUnlimitedHashingER = UnlimitedHasherER() + let fsEqualityComparerUnlimitedHashingER = UnlimitedHasherER() :> IEqualityComparer /// The unique object for unlimited depth for hashing and PER semantics for equality. - let fsEqualityComparerUnlimitedHashingPER = UnlimitedHasherPER() + let fsEqualityComparerUnlimitedHashingPER = UnlimitedHasherPER() :> IEqualityComparer let inline HashCombine nr x y = (x <<< 1) + y + 631 * nr @@ -1897,10 +3000,8 @@ namespace Microsoft.FSharp.Core | _ -> x.GetHashCode() - /// Fill in the implementation of CountLimitedHasherPER type CountLimitedHasherPER with - interface System.Collections.IEqualityComparer with override iec.Equals(x:obj,y:obj) = GenericEqualityObj false iec (x,y) @@ -1910,28 +3011,157 @@ namespace Microsoft.FSharp.Core GenericHashParamObj iec x else -1 + interface IEqualityComparerInfo with + member __.Info = EqualityComparerInfo.PER /// Fill in the implementation of UnlimitedHasherER type UnlimitedHasherER with - interface System.Collections.IEqualityComparer with override iec.Equals(x:obj,y:obj) = GenericEqualityObj true iec (x,y) override iec.GetHashCode(x:obj) = GenericHashParamObj iec x + interface IEqualityComparerInfo with + member __.Info = EqualityComparerInfo.ER /// Fill in the implementation of UnlimitedHasherPER type UnlimitedHasherPER with interface System.Collections.IEqualityComparer with override iec.Equals(x:obj,y:obj) = GenericEqualityObj false iec (x,y) override iec.GetHashCode(x:obj) = GenericHashParamObj iec x + interface IEqualityComparerInfo with + member __.Info = EqualityComparerInfo.PER + + // functionality of GenericSpecializedHash should match GenericHashParamObj, or return null + // for fallback to that funciton. + module GenericSpecializeHash = + let standardTypes (t:Type) : Type = + if t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + elif t.Equals typeof then typeof + else null + + [] + type GenericHashParamObject<'a> = + interface IEssenceOfGetHashCode<'a> with + member __.Ensorcel (iec:IEqualityComparer, x:'a) = GenericHashParamObj iec (box x) + + let arrays (t:Type) : Type = + if t.IsArray || typeof.IsAssignableFrom t then + // TODO: Future; for now just default back to previous functionality + mos.makeType t typedefof> + else null + + let nullableType (t:Type) : Type = + if t.IsGenericType && ((t.GetGenericTypeDefinition ()).Equals typedefof>) then + let underlying = get (t.GetGenericArguments()) 0 + let make = mos.makeType underlying + + if typeof.IsAssignableFrom underlying then make typedefof> + else make typedefof> + else null + + let structualEquatable (t:Type): Type = + let make = mos.makeType t + + if t.IsValueType && typeof.IsAssignableFrom t then make typedefof> + elif typeof.IsAssignableFrom t then make typedefof>> + else null + + let sealedTypes (t:Type): Type = + let make = mos.makeType t + + if t.IsValueType then make typedefof> + elif t.IsSealed then make typedefof> + else null + + let defaultGetHashCode ty = + mos.makeType ty typedefof> + + let getGetHashCodeEssenceType (t:Type) tuples : Type = + mos.takeFirstNonNull [| + fun () -> tuples t + fun () -> standardTypes t + fun () -> arrays t + fun () -> nullableType t + fun () -> structualEquatable t + fun () -> sealedTypes t + fun () -> defaultGetHashCode t + |] + + [] + type GetHashCodeInvoker<'a>() = + class + abstract Invoke : IEqualityComparer * 'a -> int + end + + [] + type EssenceOfGetHashCodeWrapper<'a, 'ghc + when 'ghc :> IEssenceOfGetHashCode<'a> and 'ghc : (new : unit -> 'ghc) and 'ghc : struct>() = + inherit GetHashCodeInvoker<'a>() + + override __.Invoke (comp, x:'a) = + phantom<'ghc>.Ensorcel (comp, x) + + let makeGetHashCodeWrapper (ty:Type) comp = + let wrapperTypeDef = typedefof> + let wrapperType = wrapperTypeDef.MakeGenericType [| ty; comp |] + Activator.CreateInstance wrapperType + + type t = GetHashCodeTypes.Int32 + type Function<'a>() = + static let essenceType : Type = + getGetHashCodeEssenceType typeof<'a> Helpers.tuplesGetHashCode + + static let invoker : GetHashCodeInvoker<'a> = + unboxPrim (makeGetHashCodeWrapper typeof<'a> essenceType) + + static member Invoker = invoker + + interface mos.IGetType with + member __.Get () = essenceType + and Helpers = + static member getEssenceOfGetHashCodeType ty = + let getHashCode = mos.makeGenericType> [|ty|] + match Activator.CreateInstance getHashCode with + | :? mos.IGetType as getter -> getter.Get () + | _ -> raise (Exception "invalid logic") + + static member tuplesGetHashCode (ty:Type) : Type = + if ty.IsGenericType then + let tyDef = ty.GetGenericTypeDefinition () + let tyDefArgs = ty.GetGenericArguments () + let create = mos.compositeType Helpers.getEssenceOfGetHashCodeType tyDefArgs + if tyDef.Equals typedefof> then create typedefof> + elif tyDef.Equals typedefof> then create typedefof> + elif tyDef.Equals typedefof> then create typedefof> + elif tyDef.Equals typedefof> then create typedefof> + else null + else null /// Intrinsic for calls to depth-unlimited structural hashing that were not optimized by static conditionals. // // NOTE: The compiler optimizer is aware of this function (see uses of generic_hash_inner_vref in opt.fs) // and devirtualizes calls to it based on type "T". - let GenericHashIntrinsic x = GenericHashParamObj fsEqualityComparerUnlimitedHashingPER (box(x)) + let GenericHashIntrinsic x = + let iec = fsEqualityComparerUnlimitedHashingPER + eliminate_tail_call_int (GenericSpecializeHash.Function<_>.Invoker.Invoke (iec, x)) /// Intrinsic for calls to depth-limited structural hashing that were not optimized by static conditionals. - let LimitedGenericHashIntrinsic limit x = GenericHashParamObj (CountLimitedHasherPER(limit)) (box(x)) + let LimitedGenericHashIntrinsic limit x = + let iec = CountLimitedHasherPER limit + eliminate_tail_call_int (GenericSpecializeHash.Function<_>.Invoker.Invoke (iec, x)) /// Intrinsic for a recursive call to structural hashing that was not optimized by static conditionals. // @@ -1941,7 +3171,39 @@ namespace Microsoft.FSharp.Core // NOTE: The compiler optimizer is aware of this function (see uses of generic_hash_withc_inner_vref in opt.fs) // and devirtualizes calls to it based on type "T". let GenericHashWithComparerIntrinsic<'T> (iec : System.Collections.IEqualityComparer) (x : 'T) : int = - GenericHashParamObj iec (box(x)) + eliminate_tail_call_int (GenericSpecializeHash.Function<_>.Invoker.Invoke (iec, x)) + + [] + type EssenceOfEqualityComparer<'a, 'eq, 'ghc + when 'eq :> IEssenceOfEquals<'a> and 'eq : (new : unit -> 'eq) and 'eq : struct + and 'ghc :> IEssenceOfGetHashCode<'a> and 'ghc : (new : unit -> 'ghc) and 'ghc : struct>() = + + interface IEqualityComparer<'a> with + member __.Equals (x:'a, y:'a) = + phantom<'eq>.Ensorcel (fsEqualityComparerNoHashingPER, x, y) + member __.GetHashCode (x:'a) = + phantom<'ghc>.Ensorcel (fsEqualityComparerUnlimitedHashingPER, x) + + [] + type EssenceOfComparer<'a, 'comp + when 'comp :> IEssenceOfCompareTo<'a> and 'comp : (new : unit -> 'comp) and 'comp : struct>() = + + interface IComparer<'a> with + member __.Compare (x:'a, y:'a) = + phantom<'comp>.Ensorcel (fsComparerER, x, y) + + let makeEqualityComparer (ty:Type) = + let eq = GenericSpecializeEquals.Helpers.getEssenceOfEqualsType typeof ty + let ghc = GenericSpecializeHash.Helpers.getEssenceOfGetHashCodeType ty + let equalityComparerDef = typedefof> + let equalityComparer = equalityComparerDef.MakeGenericType [| ty; eq; ghc |] + Activator.CreateInstance equalityComparer + + let makeComparer (ty:Type) = + let comp = GenericSpecializeCompareTo.Helpers.getEssenceOfCompareToType typeof ty + let comparerDef = typedefof> + let comparer = comparerDef.MakeGenericType [| ty; comp |] + Activator.CreateInstance comparer /// Direct call to GetHashCode on the string type let inline HashString (s:string) = @@ -2197,9 +3459,9 @@ namespace Microsoft.FSharp.Core let inline PhysicalEquality x y = HashCompare.PhysicalEqualityFast x y let inline PhysicalHash x = HashCompare.PhysicalHashFast x - let GenericComparer = HashCompare.fsComparerER :> System.Collections.IComparer - let GenericEqualityComparer = HashCompare.fsEqualityComparerUnlimitedHashingPER :> System.Collections.IEqualityComparer - let GenericEqualityERComparer = HashCompare.fsEqualityComparerUnlimitedHashingER :> System.Collections.IEqualityComparer + let GenericComparer = HashCompare.fsComparerER + let GenericEqualityComparer = HashCompare.fsEqualityComparerUnlimitedHashingPER + let GenericEqualityERComparer = HashCompare.fsEqualityComparerUnlimitedHashingER let inline GenericHash x = HashCompare.GenericHashFast x let inline GenericLimitedHash limit x = HashCompare.GenericLimitedHashFast limit x @@ -2209,13 +3471,15 @@ namespace Microsoft.FSharp.Core // LanguagePrimitives: PUBLISH IEqualityComparer AND IComparer OBJECTS //------------------------------------------------------------------------- - let inline MakeGenericEqualityComparer<'T>() = // type-specialize some common cases to generate more efficient functions { new System.Collections.Generic.IEqualityComparer<'T> with member self.GetHashCode(x) = GenericHash x member self.Equals(x,y) = GenericEquality x y } + let inline MakeGenericEqualityComparerWithEssence<'T>() : IEqualityComparer<'T> = + unboxPrim (HashCompare.makeEqualityComparer typeof<'T>) + let inline MakeGenericLimitedEqualityComparer<'T>(limit:int) = // type-specialize some common cases to generate more efficient functions { new System.Collections.Generic.IEqualityComparer<'T> with @@ -2239,27 +3503,32 @@ namespace Microsoft.FSharp.Core let Float32IEquality = MakeGenericEqualityComparer() let DecimalIEquality = MakeGenericEqualityComparer() + let getFastGenericEqualityComparerTable ty = + match ty with + | ty when ty.Equals typeof -> box BoolIEquality + | ty when ty.Equals typeof -> box ByteIEquality + | ty when ty.Equals typeof -> box Int32IEquality + | ty when ty.Equals typeof -> box UInt32IEquality + | ty when ty.Equals typeof -> box CharIEquality + | ty when ty.Equals typeof -> box SByteIEquality + | ty when ty.Equals typeof -> box Int16IEquality + | ty when ty.Equals typeof -> box Int64IEquality + | ty when ty.Equals typeof -> box IntPtrIEquality + | ty when ty.Equals typeof -> box UInt16IEquality + | ty when ty.Equals typeof -> box UInt64IEquality + | ty when ty.Equals typeof -> box UIntPtrIEquality + | ty when ty.Equals typeof -> box FloatIEquality + | ty when ty.Equals typeof -> box Float32IEquality + | ty when ty.Equals typeof -> box DecimalIEquality + | ty when ty.Equals typeof -> box StringIEquality + | _ -> null + [] type FastGenericEqualityComparerTable<'T>() = static let f : System.Collections.Generic.IEqualityComparer<'T> = - match typeof<'T> with - | ty when ty.Equals(typeof) -> unboxPrim (box BoolIEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box ByteIEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box Int32IEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box UInt32IEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box CharIEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box SByteIEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box Int16IEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box Int64IEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box IntPtrIEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box UInt16IEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box UInt64IEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box UIntPtrIEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box FloatIEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box Float32IEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box DecimalIEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box StringIEquality) - | _ -> MakeGenericEqualityComparer<'T>() + match getFastGenericEqualityComparerTable typeof<'T> with + | null -> MakeGenericEqualityComparerWithEssence<'T>() + | iec -> unboxPrim iec static member Function : System.Collections.Generic.IEqualityComparer<'T> = f let FastGenericEqualityComparerFromTable<'T> = FastGenericEqualityComparerTable<'T>.Function @@ -2301,6 +3570,9 @@ namespace Microsoft.FSharp.Core { new System.Collections.Generic.IComparer<'T> with member __.Compare(x,y) = GenericComparison x y } + let inline MakeGenericComparerWithEssence<'T>() : IComparer<'T> = + unboxPrim (HashCompare.makeComparer typeof<'T>) + let CharComparer = MakeGenericComparer() let StringComparer = MakeGenericComparer() let SByteComparer = MakeGenericComparer() @@ -2317,11 +3589,37 @@ namespace Microsoft.FSharp.Core let Float32Comparer = MakeGenericComparer() let DecimalComparer = MakeGenericComparer() + let getFastGenericComparerTable ty = + match ty with + | ty when ty.Equals typeof -> box ByteComparer + | ty when ty.Equals typeof -> box CharComparer + | ty when ty.Equals typeof -> box SByteComparer + | ty when ty.Equals typeof -> box Int16Comparer + | ty when ty.Equals typeof -> box Int32Comparer + | ty when ty.Equals typeof -> box Int64Comparer + | ty when ty.Equals typeof -> box IntPtrComparer + | ty when ty.Equals typeof -> box UInt16Comparer + | ty when ty.Equals typeof -> box UInt32Comparer + | ty when ty.Equals typeof -> box UInt64Comparer + | ty when ty.Equals typeof -> box UIntPtrComparer + | ty when ty.Equals typeof -> box FloatComparer + | ty when ty.Equals typeof -> box Float32Comparer + | ty when ty.Equals typeof -> box DecimalComparer + | ty when ty.Equals typeof -> box StringComparer + | _ -> null + /// Use a type-indexed table to ensure we only create a single FastStructuralComparison function /// for each type [] type FastGenericComparerTable<'T>() = + static let f : System.Collections.Generic.IComparer<'T> = + match getFastGenericComparerTable typeof<'T> with + | null -> MakeGenericComparerWithEssence<'T>() + | ic -> unboxPrim ic + static member Value : System.Collections.Generic.IComparer<'T> = f + + let getFastGenericComparerTable_fCanBeNull ty = // The CLI implementation of mscorlib optimizes array sorting // when the comparer is either null or precisely // reference-equals to System.Collections.Generic.Comparer<'T>.Default. @@ -2336,49 +3634,24 @@ namespace Microsoft.FSharp.Core // same as a stable sort of the array. See Array.stableSortInPlace. // // REVIEW: in a future version we could extend this to include additional types + ty.Equals typeof + || ty.Equals typeof + || ty.Equals typeof + || ty.Equals typeof + || ty.Equals typeof + || ty.Equals typeof + || ty.Equals typeof + || ty.Equals typeof + || ty.Equals typeof + || ty.Equals typeof + || ty.Equals typeof + || ty.Equals typeof + + type FastGenericComparerTable_fCanBeNull<'T>() = static let fCanBeNull : System.Collections.Generic.IComparer<'T> = - match typeof<'T> with - | ty when ty.Equals(typeof) -> unboxPrim (box IntPtrComparer) - | ty when ty.Equals(typeof) -> unboxPrim (box UIntPtrComparer) - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> null - | ty when ty.Equals(typeof) -> unboxPrim (box StringComparer) - | _ -> MakeGenericComparer<'T>() - - static let f : System.Collections.Generic.IComparer<'T> = - match typeof<'T> with - | ty when ty.Equals(typeof) -> unboxPrim (box ByteComparer) - | ty when ty.Equals(typeof) -> unboxPrim (box CharComparer) - | ty when ty.Equals(typeof) -> unboxPrim (box SByteComparer) - | ty when ty.Equals(typeof) -> unboxPrim (box Int16Comparer) - | ty when ty.Equals(typeof) -> unboxPrim (box Int32Comparer) - | ty when ty.Equals(typeof) -> unboxPrim (box Int64Comparer) - | ty when ty.Equals(typeof) -> unboxPrim (box IntPtrComparer) - | ty when ty.Equals(typeof) -> unboxPrim (box UInt16Comparer) - | ty when ty.Equals(typeof) -> unboxPrim (box UInt32Comparer) - | ty when ty.Equals(typeof) -> unboxPrim (box UInt64Comparer) - | ty when ty.Equals(typeof) -> unboxPrim (box UIntPtrComparer) - | ty when ty.Equals(typeof) -> unboxPrim (box FloatComparer) - | ty when ty.Equals(typeof) -> unboxPrim (box Float32Comparer) - | ty when ty.Equals(typeof) -> unboxPrim (box DecimalComparer) - | ty when ty.Equals(typeof) -> unboxPrim (box StringComparer) - | _ -> - // Review: There are situations where we should be able - // to return System.Collections.Generic.Comparer<'T>.Default here. - // For example, for any value type. - MakeGenericComparer<'T>() - - static member Value : System.Collections.Generic.IComparer<'T> = f + match getFastGenericComparerTable_fCanBeNull typeof<'T> with + | true -> null + | false -> FastGenericComparerTable.Value static member ValueCanBeNullIfDefaultSemantics : System.Collections.Generic.IComparer<'T> = fCanBeNull @@ -2414,7 +3687,7 @@ namespace Microsoft.FSharp.Core // which are then optimized for the particular nominal type involved. when 'T : 'T = MakeGenericComparer<'T>() - let FastGenericComparerCanBeNull<'T> = FastGenericComparerTable<'T>.ValueCanBeNullIfDefaultSemantics + let FastGenericComparerCanBeNull<'T> = FastGenericComparerTable_fCanBeNull<'T>.ValueCanBeNullIfDefaultSemantics //------------------------------------------------------------------------- // LanguagePrimitives: ENUMS diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index 9a72dcb4dec..4dc2041f144 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #nowarn "35" // This construct is deprecated: the treatment of this operator is now handled directly by the F# compiler and its meaning may not be redefined. #nowarn "61" // The containing type can use 'null' as a representation value for its nullary union case. This member will be compiled as a static member. @@ -881,10 +881,10 @@ namespace Microsoft.FSharp.Core val inline FastLimitedGenericEqualityComparer<'T> : limit: int -> System.Collections.Generic.IEqualityComparer<'T> when 'T : equality /// Make an F# hash/equality object for the given type - [] + [] val FastGenericEqualityComparerFromTable<'T> : System.Collections.Generic.IEqualityComparer<'T> when 'T : equality - [] + [] /// Make an F# comparer object for the given type val FastGenericComparerFromTable<'T> : System.Collections.Generic.IComparer<'T> when 'T : comparison @@ -1097,7 +1097,7 @@ namespace Microsoft.FSharp.Core val inline GetString : source:string -> index:int -> char /// This function implements calls to default constructors - /// acccessed by 'new' constraints. + /// accessed by 'new' constraints. [] val inline CreateInstance : unit -> 'T when 'T : (new : unit -> 'T) @@ -1564,7 +1564,7 @@ namespace Microsoft.FSharp.Core [] [] - /// Helper functions for converting F# first class function values to and from CLI representaions + /// Helper functions for converting F# first class function values to and from CLI representations /// of functions using delegates. type FuncConvert = /// Convert the given Action delegate object to an F# function value @@ -2121,7 +2121,7 @@ namespace Microsoft.FSharp.Core [] val inline ignore : value:'T -> unit - /// Unboxes a strongly typed value. + /// Unbox a strongly typed value. /// The boxed value. /// The unboxed result. [] @@ -3389,7 +3389,7 @@ namespace Microsoft.FSharp.Control /// First class event values for arbitrary delegate types. /// /// F# gives special status to member properties compatible with type IDelegateEvent and - /// tagged with the CLIEventAttribute. In this case the F# compiler generates approriate + /// tagged with the CLIEventAttribute. In this case the F# compiler generates appropriate /// CLI metadata to make the member appear to other CLI languages as a CLI event. type IDelegateEvent<'Delegate when 'Delegate :> System.Delegate > = /// Connect a handler delegate object to the event. A handler can diff --git a/src/fsharp/FSharp.Core/printf.fs b/src/fsharp/FSharp.Core/printf.fs index 64784937098..d6aee9c77b3 100644 --- a/src/fsharp/FSharp.Core/printf.fs +++ b/src/fsharp/FSharp.Core/printf.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Core @@ -1386,4 +1386,4 @@ module Printf = [] let eprintfn fmt = fprintfn System.Console.Error fmt #endif -#endif +#endif \ No newline at end of file diff --git a/src/fsharp/FSharp.Core/printf.fsi b/src/fsharp/FSharp.Core/printf.fsi index f42d523d9b6..9109199848a 100644 --- a/src/fsharp/FSharp.Core/printf.fsi +++ b/src/fsharp/FSharp.Core/printf.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// This namespace contains types and modules for generating and formatting text with F# namespace Microsoft.FSharp.Core diff --git a/src/fsharp/FSharp.Core/quotations.fs b/src/fsharp/FSharp.Core/quotations.fs index e016c4694d5..6e55d293092 100644 --- a/src/fsharp/FSharp.Core/quotations.fs +++ b/src/fsharp/FSharp.Core/quotations.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Quotations @@ -537,7 +537,7 @@ module Patterns = if index < 0 || index >= fields.Length then invalidArg "index" (SR.GetString(SR.QinvalidCaseIndex)) fields.[index] - /// Returns type of lambda applciation - something like "(fun a -> ..) b" + /// Returns type of lambda application - something like "(fun a -> ..) b" let rec typeOfAppliedLambda f = let fty = ((typeOf f):Type) match fty.GetGenericArguments() with @@ -641,7 +641,7 @@ module Patterns = if not (assignableFrom declType (typeOf obj)) then invalidArg "obj" (SR.GetString(SR.QincorrectInstanceType)) - // Checks lambda application for correctnes + // Checks lambda application for correctness let checkAppliedLambda (f, v) = let fty = typeOf f let ftyG = (if fty.IsGenericType then fty.GetGenericTypeDefinition() else fty) @@ -1717,7 +1717,7 @@ module Patterns = ci let paramTypes = mi.GetParameters() |> getTypesFromParamInfos Key(declaringType, tyArgsCount, methodBase.Name, paramTypes, declaringType) - | _ -> failwith "Unexpected MethodBase type, %A" (methodBase.GetType()) // per MSDN ConstructorInfo and MethodInfo are the only derived types from MethodBase + | _ -> failwithf "Unexpected MethodBase type, %A" (methodBase.GetType()) // per MSDN ConstructorInfo and MethodInfo are the only derived types from MethodBase #else [] type ReflectedDefinitionTableKey = diff --git a/src/fsharp/FSharp.Core/quotations.fsi b/src/fsharp/FSharp.Core/quotations.fsi index 262ed2a7a46..1412684e212 100644 --- a/src/fsharp/FSharp.Core/quotations.fsi +++ b/src/fsharp/FSharp.Core/quotations.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Types and functions related to expression quotations namespace Microsoft.FSharp.Quotations @@ -146,7 +146,7 @@ type Expr = /// The resulting expression. static member FieldSet: obj:Expr * fieldInfo:FieldInfo * value:Expr -> Expr - /// Builds an expression that represents the constrution of an F# function value + /// Builds an expression that represents the construction of an F# function value /// The parameter to the function. /// The body of the function. /// The resulting expression. @@ -159,7 +159,7 @@ type Expr = /// The resulting expression. static member Let : letVariable:Var * letExpr:Expr * body:Expr -> Expr - /// Builds recursives expressions associated with 'let rec' constructs + /// Builds recursive expressions associated with 'let rec' constructs /// The list of bindings for the let expression. /// The sub-expression where the bindings are in scope. /// The resulting expression. @@ -402,7 +402,7 @@ type Expr = static member RegisterReflectedDefinitions: assembly:Assembly * resource:string * serializedValue:byte[] * referencedTypes:Type[] -> unit /// Fetches or creates a new variable with the given name and type from a global pool of shared variables - /// indexed by name and type. The type is given by the expicit or inferred type parameter + /// indexed by name and type. The type is given by the explicit or inferred type parameter /// The variable name. /// The created of fetched typed global variable. static member GlobalVar<'T> : name:string -> Expr<'T> @@ -578,7 +578,7 @@ module Patterns = [] val (|QuoteTyped|_|) : input:Expr -> Expr option - /// An active pattern to recognize expressions that represent sequential exeuction of one expression followed by another + /// An active pattern to recognize expressions that represent sequential execution of one expression followed by another /// The input expression to match against. /// (Expr * Expr) option [] @@ -765,11 +765,11 @@ module DerivedPatterns = /// A parameterized active pattern to recognize calls to a specified function or method. /// The returned elements are the optional target object (present if the target is an - /// instance method), the generic type instantation (non-empty if the target is a generic + /// instance method), the generic type instantiation (non-empty if the target is a generic /// instantiation), and the arguments to the function or method. /// The input template expression to specify the method to call. /// The optional target object (present if the target is an - /// instance method), the generic type instantation (non-empty if the target is a generic + /// instance method), the generic type instantiation (non-empty if the target is a generic /// instantiation), and the arguments to the function or method. [] val (|SpecificCall|_|) : templateParameter:Expr -> (Expr -> (Expr option * list * list) option) @@ -792,7 +792,7 @@ module DerivedPatterns = [] val (|PropertySetterWithReflectedDefinition|_|) : propertyInfo:PropertyInfo -> Expr option -/// Active patterns for traversing, visiting, rebuilding and tranforming expressions in a generic way +/// Active patterns for traversing, visiting, rebuilding and transforming expressions in a generic way [] module ExprShape = diff --git a/src/fsharp/FSharp.Core/reflect.fs b/src/fsharp/FSharp.Core/reflect.fs index 57034bd6802..de5158542c3 100644 --- a/src/fsharp/FSharp.Core/reflect.fs +++ b/src/fsharp/FSharp.Core/reflect.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Reflection on F# values. Analyze an object to see if it the representation // of an F# value. diff --git a/src/fsharp/FSharp.Core/reflect.fsi b/src/fsharp/FSharp.Core/reflect.fsi index 459cb466045..ee00add919e 100644 --- a/src/fsharp/FSharp.Core/reflect.fsi +++ b/src/fsharp/FSharp.Core/reflect.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// This namespace contains constructs for reflecting on the representation of /// F# values and types. It augments the design of System.Reflection. @@ -161,7 +161,7 @@ type FSharpValue = /// The description of the union case reader. static member PreComputeUnionTagMemberInfo : unionType:Type * ?bindingFlags:BindingFlags -> MemberInfo - /// Precomputes a function for reading all the fields for a particular discriminator case of a union type + /// Precompute a function for reading all the fields for a particular discriminator case of a union type /// /// Using the computed function will typically be faster than executing a corresponding call to GetFields /// The description of the union case to read. @@ -169,7 +169,7 @@ type FSharpValue = /// A function to for reading the fields of the given union case. static member PreComputeUnionReader : unionCase:UnionCaseInfo * ?bindingFlags:BindingFlags -> (obj -> obj[]) - /// Precomputes a function for constructing a discriminated union value for a particular union case. + /// Precompute a function for constructing a discriminated union value for a particular union case. /// The description of the union case. /// Optional binding flags. /// A function for constructing values of the given union case. @@ -216,7 +216,7 @@ type FSharpValue = /// An array of the fields from the given tuple. static member GetTupleFields: tuple:obj -> obj [] - /// Precomputes a function for reading the values of a particular tuple type + /// Precompute a function for reading the values of a particular tuple type /// /// Assumes the given type is a TupleType. /// If not, ArgumentException is raised during pre-computation. @@ -231,7 +231,7 @@ type FSharpValue = /// The description of the tuple element and an optional type and index if the tuple is big. static member PreComputeTuplePropertyInfo: tupleType:Type * index:int -> PropertyInfo * (Type * int) option - /// Precomputes a function for reading the values of a particular tuple type + /// Precompute a function for reading the values of a particular tuple type /// /// Assumes the given type is a TupleType. /// If not, ArgumentException is raised during pre-computation. @@ -440,7 +440,7 @@ module FSharpReflectionExtensions = /// The description of the union case reader. static member PreComputeUnionTagMemberInfo : unionType:Type * ?allowAccessToPrivateRepresentation : bool -> MemberInfo - /// Precomputes a function for reading all the fields for a particular discriminator case of a union type + /// Precompute a function for reading all the fields for a particular discriminator case of a union type /// /// Using the computed function will typically be faster than executing a corresponding call to GetFields /// The description of the union case to read. @@ -448,7 +448,7 @@ module FSharpReflectionExtensions = /// A function to for reading the fields of the given union case. static member PreComputeUnionReader : unionCase:UnionCaseInfo * ?allowAccessToPrivateRepresentation : bool -> (obj -> obj[]) - /// Precomputes a function for constructing a discriminated union value for a particular union case. + /// Precompute a function for constructing a discriminated union value for a particular union case. /// The description of the union case. /// Optional flag that denotes accessibility of the private representation. /// A function for constructing values of the given union case. diff --git a/src/fsharp/FSharp.Core/seq.fs b/src/fsharp/FSharp.Core/seq.fs index fc297daebc2..e8798fad2ca 100644 --- a/src/fsharp/FSharp.Core/seq.fs +++ b/src/fsharp/FSharp.Core/seq.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections #nowarn "52" // The value has been copied to ensure the original is not mutated by this operation @@ -25,11 +25,11 @@ namespace Microsoft.FSharp.Collections let cast (e : IEnumerator) : IEnumerator<'T> = { new IEnumerator<'T> with - member x.Current = unbox e.Current + member x.Current = unbox<'T> e.Current interface IEnumerator with - member x.Current = unbox e.Current + member x.Current = unbox<'T> e.Current :> obj member x.MoveNext() = e.MoveNext() - member x.Reset() = noReset(); + member x.Reset() = noReset() interface System.IDisposable with member x.Dispose() = match e with @@ -416,7 +416,7 @@ namespace Microsoft.FSharp.Collections // Binding. // - // We use a type defintion to apply a local dynamic optimization. + // We use a type definition to apply a local dynamic optimization. // We automatically right-associate binding, i.e. push the continuations to the right. // That is, bindG (bindG G1 cont1) cont2 --> bindG G1 (cont1 o cont2) // This makes constructs such as the following linear rather than quadratic: @@ -802,6 +802,7 @@ namespace Microsoft.FSharp.Core.CompilerServices abstract CheckClose: bool abstract LastGenerated : 'T + //[] member x.MoveNextImpl() = let active = if redirect then redirectTo @@ -836,6 +837,8 @@ namespace Microsoft.FSharp.Core.CompilerServices member x.Dispose() = if redirect then redirectTo.Close() else x.Close() interface IEnumerator with member x.Current = box (if redirect then redirectTo.LastGenerated else x.LastGenerated) + + //[] member x.MoveNext() = x.MoveNextImpl() member x.Reset() = raise <| new System.NotSupportedException(); @@ -847,6 +850,7 @@ namespace Microsoft.FSharp.Collections open System.Diagnostics open System.Collections open System.Collections.Generic + open System.Reflection open Microsoft.FSharp.Core open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Core.Operators @@ -1444,32 +1448,50 @@ namespace Microsoft.FSharp.Collections checkNonNull "source" source mkSeq (fun () -> source.GetEnumerator()) + let inline groupByImpl (comparer:IEqualityComparer<'SafeKey>) (keyf:'T->'SafeKey) (getKey:'SafeKey->'Key) (seq:seq<'T>) = + checkNonNull "seq" seq + + let dict = Dictionary<_,ResizeArray<_>> comparer + + // Previously this was 1, but I think this is rather stingy, considering that we are already paying + // for at least a key, the ResizeArray reference, which includes an array reference, an Entry in the + // Dictionary, plus any empty space in the Dictionary of unfilled hash buckets. + let minimumBucketSize = 4 + + // Build the groupings + seq |> iter (fun v -> + let safeKey = keyf v + let mutable prev = Unchecked.defaultof<_> + match dict.TryGetValue (safeKey, &prev) with + | true -> prev.Add v + | false -> + let prev = ResizeArray () + dict.[safeKey] <- prev + prev.Add v) + + // Trim the size of each result group, don't trim very small buckets, as excessive work, and garbage for + // minimal gain + dict |> iter (fun group -> if group.Value.Count > minimumBucketSize then group.Value.TrimExcess()) + + // Return the sequence-of-sequences. Don't reveal the + // internal collections: just reveal them as sequences + dict |> map (fun group -> (getKey group.Key, readonly group.Value)) + // We avoid wrapping a StructBox, because under 64 JIT we get some "hard" tailcalls which affect performance + let groupByValueType (keyf:'T->'Key) (seq:seq<'T>) = seq |> groupByImpl HashIdentity.Structural<'Key> keyf id - [] - let groupBy keyf seq = - - mkDelayedSeq (fun () -> - // Wrap a StructBox(_) around all keys in case the key type is itself a type using null as a representation - let dict = new Dictionary,ResizeArray<'T>>(StructBox<'Key>.Comparer) - - // Build the groupings - seq |> iter (fun v -> - let key = StructBox (keyf v) - let ok,prev = dict.TryGetValue(key) - if ok then - prev.Add(v) - else - let prev = new ResizeArray<'T>(1) - dict.[key] <- prev - prev.Add(v)) + // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation + let groupByRefType (keyf:'T->'Key) (seq:seq<'T>) = seq |> groupByImpl StructBox<'Key>.Comparer (fun t -> StructBox (keyf t)) (fun sb -> sb.Value) - // Trim the size of each result group. - dict |> iter (fun group -> group.Value.TrimExcess()) - - // Return the sequence-of-sequences. Don't reveal the - // internal collections: just reveal them as sequences - dict |> map (fun group -> (group.Key.Value, readonly group.Value))) + [] + let groupBy (keyf:'T->'Key) (seq:seq<'T>) = +#if FX_RESHAPED_REFLECTION + if (typeof<'Key>).GetTypeInfo().IsValueType +#else + if typeof<'Key>.IsValueType +#endif + then mkDelayedSeq (fun () -> groupByValueType keyf seq) + else mkDelayedSeq (fun () -> groupByRefType keyf seq) [] let distinct source = @@ -1523,19 +1545,38 @@ namespace Microsoft.FSharp.Collections let inline compareDescending a b = compare b a sortWith compareDescending source - [] - let countBy keyf source = + let inline countByImpl (comparer:IEqualityComparer<'SafeKey>) (keyf:'T->'SafeKey) (getKey:'SafeKey->'Key) (source:seq<'T>) = checkNonNull "source" source - mkDelayedSeq (fun () -> - let dict = new Dictionary,int>(StructBox<'Key>.Comparer) - // Build the groupings - source |> iter (fun v -> - let key = StructBox (keyf v ) - let mutable prev = Unchecked.defaultof<_> - if dict.TryGetValue(key, &prev) then dict.[key] <- prev + 1 else dict.[key] <- 1) + let dict = Dictionary comparer + + // Build the groupings + source |> iter (fun v -> + let safeKey = keyf v + let mutable prev = Unchecked.defaultof<_> + if dict.TryGetValue(safeKey, &prev) + then dict.[safeKey] <- prev + 1 + else dict.[safeKey] <- 1) + + dict |> map (fun group -> (getKey group.Key, group.Value)) + + // We avoid wrapping a StructBox, because under 64 JIT we get some "hard" tailcalls which affect performance + let countByValueType (keyf:'T->'Key) (seq:seq<'T>) = seq |> countByImpl HashIdentity.Structural<'Key> keyf id - dict |> map (fun group -> (group.Key.Value, group.Value))) + // Wrap a StructBox around all keys in case the key type is itself a type using null as a representation + let countByRefType (keyf:'T->'Key) (seq:seq<'T>) = seq |> countByImpl StructBox<'Key>.Comparer (fun t -> StructBox (keyf t)) (fun sb -> sb.Value) + + [] + let countBy (keyf:'T->'Key) (source:seq<'T>) = + checkNonNull "source" source + +#if FX_RESHAPED_REFLECTION + if (typeof<'Key>).GetTypeInfo().IsValueType +#else + if typeof<'Key>.IsValueType +#endif + then mkDelayedSeq (fun () -> countByValueType keyf source) + else mkDelayedSeq (fun () -> countByRefType keyf source) [] let inline sum (source: seq< (^a) >) : ^a = diff --git a/src/fsharp/FSharp.Core/seq.fsi b/src/fsharp/FSharp.Core/seq.fsi index 2dd5446ec86..4483ab22e00 100644 --- a/src/fsharp/FSharp.Core/seq.fsi +++ b/src/fsharp/FSharp.Core/seq.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections @@ -253,6 +253,7 @@ namespace Microsoft.FSharp.Collections /// The sequence split into chunks. /// Thrown when the input sequence is null. /// Thrown when count is not positive. + /// This function consumes the whole input sequence before yielding the first element of the result sequence. [] val splitInto: count:int -> source:seq<'T> -> seq<'T[]> @@ -263,7 +264,7 @@ namespace Microsoft.FSharp.Collections [] val empty<'T> : seq<'T> - /// Returns a new sequence with the distinct elements of the second sequence which do not apear in the first sequence, + /// Returns a new sequence with the distinct elements of the second sequence which do not appear in the first sequence, /// using generic hash and equality comparisons to compare values. /// /// Note that this function returns a sequence that digests the whole of the first input sequence as soon as @@ -371,6 +372,7 @@ namespace Microsoft.FSharp.Collections /// Thrown if no element returns true when /// evaluated by the predicate /// Thrown when the input sequence is null + /// This function consumes the whole input sequence before returning the result. [] val findBack: predicate:('T -> bool) -> source:seq<'T> -> 'T @@ -396,6 +398,7 @@ namespace Microsoft.FSharp.Collections /// Thrown if no element returns true when /// evaluated by the predicate /// Thrown when the input sequence is null + /// This function consumes the whole input sequence before returning the result. [] val findIndexBack: predicate:('T -> bool) -> source:seq<'T> -> int @@ -435,6 +438,7 @@ namespace Microsoft.FSharp.Collections /// The initial state. /// The state object after the folding function is applied to each element of the sequence. /// Thrown when the input sequence is null. + /// This function consumes the whole input sequence before returning the result. [] val foldBack<'T,'State> : folder:('T -> 'State -> 'State) -> source:seq<'T> -> state:'State -> 'State @@ -699,6 +703,7 @@ namespace Microsoft.FSharp.Collections /// The input collection. /// Thrown when the input collection is null. /// The collection of transformed elements, and the final accumulated value. + /// This function consumes the whole input sequence before yielding the first element of the result sequence. [] val mapFold<'T,'State,'Result> : mapping:('State -> 'T -> 'Result * 'State) -> state:'State -> source:seq<'T> -> seq<'Result> * 'State @@ -711,6 +716,7 @@ namespace Microsoft.FSharp.Collections /// The initial state. /// Thrown when the input collection is null. /// The collection of transformed elements, and the final accumulated value. + /// This function consumes the whole input sequence before yielding the first element of the result sequence. [] val mapFoldBack<'T,'State,'Result> : mapping:('T -> 'State -> 'Result * 'State) -> source:seq<'T> -> state:'State -> seq<'Result> * 'State @@ -888,6 +894,7 @@ namespace Microsoft.FSharp.Collections /// /// Thrown when the input sequence is null. /// Thrown when indexMap does not produce a valid permutation. + /// This function consumes the whole input sequence before yielding the first element of the result sequence. [] val permute: indexMap:(int -> int) -> source:seq<'T> -> seq<'T> @@ -950,6 +957,7 @@ namespace Microsoft.FSharp.Collections /// The final result of the reductions. /// Thrown when the input sequence is null. /// Thrown when the input sequence is empty. + /// This function consumes the whole input sequence before returning the result. [] val reduceBack: reduction:('T -> 'T -> 'T) -> source:seq<'T> -> 'T @@ -957,6 +965,7 @@ namespace Microsoft.FSharp.Collections /// The input sequence. /// The reversed sequence. /// Thrown when the input sequence is null. + /// This function consumes the whole input sequence before yielding the first element of the reversed sequence. [] val rev: source:seq<'T> -> seq<'T> @@ -981,6 +990,7 @@ namespace Microsoft.FSharp.Collections /// The initial state. /// The resulting sequence of computed states. /// Thrown when the input sequence is null. + /// This function consumes the whole input sequence before yielding the first element of the result sequence. [] val scanBack<'T,'State> : folder:('T -> 'State -> 'State) -> source:seq<'T> -> state:'State -> seq<'State> @@ -1032,6 +1042,7 @@ namespace Microsoft.FSharp.Collections /// The result sequence. /// /// Thrown when the input sequence is null. + /// This function consumes the whole input sequence before yielding the first element of the result sequence. [] val sort : source:seq<'T> -> seq<'T> when 'T : comparison @@ -1045,6 +1056,7 @@ namespace Microsoft.FSharp.Collections /// The function to compare the collection elements. /// The input sequence. /// The result sequence. + /// This function consumes the whole input sequence before yielding the first element of the result sequence. [] val sortWith : comparer:('T -> 'T -> int) -> source:seq<'T> -> seq<'T> @@ -1208,6 +1220,7 @@ namespace Microsoft.FSharp.Collections /// The input sequence. /// The found element or None. /// Thrown when the input sequence is null. + /// This function consumes the whole input sequence before returning the result. [] val tryFindBack: predicate:('T -> bool) -> source:seq<'T> -> 'T option @@ -1240,6 +1253,7 @@ namespace Microsoft.FSharp.Collections /// The input sequence. /// The found index or None. /// Thrown when the input sequence is null. + /// This function consumes the whole input sequence before returning the result. [] val tryFindIndexBack : predicate:('T -> bool) -> source:seq<'T> -> int option diff --git a/src/fsharp/FSharp.Core/set.fs b/src/fsharp/FSharp.Core/set.fs index 936fa78775c..edd7adb2833 100644 --- a/src/fsharp/FSharp.Core/set.fs +++ b/src/fsharp/FSharp.Core/set.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections @@ -295,7 +295,7 @@ namespace Microsoft.FSharp.Collections // Perf: tried bruteForce for low heights, but nothing significant match t1,t2 with | SetNode(k1,t11,t12,h1),SetNode(k2,t21,t22,h2) -> // (t11 < k < t12) AND (t21 < k2 < t22) - // Divide and Quonquer: + // Divide and Conquer: // Suppose t1 is largest. // Split t2 using pivot k1 into lo and hi. // Union disjoint subproblems and then combine. diff --git a/src/fsharp/FSharp.Core/set.fsi b/src/fsharp/FSharp.Core/set.fsi index 8d0e81c1e2d..9433349c27f 100644 --- a/src/fsharp/FSharp.Core/set.fsi +++ b/src/fsharp/FSharp.Core/set.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Collections @@ -245,7 +245,7 @@ namespace Microsoft.FSharp.Collections val union: set1:Set<'T> -> set2:Set<'T> -> Set<'T> /// Computes the union of a sequence of sets. - /// The sequence of sets to untion. + /// The sequence of sets to union. /// The union of the input sets. [] val unionMany: sets:seq> -> Set<'T> diff --git a/src/fsharp/FSharp.Core/string.fs b/src/fsharp/FSharp.Core/string.fs index 37079a4f702..cec6c745943 100644 --- a/src/fsharp/FSharp.Core/string.fs +++ b/src/fsharp/FSharp.Core/string.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Core diff --git a/src/fsharp/FSharp.Core/string.fsi b/src/fsharp/FSharp.Core/string.fsi index 27cd416cc93..4b5c0398e05 100644 --- a/src/fsharp/FSharp.Core/string.fsi +++ b/src/fsharp/FSharp.Core/string.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Core diff --git a/src/fsharp/FSharp.Data.TypeProviders/FSharp.Data.TypeProviders.Shared.fsproj b/src/fsharp/FSharp.Data.TypeProviders/FSharp.Data.TypeProviders.Shared.fsproj index 08f90fbacc1..e8441592d47 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/FSharp.Data.TypeProviders.Shared.fsproj +++ b/src/fsharp/FSharp.Data.TypeProviders/FSharp.Data.TypeProviders.Shared.fsproj @@ -1,5 +1,5 @@ - + $(DefineConstants);TPEMIT_INTERNAL_AND_MINIMAL_FOR_TYPE_CONTAINERS diff --git a/src/fsharp/FSharp.Data.TypeProviders/FSharp.Data.TypeProviders.fsproj b/src/fsharp/FSharp.Data.TypeProviders/FSharp.Data.TypeProviders.fsproj index 42551ef6309..ccb67526e5c 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/FSharp.Data.TypeProviders.fsproj +++ b/src/fsharp/FSharp.Data.TypeProviders/FSharp.Data.TypeProviders.fsproj @@ -1,5 +1,5 @@ - + ..\.. diff --git a/src/fsharp/FSharp.Data.TypeProviders/InternalsVisibleTo.fs b/src/fsharp/FSharp.Data.TypeProviders/InternalsVisibleTo.fs index df3ab054f78..39df9784050 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/InternalsVisibleTo.fs +++ b/src/fsharp/FSharp.Data.TypeProviders/InternalsVisibleTo.fs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp open System.Reflection -[] +[] do() diff --git a/src/fsharp/FSharp.Data.TypeProviders/TypeProviderEmit.fs b/src/fsharp/FSharp.Data.TypeProviders/TypeProviderEmit.fs index fa8ce8fe412..f6bb444ef53 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/TypeProviderEmit.fs +++ b/src/fsharp/FSharp.Data.TypeProviders/TypeProviderEmit.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #if TPEMIT_INTERNAL_AND_MINIMAL_FOR_TYPE_CONTAINERS namespace Internal.Utilities.TypeProvider.Emit diff --git a/src/fsharp/FSharp.Data.TypeProviders/TypeProviderEmit.fsi b/src/fsharp/FSharp.Data.TypeProviders/TypeProviderEmit.fsi index 821943eea09..0554d438739 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/TypeProviderEmit.fsi +++ b/src/fsharp/FSharp.Data.TypeProviders/TypeProviderEmit.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #if TPEMIT_INTERNAL_AND_MINIMAL_FOR_TYPE_CONTAINERS namespace Internal.Utilities.TypeProvider.Emit diff --git a/src/fsharp/FSharp.Data.TypeProviders/TypeProviderRuntimeAttribute.fs b/src/fsharp/FSharp.Data.TypeProviders/TypeProviderRuntimeAttribute.fs index aa81d03a495..8cba3d99459 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/TypeProviderRuntimeAttribute.fs +++ b/src/fsharp/FSharp.Data.TypeProviders/TypeProviderRuntimeAttribute.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Data.TypeProviders.DesignTime diff --git a/src/fsharp/FSharp.Data.TypeProviders/TypeProviders.fs b/src/fsharp/FSharp.Data.TypeProviders/TypeProviders.fs index a10b157f4cd..6f7f07f6755 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/TypeProviders.fs +++ b/src/fsharp/FSharp.Data.TypeProviders/TypeProviders.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Data.TypeProviders.DesignTime diff --git a/src/fsharp/FSharp.Data.TypeProviders/TypeProvidersImpl.fs b/src/fsharp/FSharp.Data.TypeProviders/TypeProvidersImpl.fs index 05742c16066..a856e6641b3 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/TypeProvidersImpl.fs +++ b/src/fsharp/FSharp.Data.TypeProviders/TypeProvidersImpl.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Data.TypeProviders.DesignTime diff --git a/src/fsharp/FSharp.Data.TypeProviders/Util.fs b/src/fsharp/FSharp.Data.TypeProviders/Util.fs index b510b90c077..d2b5e0bf19e 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/Util.fs +++ b/src/fsharp/FSharp.Data.TypeProviders/Util.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Data.TypeProviders.Utility @@ -102,15 +102,18 @@ module internal Util = | null -> () | _ -> key.Dispose() reg32view.Dispose() // if reg32view were really null, we would not be here and the user would have more serious issues not being able to access HKLM - useKey @"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" (fun key -> - match tryResult key with - | Some r -> r - | None -> - useKey @"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" (fun key -> - match tryResult key with - | Some r -> r - | None -> - raise <| System.NotSupportedException(FSData.SR.unsupportedFramework()))) + + let SDK_REGPATHS = [ @"Software\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" + @"Software\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" + @"Software\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" + @"Software\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" + @"Software\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" ] + + SDK_REGPATHS + |> Seq.tryPick (fun p -> useKey p tryResult) + |> function + | Some p -> p + | _ -> raise <| System.NotSupportedException(FSData.SR.unsupportedFramework()) let sdkUtil name = Path.Combine(sdkPath(), name) diff --git a/src/fsharp/FSharp.Data.TypeProviders/Util.fsi b/src/fsharp/FSharp.Data.TypeProviders/Util.fsi index 166179b2d72..af0db7ae49c 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/Util.fsi +++ b/src/fsharp/FSharp.Data.TypeProviders/Util.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Data.TypeProviders.Utility module internal Util = diff --git a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj index c3b939c572d..1b2060228ab 100644 --- a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj +++ b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj @@ -1,5 +1,5 @@ - + ..\.. @@ -11,16 +11,10 @@ Library FSharp.LanguageService.Compiler EXTENSIONTYPING;$(DefineConstants) - COMPILED_AS_LANGUAGE_SERVICE_DLL;$(DefineConstants) - INTERNALIZED_POWER_PACK;$(DefineConstants) COMPILER;$(DefineConstants) + COMPILED_AS_LANGUAGE_SERVICE_DLL;$(DefineConstants) INCLUDE_METADATA_READER;$(DefineConstants) - EXTENSIBLE_DUMPER;$(DefineConstants) - TYPE_PROVIDER_SECURITY;$(DefineConstants) - NO_COMPILER_BACKEND;$(DefineConstants) - NO_PDB_READER;$(DefineConstants) - NO_PDB_WRITER;$(DefineConstants) - NO_INLINE_IL_PARSER;$(DefineConstants) + INCLUDE_METADATA_WRITER;$(DefineConstants) $(NoWarn);62;9;75 {a437a6ec-5323-47c2-8f86-e2cac54ff152} true @@ -36,432 +30,480 @@ assemblyinfo.FSharp.Compiler.dll.fs - - --lexlib Internal.Utilities.Text.Lexing - pplex.fsl - - - Microsoft.FSharp.Compiler.PPParser - Microsoft.FSharp.Compiler - --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing - pppars.fsy - - - --lexlib Internal.Utilities.Text.Lexing - lex.fsl - - - --lexlib Internal.Utilities.Text.Lexing - illex.fsl - - - Microsoft.FSharp.Compiler.Parser - Microsoft.FSharp.Compiler - --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing - pars.fsy - - - Microsoft.FSharp.Compiler.AbstractIL.Internal.AsciiParser - Microsoft.FSharp.Compiler.AbstractIL - --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing - ilpars.fsy - - - ExtensibleDumper.fsi - - - ExtensibleDumper.fs - - sformat.fsi + ErrorText\sformat.fsi - sformat.fs + ErrorText\sformat.fs - sr.fsi + ErrorText\sr.fsi - sr.fs + ErrorText\sr.fs - prim-lexing.fsi + LexYaccRuntime\prim-lexing.fsi - prim-lexing.fs + LexYaccRuntime\prim-lexing.fs - prim-parsing.fsi + LexYaccRuntime\prim-parsing.fsi - prim-parsing.fs + LexYaccRuntime\prim-parsing.fs - resizearray.fsi + Utilities\resizearray.fsi - resizearray.fs + Utilities\resizearray.fs - HashMultiMap.fsi + Utilities\HashMultiMap.fsi - HashMultiMap.fs + Utilities\HashMultiMap.fs - TaggedCollections.fsi + Utilities\TaggedCollections.fsi - TaggedCollections.fs + Utilities\TaggedCollections.fs - FlatList.fs + Utilities\FlatList.fs + + + Utilities\QueueList.fs - illib.fs + Utilities\illib.fs - filename.fsi + Utilities\filename.fsi - filename.fs + Utilities\filename.fs - zmap.fsi + Utilities\zmap.fsi - zmap.fs + Utilities\zmap.fs - zset.fsi + Utilities\zset.fsi - zset.fs + Utilities\zset.fs - bytes.fsi + Utilities\bytes.fsi - bytes.fs + Utilities\bytes.fs - ildiag.fsi + Utilities\ildiag.fsi - ildiag.fs + Utilities\ildiag.fs + + + Utilities\lib.fs + + + Utilities\InternalCollections.fsi + + + Utilities\InternalCollections.fs + + + Utilities\rational.fsi + + + Utilities\rational.fs + + + Utilities\TraceCall.fs + + + ErrorLogging\range.fsi + + + ErrorLogging\range.fs + + + ErrorLogging\ErrorLogger.fs + + + ReferenceResolution\ReferenceResolution.fsi - ReferenceResolution.fs + ReferenceResolution\ReferenceResolution.fs + + --lexlib Internal.Utilities.Text.Lexing + AbsIL\illex.fsl + + + Microsoft.FSharp.Compiler.AbstractIL.Internal.AsciiParser + Microsoft.FSharp.Compiler.AbstractIL + --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + AbsIL\ilpars.fsy + - il.fsi + AbsIL\il.fsi - il.fs + AbsIL\il.fs - ilx.fsi + AbsIL\ilx.fsi - ilx.fs + AbsIL\ilx.fs - ilascii.fsi + AbsIL\ilascii.fsi - ilascii.fs + AbsIL\ilascii.fs - ilprint.fsi + AbsIL\ilprint.fsi - ilprint.fs + AbsIL\ilprint.fs - ilmorph.fsi + AbsIL/ilmorph.fsi - ilmorph.fs + AbsIL/ilmorph.fs - ilsupp.fsi + AbsIL/ilsupp.fsi - ilsupp.fs - - - - - ilbinary.fsi - - - ilbinary.fs - - - lib.fs - - - range.fsi - - - range.fs + AbsIL/ilsupp.fs - - rational.fsi + + AbsIL\ilpars.fs - - rational.fs + + AbsIL\illex.fs - - ErrorLogger.fs + + AbsIL\ilbinary.fsi - - tainted.fsi + + AbsIL\ilbinary.fs - - tainted.fs + + AbsIL\ilread.fsi - - InternalCollections.fsi + + AbsIL\ilread.fs - - InternalCollections.fs + + AbsIL/ilwrite.fsi - - ilread.fsi + + AbsIL/ilwrite.fs - - ilread.fs + + AbsIL/ilreflect.fs - CompilerLocationUtils.fs + CompilerLocation\CompilerLocationUtils.fs - PrettyNaming.fs + PrettyNaming\PrettyNaming.fs - ilxsettings.fs + ILXErase\ilxsettings.fs - - InternalFileSystemUtils.fsi + + ILXErase/EraseClosures.fsi - - InternalFileSystemUtils.fs + + ILXErase/EraseClosures.fs - - unilex.fsi + + ILXErase/EraseUnions.fsi - - unilex.fs + + ILXErase/EraseUnions.fs + + + --lexlib Internal.Utilities.Text.Lexing + ParserAndUntypedAST\pplex.fsl + + + Microsoft.FSharp.Compiler.PPParser + Microsoft.FSharp.Compiler + --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + ParserAndUntypedAST\pppars.fsy + + + --lexlib Internal.Utilities.Text.Lexing + ParserAndUntypedAST\lex.fsl + + + Microsoft.FSharp.Compiler.Parser + Microsoft.FSharp.Compiler + --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + ParserAndUntypedAST\pars.fsy + + + ParserAndUntypedAST\UnicodeLexing.fsi + + + ParserAndUntypedAST\UnicodeLexing.fs - layout.fsi + ParserAndUntypedAST\layout.fsi - layout.fs + ParserAndUntypedAST\layout.fs - ast.fs + ParserAndUntypedAST\ast.fs - - est.fsi + + ParserAndUntypedAST\pppars.fs - - est.fs + + ParserAndUntypedAST\pars.fs - - lexhelp.fsi + ParserAndUntypedAST\lexhelp.fsi - lexhelp.fs + ParserAndUntypedAST\lexhelp.fs - - - - - sreflect.fsi + + ParserAndUntypedAST\pplex.fs - - sreflect.fs + + ParserAndUntypedAST\lex.fs - - QueueList.fs + + ParserAndUntypedAST\lexfilter.fs - - tast.fs + + TypedAST\tainted.fsi + + + TypedAST\tainted.fs + + + TypedAST\ExtensionTyping.fsi - - env.fs + + TypedAST\ExtensionTyping.fs + + + TypedAST\QuotationPickler.fsi + + + TypedAST\QuotationPickler.fs + + + TypedAST\tast.fs - - tastops.fsi + + TypedAST\TcGlobals.fs - - tastops.fs + + TypedAST\TastOps.fsi - - pickle.fsi + + TypedAST\TastOps.fs - - pickle.fs + + TypedAST\TastPickle.fsi - - lexfilter.fs + + TypedAST\TastPickle.fs - import.fsi + Logic\import.fsi - import.fs + Logic\import.fs - infos.fs + Logic\infos.fs - NicePrint.fs + Logic\NicePrint.fs - - augment.fsi + + Logic\AugmentWithHashCompare.fsi - - augment.fs + + Logic\AugmentWithHashCompare.fs - - outcome.fsi + + Logic\NameResolution.fsi - - outcome.fs + + Logic\NameResolution.fs - - nameres.fsi + + Logic\TypeRelations.fs - - nameres.fs + + Logic\PatternMatchCompilation.fsi - - typrelns.fs + + Logic\PatternMatchCompilation.fs - - patcompile.fsi + + Logic\ConstraintSolver.fsi - - patcompile.fs + + Logic\ConstraintSolver.fs - - csolve.fsi + + Logic\CheckFormatStrings.fsi - - csolve.fs + + Logic\CheckFormatStrings.fs - - formats.fsi + + Logic\FindUnsolved.fs - - formats.fs + + Logic\QuotationTranslator.fsi - - unsolved.fs + + Logic\QuotationTranslator.fs - - creflect.fsi + + Logic\PostInferenceChecks.fsi - - creflect.fs + + Logic\PostInferenceChecks.fs - - check.fsi + + Logic\TypeChecker.fsi - - check.fs + + Logic\TypeChecker.fs - - tc.fsi + + Optimize\Optimizer.fsi - - tc.fs + + Optimize\Optimizer.fs - - opt.fsi + + Optimize/DetupleArgs.fsi - - opt.fs + + Optimize/DetupleArgs.fs - - TraceCall.fsi + + Optimize/InnerLambdasToTopLevelFuncs.fsi - - TraceCall.fs + + Optimize/InnerLambdasToTopLevelFuncs.fs - - build.fsi + + Optimize/LowerCallsAndSeqs.fs - - build.fs + + Optimize\autobox.fs - - fscopts.fsi + + CodeGen/IlxGen.fsi - - fscopts.fs + + CodeGen/IlxGen.fs - - IncrementalBuild.fsi + + Driver\CompileOps.fsi - - IncrementalBuild.fs + + Driver\CompileOps.fs + + + Driver\CompileOptions.fsi + + + Driver\CompileOptions.fs + + + Driver\fsc.fsi - fsc.fs + Driver\fsc.fs + + + Service/IncrementalBuild.fsi + + + Service/IncrementalBuild.fs - Reactor.fsi + Service/Reactor.fsi - Reactor.fs + Service/Reactor.fs + + + Service/ServiceConstants.fs + + + Service/ServiceDeclarations.fsi + + + Service/ServiceDeclarations.fs + + + Service/Symbols.fsi + + + Service/Symbols.fs - ServiceLexing.fsi + Service/ServiceLexing.fsi - ServiceLexing.fs - - - ServiceConstants.fs + Service/ServiceLexing.fs - ServiceParseTreeWalk.fs + Service/ServiceParseTreeWalk.fs - ServiceNavigation.fsi + Service/ServiceNavigation.fsi - ServiceNavigation.fs + Service/ServiceNavigation.fs - ServiceParamInfoLocations.fsi + Service/ServiceParamInfoLocations.fsi - ServiceParamInfoLocations.fs + Service/ServiceParamInfoLocations.fs - ServiceUntypedParse.fsi + Service/ServiceUntypedParse.fsi - ServiceUntypedParse.fs - - - ServiceDeclarations.fsi - - - ServiceDeclarations.fs + Service/ServiceUntypedParse.fs - service.fsi + Service/service.fsi - service.fs + Service/service.fs diff --git a/src/fsharp/FSharp.LanguageService.Compiler/InternalsVisibleTo.fs b/src/fsharp/FSharp.LanguageService.Compiler/InternalsVisibleTo.fs index 29b8e383db5..7ecc3a74ff8 100644 --- a/src/fsharp/FSharp.LanguageService.Compiler/InternalsVisibleTo.fs +++ b/src/fsharp/FSharp.LanguageService.Compiler/InternalsVisibleTo.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp open System.Reflection @@ -15,8 +15,8 @@ open System.Reflection [] [] [] -[] -[] +[] +[] do() diff --git a/src/fsharp/unsolved.fs b/src/fsharp/FindUnsolved.fs similarity index 97% rename from src/fsharp/unsolved.fs rename to src/fsharp/FindUnsolved.fs index 221cff97a0b..f682746abc9 100644 --- a/src/fsharp/unsolved.fs +++ b/src/fsharp/FindUnsolved.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. //------------------------------------------------------------------------- // Find unsolved, uninstantiated type variables @@ -19,11 +19,11 @@ open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.AbstractIL.IL -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.Infos type env = Nix diff --git a/src/fsharp/FlatList.fs b/src/fsharp/FlatList.fs index 9d38eedea23..ba9c8af6ab6 100644 --- a/src/fsharp/FlatList.fs +++ b/src/fsharp/FlatList.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Internal.Utilities diff --git a/src/fsharp/Fsc-proto/Fsc-proto.fsproj b/src/fsharp/Fsc-proto/Fsc-proto.fsproj index 0c16d80809e..ad9ac498247 100644 --- a/src/fsharp/Fsc-proto/Fsc-proto.fsproj +++ b/src/fsharp/Fsc-proto/Fsc-proto.fsproj @@ -1,5 +1,5 @@ - + ..\.. diff --git a/src/fsharp/Fsc/Fsc.fsproj b/src/fsharp/Fsc/Fsc.fsproj index ace36f9e42f..3b6aec58e18 100644 --- a/src/fsharp/Fsc/Fsc.fsproj +++ b/src/fsharp/Fsc/Fsc.fsproj @@ -1,5 +1,5 @@ - + ..\.. diff --git a/src/fsharp/Fsc/InternalsVisibleTo.fs b/src/fsharp/Fsc/InternalsVisibleTo.fs index e1497d6333a..773fd702a60 100644 --- a/src/fsharp/Fsc/InternalsVisibleTo.fs +++ b/src/fsharp/Fsc/InternalsVisibleTo.fs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp open System.Reflection -[] +[] do() diff --git a/src/fsharp/Fsc/fsc.exe.config b/src/fsharp/Fsc/fsc.exe.config index fc7e2236a67..82d49cd9965 100644 --- a/src/fsharp/Fsc/fsc.exe.config +++ b/src/fsharp/Fsc/fsc.exe.config @@ -10,8 +10,8 @@ publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> + oldVersion="2.0.0.0-4.4.1.0" + newVersion="4.4.1.9055"/> diff --git a/src/fsharp/ilxgen.fs b/src/fsharp/IlxGen.fs similarity index 95% rename from src/fsharp/ilxgen.fs rename to src/fsharp/IlxGen.fs index 58897a6daac..f57d8b7a8bf 100644 --- a/src/fsharp/ilxgen.fs +++ b/src/fsharp/IlxGen.fs @@ -1,10 +1,10 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. //-------------------------------------------------------------------------- // The ILX generator. //-------------------------------------------------------------------------- -module internal Microsoft.FSharp.Compiler.Ilxgen +module internal Microsoft.FSharp.Compiler.IlxGen #nowarn "44" // This construct is deprecated. please use List.item @@ -29,10 +29,10 @@ open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.PrettyNaming -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.TypeChecker open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.Types @@ -194,7 +194,7 @@ type IlxGenOptions = /// Compilation environment for compiling a fragment of an assembly [] type cenv = - { g: Env.TcGlobals + { g: TcGlobals TcVal : ConstraintSolver.TcValF viewCcu: CcuThunk opts: IlxGenOptions @@ -432,16 +432,16 @@ and GenTypeAux amap m g (tyenv: TypeReprEnv) voidOK ptrsOK ty = match stripTyEqnsAndMeasureEqns g ty with | TType_app (tcref, tinst) -> GenNamedTyAppAux amap m g tyenv ptrsOK tcref tinst | TType_tuple args -> GenTypeAux amap m g tyenv VoidNotOK ptrsOK (mkCompiledTupleTy g args) - | TType_fun (dty, returnTy) -> EraseIlxFuncs.mkILFuncTy g.ilxPubCloEnv (GenTypeArgAux amap m g tyenv dty) (GenTypeArgAux amap m g tyenv returnTy) + | TType_fun (dty, returnTy) -> EraseClosures.mkILFuncTy g.ilxPubCloEnv (GenTypeArgAux amap m g tyenv dty) (GenTypeArgAux amap m g tyenv returnTy) | TType_ucase (ucref, args) -> let cuspec,idx = GenUnionCaseSpec amap m g tyenv ucref args - EraseIlxUnions.GetILTypeForAlternative cuspec idx + EraseUnions.GetILTypeForAlternative cuspec idx | TType_forall (tps, tau) -> let tps = DropErasedTypars tps if tps.IsEmpty then GenTypeAux amap m g tyenv VoidNotOK ptrsOK tau - else EraseIlxFuncs.mkILTyFuncTy g.ilxPubCloEnv + else EraseClosures.mkILTyFuncTy g.ilxPubCloEnv | TType_var tp -> mkILTyvarTy tyenv.[tp,m] | TType_measure _ -> g.ilg.typ_int32 @@ -771,7 +771,7 @@ let StorageForValRef m (v: ValRef) eenv = StorageForVal m v.Deref eenv let IsValRefIsDllImport g (vref:ValRef) = vref.Attribs |> HasFSharpAttributeOpt g g.attrib_DllImportAttribute -let GetMethodSpecForMemberVal amap g memberInfo (vref:ValRef) = +let GetMethodSpecForMemberVal amap g (memberInfo:ValMemberInfo) (vref:ValRef) = let m = vref.Range let tps,curriedArgInfos,returnTy,retInfo = assert(vref.ValReprInfo.IsSome); @@ -924,7 +924,7 @@ let ComputeStorageForNonLocalTopVal amap g cloc modref (v:Val) = let rec ComputeStorageForNonLocalModuleOrNamespaceRef amap g cloc acc (modref:ModuleOrNamespaceRef) (modul:ModuleOrNamespace) = let acc = (acc, modul.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions) ||> List.fold (fun acc smodul -> - ComputeStorageForNonLocalModuleOrNamespaceRef amap g (CompLocForSubModuleOrNamespace cloc smodul) acc (modref.MkNestedTyconRef smodul) smodul) + ComputeStorageForNonLocalModuleOrNamespaceRef amap g (CompLocForSubModuleOrNamespace cloc smodul) acc (modref.NestedTyconRef smodul) smodul) let acc = (acc, modul.ModuleOrNamespaceType.AllValsAndMembers) ||> Seq.fold (fun acc v -> @@ -1088,7 +1088,7 @@ type TypeDefBuilder(tdef) = Fields = mkILFields (tdef.Fields.AsList @ ResizeArray.toList gfields); Properties = mkILProperties (tdef.Properties.AsList @ HashRangeSorted gproperties ); Events = mkILEvents (tdef.Events.AsList @ ResizeArray.toList gevents); - NestedTypes = mkILTypeDefs (tdef.NestedTypes.AsList @ gnested.Close()) } + NestedTypes = mkILTypeDefs (tdef.NestedTypes.AsList @ gnested.Close()) } member b.AddEventDef(edef) = gevents.Add edef @@ -1679,7 +1679,7 @@ let rec GenExpr cenv (cgbuf:CodeGenBuffer) eenv sp expr sequel = if not (WillGenerateSequencePoint sp expr) && not (AlwaysSuppressSequencePoint sp expr) then CG.EmitSeqPoint cgbuf expr.Range; - match (if compileSequenceExpressions then Lowertop.LowerSeqExpr cenv.g cenv.amap expr else None) with + match (if compileSequenceExpressions then LowerCallsAndSeqs.LowerSeqExpr cenv.g cenv.amap expr else None) with | Some info -> GenSequenceExpr cenv cgbuf eenv info sequel | None -> @@ -2042,7 +2042,7 @@ and GenAllocRecd cenv cgbuf eenv ctorInfo (tcref,argtys,args,m) sequel = (args,relevantFields) ||> List.iter2 (fun e f -> CG.EmitInstr cgbuf (pop 0) (Push (if tcref.IsStructOrEnumTycon then [ILType.Byref typ] else [typ])) mkLdarg0; GenExpr cenv cgbuf eenv SPSuppress e Continue; - GenFieldStore false cenv cgbuf eenv (mkNestedRecdFieldRef tcref f,argtys,m) discard) + GenFieldStore false cenv cgbuf eenv (tcref.MakeNestedRecdFieldRef f,argtys,m) discard) // Object construction doesn't generate a true value. // Object constructions will always just get thrown away so this is safe GenSequel cenv eenv.cloc cgbuf sequel @@ -2103,9 +2103,9 @@ and GenNewArray cenv cgbuf eenv (elems: Expr list,elemTy,m) sequel = and GenCoerce cenv cgbuf eenv (e,tgty,m,srcty) sequel = // Is this an upcast? - if Typrelns.TypeDefinitelySubsumesTypeNoCoercion 0 cenv.g cenv.amap m tgty srcty && + if TypeRelations.TypeDefinitelySubsumesTypeNoCoercion 0 cenv.g cenv.amap m tgty srcty && // Do an extra check - should not be needed - Typrelns.TypeFeasiblySubsumesType 0 cenv.g cenv.amap m tgty Typrelns.NoCoerce srcty then + TypeRelations.TypeFeasiblySubsumesType 0 cenv.g cenv.amap m tgty TypeRelations.NoCoerce srcty then begin // The .NET IL doesn't always support implict subsumption for interface types, e.g. at stack merge points // Hence be conservative here and always cast explicitly. @@ -2167,7 +2167,7 @@ and GenSetExnField cenv cgbuf eenv (e,ecref,fieldNum,e2,m) sequel = and GenUnionCaseProof cenv cgbuf eenv (e,ucref,tyargs,m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue; let cuspec,idx = GenUnionCaseSpec cenv.amap m cenv.g eenv.tyenv ucref tyargs - let fty = EraseIlxUnions.GetILTypeForAlternative cuspec idx + let fty = EraseUnions.GetILTypeForAlternative cuspec idx CG.EmitInstrs cgbuf (pop 1) (Push [fty]) [ mkIlxInstr (EI_castdata(false,cuspec,idx)); ]; GenSequel cenv eenv.cloc cgbuf sequel @@ -2411,7 +2411,7 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = | _ -> false) -> let storage = StorageForValRef m vref eenv - begin match storage with + match storage with | Method (topValInfo,vref,mspec,_,_,_) -> let nowArgs,laterArgs = let _,curriedArgInfos,_,_ = GetTopValTypeInFSharpForm cenv.g topValInfo vref.Type m @@ -2472,251 +2472,50 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = elif useICallVirt then I_callvirt (isTailCall, mspec, None) else I_call (isTailCall, mspec, None) - // An F# multi dimension array type "int32[,]" should normally map to the ILDASM type "int32[0...,0...]", just like C#. - // - // However, System.Reflection.Emit has a nasty bug that means it can't emit calls to C# generic methods involving multi-dimensional arrays - // void M(int32[,]) - // because MakeGenericMethod on this method returns a handle that causes an invalid call to be emitted by the IL code generator for dynamic assemblies - // - // We have to pay a price here, either: - // -- always emit no bounds, i.e. the ILDASM type "int32[,]" (without lower bounds), and not be able to implement C# virtual slots involving multi-dimensional array types - // -- always emit bounds, i.e. the ILDASM type "int32[0...,0...]" (without lower bounds), and not be able to call C# or F# generic code such as the Array2 module - // -- emit no bounds within the signatures of F# generic methods - // We follow the the second one. This bug was "fixed" for 4.0, but is still broken, since it no longer accounts for the case - // were you have no bounds. - // - // The code below provides a workaround for fsi 2.0 - we'll grab a MethodRef via reflection, and then call it indirectly. - // We need to use reflection to get the MethodRef because ldtoken, ldftn etc. may leak typars into the IL stream, resulting in a bad PE image. The indirect call - // is also necessary (as opposed to MethodBase::Invoke), because Invoke() requires an array of System.Type objects representing the method's argument types, and may - // provide another opportunity to leak "rogue" typars into the IL stream - - let emitReflectionCode = - if cenv.g.indirectCallArrayMethods then - true - elif cenv.opts.ilxBackend <> IlxGenBackend.IlReflectBackend then - false - elif cenv.g.using40environment then - false - elif ilTyArgs.Length = 0 then - false - elif Microsoft.FSharp.Compiler.AbstractIL.IL.runningOnMono then - false - elif newobj then - false - else - // test if emitting the reflection code is appropriate - let hasMDArrayReturnType = match mspec.FormalReturnType with | ILType.Array(shape,_) when shape.Rank > 1 -> true | _ -> false - let hasMDArrayParameter = mspec.FormalArgTypes |> ILList.exists (fun p -> match p with | ILType.Array(shape,_) when shape.Rank > 1 -> true | _ -> false) - - (hasMDArrayReturnType || hasMDArrayParameter) - - // grab a scope ref for fsi,exe - let fsiScoRefOpt = - if emitReflectionCode then - let assemblies = System.AppDomain.CurrentDomain.GetAssemblies() - assemblies - |> Array.tryPick (fun a-> - if a.FullName.Contains("Fsi,") then - Some (ILScopeRef.Assembly(ILAssemblyRef.FromAssemblyName (a.GetName()))) - else None ) - else - None - - - if emitReflectionCode && fsiScoRefOpt.IsSome then - - // System.Reflection.MethodInfo - let methodInfoTyRef = ILTypeRef.Create(cenv.g.ilg.traits.SystemReflectionScopeRef.Value,[],"System.Reflection.MethodInfo") - let methodInfoTySpec = ILTypeSpec.Create(methodInfoTyRef,emptyILGenericArgs) - let methodInfoTy = mkILBoxedType methodInfoTySpec - - // System.Reflection.MethodBase - let methodBaseTyRef = ILTypeRef.Create(cenv.g.ilg.traits.SystemReflectionScopeRef.Value,[],"System.Reflection.MethodBase") - let methodBaseTySpec = ILTypeSpec.Create(methodBaseTyRef,emptyILGenericArgs) - let methodBaseTy = mkILBoxedType methodBaseTySpec - - // System.RuntimeMethodHandle - let runtimeMethodHandleTyRef = ILTypeRef.Create(cenv.g.ilg.traits.ScopeRef,[],"System.RuntimeMethodHandle") - let runtimeMethodHandleTySpec = ILTypeSpec.Create(runtimeMethodHandleTyRef,emptyILGenericArgs) - let runtimeMethodHandleTy = ILType.Value runtimeMethodHandleTySpec - - // Microsoft.FSharp.Compiler.Interactive.Utils - let methodFinderTyRef = ILTypeRef.Create(fsiScoRefOpt.Value,[],"Microsoft.FSharp.Compiler.Interactive.Utils") - let methodFinderTySpec = ILTypeSpec.Create(methodFinderTyRef,emptyILGenericArgs) - let methodFinderTy = mkILBoxedType methodFinderTySpec - - let typeArrayTy = mkILArr1DTy cenv.g.ilg.typ_Type - let stringArrayTy = mkILArr1DTy cenv.g.ilg.typ_String - - // System.Reflection.MethodInfo::MakeGenericMethod - let makeGenericMethodRef = mkILMethRef(methodInfoTyRef,ILCallingConv.Instance,"MakeGenericMethod",0,[typeArrayTy],methodInfoTy) - let makeGenericMethodSpec = ILMethodSpec.Create(methodInfoTy,makeGenericMethodRef,emptyILGenericArgs) - - // System.Reflection.MethodBase::getMethodHandle - let getMethodHandleRef = mkILMethRef(methodBaseTyRef, ILCallingConv.Instance,"get_MethodHandle",0,[],runtimeMethodHandleTy) - let getMethodHandleSpec = ILMethodSpec.Create(methodBaseTy,getMethodHandleRef,emptyILGenericArgs) - - // Microsoft.FSharp.MethodFinder::findMethod - let findMethodRef = mkILMethRef(methodFinderTyRef, ILCallingConv.Static,"findMethod",0,[cenv.g.ilg.typ_Type; cenv.g.ilg.typ_String; cenv.g.ilg.typ_Int32; stringArrayTy; cenv.g.ilg.typ_String],methodInfoTy) - let findMethodSpec = ILMethodSpec.Create(methodFinderTy,findMethodRef,emptyILGenericArgs) - - // System.RuntimeMethodHandle::GetFunctionPointer - // Some framework profiles don't expose RuntimeMethodHandle::GetFunctionPointer. However this code seems to be used only from FSI and FSI always use desktop version of framework - should be OK - let getFunctionPointerRef = mkILMethRef(runtimeMethodHandleTyRef,ILCallingConv.Instance,"GetFunctionPointer",0,[],cenv.g.ilg.typ_IntPtr) - let getFunctionPointerSpec = ILMethodSpec.Create(runtimeMethodHandleTy,getFunctionPointerRef,emptyILGenericArgs) - - let typeofGenericArgs = ilTyArgs |> List.collect (fun ilt -> [mkTypeOfExpr cenv m ilt]) - let getNameExprs = mspec.FormalArgTypes |> ILList.toList |> List.map (fun t -> mkGetNameExpr cenv t m) + // ok, now we're ready to generate + if isSuperInit || isSelfInit then + CG.EmitInstrs cgbuf (pop 0) (Push [mspec.EnclosingType ]) [ mkLdarg0 ] ; - let ilActualRetTy = GenType cenv.amap m cenv.g eenv.tyenv actualRetTy - let objargs = if vref.NumObjArgs = 1 then List.tail nowArgs else nowArgs - let ilActualArgs = objargs |> List.map (tyOfExpr cenv.g) |> List.filter (fun ty -> not (isUnitTy cenv.g ty)) |> List.map (GenType cenv.amap m cenv.g eenv.tyenv) - - LocalScope "callstack" cgbuf - (fun scopeMarks -> + GenUntupledArgsDiscardingLoneUnit cenv cgbuf eenv m vref.NumObjArgs curriedArgInfos nowArgs; - let stack,eenvinner = EmitSaveStack cenv cgbuf eenv m scopeMarks - let eenvinner = {eenvinner with withinSEH = true} - let savedVal,eenvinner = AllocLocal cenv cgbuf eenvinner true (ilxgenGlobalNng.FreshCompilerGeneratedName ("res",m),ilActualRetTy) scopeMarks - let startTryMark = CG.GenerateMark cgbuf "startTryMark" - let endTryMark = CG.GenerateDelayMark cgbuf "endTryMark" - let afterHandler = CG.GenerateDelayMark cgbuf "afterHandler" - let localMethodHandle,eenvinner = AllocLocal cenv cgbuf eenvinner true (ilxgenGlobalNng.FreshCompilerGeneratedName ("handle",m),runtimeMethodHandleTy) scopeMarks - - // push args - GenUntupledArgsDiscardingLoneUnit cenv cgbuf eenvinner m vref.NumObjArgs curriedArgInfos nowArgs - - if isSuperInit || isSelfInit then - CG.EmitInstrs cgbuf (pop 0) (Push [mspec.EnclosingType]) [ mkLdarg0 ] - - // set up indirect call - // push the method's enclosing type on the top of the stack - GenExpr cenv cgbuf eenvinner SPSuppress (mkTypeOfExpr cenv m mspec.EnclosingType) Continue - - // push the name of the method - CG.EmitInstr cgbuf (pop 0) (Push [cenv.g.ilg.typ_String]) (I_ldstr mspec.Name) - - // push the method's arity - CG.EmitInstr cgbuf (pop 0) (Push [cenv.g.ilg.typ_Int32]) (mkLdcInt32 mspec.FormalArgTypes.Length) - - // push the names of the method's arg tys - GenNewArraySimple cenv cgbuf eenvinner (getNameExprs,cenv.g.string_ty,m) Continue - - // push the name of the return type - CG.EmitInstr cgbuf (pop 0) (Push [cenv.g.ilg.typ_String]) (I_ldstr mspec.FormalReturnType.BasicQualifiedName) - - // call Microsoft.FSharp.Core.MethodFinder.findMethod - CG.EmitInstr cgbuf (pop 5) (Push [methodInfoTy]) (I_call (Normalcall,findMethodSpec,None)) - - // create the generic method, if necessary - if mspec.GenericArgs.Length > 0 then - // create an array of System.Type objects - cenv.g.system_Type_typ - // and assign the type arg types to the array - GenNewArraySimple cenv cgbuf eenvinner (typeofGenericArgs,cenv.g.system_Type_typ,m) Continue - - // Pop the Type list, push the resulting MethodInfo object - CG.EmitInstr cgbuf (pop 2) (Push [methodInfoTy]) (I_callvirt (Normalcall, makeGenericMethodSpec, None)); - - // call System.Reflection.MethodBase::MethodHandle - CG.EmitInstr cgbuf (pop 1) (Push [runtimeMethodHandleTy]) (I_callvirt (Normalcall,getMethodHandleSpec,None)) - - EmitSetLocal cgbuf localMethodHandle - - CG.EmitInstr cgbuf (pop 0) (Push [runtimeMethodHandleTy]) (I_ldloca (uint16 localMethodHandle)) - - // get the function pointer - CG.EmitInstr cgbuf (pop 1) (Push [cenv.g.ilg.typ_IntPtr]) (I_call (Normalcall,getFunctionPointerSpec,None)) - - // make the actual indirect call - let nargs = mspec.FormalArgTypes.Length - // +1 Pop for the function pointer - CG.EmitInstr cgbuf (pop (nargs + 1 + (if mspec.CallingConv.IsStatic || newobj then 0 else 1))) - (if mustGenerateUnitAfterCall || isSuperInit || isSelfInit then Push0 else (Push [ilActualRetTy])) (I_calli(Normalcall,{mspec.MethodRef.CallingSignature with ReturnType=ilActualRetTy ; ArgTypes=mkILTypes ilActualArgs},None)); - - // For isSuperInit, load the 'this' pointer as the pretend 'result' of the operation. It will be popped again in most cases - if isSuperInit then CG.EmitInstrs cgbuf (pop 0) (Push [mspec.EnclosingType]) [ mkLdarg0 ] ; - - CommitCallSequel cenv eenv m eenv.cloc cgbuf mustGenerateUnitAfterCall (LeaveHandler (false,savedVal,afterHandler)) - - // catch block - // On 2.0 x64, Reflection.Emit has another bug that if you don't wrap your indirect call in a try block, you'll - // get "System.InvalidProgramException: JIT Compiler encountered an internal limitation." - // The code below inserts a dummy try block that just rethrows the exception - CG.SetMarkToHere cgbuf endTryMark; - let tryMarks = (startTryMark.CodeLabel, endTryMark.CodeLabel) - - let seh = - let startOfHandler = CG.GenerateMark cgbuf "startOfHandler" - begin - - CG.SetStack cgbuf [cenv.g.ilg.typ_Exception] - - // rethrow the inner exception - CG.EmitInstr cgbuf (pop 1) Push0 I_throw - end; - let endOfHandler = CG.GenerateMark cgbuf "endOfHandler" - let handlerMarks = (startOfHandler.CodeLabel, endOfHandler.CodeLabel) - ILExceptionClause.TypeCatch(cenv.g.ilg.typ_Exception, handlerMarks) - - cgbuf.EmitExceptionClause - { exnClauses = [ seh ]; - exnRange= tryMarks } ; - CG.SetMarkToHere cgbuf afterHandler; - CG.SetStack cgbuf []; - cgbuf.EmitStartOfHiddenCode(); - - // Restore the stack and load the result - EmitRestoreStack cgbuf stack; - - EmitGetLocal cgbuf ilActualRetTy savedVal; - GenSequel cenv eenv.cloc cgbuf sequel) // end LocalScope - else begin - // ok, now we're ready to generate - if isSuperInit || isSelfInit then - CG.EmitInstrs cgbuf (pop 0) (Push [mspec.EnclosingType ]) [ mkLdarg0 ] ; - - GenUntupledArgsDiscardingLoneUnit cenv cgbuf eenv m vref.NumObjArgs curriedArgInfos nowArgs; - - // Generate laterArgs (for effects) and save - LocalScope "callstack" cgbuf (fun scopeMarks -> - let whereSaved,eenv = - (eenv,laterArgs) ||> List.mapFold (fun eenv laterArg -> - // Only save arguments that have effects - if Opt.ExprHasEffect cenv.g laterArg then - let ilTy = laterArg |> tyOfExpr cenv.g |> GenType cenv.amap m cenv.g eenv.tyenv - let loc,eenv = AllocLocal cenv cgbuf eenv true (ilxgenGlobalNng.FreshCompilerGeneratedName ("arg",m), ilTy) scopeMarks - GenExpr cenv cgbuf eenv SPSuppress laterArg Continue - EmitSetLocal cgbuf loc - Choice1Of2 (ilTy,loc),eenv - else - Choice2Of2 laterArg, eenv) + // Generate laterArgs (for effects) and save + LocalScope "callstack" cgbuf (fun scopeMarks -> + let whereSaved,eenv = + (eenv,laterArgs) ||> List.mapFold (fun eenv laterArg -> + // Only save arguments that have effects + if Optimizer.ExprHasEffect cenv.g laterArg then + let ilTy = laterArg |> tyOfExpr cenv.g |> GenType cenv.amap m cenv.g eenv.tyenv + let loc,eenv = AllocLocal cenv cgbuf eenv true (ilxgenGlobalNng.FreshCompilerGeneratedName ("arg",m), ilTy) scopeMarks + GenExpr cenv cgbuf eenv SPSuppress laterArg Continue + EmitSetLocal cgbuf loc + Choice1Of2 (ilTy,loc),eenv + else + Choice2Of2 laterArg, eenv) - let nargs = mspec.FormalArgTypes.Length - CG.EmitInstr cgbuf (pop (nargs + (if mspec.CallingConv.IsStatic || newobj then 0 else 1))) - (if mustGenerateUnitAfterCall || isSuperInit || isSelfInit then Push0 else (Push [(GenType cenv.amap m cenv.g eenv.tyenv actualRetTy)])) callInstr; + let nargs = mspec.FormalArgTypes.Length + CG.EmitInstr cgbuf (pop (nargs + (if mspec.CallingConv.IsStatic || newobj then 0 else 1))) + (if mustGenerateUnitAfterCall || isSuperInit || isSelfInit then Push0 else (Push [(GenType cenv.amap m cenv.g eenv.tyenv actualRetTy)])) callInstr; - // For isSuperInit, load the 'this' pointer as the pretend 'result' of the operation. It will be popped again in most cases - if isSuperInit then CG.EmitInstrs cgbuf (pop 0) (Push [mspec.EnclosingType]) [ mkLdarg0 ] ; + // For isSuperInit, load the 'this' pointer as the pretend 'result' of the operation. It will be popped again in most cases + if isSuperInit then CG.EmitInstrs cgbuf (pop 0) (Push [mspec.EnclosingType]) [ mkLdarg0 ] ; - // When generating debug code, generate a 'nop' after a 'call' that returns 'void' - // This is what C# does, as it allows the call location to be maintained correctly in the stack frame - if cenv.opts.generateDebugSymbols && mustGenerateUnitAfterCall && (isTailCall = Normalcall) then - CG.EmitInstrs cgbuf (pop 0) Push0 [ AI_nop ] ; + // When generating debug code, generate a 'nop' after a 'call' that returns 'void' + // This is what C# does, as it allows the call location to be maintained correctly in the stack frame + if cenv.opts.generateDebugSymbols && mustGenerateUnitAfterCall && (isTailCall = Normalcall) then + CG.EmitInstrs cgbuf (pop 0) Push0 [ AI_nop ] - if isNil laterArgs then - assert isNil whereSaved - // Generate the "unit" value if necessary - CommitCallSequel cenv eenv m eenv.cloc cgbuf mustGenerateUnitAfterCall sequel - else - //printfn "%d EXTRA ARGS IN TOP APP at %s" laterArgs.Length (stringOfRange m) - whereSaved |> List.iter (function - | Choice1Of2 (ilTy,loc) -> EmitGetLocal cgbuf ilTy loc - | Choice2Of2 expr -> GenExpr cenv cgbuf eenv SPSuppress expr Continue) - GenIndirectCall cenv cgbuf eenv (actualRetTy,[],laterArgs,m) sequel) + if isNil laterArgs then + assert isNil whereSaved + // Generate the "unit" value if necessary + CommitCallSequel cenv eenv m eenv.cloc cgbuf mustGenerateUnitAfterCall sequel + else + //printfn "%d EXTRA ARGS IN TOP APP at %s" laterArgs.Length (stringOfRange m) + whereSaved |> List.iter (function + | Choice1Of2 (ilTy,loc) -> EmitGetLocal cgbuf ilTy loc + | Choice2Of2 expr -> GenExpr cenv cgbuf eenv SPSuppress expr Continue) + GenIndirectCall cenv cgbuf eenv (actualRetTy,[],laterArgs,m) sequel) - end | _ -> failwith "??" - end // This case is for getting/calling a value, when we can't call it directly. // However, we know the type instantiation for the value. @@ -3656,7 +3455,7 @@ and GenObjectExpr cenv cgbuf eenvouter expr (baseType,baseValOpt,basecall,overri cgbuf.mgbuf.AddTypeDef(ilCloTypeRef, cloTypeDef, false, false); CountClosure(); GenGetLocalVals cenv cgbuf eenvouter m cloFreeVars; - CG.EmitInstr cgbuf (pop ilCloFreeVars.Length) (Push [ EraseIlxFuncs.mkTyOfLambdas cenv.g.ilxPubCloEnv ilCloLambdas]) (I_newobj (ilxCloSpec.Constructor,None)); + CG.EmitInstr cgbuf (pop ilCloFreeVars.Length) (Push [ EraseClosures.mkTyOfLambdas cenv.g.ilxPubCloEnv ilCloLambdas]) (I_newobj (ilxCloSpec.Constructor,None)); GenSequel cenv eenvouter.cloc cgbuf sequel and GenSequenceExpr cenv (cgbuf:CodeGenBuffer) eenvouter (nextEnumeratorValRef:ValRef,pcvref:ValRef,currvref:ValRef,stateVars,generateNextExpr,closeExpr,checkCloseExpr:Expr,seqElemTy, m) sequel = @@ -3851,7 +3650,7 @@ and GenLambdaVal cenv (cgbuf:CodeGenBuffer) eenv (cloinfo,m) = GenGetLocalVals cenv cgbuf eenv m cloinfo.cloFreeVars; CG.EmitInstr cgbuf (pop cloinfo.cloILFreeVars.Length) - (Push [EraseIlxFuncs.mkTyOfLambdas cenv.g.ilxPubCloEnv cloinfo.ilCloLambdas]) + (Push [EraseClosures.mkTyOfLambdas cenv.g.ilxPubCloEnv cloinfo.ilCloLambdas]) (I_newobj (cloinfo.cloSpec.Constructor,None)) and GenLambda cenv cgbuf eenv isLocalTypeFunc selfv expr sequel = @@ -4184,7 +3983,7 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_,delega let ctxtGenericArgsForDelegee = GenGenericArgs m eenvouter.tyenv cloFreeTyvars let ilxCloSpec = IlxClosureSpec.Create(IlxClosureRef(ilDelegeeTypeRef, ilCloLambdas, ilCloFreeVars), mkILGenericArgs ctxtGenericArgsForDelegee) GenGetLocalVals cenv cgbuf eenvouter m cloFreeVars; - CG.EmitInstr cgbuf (pop ilCloFreeVars.Length) (Push [EraseIlxFuncs.mkTyOfLambdas cenv.g.ilxPubCloEnv ilCloLambdas]) (I_newobj (ilxCloSpec.Constructor,None)); + CG.EmitInstr cgbuf (pop ilCloFreeVars.Length) (Push [EraseClosures.mkTyOfLambdas cenv.g.ilxPubCloEnv ilCloLambdas]) (I_newobj (ilxCloSpec.Constructor,None)); let ilDelegeeTyOuter = mkILBoxedTy ilDelegeeTypeRef ctxtGenericArgsForDelegee let ilDelegeeInvokeMethOuter = mkILNonGenericInstanceMethSpecInTy (ilDelegeeTyOuter,"Invoke",typesOfILParamsList ilDelegeeParams, ilDelegeeRet.Type) @@ -5796,7 +5595,7 @@ and CreatePermissionSets g amap eenv (securityAttributes : Attrib list) = let tref = tcref.CompiledRepresentationForNamedType let ilattr = GenAttr amap g eenv attr let _, ilNamedArgs = - match TryDecodeILAttribute g tref (Some(tref.Scope)) (mkILCustomAttrs [ilattr]) with + match TryDecodeILAttribute g tref (mkILCustomAttrs [ilattr]) with | Some(ae,na) -> ae, na | _ -> [],[] let setArgs = ilNamedArgs |> List.map (fun (n,ilt,_,ilae) -> (n,ilt,ilae)) @@ -6307,7 +6106,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = (match ilTypeDefKind with ILTypeDefKind.ValueType -> true | _ -> false) && // All structs are sequential by default // Structs with no instance fields get size 1, pack 0 - tycon.AllFieldsAsList |> List.exists (fun f -> not f.IsStatic) + tycon.AllFieldsAsList |> List.forall (fun f -> f.IsStatic) isEmptyStruct && cenv.opts.workAroundReflectionEmitBugs && not tycon.TyparsNoRange.IsEmpty @@ -6326,7 +6125,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = let isPropHidden = ((fspec.IsCompilerGenerated && not tycon.IsEnumTycon) || hiddenRepr || - IsHiddenRecdField eenv.sigToImplRemapInfo (mkNestedRecdFieldRef tcref fspec)) + IsHiddenRecdField eenv.sigToImplRemapInfo (tcref.MakeNestedRecdFieldRef fspec)) let ilType = GenType cenv.amap m cenv.g eenvinner.tyenv fspec.FormalType let ilFieldName = ComputeFieldName tycon fspec @@ -6448,7 +6247,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = eenv.valsInScope.TryFind cenv.g.new_format_vref.Deref) with | Some(Lazy(Method(_,_,sprintfMethSpec,_,_,_))), Some(Lazy(Method(_,_,newFormatMethSpec,_,_,_))) -> // The type returned by the 'sprintf' call - let funcTy = EraseIlxFuncs.mkILFuncTy cenv.g.ilxPubCloEnv ilThisTy cenv.g.ilg.typ_String + let funcTy = EraseClosures.mkILFuncTy cenv.g.ilxPubCloEnv ilThisTy cenv.g.ilg.typ_String // Give the instantiation of the printf format object, i.e. a Format`5 object compatible with StringFormat let newFormatMethSpec = mkILMethSpec(newFormatMethSpec.MethodRef,AsObject, [// 'T -> string' @@ -6959,8 +6758,8 @@ let defaultOf = /// Top-level val bindings are stored (for example) in static fields. /// In the FSI case, these fields are be created and initialised, so we can recover the object. -/// Ilxgen knows how v was stored, and then ilreflect knows how this storage was generated. -/// Ilxgen converts (v:Tast.Val) to AbsIL datatstructures. +/// IlxGen knows how v was stored, and then ilreflect knows how this storage was generated. +/// IlxGen converts (v:Tast.Val) to AbsIL datatstructures. /// Ilreflect converts from AbsIL datatstructures to emitted Type, FieldInfo, MethodInfo etc. let LookupGeneratedValue (amap:Import.ImportMap) (ctxt: ExecutionContext) g eenv (v:Val) = try @@ -7056,7 +6855,7 @@ let LookupGeneratedInfo (ctxt: ExecutionContext) (g:TcGlobals) eenv (v:Val) = /// The published API from the ILX code generator -type IlxAssemblyGenerator(amap: Import.ImportMap, tcGlobals: Env.TcGlobals, tcVal : ConstraintSolver.TcValF, ccu: Tast.CcuThunk) = +type IlxAssemblyGenerator(amap: Import.ImportMap, tcGlobals: TcGlobals, tcVal : ConstraintSolver.TcValF, ccu: Tast.CcuThunk) = // The incremental state held by the ILX code generator let mutable ilxGenEnv = GetEmptyIlxGenEnv tcGlobals.ilg ccu diff --git a/src/fsharp/ilxgen.fsi b/src/fsharp/IlxGen.fsi similarity index 91% rename from src/fsharp/ilxgen.fsi rename to src/fsharp/IlxGen.fsi index 6cc7fab17bf..19a6ea51db5 100644 --- a/src/fsharp/ilxgen.fsi +++ b/src/fsharp/IlxGen.fsi @@ -1,14 +1,15 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Ilxgen +module internal Microsoft.FSharp.Compiler.IlxGen +open System +open System.IO +open System.Reflection open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Tast -open System -open System.IO -open System.Reflection +open Microsoft.FSharp.Compiler.TcGlobals /// Indicates how the generated IL code is ultimately emitted type IlxGenBackend = @@ -60,7 +61,7 @@ type ExecutionContext = /// An incremental ILX code generator for a single assembly type public IlxAssemblyGenerator = /// Create an incremental ILX code generator for a single assembly - new : Import.ImportMap * Env.TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxAssemblyGenerator + new : Import.ImportMap * TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxAssemblyGenerator /// Register a set of referenced assemblies with the ILX code generator member AddExternalCcus : CcuThunk list -> unit diff --git a/src/fsharp/tlr.fs b/src/fsharp/InnerLambdasToTopLevelFuncs.fs similarity index 97% rename from src/fsharp/tlr.fs rename to src/fsharp/InnerLambdasToTopLevelFuncs.fs index c84f1ad95d5..7495270e0ea 100644 --- a/src/fsharp/tlr.fs +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fs @@ -1,6 +1,6 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Tlr +module internal Microsoft.FSharp.Compiler.InnerLambdasToTopLevelFuncs open Internal.Utilities open Microsoft.FSharp.Compiler.AbstractIL @@ -14,7 +14,7 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.Detuple.GlobalUsageAnalysis open Microsoft.FSharp.Compiler.Lib @@ -103,16 +103,16 @@ let mkLocalNameTypeArity compgen m name ty topValInfo = // (b) it has no free tps // (c) for g:freevars(repr), both // (1) g is TLR with arity wg, and -// (2) g occurs in arity-met occurance. +// (2) g occurs in arity-met occurrence. // (d) if N=0, then further require that body be a TLR-constant. // -// Conditions (a-c) are required if f is to have a static method/field represenation. +// Conditions (a-c) are required if f is to have a static method/field representation. // Condition (d) chooses which constants can be lifted. (no effects, non-trivial). // -// DEFN: An arity-met occurance of g is a g application with enough args supplied, +// DEFN: An arity-met occurrence of g is a g application with enough args supplied, // ie. (g tps args) where wg <= |args|. // -// DEFN: An arity-short occurance does not have enough args. +// DEFN: An arity-short occurrence does not have enough args. // // DEFN: A TLR-constant: // - can have constructors (tuples, datatype, records, exn). @@ -257,7 +257,7 @@ module Pass1_DetermineTLRAndArities = // pass2: determine reqdTypars(f) and envreq(f) - notes //------------------------------------------------------------------------- -/// What are the closing types/values for {f1,f2...} mutally defined? +/// What are the closing types/values for {f1,f2...} mutually defined? /// // Note: arity-met g-applications (g TLR) will translated as: // [[g @ tps ` args]] -> gHAT @ reqdTypars(g) tps ` env(g) args @@ -274,11 +274,11 @@ module Pass1_DetermineTLRAndArities = // What are the closure equations? // // reqdTypars(f1,f2..) includes free-tps(f) -// reqdTypars(f1,f2..) includes reqdTypars(g) if fBody has arity-met g-occurance (g TLR). +// reqdTypars(f1,f2..) includes reqdTypars(g) if fBody has arity-met g-occurrence (g TLR). // -// reqdItems(f1,f2...) includes ReqdSubEnv(g) if fBody has arity-met g-occurance (g TLR) -// reqdItems(f1,f2...) includes ReqdVal(g) if fBody has arity-short g-occurance (g TLR) -// reqdItems(f1,f2...) includes ReqdVal(g) if fBody has g-occurance (g not TLR) +// reqdItems(f1,f2...) includes ReqdSubEnv(g) if fBody has arity-met g-occurrence (g TLR) +// reqdItems(f1,f2...) includes ReqdVal(g) if fBody has arity-short g-occurrence (g TLR) +// reqdItems(f1,f2...) includes ReqdVal(g) if fBody has g-occurrence (g not TLR) // // and only collect requirements if g is a generator (see next notes). // @@ -294,7 +294,7 @@ module Pass1_DetermineTLRAndArities = // but the env(h) will be available there (by "env-availability"), // since h must be bound inside the fBody since h was not a freevar for f. // . -// [note, f and h may mutally recurse and formals of f may be in env(h), +// [note, f and h may mutually recurse and formals of f may be in env(h), // so env(f) may be properly inside env(h), // so better not have env(h) in env(f)!!!]. @@ -320,8 +320,8 @@ let fclassOrder = Order.orderOn (fun (b: BindingGroupSharingSameReqdItems) -> b. /// It is required to make the TLR closed wrt it's freevars (the env reqdVals0). /// For gv a generator, -/// An arity-met gv occurance contributes the env required for that gv call. -/// Other occurances contribute the value gv. +/// An arity-met gv occurrence contributes the env required for that gv call. +/// Other occurrences contribute the value gv. type ReqdItem = | ReqdSubEnv of Val | ReqdVal of Val @@ -400,7 +400,7 @@ module Pass2_DetermineReqdItems = // freevs = freevars of .. // initialise: // reqdTypars = freetps - // reqdItems = [] -- info collected from generator occurances in bindings + // reqdItems = [] -- info collected from generator occurrences in bindings // reqdVals0 = freevs // - fold bodies, collecting info for reqdVals0. // - pop and save env. @@ -423,7 +423,7 @@ module Pass2_DetermineReqdItems = /// /// When walking expr, at each mutual binding site, /// push a (generator,env) collector frame on stack. - /// If occurances in body are relevant (for a generator) then it's contribution is logged. + /// If occurrences in body are relevant (for a generator) then it's contribution is logged. /// /// recShortCalls to f will require a binding for f in terms of fHat within the fHatBody. type state = @@ -490,8 +490,8 @@ module Pass2_DetermineReqdItems = /// Intercepts selected exprs. /// "letrec f1,f2,... = fBody1,fBody2,... in rest" - - /// "val v" - free occurance - /// "app (f,tps,args)" - occurance + /// "val v" - free occurrence + /// "app (f,tps,args)" - occurrence /// /// On intercepted nodes, must exprF fold to collect from subexpressions. let ExprEnvIntercept (tlrS,arityM) exprF z expr = @@ -522,7 +522,7 @@ module Pass2_DetermineReqdItems = // what determines env? let frees = FreeInBindings tlrBs let reqdTypars0 = frees.FreeTyvars.FreeTypars |> Zset.elements (* put in env *) - // occurances contribute to env + // occurrences contribute to env let reqdVals0 = frees.FreeLocals |> Zset.elements // tlrBs are not reqdVals0 for themselves let reqdVals0 = reqdVals0 |> List.filter (fun gv -> not (fclass.Contains gv)) @@ -712,7 +712,7 @@ let FlatEnvPacks g fclassM topValS declist (reqdItemsMap: Zmap FlatList.filter (IsMandatoryTopLevel >> not) // Remove byrefs, no need to close over these, and would be invalid to do so since their values can change. // - // Note that it is normally not OK to skip closing over values, since values given (method) TLR must have imlpementations + // Note that it is normally not OK to skip closing over values, since values given (method) TLR must have implementations // which are truly closed. However, byref values never escape into any lambdas, so are never used in anything // for which we will choose a method TLR. // @@ -868,7 +868,7 @@ module Pass4_RewriteAssembly = [] type RewriteContext = { ccu : CcuThunk; - g : Env.TcGlobals; + g : TcGlobals; tlrS : Zset ; topValS : Zset ; arityM : Zmap ; @@ -1048,9 +1048,9 @@ module Pass4_RewriteAssembly = let newTlrBinds,tlrRebinds = TransTLRBindings penv tlrBs let aenvBinds = GetAEnvBindings penv fclass // lower nonTlrBs if they are GTL - // QUERY: we repeat this logic in Lowertop. Do we really need to do this here? + // QUERY: we repeat this logic in LowerCallsAndSeqs. Do we really need to do this here? // QUERY: yes and no - if we don't, we have an unrealizable term, and many decisions must - // QUERY: correlate with Lowertop. + // QUERY: correlate with LowerCallsAndSeqs. let forceTopBindToHaveArity (bind:Binding) = if penv.topValS.Contains(bind.Var) then ConvertBind penv.g bind else bind diff --git a/src/fsharp/InnerLambdasToTopLevelFuncs.fsi b/src/fsharp/InnerLambdasToTopLevelFuncs.fsi new file mode 100644 index 00000000000..647cd1df4fb --- /dev/null +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fsi @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module internal Microsoft.FSharp.Compiler.InnerLambdasToTopLevelFuncs + +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.TcGlobals + +val MakeTLRDecisions : Tast.CcuThunk -> TcGlobals -> Tast.TypedImplFile -> Tast.TypedImplFile +#if TLR_LIFT +val liftTLR : bool ref +#endif diff --git a/src/fsharp/InternalCollections.fs b/src/fsharp/InternalCollections.fs old mode 100644 new mode 100755 index 403bd20498a..a18e592a1f2 --- a/src/fsharp/InternalCollections.fs +++ b/src/fsharp/InternalCollections.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Internal.Utilities.Collections open System @@ -15,13 +15,14 @@ type internal ValueStrength<'T when 'T : not struct> = | Weak of WeakReference<'T> #endif -type internal AgedLookup<'TKey,'TValue when 'TValue : not struct>(keepStrongly:int, areSame, ?onStrongDiscard : ('TValue -> unit), ?keepMax: int) = +type internal AgedLookup<'TKey,'TValue when 'TValue : not struct>(keepStrongly:int, areSame, ?requiredToKeep, ?onStrongDiscard, ?keepMax: int) = /// The list of items stored. Youngest is at the end of the list. - /// The choice of order is somewhat aribtrary. If the other way then adding + /// The choice of order is somewhat arbitrary. If the other way then adding /// items would be O(1) and removing O(N). let mutable refs:('TKey*ValueStrength<'TValue>) list = [] + let mutable keepStrongly = keepStrongly - // Only set a strong discard function if keepMax is expliclty set to keepStrongly, i.e. there are no weak entries in this lookup. + // Only set a strong discard function if keepMax is explicitly set to keepStrongly, i.e. there are no weak entries in this lookup. do assert (onStrongDiscard.IsNone || Some keepStrongly = keepMax) let strongDiscard x = match onStrongDiscard with None -> () | Some f -> f x @@ -30,7 +31,8 @@ type internal AgedLookup<'TKey,'TValue when 'TValue : not struct>(keepStrongly:i // references. Some operations are O(N) and we don't want to let things get out of // hand. let keepMax = defaultArg keepMax 75 - let keepMax = max keepStrongly keepMax + let mutable keepMax = max keepStrongly keepMax + let requiredToKeep = defaultArg requiredToKeep (fun _ -> false) /// Look up a the given key, return None if not found. let TryPeekKeyValueImpl(data,key) = @@ -62,9 +64,9 @@ type internal AgedLookup<'TKey,'TValue when 'TValue : not struct>(keepStrongly:i let TryGetKeyValueImpl(data,key) = match TryPeekKeyValueImpl(data,key) with - | Some(_, value) as result -> - // If the result existed, move it to the top of the list. - result,Promote (data,key,value) + | Some(key', value) as result -> + // If the result existed, move it to the end of the list (more likely to keep it) + result,Promote (data,key',value) | None -> None,data /// Remove weak entries from the list that have been collected @@ -86,15 +88,15 @@ type internal AgedLookup<'TKey,'TValue when 'TValue : not struct>(keepStrongly:i let AssignWithStrength(newdata,discard1) = let actualLength = List.length newdata let tossThreshold = max 0 (actualLength - keepMax) // Delete everything less than this threshold - let weakThreshhold = max 0 (actualLength - keepStrongly) // Weaken everything less than this threshhold + let weakThreshhold = max 0 (actualLength - keepStrongly) // Weaken everything less than this threshold let newdata = newdata|> List.mapi( fun n kv -> n,kv ) // Place the index. - let newdata,discard2 = newdata |> List.partition (fun (n:int,_) -> n >= tossThreshold) + let newdata,discard2 = newdata |> List.partition (fun (n:int,v) -> n >= tossThreshold || requiredToKeep (snd v)) let newdata = newdata |> List.map( fun (n:int,(k,v)) -> let handle = - if n(keepStrongly:i else Strong(v) k,handle ) - refs<- newdata + refs <- newdata discard1 |> List.iter (snd >> strongDiscard) discard2 |> List.iter (snd >> snd >> strongDiscard) @@ -136,63 +138,48 @@ type internal AgedLookup<'TKey,'TValue when 'TValue : not struct>(keepStrongly:i let newdata,discard = RemoveImpl (data,key) AssignWithStrength(newdata,discard) - member al.MostRecent : ('TKey*'TValue) option= - let data = FilterAndHold() - if not data.IsEmpty then - // Non-optimal reverse list to get most recent. Consider an array of option for the data structure. - Some(data |> List.rev |> List.head) - else None - member al.Clear() = let discards = FilterAndHold() AssignWithStrength([], discards) + member al.Resize(newKeepStrongly, ?newKeepMax) = + let newKeepMax = defaultArg newKeepMax 75 + keepStrongly <- newKeepStrongly + keepMax <- max newKeepStrongly newKeepMax + do assert (onStrongDiscard.IsNone || keepStrongly = keepMax) + let keep = FilterAndHold() + AssignWithStrength(keep, []) + -type internal MruCache<'TKey,'TValue when 'TValue : not struct>(keepStrongly,compute, areSame, ?isStillValid : 'TKey*'TValue->bool, ?areSameForSubsumption, ?logComputedNewValue, ?logUsedCachedValue, ?onStrongDiscard, ?keepMax) = +type internal MruCache<'TKey,'TValue when 'TValue : not struct>(keepStrongly, areSame, ?isStillValid : 'TKey*'TValue->bool, ?areSameForSubsumption, ?requiredToKeep, ?onStrongDiscard, ?keepMax) = /// Default behavior of areSameForSubsumption function is areSame let areSameForSubsumption = defaultArg areSameForSubsumption areSame /// The list of items in the cache. Youngest is at the end of the list. - /// The choice of order is somewhat aribtrary. If the other way then adding + /// The choice of order is somewhat arbitrary. If the other way then adding /// items would be O(1) and removing O(N). - let cache = AgedLookup<'TKey,'TValue>(keepStrongly=keepStrongly,areSame=areSameForSubsumption,?onStrongDiscard=onStrongDiscard,?keepMax=keepMax) + let cache = AgedLookup<'TKey,'TValue>(keepStrongly=keepStrongly,areSame=areSameForSubsumption,?onStrongDiscard=onStrongDiscard,?keepMax=keepMax,?requiredToKeep=requiredToKeep) /// Whether or not this result value is still valid. let isStillValid = defaultArg isStillValid (fun _ -> true) - /// Log a message when a new value is computed. - let logComputedNewValue = defaultArg logComputedNewValue ignore - - /// Log a message when an existing value was retrieved from cache. - let logUsedCachedValue = defaultArg logUsedCachedValue ignore - - member bc.GetAvailable(key) = + member bc.TryGetAny(key) = match cache.TryPeekKeyValue(key) with | Some(key', value)-> if areSame(key',key) then Some(value) else None | None -> None - member bc.Get(key) = - let Compute() = - let value = compute key - cache.Put(key, value) - logComputedNewValue(key) - value + member bc.TryGet(key) = match cache.TryGetKeyValue(key) with | Some(key', value) -> - if areSame(key', key) && isStillValid(key,value) then - logUsedCachedValue(key) - value - else Compute() - | None -> Compute() + if areSame(key', key) && isStillValid(key,value) then Some value + else None + | None -> None - member bc.MostRecent = - cache.MostRecent - - member bc.SetAlternate(key:'TKey,value:'TValue) = + member bc.Set(key:'TKey,value:'TValue) = cache.Put(key,value) member bc.Remove(key) = @@ -201,6 +188,9 @@ type internal MruCache<'TKey,'TValue when 'TValue : not struct>(keepStrongly,com member bc.Clear() = cache.Clear() + member bc.Resize(newKeepStrongly, ?newKeepMax) = + cache.Resize(newKeepStrongly, ?newKeepMax=newKeepMax) + /// List helpers [] type internal List = diff --git a/src/fsharp/InternalCollections.fsi b/src/fsharp/InternalCollections.fsi old mode 100644 new mode 100755 index 115f715233d..bf4c4a4395c --- a/src/fsharp/InternalCollections.fsi +++ b/src/fsharp/InternalCollections.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Internal.Utilities.Collections @@ -8,6 +8,7 @@ namespace Internal.Utilities.Collections type internal AgedLookup<'TKey,'TValue when 'TValue : not struct> = new : keepStrongly:int * areSame:('TKey * 'TKey -> bool) + * ?requiredToKeep:('TValue -> bool) * ?onStrongDiscard : ('TValue -> unit) // this may only be set if keepTotal=keepStrongly, i.e. not weak entries * ?keepMax: int -> AgedLookup<'TKey,'TValue> @@ -27,6 +28,8 @@ namespace Internal.Utilities.Collections member Remove : key:'TKey -> unit /// Remove all elements. member Clear : unit -> unit + /// Resize + member Resize : keepStrongly: int * ?keepMax : int -> unit /// Simple priority caching for a small number of key\value associations. /// This cache may age-out results that have been Set by the caller. @@ -34,27 +37,25 @@ namespace Internal.Utilities.Collections /// that aren't what was originally passed to the Set function. type internal MruCache<'TKey,'TValue when 'TValue : not struct> = new : keepStrongly:int - * compute:('TKey -> 'TValue) * areSame:('TKey * 'TKey -> bool) * ?isStillValid:('TKey * 'TValue -> bool) * ?areSameForSubsumption:('TKey * 'TKey -> bool) - * ?logComputedNewValue:('TKey -> unit) - * ?logUsedCachedValue:('TKey -> unit) + * ?requiredToKeep:('TValue -> bool) * ?onDiscard:('TValue -> unit) * ?keepMax:int -> MruCache<'TKey,'TValue> /// Clear out the cache. member Clear : unit -> unit - /// Get the value for the given key. Compute if necessary. - member Get : key:'TKey -> 'TValue /// Get the value for the given key or None if not already available - member GetAvailable : key:'TKey -> 'TValue option + member TryGetAny : key:'TKey -> 'TValue option + /// Get the value for the given key or None if not already available + member TryGet : key:'TKey -> 'TValue option /// Remove the given value from the mru cache. member Remove : key:'TKey -> unit - /// Set the value for the given key. This value does not have to agree with computed value. - member SetAlternate : key:'TKey * value:'TValue -> unit - /// Get the most recent item if there is one. - member MostRecent : ('TKey * 'TValue) option + /// Set the given key. + member Set : key:'TKey * value:'TValue -> unit + /// Resize + member Resize : keepStrongly: int * ?keepMax : int -> unit [] type internal List = diff --git a/src/fsharp/InternalFileSystemUtils.fs b/src/fsharp/InternalFileSystemUtils.fs deleted file mode 100644 index e3fd8a0f962..00000000000 --- a/src/fsharp/InternalFileSystemUtils.fs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -// This module related to bugs 4577 and 4651. - -// Briefly, there are lots of .Net APIs that take a 'string filename' and if the -// filename is 'relative', they'll use Directory.GetCurrentDirectory() to 'base' the file. -// Since that involves mutable global state, it's anathema to call any of these methods -// with a non-absolute filename inside the VS process, since you never know what the -// current working directory may be. - -// Thus the idea is to replace all calls to e.g. File.Exists() with calls to File.SafeExists, -// which asserts that we are passing an 'absolute' filename and thus not relying on the -// (unreliable) current working directory. - -// At this point, we have done 'just enough' work to feel confident about the behavior of -// the product, but in an ideal world (perhaps with 4651) we should ensure that we never -// call unsafe .Net APIs and always call the 'safe' equivalents below, instead. - -namespace Internal.Utilities.FileSystem - -open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library -open System -open System.IO -open System.Diagnostics - -type internal File() = - static member SafeExists filename = FileSystem.SafeExists filename - //static member SafeNewFileStream(filename:string,mode:FileMode,access:FileAccess,share:FileShare) = - // FileSystem new FileStream(filename,mode,access,share) - -type internal Path() = - - static member IsInvalidDirectory(path:string) = - path=null || path.IndexOfAny(Path.GetInvalidPathChars()) <> -1 - - static member IsInvalidPath(path:string) = - if String.IsNullOrEmpty(path) then true - else - if path.IndexOfAny(Path.GetInvalidPathChars()) <> - 1 then - true // broken out into branch for ease of setting break points - else - let directory = Path.GetDirectoryName(path) - let filename = Path.GetFileName(path) - if Path.IsInvalidDirectory(directory) then - true - elif FileSystem.IsInvalidFilename(filename) then - true - else - false - - diff --git a/src/fsharp/InternalFileSystemUtils.fsi b/src/fsharp/InternalFileSystemUtils.fsi deleted file mode 100644 index 34c05728377..00000000000 --- a/src/fsharp/InternalFileSystemUtils.fsi +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Internal.Utilities.FileSystem - - [] - type internal File = - static member SafeExists : filename:string -> bool - - [] - type internal Path = - static member IsInvalidDirectory : path:string -> bool - static member IsInvalidPath : path:string -> bool diff --git a/src/fsharp/lexfilter.fs b/src/fsharp/LexFilter.fs old mode 100644 new mode 100755 similarity index 96% rename from src/fsharp/lexfilter.fs rename to src/fsharp/LexFilter.fs index 81cf6a0ed5b..c8c0ba139fc --- a/src/fsharp/lexfilter.fs +++ b/src/fsharp/LexFilter.fs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// LexFilter - process the token stream prior to parsing. /// Implements the offside rule and a copule of other lexical transformations. -module internal Microsoft.FSharp.Compiler.Lexfilter +module internal Microsoft.FSharp.Compiler.LexFilter open Internal.Utilities open Internal.Utilities.Text.Lexing @@ -403,12 +403,18 @@ type LexbufState(startPos: Position, member x.EndPos = endPos member x.PastEOF = pastEOF +[] +type PositionTuple = + val X: Position + val Y: Position + new (x: Position, y: Position) = { X = x; Y = y } + /// Used to save the state related to a token [] type TokenTup = val Token : token val LexbufState : LexbufState - val LastTokenPos: Position * Position + val LastTokenPos: PositionTuple new (token,state,lastTokenPos) = { Token=token; LexbufState=state;LastTokenPos=lastTokenPos } /// Returns starting position of the token @@ -432,7 +438,7 @@ type TokenTup = //---------------------------------------------------------------------------- -// Utilities for the tokenizer that are needed in other opalces +// Utilities for the tokenizer that are needed in other places //--------------------------------------------------------------------------*) // Strip a bunch of leading '>' of a token, at the end of a typar application @@ -485,6 +491,12 @@ let (|TyparsCloseOp|_|) (txt:string) = | _ -> None Some([| for _c in angles do yield GREATER |],afterOp) +[] +type PositionWithColumn = + val Position: Position + val Column: int + new (position: Position, column: int) = { Position = position; Column = column } + //---------------------------------------------------------------------------- // build a LexFilter //--------------------------------------------------------------------------*) @@ -553,7 +565,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, let tokenLexbufState = getLexbufState() savedLexbufState <- tokenLexbufState haveLexbufState <- true - TokenTup(token,tokenLexbufState,(lastTokenStart,lastTokenEnd)) + TokenTup(token,tokenLexbufState,PositionTuple(lastTokenStart,lastTokenEnd)) //---------------------------------------------------------------------------- // Fetch a raw token, either from the old lexer or from our delayedStack @@ -623,7 +635,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, let pushCtxt tokenTup (newCtxt:Context) = let rec unindentationLimit strict stack = match newCtxt,stack with - | _, [] -> (newCtxt.StartPos, -1) + | _, [] -> PositionWithColumn(newCtxt.StartPos, -1) // ignore Vanilla because a SeqBlock is always coming | _, (CtxtVanilla _ :: rest) -> unindentationLimit strict rest @@ -635,8 +647,8 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // '(match' limited by minimum of two | _,(((CtxtMatch _) as ctxt1) :: CtxtSeqBlock _ :: (CtxtParen ((BEGIN | LPAREN),_) as ctxt2) :: _rest) -> if ctxt1.StartCol <= ctxt2.StartCol - then (ctxt1.StartPos,ctxt1.StartCol) - else (ctxt2.StartPos,ctxt2.StartCol) + then PositionWithColumn(ctxt1.StartPos,ctxt1.StartCol) + else PositionWithColumn(ctxt2.StartPos,ctxt2.StartCol) // 'let ... = function' limited by 'let', precisely // This covers the common form @@ -645,7 +657,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // | Case1 -> ... // | Case2 -> ... | (CtxtMatchClauses _), (CtxtFunction _ :: CtxtSeqBlock _ :: (CtxtLetDecl _ as limitCtxt) :: _rest) - -> (limitCtxt.StartPos,limitCtxt.StartCol) + -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol) // Otherwise 'function ...' places no limit until we hit a CtxtLetDecl etc... (Recursive) | (CtxtMatchClauses _), (CtxtFunction _ :: rest) @@ -653,7 +665,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // 'try ... with' limited by 'try' | _,(CtxtMatchClauses _ :: (CtxtTry _ as limitCtxt) :: _rest) - -> (limitCtxt.StartPos,limitCtxt.StartCol) + -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol) // 'fun ->' places no limit until we hit a CtxtLetDecl etc... (Recursive) | _,(CtxtFun _ :: rest) @@ -672,7 +684,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // This is a serious thing to allow, but is required since there is no "return" in this language. // Without it there is no way of escaping special cases in large bits of code without indenting the main case. | CtxtSeqBlock _, (CtxtElse _ :: (CtxtIf _ as limitCtxt) :: _rest) - -> (limitCtxt.StartPos,limitCtxt.StartCol) + -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol) // Permitted inner-construct precise block alighnment: // interface ... @@ -683,7 +695,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // with ... // end | CtxtWithAsAugment _,((CtxtInterfaceHead _ | CtxtMemberHead _ | CtxtException _ | CtxtTypeDefns _) as limitCtxt :: _rest) - -> (limitCtxt.StartPos,limitCtxt.StartCol) + -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol) // Permit unindentation via parentheses (or begin/end) following a 'then', 'else' or 'do': // if nr > 0 then ( @@ -754,12 +766,12 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // 'type C = interface ... ' limited by 'type' // 'type C = struct ... ' limited by 'type' | _,(CtxtParen ((CLASS | STRUCT | INTERFACE),_) :: CtxtSeqBlock _ :: (CtxtTypeDefns _ as limitCtxt) :: _) - -> (limitCtxt.StartPos,limitCtxt.StartCol + 1) + -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol + 1) // REVIEW: document these | _,(CtxtSeqBlock _ :: CtxtParen((BEGIN | LPAREN | LBRACK | LBRACK_BAR),_) :: CtxtVanilla _ :: (CtxtSeqBlock _ as limitCtxt) :: _) | (CtxtSeqBlock _),(CtxtParen ((BEGIN | LPAREN | LBRACE | LBRACK | LBRACK_BAR) ,_) :: CtxtSeqBlock _ :: ((CtxtTypeDefns _ | CtxtLetDecl _ | CtxtMemberBody _ | CtxtWithAsLet _) as limitCtxt) :: _) - -> (limitCtxt.StartPos,limitCtxt.StartCol + 1) + -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol + 1) // Permitted inner-construct (e.g. "then" block and "else" block in overall // "if-then-else" block ) block alighnment: @@ -768,34 +780,34 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // elif expr // else expr | (CtxtIf _ | CtxtElse _ | CtxtThen _), (CtxtIf _ as limitCtxt) :: _rest - -> (limitCtxt.StartPos,limitCtxt.StartCol) + -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol) // Permitted inner-construct precise block alighnment: // while ... // do expr // done | (CtxtDo _), ((CtxtFor _ | CtxtWhile _) as limitCtxt) :: _rest - -> (limitCtxt.StartPos,limitCtxt.StartCol) + -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol) // These contexts all require indentation by at least one space | _,((CtxtInterfaceHead _ | CtxtNamespaceHead _ | CtxtModuleHead _ | CtxtException _ | CtxtModuleBody (_,false) | CtxtIf _ | CtxtWithAsLet _ | CtxtLetDecl _ | CtxtMemberHead _ | CtxtMemberBody _) as limitCtxt :: _) - -> (limitCtxt.StartPos,limitCtxt.StartCol + 1) + -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol + 1) // These contexts can have their contents exactly aligning | _,((CtxtParen _ | CtxtFor _ | CtxtWhen _ | CtxtWhile _ | CtxtTypeDefns _ | CtxtMatch _ | CtxtModuleBody (_,true) | CtxtNamespaceBody _ | CtxtTry _ | CtxtMatchClauses _ | CtxtSeqBlock _) as limitCtxt :: _) - -> (limitCtxt.StartPos,limitCtxt.StartCol) + -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol) match newCtxt with // Don't bother to check pushes of Vanilla blocks since we've // always already pushed a SeqBlock at this position. | CtxtVanilla _ -> () | _ -> - let p1,c1 = unindentationLimit true offsideStack + let p1 = unindentationLimit true offsideStack let c2 = newCtxt.StartCol - if c2 < c1 then + if c2 < p1.Column then warn tokenTup - (if debug then (sprintf "possible incorrect indentation: this token is offside of context at position %s, newCtxt = %A, stack = %A, newCtxtPos = %s, c1 = %d, c2 = %d" (warningStringOfPos p1) newCtxt offsideStack (stringOfPos (newCtxt.StartPos)) c1 c2) - else (FSComp.SR.lexfltTokenIsOffsideOfContextStartedEarlier(warningStringOfPos p1)) ) + (if debug then (sprintf "possible incorrect indentation: this token is offside of context at position %s, newCtxt = %A, stack = %A, newCtxtPos = %s, c1 = %d, c2 = %d" (warningStringOfPos p1.Position) newCtxt offsideStack (stringOfPos (newCtxt.StartPos)) p1.Column c2) + else (FSComp.SR.lexfltTokenIsOffsideOfContextStartedEarlier(warningStringOfPos p1.Position)) ) let newOffsideStack = newCtxt :: offsideStack if debug then dprintf "--> pushing, stack = %A\n" newOffsideStack offsideStack <- newOffsideStack @@ -971,6 +983,45 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, setLexbufState(tokenLexbufState) prevWasAtomicEnd <- isAtomicExprEndToken(tok) tok + + let rec suffixExists p l = match l with [] -> false | _::t -> p t || suffixExists p t + + let tokenBalancesHeadContext token stack = + match token,stack with + | END, (CtxtWithAsAugment(_) :: _) + | (ELSE | ELIF), (CtxtIf _ :: _) + | DONE , (CtxtDo _ :: _) + // WITH balances except in the following contexts.... Phew - an overused keyword! + | WITH , ( ((CtxtMatch _ | CtxtException _ | CtxtMemberHead _ | CtxtInterfaceHead _ | CtxtTry _ | CtxtTypeDefns _ | CtxtMemberBody _) :: _) + // This is the nasty record/object-expression case + | (CtxtSeqBlock _ :: CtxtParen(LBRACE,_) :: _) ) + | FINALLY , (CtxtTry _ :: _) -> + true + + // for x in ienum ... + // let x = ... in + | IN , ((CtxtFor _ | CtxtLetDecl _) :: _) -> + true + // 'query { join x in ys ... }' + // 'query { ... + // join x in ys ... }' + // 'query { for ... do + // join x in ys ... }' + | IN , stack when detectJoinInCtxt stack -> + true + + // NOTE: ;; does not terminate a 'namespace' body. + | SEMICOLON_SEMICOLON, (CtxtSeqBlock _ :: CtxtNamespaceBody _ :: _) -> + true + + | SEMICOLON_SEMICOLON, (CtxtSeqBlock _ :: CtxtModuleBody (_,true) :: _) -> + true + + | t2 , (CtxtParen(t1,_) :: _) -> + parenTokensBalance t1 t2 + + | _ -> + false //---------------------------------------------------------------------------- // Parse and transform the stream of tokens coming from popNextTokenTup, pushing @@ -1042,7 +1093,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // span of inserted token lasts from the col + 1 of the prev token // to the beginning of current token let lastTokenPos = - let pos = snd tokenTup.LastTokenPos + let pos = tokenTup.LastTokenPos.Y pos.ShiftColumnBy 1 returnToken (lexbufStateForInsertedDummyTokens (lastTokenPos, tokenTup.LexbufState.StartPos)) tok @@ -1097,46 +1148,6 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, | _ -> None - - let tokenBalancesHeadContext token stack = - match token,stack with - | END, (CtxtWithAsAugment(_) :: _) - | (ELSE | ELIF), (CtxtIf _ :: _) - | DONE , (CtxtDo _ :: _) - // WITH balances except in the following contexts.... Phew - an overused keyword! - | WITH , ( ((CtxtMatch _ | CtxtException _ | CtxtMemberHead _ | CtxtInterfaceHead _ | CtxtTry _ | CtxtTypeDefns _ | CtxtMemberBody _) :: _) - // This is the nasty record/object-expression case - | (CtxtSeqBlock _ :: CtxtParen(LBRACE,_) :: _) ) - | FINALLY , (CtxtTry _ :: _) -> - true - - // for x in ienum ... - // let x = ... in - | IN , ((CtxtFor _ | CtxtLetDecl _) :: _) -> - true - // 'query { join x in ys ... }' - // 'query { ... - // join x in ys ... }' - // 'query { for ... do - // join x in ys ... }' - | IN , stack when detectJoinInCtxt stack -> - true - - // NOTE: ;; does not terminate a 'namespace' body. - | SEMICOLON_SEMICOLON, (CtxtSeqBlock _ :: CtxtNamespaceBody _ :: _) -> - true - - | SEMICOLON_SEMICOLON, (CtxtSeqBlock _ :: CtxtModuleBody (_,true) :: _) -> - true - - | t2 , (CtxtParen(t1,_) :: _) -> - parenTokensBalance t1 t2 - - | _ -> - false - - let rec suffixExists p l = match l with [] -> false | _::t -> p t || suffixExists p t - // Balancing rule. Every 'in' terminates all surrounding blocks up to a CtxtLetDecl, and will be swallowed by // terminating the corresponding CtxtLetDecl in the rule below. // Balancing rule. Every 'done' terminates all surrounding blocks up to a CtxtDo, and will be swallowed by @@ -1168,7 +1179,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, | _ -> false // The TYPE and MODULE keywords cannot be used in expressions, but the parser has a hard time recovering on incomplete-expression-code followed by - // a TYPE or MODULE. So the lexfiler helps out by looking ahead for these tokens and (1) closing expression contexts and (2) inserting extra 'coming soon' tokens + // a TYPE or MODULE. So the lexfilter helps out by looking ahead for these tokens and (1) closing expression contexts and (2) inserting extra 'coming soon' tokens // that the expression rules in the FsYacc parser can 'shift' to make progress parsing the incomplete expressions, without using the 'recover' action. let insertComingSoonTokens(keywordName, comingSoon, isHere) = // compiling the source for FSharp.Core.dll uses crazy syntax like @@ -2151,7 +2162,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, | PERCENT_OP s -> (s = "%") || (s = "%%") | _ -> true) && nextTokenIsAdjacent tokenTup && - not (prevWasAtomicEnd && (snd(tokenTup.LastTokenPos) = startPosOfTokenTup tokenTup))) -> + not (prevWasAtomicEnd && (tokenTup.LastTokenPos.Y = startPosOfTokenTup tokenTup))) -> let plus = match tokenTup.Token with @@ -2267,3 +2278,4 @@ type LexFilter (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, lexb | _ -> token loop() +let token lexargs skip = Lexer.token lexargs skip diff --git a/src/fsharp/lowertop.fs b/src/fsharp/LowerCallsAndSeqs.fs similarity index 98% rename from src/fsharp/lowertop.fs rename to src/fsharp/LowerCallsAndSeqs.fs index a1da0e71ede..9d6ea75debf 100644 --- a/src/fsharp/lowertop.fs +++ b/src/fsharp/LowerCallsAndSeqs.fs @@ -1,6 +1,6 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Lowertop +module internal Microsoft.FSharp.Compiler.LowerCallsAndSeqs open Internal.Utilities open Microsoft.FSharp.Compiler.AbstractIL @@ -17,7 +17,7 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.PrettyNaming //---------------------------------------------------------------------------- @@ -179,7 +179,7 @@ let LowerSeqExpr g amap overallExpr = let rec Lower isWholeExpr isTailCall // is this sequence in tailcall position? - noDisposeContinuationLabel // represents the label for the code where there is effectively nothig to do to dispose the iterator for the current state + noDisposeContinuationLabel // represents the label for the code where there is effectively nothing to do to dispose the iterator for the current state currentDisposeContinuationLabel // represents the label for the code we have to run to dispose the iterator given the current state expr = diff --git a/src/fsharp/nameres.fs b/src/fsharp/NameResolution.fs old mode 100644 new mode 100755 similarity index 88% rename from src/fsharp/nameres.fs rename to src/fsharp/NameResolution.fs index febdc26da28..cd48644563f --- a/src/fsharp/nameres.fs +++ b/src/fsharp/NameResolution.fs @@ -1,11 +1,11 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. //------------------------------------------------------------------------- // Name environment and name resolution //------------------------------------------------------------------------- -module internal Microsoft.FSharp.Compiler.Nameres +module internal Microsoft.FSharp.Compiler.NameResolution open Internal.Utilities open Microsoft.FSharp.Compiler @@ -15,14 +15,14 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Import -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library +open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.AbstractIL.IL // Abstract IL -open Microsoft.FSharp.Compiler.Outcome open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic open Microsoft.FSharp.Compiler.Infos.AttributeChecking @@ -79,7 +79,7 @@ let TryFindTypeWithRecdField (modref:ModuleOrNamespaceRef) (id: Ident) = /// Get the active pattern elements defined by a given value, if any let ActivePatternElemsOfValRef vref = match TryGetActivePatternInfo vref with - | Some (APInfo(_,nms) as apinfo) -> List.mapi (fun i _ -> APElemRef(apinfo,vref, i)) nms + | Some apinfo -> apinfo.ActiveTags |> List.mapi (fun i _ -> APElemRef(apinfo,vref, i)) | None -> [] @@ -98,7 +98,7 @@ let TryMkValRefInModRef modref vspec = /// Get the active pattern elements defined by a given value, if any let ActivePatternElemsOfVal modref vspec = - // If the assembly load set is incomplete then dont add anything to the table + // If the assembly load set is incomplete then don't add anything to the table match TryMkValRefInModRef modref vspec with | None -> [] | Some vref -> ActivePatternElemsOfValRef vref @@ -115,6 +115,14 @@ let ActivePatternElemsOfModuleOrNamespace (modref:ModuleOrNamespaceRef) : NameMa // Name Resolution Items //------------------------------------------------------------------------- +/// Detect a use of a nominal type, including type abbreviations. +/// +/// When reporting symbols, we care about abbreviations, e.g. 'int' and 'int32' count as two separate symbols +let (|AbbrevOrAppTy|_|) (typ: TType) = + match stripTyparEqns typ with + | TType_app (tcref,_) -> Some tcref + | _ -> None + [] /// Represents the item with which a named argument is associated. type ArgumentContainer = @@ -146,7 +154,7 @@ type Item = | RecdField of RecdFieldInfo // The following are never in the items table but are valid results of binding - // an identitifer in different circumstances. + // an identifier in different circumstances. /// Represents the resolution of a name at the point of its own definition. | NewDef of Ident @@ -173,7 +181,7 @@ type Item = /// Represents the resolution of a name to a custom builder in the F# computation expression syntax | CustomBuilder of string * ValRef /// Represents the resolution of a name to a type variable - | TypeVar of string + | TypeVar of string * Typar /// Represents the resolution of a name to a module or namespace | ModuleOrNamespaces of Tast.ModuleOrNamespaceRef list /// Represents the resolution of a name to an operator @@ -193,7 +201,7 @@ type Item = let minfos = minfos |> List.sortBy (fun minfo -> minfo.NumArgs |> List.sum) Item.CtorGroup (nm,minfos) - member d.DisplayName g = + member d.DisplayName = match d with | Item.Value v -> v.DisplayName | Item.ActivePatternCase apref -> apref.Name @@ -206,10 +214,11 @@ type Item = | Item.Property(nm,_) -> nm | Item.MethodGroup(nm,_) -> nm | Item.CtorGroup(nm,_) -> DemangleGenericTypeName nm - | Item.FakeInterfaceCtor typ - | Item.DelegateCtor typ -> DemangleGenericTypeName (tcrefOfAppTy g typ).LogicalName + | Item.FakeInterfaceCtor (AbbrevOrAppTy tcref) + | Item.DelegateCtor (AbbrevOrAppTy tcref) -> DemangleGenericTypeName tcref.DisplayName | Item.Types(nm,_) -> DemangleGenericTypeName nm - | Item.TypeVar nm -> nm + | Item.UnqualifiedType(tcref :: _) -> tcref.DisplayName + | Item.TypeVar (nm,_) -> nm | Item.ModuleOrNamespaces(modref :: _) -> modref.DemangledModuleOrNamespaceName | Item.ArgName (id, _, _) -> id.idText | Item.SetterArg (id, _) -> id.idText @@ -287,7 +296,7 @@ type NameResolutionEnv = /// REVIEW (old comment) /// "The boolean flag is means the namespace or module entry shouldn't 'really' be in the - /// map, and if it is everr used to resolve a name then we give a warning. + /// map, and if it is ever used to resolve a name then we give a warning. /// This is used to give warnings on unqualified namespace accesses, e.g. /// open System /// open Collections <--- give a warning @@ -546,7 +555,7 @@ let AddUnionCases2 bulkAddMode (eUnqualifiedItems: LayeredMap<_,_>) (ucrefs :Uni let private AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition (g:TcGlobals) amap m nenv (tcref:TyconRef) = let isIL = tcref.IsILTycon - let ucrefs = if isIL then [] else tcref.UnionCasesAsList |> List.map (mkNestedUnionCaseRef tcref) + let ucrefs = if isIL then [] else tcref.UnionCasesAsList |> List.map tcref.MakeNestedUnionCaseRef let flds = if isIL then [| |] else tcref.AllFieldsArray let eIndexedExtensionMembers, eUnindexedExtensionMembers = @@ -562,7 +571,7 @@ let private AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition (g:TcGlobals) else (nenv.eFieldLabels,flds) ||> Array.fold (fun acc f -> if f.IsStatic || f.IsCompilerGenerated then acc - else AddRecdField (mkNestedRecdFieldRef tcref f) acc) + else AddRecdField (tcref.MakeNestedRecdFieldRef f) acc) let eUnqualifiedItems = let tab = nenv.eUnqualifiedItems @@ -606,7 +615,10 @@ let private AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition (g:TcGlobals) ePatItems = ePatItems eIndexedExtensionMembers = eIndexedExtensionMembers eUnindexedExtensionMembers = eUnindexedExtensionMembers } - + +let TryFindPatternByName name {ePatItems = patternMap} = + NameMap.tryFind name patternMap + /// Add a set of type definitions to the name resolution environment let AddTyconRefsToNameEnv bulkAddMode ownDefinition g amap m root nenv tcrefs = let env = List.fold (AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition g amap m) nenv tcrefs @@ -650,7 +662,7 @@ let AddModuleAbbrevToNameEnv (id:Ident) nenv modrefs = let MakeNestedModuleRefs (modref: ModuleOrNamespaceRef) = modref.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions - |> List.map modref.MkNestedTyconRef + |> List.map modref.NestedTyconRef /// Add a set of module or namespace to the name resolution environment, including any sub-modules marked 'AutoOpen' // @@ -687,8 +699,8 @@ and AddModuleOrNamespaceContentsToNameEnv (g:TcGlobals) amap (ad:AccessorDomain) let exncs = mty.ExceptionDefinitions let nenv = { nenv with eDisplayEnv= nenv.eDisplayEnv.AddOpenModuleOrNamespace modref } - let tcrefs = tycons |> List.map modref.MkNestedTyconRef |> List.filter (IsEntityAccessible amap m ad) - let exrefs = exncs |> List.map modref.MkNestedTyconRef |> List.filter (IsEntityAccessible amap m ad) + let tcrefs = tycons |> List.map modref.NestedTyconRef |> List.filter (IsEntityAccessible amap m ad) + let exrefs = exncs |> List.map modref.NestedTyconRef |> List.filter (IsEntityAccessible amap m ad) let nenv = (nenv,exrefs) ||> List.fold (AddExceptionDeclsToNameEnv BulkAdd.Yes) let nenv = (nenv,tcrefs) ||> AddTyconRefsToNameEnv BulkAdd.Yes false g amap m false let vrefs = @@ -957,7 +969,7 @@ let AddEntityForProvidedType (amap: Import.ImportMap, modref: ModuleOrNamespaceR let isSuppressRelocate = amap.g.isInteractive || st.PUntaint((fun st -> st.IsSuppressRelocate),m) let tycon = Construct.NewProvidedTycon(resolutionEnvironment, st, importProvidedType, isSuppressRelocate, m) modref.ModuleOrNamespaceType.AddProvidedTypeEntity(tycon) - let tcref = modref.MkNestedTyconRef tycon + let tcref = modref.NestedTyconRef tycon System.Diagnostics.Debug.Assert modref.TryDeref.IsSome tcref @@ -1005,10 +1017,10 @@ let LookupTypeNameInEntityMaybeHaveArity (amap, m, nm, staticResInfo:TypeNameRes | TypeNameResolutionStaticArgsInfo.Indefinite -> match LookupTypeNameInEntityNoArity m nm mtyp with | [] -> [] - | tycons -> tycons |> List.map modref.MkNestedTyconRef + | tycons -> tycons |> List.map modref.NestedTyconRef | TypeNameResolutionStaticArgsInfo.Definite _ -> match LookupTypeNameInEntityHaveArity nm staticResInfo mtyp with - | Some tycon -> [modref.MkNestedTyconRef tycon] + | Some tycon -> [modref.NestedTyconRef tycon] | None -> [] #if EXTENSIONTYPING let tcrefs = @@ -1023,7 +1035,7 @@ let LookupTypeNameInEntityMaybeHaveArity (amap, m, nm, staticResInfo:TypeNameRes /// Make a type that refers to a nested type. /// -/// Handle the .NET/C# business where nested generic types implictly accumulate the type parameters +/// Handle the .NET/C# business where nested generic types implicitly accumulate the type parameters /// from their enclosing types. let MakeNestedType (ncenv:NameResolver) (tinst:TType list) m (tcrefNested:TyconRef) = let tps = List.drop tinst.Length (tcrefNested.Typars m) @@ -1063,7 +1075,7 @@ let GetNestedTypesOfType (ad, ncenv:NameResolver, optFilter, staticResInfo, chec #endif mty.TypesByAccessNames.Values |> Seq.toList - |> List.map (tcref.MkNestedTyconRef >> MakeNestedType ncenv tinst m) + |> List.map (tcref.NestedTyconRef >> MakeNestedType ncenv tinst m) |> List.filter (IsTypeAccessible g ncenv.amap m ad) else []) @@ -1072,25 +1084,296 @@ let GetNestedTypesOfType (ad, ncenv:NameResolver, optFilter, staticResInfo, chec // into a global variable. A little unpleasant. //------------------------------------------------------------------------- -/// Represents the kind of the occurence when reporting a name in name resolution +/// Represents the kind of the occurrence when reporting a name in name resolution [] type ItemOccurence = /// This is a binding / declaration of the item - | Binding = 0 + | Binding /// This is a usage of the item - | Use = 1 + | Use /// This is a usage of a type name in a type - | UseInType = 2 + | UseInType /// This is a usage of a type name in an attribute - | UseInAttribute = 3 + | UseInAttribute /// Inside pattern matching - | Pattern = 4 + | Pattern + /// Abstract slot gets implemented + | Implemented + /// Result gets suppressed over this text range + | RelatedText /// An abstract type for reporting the results of name resolution and type checking. type ITypecheckResultsSink = abstract NotifyEnvWithScope : range * NameResolutionEnv * AccessorDomain -> unit abstract NotifyExprHasType : pos * TType * Tastops.DisplayEnv * NameResolutionEnv * AccessorDomain * range -> unit abstract NotifyNameResolution : pos * Item * Item * ItemOccurence * Tastops.DisplayEnv * NameResolutionEnv * AccessorDomain * range -> unit + abstract NotifyFormatSpecifierLocation : range -> unit + abstract CurrentSource : string option + +let (|ValRefOfProp|_|) (pi : PropInfo) = pi.ArbitraryValRef +let (|ValRefOfMeth|_|) (mi : MethInfo) = mi.ArbitraryValRef +let (|ValRefOfEvent|_|) (evt : EventInfo) = evt.ArbitraryValRef + +let rec (|RecordFieldUse|_|) (item : Item) = + match item with + | Item.RecdField(RecdFieldInfo(_, RFRef(tcref, name))) -> Some (name, tcref) + | Item.SetterArg(_, RecordFieldUse(f)) -> Some(f) + | _ -> None + +let rec (|ILFieldUse|_|) (item : Item) = + match item with + | Item.ILField(finfo) -> Some(finfo) + | Item.SetterArg(_, ILFieldUse(f)) -> Some(f) + | _ -> None + +let rec (|PropertyUse|_|) (item : Item) = + match item with + | Item.Property(_, pinfo::_) -> Some(pinfo) + | Item.SetterArg(_, PropertyUse(pinfo)) -> Some(pinfo) + | _ -> None + +let rec (|FSharpPropertyUse|_|) (item : Item) = + match item with + | Item.Property(_, [ValRefOfProp vref]) -> Some(vref) + | Item.SetterArg(_, FSharpPropertyUse(propDef)) -> Some(propDef) + | _ -> None + +let (|MethodUse|_|) (item : Item) = + match item with + | Item.MethodGroup(_, [minfo]) -> Some(minfo) + | _ -> None + +let (|FSharpMethodUse|_|) (item : Item) = + match item with + | Item.MethodGroup(_, [ValRefOfMeth vref]) -> Some(vref) + | Item.Value(vref) when vref.IsMember -> Some(vref) + | _ -> None + +let (|EntityUse|_|) (item: Item) = + match item with + | Item.UnqualifiedType (tcref:: _) -> Some tcref + | Item.ExnCase(tcref) -> Some tcref + | Item.Types(_, [AbbrevOrAppTy tcref]) + | Item.DelegateCtor(AbbrevOrAppTy tcref) + | Item.FakeInterfaceCtor(AbbrevOrAppTy tcref) -> Some tcref + | Item.CtorGroup(_, ctor::_) -> + match ctor.EnclosingType with + | AbbrevOrAppTy tcref -> Some tcref + | _ -> None + | _ -> None + +let (|EventUse|_|) (item : Item) = + match item with + | Item.Event(einfo) -> Some einfo + | _ -> None + +let (|FSharpEventUse|_|) (item : Item) = + match item with + | Item.Event(ValRefOfEvent vref) -> Some vref + | _ -> None + +let (|UnionCaseUse|_|) (item : Item) = + match item with + | Item.UnionCase(UnionCaseInfo(_, u1),_) -> Some u1 + | _ -> None + +let (|ValUse|_|) (item:Item) = + match item with + | Item.Value vref + | FSharpPropertyUse vref + | FSharpMethodUse vref + | FSharpEventUse vref + | Item.CustomBuilder(_, vref) -> Some vref + | _ -> None + +let (|ActivePatternCaseUse|_|) (item:Item) = + match item with + | Item.ActivePatternCase(APElemRef(_, vref, idx)) -> Some (vref.SigRange, vref.DefinitionRange, idx) + | Item.ActivePatternResult(ap, _, idx,_) -> Some (ap.Range, ap.Range, idx) + | _ -> None + +let tyconRefDefnEq g (eref1:EntityRef) (eref2: EntityRef) = + tyconRefEq g eref1 eref2 + // Signature items considered equal to implementation items + || ((eref1.DefinitionRange = eref2.DefinitionRange || eref1.SigRange = eref2.SigRange) && + (eref1.LogicalName = eref2.LogicalName)) + +let valRefDefnEq g (vref1:ValRef) (vref2: ValRef) = + valRefEq g vref1 vref2 + // Signature items considered equal to implementation items + || ((vref1.DefinitionRange = vref2.DefinitionRange || vref1.SigRange = vref2.SigRange)) && + (vref1.LogicalName = vref2.LogicalName) + +let unionCaseRefDefnEq g (uc1:UnionCaseRef) (uc2: UnionCaseRef) = + uc1.CaseName = uc2.CaseName && tyconRefDefnEq g uc1.TyconRef uc2.TyconRef + +/// Given the Item 'orig' - returns function 'other : Item -> bool', that will yield true if other and orig represents the same item and false - otherwise +let ItemsAreEffectivelyEqual g orig other = + match orig, other with + | EntityUse ty1, EntityUse ty2 -> + tyconRefDefnEq g ty1 ty2 + + | Item.TypeVar (nm1,tp1), Item.TypeVar (nm2,tp2) -> + nm1 = nm2 && + (typeEquiv g (mkTyparTy tp1) (mkTyparTy tp2) || + match stripTyparEqns (mkTyparTy tp1), stripTyparEqns (mkTyparTy tp2) with + | TType_var tp1, TType_var tp2 -> + not tp1.IsCompilerGenerated && not tp1.IsFromError && + not tp2.IsCompilerGenerated && not tp2.IsFromError && + tp1.Range = tp2.Range + | AbbrevOrAppTy tcref1, AbbrevOrAppTy tcref2 -> + tyconRefDefnEq g tcref1 tcref2 + | _ -> false) + + | ValUse vref1, ValUse vref2 -> + valRefDefnEq g vref1 vref2 + + | ActivePatternCaseUse (range1, range1i, idx1), ActivePatternCaseUse (range2, range2i, idx2) -> + (idx1 = idx2) && (range1 = range2 || range1i = range2i) + + | MethodUse minfo1, MethodUse minfo2 -> + MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2 || + // Allow for equality up to signature matching + match minfo1.ArbitraryValRef, minfo2.ArbitraryValRef with + | Some vref1, Some vref2 -> valRefDefnEq g vref1 vref2 + | _ -> false + + | PropertyUse(pinfo1), PropertyUse(pinfo2) -> + PropInfo.PropInfosUseIdenticalDefinitions pinfo1 pinfo2 || + // Allow for equality up to signature matching + match pinfo1.ArbitraryValRef, pinfo2.ArbitraryValRef with + | Some vref1, Some vref2 -> valRefDefnEq g vref1 vref2 + | _ -> false + + | Item.ArgName (id1,_, _), Item.ArgName (id2,_, _) -> + (id1.idText = id2.idText && id1.idRange = id2.idRange) + + | (Item.ArgName (id,_, _), ValUse vref) | (ValUse vref, Item.ArgName (id, _, _)) -> + (id.idText = vref.DisplayName && + (id.idRange = vref.DefinitionRange || id.idRange = vref.SigRange)) + + | ILFieldUse f1, ILFieldUse f2 -> + ILFieldInfo.ILFieldInfosUseIdenticalDefinitions f1 f2 + + | UnionCaseUse u1, UnionCaseUse u2 -> + unionCaseRefDefnEq g u1 u2 + + | RecordFieldUse(name1, tcref1), RecordFieldUse(name2, tcref2) -> + name1 = name2 && tyconRefDefnEq g tcref1 tcref2 + + | EventUse evt1, EventUse evt2 -> + EventInfo.EventInfosUseIdenticalDefintions evt1 evt2 || + // Allow for equality up to signature matching + match evt1.ArbitraryValRef, evt2.ArbitraryValRef with + | Some vref1, Some vref2 -> valRefDefnEq g vref1 vref2 + | _ -> false + + | Item.ModuleOrNamespaces modrefs1, Item.ModuleOrNamespaces modrefs2 -> + modrefs1 |> List.exists (fun modref1 -> modrefs2 |> List.exists (fun r -> tyconRefDefnEq g modref1 r || fullDisplayTextOfModRef modref1 = fullDisplayTextOfModRef r)) + + | _ -> false + +[] +type CapturedNameResolution(p:pos, i:Item, io:ItemOccurence, de:DisplayEnv, nre:NameResolutionEnv, ad:AccessorDomain, m:range) = + member this.Pos = p + member this.Item = i + member this.ItemOccurence = io + member this.DisplayEnv = de + member this.NameResolutionEnv = nre + member this.AccessorDomain = ad + member this.Range = m + member this.DebugToString() = + sprintf "%A: %+A" (p.Line, p.Column) i + +/// Represents container for all name resolutions that were met so far when typechecking some particular file +type TcResolutions + (capturedEnvs : ResizeArray, + capturedExprTypes : ResizeArray, + capturedNameResolutions : ResizeArray, + capturedMethodGroupResolutions : ResizeArray) = + + static let empty = TcResolutions(ResizeArray(0),ResizeArray(0),ResizeArray(0),ResizeArray(0)) + + member this.CapturedEnvs = capturedEnvs + member this.CapturedExpressionTypings = capturedExprTypes + member this.CapturedNameResolutions = capturedNameResolutions + member this.CapturedMethodGroupResolutions = capturedMethodGroupResolutions + + static member Empty = empty + + +/// Represents container for all name resolutions that were met so far when typechecking some particular file +type TcSymbolUses(g, capturedNameResolutions : ResizeArray, formatSpecifierLocations: range[]) = + + member this.GetUsesOfSymbol(item) = + [| for cnr in capturedNameResolutions do + if protectAssemblyExploration false (fun () -> ItemsAreEffectivelyEqual g item cnr.Item) then + yield cnr.ItemOccurence, cnr.DisplayEnv, cnr.Range |] + + member this.GetAllUsesOfSymbols() = + [| for cnr in capturedNameResolutions do + yield (cnr.Item, cnr.ItemOccurence, cnr.DisplayEnv, cnr.Range) |] + + member this.GetFormatSpecifierLocations() = formatSpecifierLocations + + +/// An accumulator for the results being emitted into the tcSink. +type TcResultsSinkImpl(g, ?source: string) = + let capturedEnvs = ResizeArray<_>() + let capturedExprTypings = ResizeArray<_>() + let capturedNameResolutions = ResizeArray<_>() + let capturedFormatSpecifierLocations = ResizeArray<_>() + let capturedNameResolutionIdentifiers = + new System.Collections.Generic.Dictionary + ( { new IEqualityComparer<_> with + member __.GetHashCode((p:pos,i)) = p.Line + 101 * p.Column + hash i + member __.Equals((p1,i1),(p2,i2)) = posEq p1 p2 && i1 = i2 } ) + let capturedMethodGroupResolutions = ResizeArray<_>() + let allowedRange (m:range) = not m.IsSynthetic + + member this.GetResolutions() = + TcResolutions(capturedEnvs, capturedExprTypings, capturedNameResolutions, capturedMethodGroupResolutions) + + member this.GetSymbolUses() = + TcSymbolUses(g, capturedNameResolutions, capturedFormatSpecifierLocations.ToArray()) + + interface ITypecheckResultsSink with + member sink.NotifyEnvWithScope(m,nenv,ad) = + if allowedRange m then + capturedEnvs.Add((m,nenv,ad)) + + member sink.NotifyExprHasType(endPos,ty,denv,nenv,ad,m) = + if allowedRange m then + capturedExprTypings.Add((endPos,ty,denv,nenv,ad,m)) + + member sink.NotifyNameResolution(endPos,item,itemMethodGroup,occurenceType,denv,nenv,ad,m) = + // Desugaring some F# constructs (notably computation expressions with custom operators) + // results in duplication of textual variables. So we ensure we never record two name resolutions + // for the same identifier at the same location. + if allowedRange m then + let keyOpt = + match item with + | Item.Value vref -> Some (endPos, vref.DisplayName) + | Item.ArgName (id, _, _) -> Some (endPos, id.idText) + | _ -> None + + let alreadyDone = + match keyOpt with + | Some key -> + let res = capturedNameResolutionIdentifiers.ContainsKey key + if not res then capturedNameResolutionIdentifiers.Add (key, ()) |> ignore + res + | _ -> false + + if not alreadyDone then + capturedNameResolutions.Add(CapturedNameResolution(endPos,item,occurenceType,denv,nenv,ad,m)) + capturedMethodGroupResolutions.Add(CapturedNameResolution(endPos,itemMethodGroup,occurenceType,denv,nenv,ad,m)) + + member sink.NotifyFormatSpecifierLocation(m) = + capturedFormatSpecifierLocations.Add(m) + + member sink.CurrentSource = source + /// An abstract type for reporting the results of name resolution and type checking, and which allows /// temporary suspension and/or redirection of reporting. @@ -1131,10 +1414,10 @@ let CallExprHasTypeSink (sink:TcResultsSink) (m:range,nenv,typ,denv,ad) = | Some sink -> sink.NotifyExprHasType(m.End,typ,denv,nenv,ad,m) //------------------------------------------------------------------------- -// Check inferrability of type parameters in resolved items. +// Check inferability of type parameters in resolved items. //------------------------------------------------------------------------- -/// Checks if the type variables associated with the result of a resolution are inferrable, +/// Checks if the type variables associated with the result of a resolution are inferable, /// i.e. occur in the arguments or return type of the resolution. If not give a warning /// about a type instantiation being needed. type ResultTyparChecker = ResultTyparChecker of (unit -> bool) @@ -1186,7 +1469,7 @@ let CheckAllTyparsInferrable amap m item = | Item.SetterArg _ -> true //------------------------------------------------------------------------- -// Check inferrability of type parameters in resolved items. +// Check inferability of type parameters in resolved items. //------------------------------------------------------------------------- /// Keeps track of information relevant to the chosen resolution of a long identifier @@ -1314,8 +1597,8 @@ let rec ResolveLongIndentAsModuleOrNamespace amap m fullyQualified (nenv:NameRes | [] -> success (depth,modref,mty) | id:: rest -> match mty.ModulesAndNamespacesByDemangledName.TryFind id.idText with - | Some mspec when IsEntityAccessible amap m ad (modref.MkNestedTyconRef mspec) -> - let subref = modref.MkNestedTyconRef mspec + | Some mspec when IsEntityAccessible amap m ad (modref.NestedTyconRef mspec) -> + let subref = modref.NestedTyconRef mspec look (depth+1) subref mspec.ModuleOrNamespaceType rest | _ -> raze (UndefinedName(depth,FSComp.SR.undefinedNameNamespace,id,[])) @@ -1499,7 +1782,7 @@ let TryFindUnionCaseOfType g typ nm = let tcref,tinst = destAppTy g typ match tcref.GetUnionCaseByName nm with | None -> None - | Some ucase -> Some(UnionCaseInfo(tinst,mkNestedUnionCaseRef tcref ucase)) + | Some ucase -> Some(UnionCaseInfo(tinst,tcref.MakeNestedUnionCaseRef ucase)) else None @@ -1533,7 +1816,7 @@ let DecodeFSharpEvent (pinfos:PropInfo list) ad g (ncenv:NameResolver) m = None -// REVIEW: this shows up on performance logs. Consider for example endles resolutions of "List.map" to +// REVIEW: this shows up on performance logs. Consider for example endless resolutions of "List.map" to // the empty set of results, or "x.Length" for a list or array type. This indicates it could be worth adding a cache here. let rec ResolveLongIdentInTypePrim (ncenv:NameResolver) nenv lookupKind (resInfo:ResolutionInfo) depth m ad (lid:Ident list) findFlag (typeNameResInfo: TypeNameResolutionInfo) typ = let g = ncenv.g @@ -1606,13 +1889,16 @@ let rec ResolveLongIdentInTypePrim (ncenv:NameResolver) nenv lookupKind (resInfo | ResolveTypeNamesToTypeRefs -> OneSuccess (resInfo,Item.Types (nm,nestedTypes),rest) else - ResolveLongIdentInTypes ncenv nenv lookupKind resInfo (depth+1) m ad rest findFlag typeNameResInfo nestedTypes + ResolveLongIdentInNestedTypes ncenv nenv lookupKind resInfo (depth+1) id m ad rest findFlag typeNameResInfo nestedTypes (OneResult contentsSearchAccessible +++ nestedSearchAccessible) -and ResolveLongIdentInTypes (ncenv:NameResolver) nenv lookupKind resInfo depth m ad lid findFlag typeNameResInfo typs = - typs |> CollectResults (ResolveLongIdentInTypePrim ncenv nenv lookupKind resInfo depth m ad lid findFlag typeNameResInfo >> AtMostOneResult m) +and ResolveLongIdentInNestedTypes (ncenv:NameResolver) nenv lookupKind resInfo depth id m ad lid findFlag typeNameResInfo typs = + typs |> CollectResults (fun typ -> + let resInfo = if isAppTy ncenv.g typ then resInfo.AddEntity(id.idRange,tcrefOfAppTy ncenv.g typ) else resInfo + ResolveLongIdentInTypePrim ncenv nenv lookupKind resInfo depth m ad lid findFlag typeNameResInfo typ + |> AtMostOneResult m) -/// Resolve a long identifer using type-qualified name resolution. +/// Resolve a long identifier using type-qualified name resolution. let ResolveLongIdentInType sink ncenv nenv lookupKind m ad lid findFlag typeNameResInfo typ = let resInfo,item,rest = ResolveLongIdentInTypePrim (ncenv:NameResolver) nenv lookupKind ResolutionInfo.Empty 0 m ad lid findFlag typeNameResInfo typ @@ -1639,7 +1925,7 @@ let private ResolveLongIdentInTyconRefs (ncenv:NameResolver) nenv lookupKind dep //------------------------------------------------------------------------- let (|AccessibleEntityRef|_|) amap m ad (modref: ModuleOrNamespaceRef) mspec = - let eref = modref.MkNestedTyconRef mspec + let eref = modref.NestedTyconRef mspec if IsEntityAccessible amap m ad eref then Some eref else None let rec ResolveExprLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv (typeNameResInfo: TypeNameResolutionInfo) ad resInfo depth m modref (mty:ModuleOrNamespaceType) (lid :Ident list) = @@ -1653,15 +1939,15 @@ let rec ResolveExprLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv (typeN success(resInfo,Item.Value (mkNestedValRef modref vspec),rest) | _-> match TryFindTypeWithUnionCase modref id with - | Some tycon when IsTyconReprAccessible ncenv.amap m ad (modref.MkNestedTyconRef tycon) -> - let ucref = mkUnionCaseRef (modref.MkNestedTyconRef tycon) id.idText + | Some tycon when IsTyconReprAccessible ncenv.amap m ad (modref.NestedTyconRef tycon) -> + let ucref = mkUnionCaseRef (modref.NestedTyconRef tycon) id.idText let showDeprecated = HasFSharpAttribute ncenv.g ncenv.g.attrib_RequireQualifiedAccessAttribute tycon.Attribs let ucinfo = FreshenUnionCaseRef ncenv m ucref success (resInfo,Item.UnionCase(ucinfo,showDeprecated),rest) | _ -> match mty.ExceptionDefinitionsByDemangledName.TryFind(id.idText) with - | Some excon when IsTyconReprAccessible ncenv.amap m ad (modref.MkNestedTyconRef excon) -> - success (resInfo,Item.ExnCase (modref.MkNestedTyconRef excon),rest) + | Some excon when IsTyconReprAccessible ncenv.amap m ad (modref.NestedTyconRef excon) -> + success (resInfo,Item.ExnCase (modref.NestedTyconRef excon),rest) | _ -> // Something in a type? @@ -1792,7 +2078,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv:NameResolver) fullyQualified m ad n | id :: rest -> let m = unionRanges m id.idRange - // Values in the environment take total priority, but contructors do NOT for compound lookups, e.g. if someone in some imported + // Values in the environment take total priority, but constructors do NOT for compound lookups, e.g. if someone in some imported // module has defined a constructor "String" (common enough) then "String.foo" doesn't give an error saying 'constructors have no members' // Instead we go lookup the String module or type. let ValIsInEnv nm = @@ -1855,16 +2141,16 @@ let rec ResolvePatternLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv num | id :: rest -> let m = unionRanges m id.idRange match TryFindTypeWithUnionCase modref id with - | Some tycon when IsTyconReprAccessible ncenv.amap m ad (modref.MkNestedTyconRef tycon) -> - let tcref = modref.MkNestedTyconRef tycon + | Some tycon when IsTyconReprAccessible ncenv.amap m ad (modref.NestedTyconRef tycon) -> + let tcref = modref.NestedTyconRef tycon let ucref = mkUnionCaseRef tcref id.idText let showDeprecated = HasFSharpAttribute ncenv.g ncenv.g.attrib_RequireQualifiedAccessAttribute tycon.Attribs let ucinfo = FreshenUnionCaseRef ncenv m ucref success (resInfo,Item.UnionCase(ucinfo,showDeprecated),rest) | _ -> match mty.ExceptionDefinitionsByDemangledName.TryFind(id.idText) with - | Some exnc when IsEntityAccessible ncenv.amap m ad (modref.MkNestedTyconRef exnc) -> - success (resInfo,Item.ExnCase (modref.MkNestedTyconRef exnc),rest) + | Some exnc when IsEntityAccessible ncenv.amap m ad (modref.NestedTyconRef exnc) -> + success (resInfo,Item.ExnCase (modref.NestedTyconRef exnc),rest) | _ -> // An active pattern constructor in a module match (ActivePatternElemsOfModuleOrNamespace modref).TryFind(id.idText) with @@ -2022,6 +2308,8 @@ let rec ResolveTypeLongIdentInTyconRefPrim (ncenv:NameResolver) (typeNameResInfo let ResolveTypeLongIdentInTyconRef sink (ncenv:NameResolver) nenv typeNameResInfo ad m tcref (lid: Ident list) = let resInfo,tcref = ForceRaise (ResolveTypeLongIdentInTyconRefPrim ncenv typeNameResInfo ad ResolutionInfo.Empty PermitDirectReferenceToGeneratedType.No 0 m tcref lid) ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.Use,ad,resInfo,ResultTyparChecker(fun () -> true)); + let item = Item.Types(tcref.DisplayName,[FreshenTycon ncenv m tcref]) + CallNameResolutionSink sink (rangeOfLid lid,nenv,item,item,ItemOccurence.UseInType,nenv.eDisplayEnv,ad) tcref @@ -2146,9 +2434,9 @@ let rec ResolveFieldInModuleOrNamespace (ncenv:NameResolver) nenv ad (resInfo:Re // search for module-qualified names, e.g. { Microsoft.FSharp.Core.contents = 1 } let modulScopedFieldNames = match TryFindTypeWithRecdField modref id with - | Some tycon when IsEntityAccessible ncenv.amap m ad (modref.MkNestedTyconRef tycon) -> + | Some tycon when IsEntityAccessible ncenv.amap m ad (modref.NestedTyconRef tycon) -> let showDeprecated = HasFSharpAttribute ncenv.g ncenv.g.attrib_RequireQualifiedAccessAttribute tycon.Attribs - success(FieldResolution(modref.MkNestedRecdFieldRef tycon id,showDeprecated), rest) + success(resInfo, FieldResolution(modref.RecdFieldRefInNestedTycon tycon id,showDeprecated), rest) | _ -> error // search for type-qualified names, e.g. { Microsoft.FSharp.Core.Ref.contents = 1 } let tyconSearch = @@ -2158,7 +2446,7 @@ let rec ResolveFieldInModuleOrNamespace (ncenv:NameResolver) nenv ad (resInfo:Re let tcrefs = tcrefs |> List.map (fun tcref -> (ResolutionInfo.Empty,tcref)) let tyconSearch = ResolveLongIdentInTyconRefs ncenv nenv LookupKind.RecdField (depth+1) m ad rest typeNameResInfo id.idRange tcrefs // choose only fields - let tyconSearch = tyconSearch |?> List.choose (function (_,Item.RecdField(RecdFieldInfo(_,rfref)),rest) -> Some(FieldResolution(rfref,false),rest) | _ -> None) + let tyconSearch = tyconSearch |?> List.choose (function (resInfo,Item.RecdField(RecdFieldInfo(_,rfref)),rest) -> Some(resInfo,FieldResolution(rfref,false),rest) | _ -> None) tyconSearch | _ -> NoResultsOrUsefulErrors @@ -2177,7 +2465,7 @@ let rec ResolveFieldInModuleOrNamespace (ncenv:NameResolver) nenv ad (resInfo:Re error(InternalError("ResolveFieldInModuleOrNamespace",m)) /// Resolve a long identifier representing a record field -let ResolveField (ncenv:NameResolver) nenv ad typ (mp,id:Ident) = +let ResolveFieldPrim (ncenv:NameResolver) nenv ad typ (mp,id:Ident) = let typeNameResInfo = TypeNameResolutionInfo.Default let g = ncenv.g let m = id.idRange @@ -2185,7 +2473,7 @@ let ResolveField (ncenv:NameResolver) nenv ad typ (mp,id:Ident) = | [] -> if isAppTy g typ then match ncenv.InfoReader.TryFindRecdOrClassFieldInfoOfType(id.idText,m,typ) with - | Some (RecdFieldInfo(_,rfref)) -> [FieldResolution(rfref,false)] + | Some (RecdFieldInfo(_,rfref)) -> [ResolutionInfo.Empty, FieldResolution(rfref,false)] | None -> error(Error(FSComp.SR.nrTypeDoesNotContainSuchField((NicePrint.minimalStringOfType nenv.eDisplayEnv typ), id.idText),m)) else let frefs = @@ -2194,7 +2482,7 @@ let ResolveField (ncenv:NameResolver) nenv ad typ (mp,id:Ident) = // Eliminate duplicates arising from multiple 'open' frefs |> ListSet.setify (fun fref1 fref2 -> tyconRefEq g fref1.TyconRef fref2.TyconRef) - |> List.map (fun x -> FieldResolution(x,false)) + |> List.map (fun x -> ResolutionInfo.Empty, FieldResolution(x,false)) | _ -> let lid = (mp@[id]) @@ -2206,15 +2494,23 @@ let ResolveField (ncenv:NameResolver) nenv ad typ (mp,id:Ident) = let tcrefs = tcrefs |> List.map (fun tcref -> (ResolutionInfo.Empty,tcref)) let tyconSearch = ResolveLongIdentInTyconRefs ncenv nenv LookupKind.RecdField 1 m ad rest typeNameResInfo tn.idRange tcrefs // choose only fields - let tyconSearch = tyconSearch |?> List.choose (function (_,Item.RecdField(RecdFieldInfo(_,rfref)),rest) -> Some(FieldResolution(rfref,false),rest) | _ -> None) + let tyconSearch = tyconSearch |?> List.choose (function (resInfo,Item.RecdField(RecdFieldInfo(_,rfref)),rest) -> Some(resInfo,FieldResolution(rfref,false),rest) | _ -> None) tyconSearch | _ -> NoResultsOrUsefulErrors let modulSearch ad = ResolveLongIndentAsModuleOrNamespaceThen ncenv.amap m OpenQualified nenv ad lid (ResolveFieldInModuleOrNamespace ncenv nenv ad) - let item,rest = ForceRaise (AtMostOneResult m (modulSearch ad +++ tyconSearch ad +++ modulSearch AccessibleFromSomeFSharpCode +++ tyconSearch AccessibleFromSomeFSharpCode)) + let resInfo,item,rest = ForceRaise (AtMostOneResult m (modulSearch ad +++ tyconSearch ad +++ modulSearch AccessibleFromSomeFSharpCode +++ tyconSearch AccessibleFromSomeFSharpCode)) if nonNil rest then errorR(Error(FSComp.SR.nrInvalidFieldLabel(),(List.head rest).idRange)); - [item] + [(resInfo,item)] + +let ResolveField sink ncenv nenv ad typ (mp,id) = + let res = ResolveFieldPrim ncenv nenv ad typ (mp,id) + // Register the results of any field paths "Module.Type" in "Module.Type.field" as a name resolution. (Note, the path resolution + // info is only non-empty if there was a unique resolution of the field) + for (resInfo,_rfref) in res do + ResolutionInfo.SendToSink(sink,ncenv,nenv,ItemOccurence.UseInType, ad,resInfo,ResultTyparChecker(fun () -> true)); + res |> List.map snd /// Generate a new reference to a record field with a fresh type instantiation let FreshenRecdFieldRef (ncenv:NameResolver) m (rfref:RecdFieldRef) = @@ -2290,15 +2586,15 @@ let NeedsOverloadResolution namedItem = /// An adjustment to perform to the name resolution results if overload resolution fails. /// If overload resolution succeeds, the specific overload resolution is reported. If it fails, the -/// set of possibile overlods is reported via this adjustment. +/// set of possible overloads is reported via this adjustment. type IfOverloadResolutionFails = IfOverloadResolutionFails of (unit -> unit) /// Specifies if overload resolution needs to notify Language Service of overload resolution [] type AfterOverloadResolution = - /// Notfication is not needed + /// Notification is not needed | DoNothing - /// Notfy the sink + /// Notify the sink | SendToSink of (Item -> unit) * IfOverloadResolutionFails // Overload resolution failure fallback /// Find override among given overrides and notify the sink. The 'Item' contains the candidate overrides. | ReplaceWithOverrideAndSendToSink of Item * (Item -> unit) * IfOverloadResolutionFails // Overload resolution failure fallback @@ -2313,8 +2609,16 @@ let ResolveLongIdentAsExprAndComputeRange (sink:TcResultsSink) (ncenv:NameResolv // Record the precise resolution of the field for intellisense let item = FilterMethodGroups ncenv itemRange item true + // Fake idents e.g. 'Microsoft.FSharp.Core.None' have identical ranges for each part + let isFakeIdents = + match lid with + | [] | [_] -> false + | head :: ids -> + ids |> List.forall (fun id -> id.idRange = head.idRange) + let callSink refinedItem = - CallNameResolutionSink sink (itemRange, nenv, refinedItem, item, ItemOccurence.Use, nenv.DisplayEnv, ad); + if not isFakeIdents then + CallNameResolutionSink sink (itemRange, nenv, refinedItem, item, ItemOccurence.Use, nenv.DisplayEnv, ad) let afterOverloadResolution = match sink.CurrentSink with | None -> AfterOverloadResolution.DoNothing @@ -2383,7 +2687,7 @@ let ResolveExprDotLongIdentAndComputeRange (sink:TcResultsSink) (ncenv:NameResol // // There are some inefficiencies in this code - e.g. we often // create potentially large lists of methods/fields/properties and then -// immiediately List.filter them. We also use lots of "map/concats". Dosen't +// immediately List.filter them. We also use lots of "map/concats". Doesn't // seem to hit the interactive experience too badly though. //------------------------------------------------------------------------- @@ -2440,7 +2744,7 @@ let rec PartialResolveLookupInModuleOrNamespaceAsModuleOrNamespaceThen f plid (m | [] -> f modref | id:: rest -> match mty.ModulesAndNamespacesByDemangledName.TryFind(id) with - | Some mty -> PartialResolveLookupInModuleOrNamespaceAsModuleOrNamespaceThen f rest (modref.MkNestedTyconRef mty) + | Some mty -> PartialResolveLookupInModuleOrNamespaceAsModuleOrNamespaceThen f rest (modref.NestedTyconRef mty) | None -> [] let PartialResolveLongIndentAsModuleOrNamespaceThen (nenv:NameResolutionEnv) plid f = @@ -2553,7 +2857,7 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv (completionTargets: Reso not minfo.IsExtensionMember && match minfo.LogicalName with | "GetType" -> false - | "GetHashCode" -> isObjTy g minfo.EnclosingType && not (Augment.TypeDefinitelyHasEquality g typ) + | "GetHashCode" -> isObjTy g minfo.EnclosingType && not (AugmentWithHashCompare.TypeDefinitelyHasEquality g typ) | "ToString" -> false | "Equals" -> if not (isObjTy g minfo.EnclosingType) then @@ -2561,7 +2865,7 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv (completionTargets: Reso false elif minfo.IsInstance then // System.Object has only one instance Equals method and we want to suppress it unless Augment.TypeDefinitelyHasEquality is true - not (Augment.TypeDefinitelyHasEquality g typ) + not (AugmentWithHashCompare.TypeDefinitelyHasEquality g typ) else // System.Object has only one static Equals method and we always want to suppress it true @@ -2707,7 +3011,7 @@ let InfosForTyconConstructors (ncenv:NameResolver) m ad (tcref:TyconRef) = let notFakeContainerModule tyconNames nm = not (Set.contains nm tyconNames) -/// Check is a namesapce or module contains something accessible +/// Check is a namespace or module contains something accessible let rec private EntityRefContainsSomethingAccessible (ncenv: NameResolver) m ad (modref:ModuleOrNamespaceRef) = let g = ncenv.g let mty = modref.ModuleOrNamespaceType @@ -2734,12 +3038,12 @@ let rec private EntityRefContainsSomethingAccessible (ncenv: NameResolver) m ad (mty.AllEntities |> QueueList.exists (fun tc -> not tc.IsModuleOrNamespace && - not (IsTyconUnseen ad g ncenv.amap m (modref.MkNestedTyconRef tc)))) || + not (IsTyconUnseen ad g ncenv.amap m (modref.NestedTyconRef tc)))) || - // Search the sub-modules of the namespace/modulefor something accessible + // Search the sub-modules of the namespace/module for something accessible (mty.ModulesAndNamespacesByDemangledName |> NameMap.exists (fun _ submod -> - let submodref = modref.MkNestedTyconRef submod + let submodref = modref.NestedTyconRef submod EntityRefContainsSomethingAccessible ncenv m ad submodref)) let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv isApplicableMeth m ad (modref:ModuleOrNamespaceRef) plid allowObsolete = @@ -2749,7 +3053,7 @@ let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv is let tycons = mty.TypeDefinitions |> List.filter (fun tcref -> not (tcref.LogicalName.Contains(","))) - |> List.filter (fun tycon -> not (IsTyconUnseen ad g ncenv.amap m (modref.MkNestedTyconRef tycon))) + |> List.filter (fun tycon -> not (IsTyconUnseen ad g ncenv.amap m (modref.NestedTyconRef tycon))) let ilTyconNames = mty.TypesByAccessNames.Values @@ -2784,7 +3088,7 @@ let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv is // Collect up the accessible F# exception declarations in the module @ (mty.ExceptionDefinitionsByDemangledName |> NameMap.range - |> List.map modref.MkNestedTyconRef + |> List.map modref.NestedTyconRef |> List.filter (IsTyconUnseen ad g ncenv.amap m >> not) |> List.map Item.ExnCase) @@ -2793,30 +3097,30 @@ let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv is |> NameMap.range |> List.filter (fun x -> x.DemangledModuleOrNamespaceName |> notFakeContainerModule ilTyconNames) |> List.filter (fun x -> x.DemangledModuleOrNamespaceName |> IsInterestingModuleName) - |> List.map modref.MkNestedTyconRef + |> List.map modref.NestedTyconRef |> List.filter (IsTyconUnseen ad g ncenv.amap m >> not) |> List.filter (EntityRefContainsSomethingAccessible ncenv m ad) |> List.map ItemForModuleOrNamespaceRef) // Get all the types and .NET constructor groups accessible from here @ (tycons - |> List.map (modref.MkNestedTyconRef >> ItemOfTyconRef ncenv m) ) + |> List.map (modref.NestedTyconRef >> ItemOfTyconRef ncenv m) ) @ (tycons - |> List.map (modref.MkNestedTyconRef >> InfosForTyconConstructors ncenv m ad) |> List.concat) + |> List.map (modref.NestedTyconRef >> InfosForTyconConstructors ncenv m ad) |> List.concat) | id :: rest -> (match mty.ModulesAndNamespacesByDemangledName.TryFind(id) with | Some mspec - when not (IsTyconUnseenObsoleteSpec ad g ncenv.amap m (modref.MkNestedTyconRef mspec) allowObsolete) -> + when not (IsTyconUnseenObsoleteSpec ad g ncenv.amap m (modref.NestedTyconRef mspec) allowObsolete) -> let allowObsolete = rest <> [] && allowObsolete - ResolvePartialLongIdentInModuleOrNamespace ncenv nenv isApplicableMeth m ad (modref.MkNestedTyconRef mspec) rest allowObsolete + ResolvePartialLongIdentInModuleOrNamespace ncenv nenv isApplicableMeth m ad (modref.NestedTyconRef mspec) rest allowObsolete | _ -> []) @ (LookupTypeNameInEntityNoArity m id modref.ModuleOrNamespaceType |> List.collect (fun tycon -> - let tcref = modref.MkNestedTyconRef tycon + let tcref = modref.NestedTyconRef tycon if not (IsTyconUnseenObsoleteSpec ad g ncenv.amap m tcref allowObsolete) then tcref |> generalizedTyconRef |> ResolvePartialLongIdentInType ncenv nenv isApplicableMeth m ad true rest else @@ -2930,7 +3234,7 @@ let rec ResolvePartialLongIdentInModuleOrNamespaceForRecordFields (ncenv: NameRe mty.TypeDefinitions |> List.filter (fun tcref -> not (tcref.LogicalName.Contains(","))) |> List.filter (fun tycon -> tycon.IsRecordTycon) - |> List.filter (fun tycon -> not (IsTyconUnseen ad g ncenv.amap m (modref.MkNestedTyconRef tycon))) + |> List.filter (fun tycon -> not (IsTyconUnseen ad g ncenv.amap m (modref.NestedTyconRef tycon))) let ilTyconNames = mty.TypesByAccessNames.Values @@ -2945,17 +3249,17 @@ let rec ResolvePartialLongIdentInModuleOrNamespaceForRecordFields (ncenv: NameRe |> NameMap.range |> List.filter (fun x -> x.DemangledModuleOrNamespaceName |> notFakeContainerModule ilTyconNames) |> List.filter (fun x -> x.DemangledModuleOrNamespaceName |> IsInterestingModuleName) - |> List.map modref.MkNestedTyconRef + |> List.map modref.NestedTyconRef |> List.filter (IsTyconUnseen ad g ncenv.amap m >> not) |> List.filter (EntityRefContainsSomethingAccessible ncenv m ad) |> List.map ItemForModuleOrNamespaceRef) // Collect all accessible record types - @ (tycons |> List.map (modref.MkNestedTyconRef >> ItemOfTyconRef ncenv m) ) + @ (tycons |> List.map (modref.NestedTyconRef >> ItemOfTyconRef ncenv m) ) @ [ // accessible record fields for tycon in tycons do - if IsEntityAccessible ncenv.amap m ad (modref.MkNestedTyconRef tycon) then - let ttype = FreshenTycon ncenv m (modref.MkNestedTyconRef tycon) + if IsEntityAccessible ncenv.amap m ad (modref.NestedTyconRef tycon) then + let ttype = FreshenTycon ncenv m (modref.NestedTyconRef tycon) yield! ncenv.InfoReader.GetRecordOrClassFieldsOfType(None, ad, m, ttype) |> List.map Item.RecdField @@ -2964,9 +3268,9 @@ let rec ResolvePartialLongIdentInModuleOrNamespaceForRecordFields (ncenv: NameRe | id :: rest -> (match mty.ModulesAndNamespacesByDemangledName.TryFind(id) with | Some mspec - when not (IsTyconUnseenObsoleteSpec ad g ncenv.amap m (modref.MkNestedTyconRef mspec) allowObsolete) -> + when not (IsTyconUnseenObsoleteSpec ad g ncenv.amap m (modref.NestedTyconRef mspec) allowObsolete) -> let allowObsolete = rest <> [] && allowObsolete - ResolvePartialLongIdentInModuleOrNamespaceForRecordFields ncenv nenv m ad (modref.MkNestedTyconRef mspec) rest allowObsolete + ResolvePartialLongIdentInModuleOrNamespaceForRecordFields ncenv nenv m ad (modref.NestedTyconRef mspec) rest allowObsolete | _ -> []) @ ( match rest with @@ -2976,7 +3280,7 @@ let rec ResolvePartialLongIdentInModuleOrNamespaceForRecordFields (ncenv: NameRe tycons |> List.filter (fun tc -> tc.IsRecordTycon) |> List.collect (fun tycon -> - let tcref = modref.MkNestedTyconRef tycon + let tcref = modref.NestedTyconRef tycon let ttype = FreshenTycon ncenv m tcref ncenv.InfoReader.GetRecordOrClassFieldsOfType(None, ad, m, ttype ) ) diff --git a/src/fsharp/nameres.fsi b/src/fsharp/NameResolution.fsi old mode 100644 new mode 100755 similarity index 77% rename from src/fsharp/nameres.fsi rename to src/fsharp/NameResolution.fsi index 89c7f1732ef..6c99235fbcb --- a/src/fsharp/nameres.fsi +++ b/src/fsharp/NameResolution.fsi @@ -1,16 +1,15 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Nameres +module internal Microsoft.FSharp.Compiler.NameResolution open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Import -open Microsoft.FSharp.Compiler.Outcome open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler.PrettyNaming @@ -33,6 +32,14 @@ type ArgumentContainer = /// The named argument is a static parameter to a union case constructor | UnionCase of UnionCaseInfo +//--------------------------------------------------------------------------- +// +//------------------------------------------------------------------------- + +/// Detect a use of a nominal type, including type abbreviations. +/// When reporting symbols, we care about abbreviations, e.g. 'int' and 'int32' count as two separate symbols. +val (|AbbrevOrAppTy|_|) : TType -> TyconRef option + [] /// Represents an item that results from name resolution type Item = @@ -58,7 +65,7 @@ type Item = /// Used to indicate the availability or resolution of a custom query operation such as 'sortBy' or 'where' in computation expression syntax | CustomOperation of string * (unit -> string option) * MethInfo option | CustomBuilder of string * ValRef - | TypeVar of string + | TypeVar of string * Typar | ModuleOrNamespaces of Tast.ModuleOrNamespaceRef list /// Represents the resolution of a source identifier to an implicit use of an infix operator (+solution if such available) | ImplicitOp of Ident * TraitConstraintSln option ref @@ -66,7 +73,7 @@ type Item = | ArgName of Ident * TType * ArgumentContainer option | SetterArg of Ident * Item | UnqualifiedType of TyconRef list - member DisplayName : TcGlobals -> string + member DisplayName : string /// Represents a record field resolution and the information if the usage is deprecated. type FieldResolution = FieldResolution of RecdFieldRef * bool @@ -102,6 +109,9 @@ type FullyQualifiedFlag = [] type BulkAdd = Yes | No +/// Lookup patterns in name resolution environment +val internal TryFindPatternByName : string -> NameResolutionEnv -> Item option + /// Add extra items to the environment for Visual Studio, e.g. static members val internal AddFakeNamedValRefToNameEnv : string -> NameResolutionEnv -> ValRef -> NameResolutionEnv @@ -169,21 +179,109 @@ type TypeNameResolutionInfo = static member Default : TypeNameResolutionInfo static member ResolveToTypeRefs : TypeNameResolutionStaticArgsInfo -> TypeNameResolutionInfo -/// Represents the kind of the occurence when reporting a name in name resolution +/// Represents the kind of the occurrence when reporting a name in name resolution [] type internal ItemOccurence = - | Binding = 0 - | Use = 1 - | UseInType = 2 - | UseInAttribute = 3 - | Pattern = 4 + | Binding + | Use + | UseInType + | UseInAttribute + | Pattern + | Implemented + | RelatedText +/// Check for equality, up to signature matching +val ItemsAreEffectivelyEqual : TcGlobals -> Item -> Item -> bool + +[] +type internal CapturedNameResolution = + /// line and column + member Pos : pos + + /// Named item + member Item : Item + + /// Information about the occurence of the symbol + member ItemOccurence : ItemOccurence + + /// Information about printing. For example, should redundant keywords be hidden? + member DisplayEnv : DisplayEnv + + /// Naming environment--for example, currently open namespaces. + member NameResolutionEnv : NameResolutionEnv + + /// The access rights of code at the location + member AccessorDomain : AccessorDomain + + /// The starting and ending position + member Range : range + +[] +type internal TcResolutions = + + /// Name resolution environments for every interesting region in the file. These regions may + /// overlap, in which case the smallest region applicable should be used. + member CapturedEnvs : ResizeArray + + /// Information of exact types found for expressions, that can be to the left of a dot. + /// typ - the inferred type for an expression + member CapturedExpressionTypings : ResizeArray + + /// Exact name resolutions + member CapturedNameResolutions : ResizeArray + + /// Represents all the resolutions of names to groups of methods. + member CapturedMethodGroupResolutions : ResizeArray + + /// Represents the empty set of resolutions + static member Empty : TcResolutions + + +[] +/// Represents container for all name resolutions that were met so far when typechecking some particular file +type internal TcSymbolUses = + + /// Get all the uses of a particular item within the file + member GetUsesOfSymbol : Item -> (ItemOccurence * DisplayEnv * range)[] + + /// Get all the uses of all items within the file + member GetAllUsesOfSymbols : unit -> (Item * ItemOccurence * DisplayEnv * range)[] + + /// Get the locations of all the printf format specifiers in the file + member GetFormatSpecifierLocations : unit -> range[] + + /// An abstract type for reporting the results of name resolution and type checking type ITypecheckResultsSink = + + /// Record that an environment is active over the given scope range abstract NotifyEnvWithScope : range * NameResolutionEnv * AccessorDomain -> unit + + /// Record that an expression has a specific type at the given range. abstract NotifyExprHasType : pos * TType * DisplayEnv * NameResolutionEnv * AccessorDomain * range -> unit + + /// Record that a name resolution occurred at a specific location in the source abstract NotifyNameResolution : pos * Item * Item * ItemOccurence * DisplayEnv * NameResolutionEnv * AccessorDomain * range -> unit + /// Record that a printf format specifier occurred at a specific location in the source + abstract NotifyFormatSpecifierLocation : range -> unit + + /// Get the current source + abstract CurrentSource : string option + +/// An implementation of ITypecheckResultsSink to collect information during type checking +type internal TcResultsSinkImpl = + + /// Create a TcResultsSinkImpl + new : tcGlobals : TcGlobals * ?source:string -> TcResultsSinkImpl + + /// Get all the resolutions reported to the sink + member GetResolutions : unit -> TcResolutions + + /// Get all the uses of all symbols remorted to the sink + member GetSymbolUses : unit -> TcSymbolUses + interface ITypecheckResultsSink + /// An abstract type for reporting the results of name resolution and type checking, and which allows /// temporary suspension and/or redirection of reporting. type TcResultsSink = @@ -249,10 +347,10 @@ type PermitDirectReferenceToGeneratedType = /// Resolve a long identifier to a namespace or module. val internal ResolveLongIndentAsModuleOrNamespace : Import.ImportMap -> range -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident list -> ResultOrException<(int * ModuleOrNamespaceRef * ModuleOrNamespaceType) list > -/// Resolve a long identifer to an object constructor. +/// Resolve a long identifier to an object constructor. val internal ResolveObjectConstructor : NameResolver -> DisplayEnv -> range -> AccessorDomain -> TType -> ResultOrException -/// Resolve a long identifer using type-qualified name resolution. +/// Resolve a long identifier using type-qualified name resolution. val internal ResolveLongIdentInType : TcResultsSink -> NameResolver -> NameResolutionEnv -> LookupKind -> range -> AccessorDomain -> Ident list -> FindMemberFlag -> TypeNameResolutionInfo -> TType -> Item * Ident list /// Resolve a long identifier when used in a pattern. @@ -265,7 +363,7 @@ val internal ResolveTypeLongIdentInTyconRef : TcResultsSink -> NameResol val internal ResolveTypeLongIdent : TcResultsSink -> NameResolver -> ItemOccurence -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident list -> TypeNameResolutionStaticArgsInfo -> PermitDirectReferenceToGeneratedType -> ResultOrException /// Resolve a long identifier to a field -val internal ResolveField : NameResolver -> NameResolutionEnv -> AccessorDomain -> TType -> Ident list * Ident -> FieldResolution list +val internal ResolveField : TcResultsSink -> NameResolver -> NameResolutionEnv -> AccessorDomain -> TType -> Ident list * Ident -> FieldResolution list /// Resolve a long identifier occurring in an expression position val internal ResolveExprLongIdent : TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> Item * Ident list @@ -278,15 +376,15 @@ val internal ResolveRecordOrClassFieldsOfType : NameResolver -> range -> A /// An adjustment to perform to the name resolution results if overload resolution fails. /// If overload resolution succeeds, the specific overload resolution is reported. If it fails, the -/// set of possibile overlods is reported via this adjustment. +/// set of possible overloads is reported via this adjustment. type IfOverloadResolutionFails = IfOverloadResolutionFails of (unit -> unit) /// Specifies if overload resolution needs to notify Language Service of overload resolution [] type AfterOverloadResolution = - /// Notfication is not needed + /// Notification is not needed | DoNothing - /// Notfy the sink + /// Notify the sink | SendToSink of (Item -> unit) * IfOverloadResolutionFails // overload resolution failure fallback /// Find override among given overrides and notify the sink. The 'Item' contains the candidate overrides. | ReplaceWithOverrideAndSendToSink of Item * (Item -> unit) * IfOverloadResolutionFails // overload resolution failure fallback diff --git a/src/fsharp/NicePrint.fs b/src/fsharp/NicePrint.fs old mode 100644 new mode 100755 index 209a60d4424..0705d0eeae2 --- a/src/fsharp/NicePrint.fs +++ b/src/fsharp/NicePrint.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. //-------------------------------------------------------------------------- // Print Signatures/Types, for signatures, intellisense, quick info, FSI responses @@ -22,7 +22,7 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.IL (* Abstract IL *) open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Infos @@ -437,7 +437,7 @@ module private PrintIL = let memberBlockLs (fieldDefs:ILFieldDefs, methodDefs:ILMethodDefs, propertyDefs:ILPropertyDefs, eventDefs:ILEventDefs) = let ctors = - methodDefs.AsList + methodDefs.AsList |> List.filter isPublicILCtor |> List.sortBy (fun md -> md.Parameters.Length) |> shrinkOverloads (layoutILMethodDef denv ilTyparSubst typeDef.Name) (fun _ xL -> xL) @@ -492,7 +492,7 @@ module private PrintIL = let body = applyMaxMembers denv.maxMembers body let types = - typeDef.NestedTypes.AsList + typeDef.NestedTypes.AsList |> List.filter isPublicILTypeDef |> List.sortBy(fun t -> adjustILName t.Name) |> List.map (layoutILNestedClassDef denv) @@ -647,12 +647,12 @@ module private PrintTypes = /// Layout an attribute 'Type(arg1, ..., argN)' // // REVIEW: we are ignoring "props" here - and private layoutAttrib denv (Attrib(_,k,args,_props,_,_,_)) = + and layoutAttrib denv (Attrib(_,k,args,_props,_,_,_)) = let argsL = bracketL (layoutAttribArgs denv args) match k with | (ILAttrib(ilMethRef)) -> let trimmedName = - let name = ilMethRef.EnclosingTypeRef.Name + let name = ilMethRef.EnclosingTypeRef.Name match String.tryDropSuffix name "Attribute" with | Some shortName -> shortName | None -> name @@ -667,6 +667,47 @@ module private PrintTypes = let tcref = tcrefOfAppTy denv.g rty layoutTyconRef denv tcref ++ argsL + and layoutILAttribElement denv arg = + match arg with + | ILAttribElem.String (Some x) -> wordL ("\"" + x + "\"") + | ILAttribElem.String None -> wordL "" + | ILAttribElem.Bool x -> if x then wordL "true" else wordL "false" + | ILAttribElem.Char x -> wordL ("'" + x.ToString() + "'" ) + | ILAttribElem.SByte x -> wordL ((x |> string)+"y") + | ILAttribElem.Int16 x -> wordL ((x |> string)+"s") + | ILAttribElem.Int32 x -> wordL ((x |> string)) + | ILAttribElem.Int64 x -> wordL ((x |> string)+"L") + | ILAttribElem.Byte x -> wordL ((x |> string)+"uy") + | ILAttribElem.UInt16 x -> wordL ((x |> string)+"us") + | ILAttribElem.UInt32 x -> wordL ((x |> string)+"u") + | ILAttribElem.UInt64 x -> wordL ((x |> string)+"UL") + | ILAttribElem.Single x -> + let str = + let s = x.ToString("g12",System.Globalization.CultureInfo.InvariantCulture) + (if String.forall (fun c -> System.Char.IsDigit(c) || c = '-') s + then s + ".0" + else s) + "f" + wordL str + | ILAttribElem.Double x -> + let str = + let s = x.ToString("g12",System.Globalization.CultureInfo.InvariantCulture) + if String.forall (fun c -> System.Char.IsDigit(c) || c = '-') s + then s + ".0" + else s + wordL str + | ILAttribElem.Null -> wordL "null" + | ILAttribElem.Array (_, xs) -> + leftL "[|" ^^ semiListL (List.map (layoutILAttribElement denv) xs) ^^ rightL "|]" + | ILAttribElem.Type (Some ty) -> + leftL "typeof<" ^^ PrintIL.layoutILType denv [] ty ^^ rightL ">" + | ILAttribElem.Type None -> wordL "" + | ILAttribElem.TypeRef (Some ty) -> + leftL "typedefof<" ^^ PrintIL.layoutILTypeRef denv ty ^^ rightL ">" + | ILAttribElem.TypeRef None -> wordL "" + + and layoutILAttrib denv (ty, args) = + let argsL = bracketL (sepListL (rightL ",") (List.map (layoutILAttribElement denv) args)) + PrintIL.layoutILType denv [] ty ++ argsL /// Layout '[]' above another block and layoutAttribs denv kind attrs restL = @@ -690,7 +731,7 @@ module private PrintTypes = | TyparKind.Type -> restL | TyparKind.Measure -> squareAngleL (wordL "Measure") @@ restL - and private layoutTyparAttribs denv kind attrs restL = + and layoutTyparAttribs denv kind attrs restL = match attrs, kind with | [], TyparKind.Type -> restL | _, _ -> squareAngleL (sepListL (rightL ";") ((match kind with TyparKind.Type -> [] | TyparKind.Measure -> [wordL "Measure"]) @ List.map (layoutAttrib denv) attrs)) ^^ restL @@ -704,8 +745,8 @@ module private PrintTypes = /// Layout a single type parameter declaration, taking TypeSimplificationInfo into account /// There are several printing-cases for a typar: /// - /// 'a - is multiple occurance. - /// _ - singleton occurrence, an underscore prefered over 'b. (OCAML accepts but does not print) + /// 'a - is multiple occurrence. + /// _ - singleton occurrence, an underscore preferred over 'b. (OCAML accepts but does not print) /// #Type - inplace coercion constraint and singleton. /// ('a :> Type) - inplace coercion constraint not singleton. /// ('a.opM : S->T) - inplace operator constraint. @@ -1026,6 +1067,9 @@ module private PrintTypes = let cxsL = layoutConstraintsWithInfo denv env env.postfixConstraints layoutTypeWithInfoAndPrec denv env 2 typ --- cxsL + let layoutPrettyTypeNoCx denv typ = + let _,typ,_cxs = PrettyTypes.PrettifyTypes1 denv.g typ + layoutTypeWithInfoAndPrec denv SimplifyTypes.typeSimplificationInfo0 5 typ /// Printing TAST objects module private PrintTastMemberOrVals = @@ -1157,7 +1201,7 @@ module InfoMemberPrinting = | _, Some nm, true, ptyOpt -> // detect parameter type, if ptyOpt is None - this is .NET style optional argument let pty = defaultArg ptyOpt pty - bprintf os "?%s: " nm + bprintf os "?%s: " nm.idText outputTy denv os pty // Layout an unnamed argument | _, None, _,_ -> @@ -1165,10 +1209,10 @@ module InfoMemberPrinting = // Layout a named argument | true, Some nm,_,_ -> layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute |> bufferL os - bprintf os " %s: " nm + bprintf os " %s: " nm.idText outputTy denv os pty | false, Some nm,_,_ -> - bprintf os "%s: " nm + bprintf os "%s: " nm.idText outputTy denv os pty /// Format a method info using "F# style". @@ -1239,7 +1283,7 @@ module InfoMemberPrinting = /// Format a method to a buffer using "standalone" display style. - /// For example, these are the formats used when printing signatures of methods that have not been overriden, + /// For example, these are the formats used when printing signatures of methods that have not been overridden, /// and the format used when showing the individual member in QuickInfo and DeclarationInfo. /// The formats differ between .NET/provided methods and F# methods. Surprisingly people don't really seem /// to notice this, or they find it helpful. It feels that moving from this position should not be done lightly. @@ -1274,7 +1318,7 @@ module InfoMemberPrinting = formatMethInfoToBufferCSharpStyle amap m denv os minfo minfo.FormalMethodInst #endif - /// Format a method to a layotu (actually just containing a string) using "free style" (aka "standalone"). + /// Format a method to a layout (actually just containing a string) using "free style" (aka "standalone"). let layoutMethInfoFSharpStyle amap m denv (minfo: MethInfo) = wordL (bufs (fun buf -> formatMethInfoToBufferFSharpStyle amap m denv buf minfo minfo.FormalMethodInst)) @@ -1323,7 +1367,7 @@ module private TastDefinitionPrinting = let isGenerated = if isUnionCase then isGeneratedUnionCaseField else isGeneratedExceptionField sepListL (wordL "*") (List.mapi (layoutUnionOrExceptionField denv isGenerated) fields) - let layoutUnionCase denv prefixL ucase = + let layoutUnionCase denv prefixL (ucase:UnionCase) = let nmL = wordL (DemangleOperatorName ucase.Id.idText) //let nmL = layoutAccessibility denv ucase.Accessibility nmL match ucase.RecdFields with @@ -1331,7 +1375,7 @@ module private TastDefinitionPrinting = | fields -> (prefixL ^^ nmL ^^ wordL "of") --- layoutUnionCaseFields denv true fields let layoutUnionCases denv ucases = - let prefixL = wordL "|" // See bug://2964 - always prefix in case preceeded by accessibility modifier + let prefixL = wordL "|" // See bug://2964 - always prefix in case preceded by accessibility modifier List.map (layoutUnionCase denv prefixL) ucases /// When to force a break? "type tyname = repn" @@ -1552,7 +1596,7 @@ module private TastDefinitionPrinting = | TFsObjModelRepr r when (match r.fsobjmodel_kind with TTyconInterface -> true | _ -> false) -> [] | _ -> tycon.ImmediateInterfacesOfFSharpTycon let iimpls = iimpls |> List.filter (fun (_,compgen,_) -> not compgen) - // if TTyconInterface, the iimpls should be printed as inheritted interfaces + // if TTyconInterface, the iimpls should be printed as inherited interfaces let iimplsLs = iimpls |> List.map (fun (ty,_,_) -> wordL "interface" --- layoutType denv ty) let adhocCtorsLs = adhoc |> List.filter (fun v -> v.IsConstructor) |> List.map (fun vref -> PrintTastMemberOrVals.layoutValOrMember denv vref.Deref) let adhocInstanceLs = adhoc |> List.filter (fun v -> not v.IsConstructor && v.IsInstanceMember) |> List.map (fun vref -> PrintTastMemberOrVals.layoutValOrMember denv vref.Deref) @@ -1760,7 +1804,7 @@ module private InferredSigPrinting = // module now. ((wordL "module" ^^ nmL ^^ wordL "=" ^^ wordL "begin") @@-- basic) @@ wordL "end" else - // OK, wer'e in F# Interactive, presumably the implicit module for each interaction. + // OK, we're in F# Interactive, presumably the implicit module for each interaction. basic else // OK, this is a nested module @@ -1838,10 +1882,14 @@ let isGeneratedExceptionField pos f = TastDefinitionPrinting.isGeneratedExce let stringOfTyparConstraint denv tpc = stringOfTyparConstraints denv [tpc] let stringOfTy denv x = x |> PrintTypes.layoutType denv |> showL let prettyStringOfTy denv x = x |> PrintTypes.layoutPrettyType denv |> showL +let prettyStringOfTyNoCx denv x = x |> PrintTypes.layoutPrettyTypeNoCx denv |> showL let stringOfRecdField denv x = x |> TastDefinitionPrinting.layoutRecdField false denv |> showL let stringOfUnionCase denv x = x |> TastDefinitionPrinting.layoutUnionCase denv (wordL "|") |> showL let stringOfExnDef denv x = x |> TastDefinitionPrinting.layoutExnDefn denv |> showL +let stringOfFSAttrib denv x = x |> PrintTypes.layoutAttrib denv |> squareAngleL |> showL +let stringOfILAttrib denv x = x |> PrintTypes.layoutILAttrib denv |> squareAngleL |> showL + let layoutInferredSigOfModuleExpr showHeader denv infoReader ad m expr = InferredSigPrinting.layoutInferredSigOfModuleExpr showHeader denv infoReader ad m expr let layoutValOrMember denv v = PrintTastMemberOrVals.layoutValOrMember denv v let layoutPrettifiedTypes denv taus = PrintTypes.layoutPrettifiedTypes denv taus diff --git a/src/fsharp/opt.fs b/src/fsharp/Optimizer.fs similarity index 98% rename from src/fsharp/opt.fs rename to src/fsharp/Optimizer.fs index ec20d321a53..f306840fa82 100644 --- a/src/fsharp/opt.fs +++ b/src/fsharp/Optimizer.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. //------------------------------------------------------------------------- // The F# expression simplifier. The main aim is to inline simple, known functions @@ -7,7 +7,7 @@ //------------------------------------------------------------------------- -module internal Microsoft.FSharp.Compiler.Opt +module internal Microsoft.FSharp.Compiler.Optimizer open Internal.Utilities open Microsoft.FSharp.Compiler.AbstractIL @@ -19,7 +19,7 @@ open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics -open Microsoft.FSharp.Compiler.Pickle +open Microsoft.FSharp.Compiler.TastPickle open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger @@ -28,10 +28,10 @@ open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint open Microsoft.FSharp.Compiler.TypeChecker -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Layout -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.Infos open System.Collections.Generic @@ -145,7 +145,10 @@ type ModuleInfo = ModuleOrNamespaceInfos: NameMap } and LazyModuleInfo = Lazy +type ImplFileOptimizationInfo = LazyModuleInfo +type CcuOptimizationInfo = LazyModuleInfo +#if DEBUG let braceL x = leftL "{" ^^ x ^^ rightL "}" let seqL xL xs = Seq.fold (fun z x -> z @@ xL x) emptyL xs let namemapL xL xmap = NameMap.foldBack (fun nm x z -> xL nm x @@ z) xmap emptyL @@ -169,6 +172,7 @@ and moduleInfoL g (x:LazyModuleInfo) = and valInfoL g (x:ValInfo) = braceL ((wordL "ValExprInfo: " @@ exprValueInfoL g x.ValExprInfo) @@ (wordL "ValMakesNoCriticalTailcalls:" @@ wordL (if x.ValMakesNoCriticalTailcalls then "true" else "false"))) +#endif type Summary<'Info> = { Info: 'Info; @@ -306,7 +310,7 @@ type OptimizationSettings = #else type cenv = - { g: Env.TcGlobals; + { g: TcGlobals; TcVal : ConstraintSolver.TcValF amap: Import.ImportMap; optimizing: bool; @@ -374,10 +378,10 @@ let check (vref: ValRef) (res:ValInfo) = let EmptyModuleInfo = notlazy { ValInfos = ValInfos([]); ModuleOrNamespaceInfos = Map.empty } -let rec UnionModuleInfos (minfos : seq) = +let rec UnionOptimizationInfos (minfos : seq) = notlazy { ValInfos = ValInfos(seq { for minfo in minfos do yield! minfo.Force().ValInfos.Entries }) - ModuleOrNamespaceInfos = minfos |> Seq.map (fun m -> m.Force().ModuleOrNamespaceInfos) |> NameMap.union UnionModuleInfos } + ModuleOrNamespaceInfos = minfos |> Seq.map (fun m -> m.Force().ModuleOrNamespaceInfos) |> NameMap.union UnionOptimizationInfos } let FindOrCreateModuleInfo n (ss: Map<_,_>) = match ss.TryFind n with @@ -490,9 +494,13 @@ let BindTypeVarsToUnknown (tps:Typar list) env = tp.Data.typar_id <- ident (nm,tp.Range)); List.fold (fun sofar arg -> BindTypeVar arg UnknownTypeValue sofar) env tps -let BindCcu (ccu:Tast.CcuThunk) mval env cenv = +let BindCcu (ccu:Tast.CcuThunk) mval env (g:TcGlobals) = +#if DEBUG if verboseOptimizationInfo then - dprintf "*** Reloading optimization data for assembly %s, info = \n%s\n" ccu.AssemblyName (showL (Layout.squashTo 192 (moduleInfoL cenv mval))); + dprintf "*** Reloading optimization data for assembly %s, info = \n%s\n" ccu.AssemblyName (showL (Layout.squashTo 192 (moduleInfoL g mval))); +#else + ignore g +#endif { env with globalModuleInfos=env.globalModuleInfos.Add(ccu.AssemblyName,mval) } @@ -626,12 +634,16 @@ let (|StripInt32Value|_|) = function StripConstValue(Const.Int32 n) -> Some n | //------------------------------------------------------------------------- let MakeValueInfoForValue g m vref vinfo = +#if DEBUG let rec check x = match x with | ValValue (vref2,detail) -> if valRefEq g vref vref2 then error(Error(FSComp.SR.optRecursiveValValue(showL(exprValueInfoL g vinfo)),m)) else check detail | SizeValue (_n,detail) -> check detail | _ -> () check vinfo; +#else + ignore g; ignore m; +#endif ValValue (vref,vinfo) |> BoundValueInfoBySize let MakeValueInfoForRecord tcref argvals = RecdValue (tcref,argvals) |> BoundValueInfoBySize @@ -1032,12 +1044,12 @@ let AbstractLazyModulInfoByHiding isAssemblyBoundary mhi = | TupleValue vinfos -> TupleValue (Array.map abstractExprInfo vinfos) | RecdValue (tcref,vinfos) -> - if hiddenTyconRepr tcref.Deref || Array.exists (mkNestedRecdFieldRef tcref >> hiddenRecdField) tcref.AllFieldsArray + if hiddenTyconRepr tcref.Deref || Array.exists (tcref.MakeNestedRecdFieldRef >> hiddenRecdField) tcref.AllFieldsArray then UnknownValue else RecdValue (tcref,Array.map abstractExprInfo vinfos) | UnionCaseValue(ucref,vinfos) -> let tcref = ucref.TyconRef - if hiddenTyconRepr ucref.Tycon || tcref.UnionCasesArray |> Array.exists (mkNestedUnionCaseRef tcref >> hiddenUnionCase) + if hiddenTyconRepr ucref.Tycon || tcref.UnionCasesArray |> Array.exists (tcref.MakeNestedUnionCaseRef >> hiddenUnionCase) then UnknownValue else UnionCaseValue (ucref,Array.map abstractExprInfo vinfos) | SizeValue(_vdepth,vinfo) -> MakeSizedValueInfo (abstractExprInfo vinfo) @@ -1061,7 +1073,7 @@ let AbstractLazyModulInfoByHiding isAssemblyBoundary mhi = abstractLazyModulInfo /// Hide all information except what we need for "must inline". We always save this optimization information -let AbstractLazyModulInfoToEssentials = +let AbstractOptimizationInfoToEssentials = let rec abstractModulInfo (ss:ModuleInfo) = { ModuleOrNamespaceInfos = NameMap.map (Lazy.force >> abstractModulInfo >> notlazy) ss.ModuleOrNamespaceInfos; @@ -1155,7 +1167,7 @@ let AbstractExprInfoByVars (boundVars:Val list,boundTyVars) ivalue = // Remap optimization information, e.g. to use public stable references so we can pickle it // to disk. //------------------------------------------------------------------------- -let RemapLazyModulInfo g tmenv = +let RemapOptimizationInfo g tmenv = let rec remapExprInfo ivalue = if verboseOptimizationInfo then dprintf "remapExprInfo\n"; @@ -1173,18 +1185,18 @@ let RemapLazyModulInfo g tmenv = let remapValInfo v = { ValExprInfo=remapExprInfo v.ValExprInfo; ValMakesNoCriticalTailcalls=v.ValMakesNoCriticalTailcalls } let rec remapModulInfo ss = if verboseOptimizationInfo then dprintf "remapModulInfo\n"; - { ModuleOrNamespaceInfos = ss.ModuleOrNamespaceInfos |> NameMap.map RemapLazyModulInfo; + { ModuleOrNamespaceInfos = ss.ModuleOrNamespaceInfos |> NameMap.map remapLazyModulInfo; ValInfos = ss.ValInfos.Map (fun (vref,vinfo) -> let vref' = remapValRef tmenv vref let vinfo = remapValInfo vinfo - // Propogate any inferred ValMakesNoCriticalTailcalls flag from implementation to signature information + // Propagate any inferred ValMakesNoCriticalTailcalls flag from implementation to signature information if vinfo.ValMakesNoCriticalTailcalls then vref'.Deref.SetMakesNoCriticalTailcalls() (vref',vinfo)) } - and RemapLazyModulInfo ss = + and remapLazyModulInfo ss = ss |> Lazy.force |> remapModulInfo |> notlazy - RemapLazyModulInfo + remapLazyModulInfo //------------------------------------------------------------------------- // Hide information when a value is no longer visible @@ -1192,11 +1204,19 @@ let RemapLazyModulInfo g tmenv = let AbstractAndRemapModulInfo msg g m (repackage,hidden) info = let mrpi = mkRepackageRemapping repackage +#if DEBUG if verboseOptimizationInfo then dprintf "%s - %a - Optimization data prior to trim: \n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))); +#else + ignore (msg,m) +#endif let info = info |> AbstractLazyModulInfoByHiding false hidden +#if DEBUG if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after trim:\n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))); - let info = info |> RemapLazyModulInfo g mrpi +#endif + let info = info |> RemapOptimizationInfo g mrpi +#if DEBUG if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after remap:\n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))); +#endif info //------------------------------------------------------------------------- @@ -1696,9 +1716,6 @@ let TryDetectQueryQuoteAndRun cenv (expr:Expr) = let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = - // foreach --> fast integer for loops - let expr = DetectFastIntegerForLoops cenv.g expr - // Eliminate subsumption coercions for functions. This must be done post-typechecking because we need // complete inference types. let expr = NormalizeAndAdjustPossibleSubsumptionExprs cenv.g expr @@ -1706,7 +1723,7 @@ let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = let expr = stripExpr expr match expr with - // treat the common linear cases to avoid stack overflows, using an explicit continutation + // treat the common linear cases to avoid stack overflows, using an explicit continuation | Expr.Sequential _ | Expr.Let _ -> OptimizeLinearExpr cenv env expr (fun x -> x) | Expr.Const (c,m,ty) -> OptimizeConst cenv env expr (c,m,ty) @@ -1735,7 +1752,7 @@ let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = let topValInfo = ValReprInfo (ValReprInfo.InferTyparInfo tps,[],ValReprInfo.unnamedRetVal) let ty = tryMkForallTy tps rty OptimizeLambdas None cenv env topValInfo expr ty - | Expr.TyChoose _ -> OptimizeExpr cenv env (Typrelns.ChooseTyparSolutionsForFreeChoiceTypars cenv.g cenv.amap expr) + | Expr.TyChoose _ -> OptimizeExpr cenv env (TypeRelations.ChooseTyparSolutionsForFreeChoiceTypars cenv.g cenv.amap expr) | Expr.Match(spMatch,exprm,dtree,targets,m,ty) -> OptimizeMatch cenv env (spMatch,exprm,dtree,targets,m,ty) | Expr.LetRec (binds,e,m,_) -> OptimizeLetRec cenv env (binds,e,m) | Expr.StaticOptimization (constraints,e2,e3,m) -> @@ -1886,7 +1903,7 @@ and OptimizeExprOpFallback cenv env (op,tyargs,args',m) arginfos valu = let cost,valu = match op with | TOp.UnionCase c -> 2,MakeValueInfoForUnionCase c (Array.ofList argValues) - | TOp.ExnConstr _ -> 2,valu (* REVIEW: information collection possilbe here *) + | TOp.ExnConstr _ -> 2,valu (* REVIEW: information collection possible here *) | TOp.Tuple -> 1, MakeValueInfoForTuple (Array.ofList argValues) | TOp.ValFieldGet _ | TOp.TupleFieldGet _ @@ -2067,6 +2084,9 @@ and OptimizeLetRec cenv env (binds,bodyExpr,m) = //------------------------------------------------------------------------- and OptimizeLinearExpr cenv env expr contf = + + let expr = DetectAndOptimizeForExpression cenv.g OptimizeAllForExpressions expr + if verboseOptimizations then dprintf "OptimizeLinearExpr\n"; let expr = if cenv.settings.ExpandStructrualValues() then ExpandStructuralBinding cenv expr else expr match expr with @@ -2784,7 +2804,7 @@ and OptimizeExprThenConsiderSplit cenv env e = and ComputeSplitToMethodCondition flag threshold cenv env (e,einfo) = flag && - // REVIEW: The method splitting optimization is compeltely disabled if we are not taking tailcalls. + // REVIEW: The method splitting optimization is completely disabled if we are not taking tailcalls. // REVIEW: This should only apply to methods that actually make self-tailcalls (tested further below). // Old comment "don't mess with taking guaranteed tailcalls if used with --no-tailcalls!" cenv.emitTailcalls && @@ -2796,7 +2816,7 @@ and ComputeSplitToMethodCondition flag threshold cenv env (e,einfo) = not fvs.UsesUnboundRethrow && not fvs.UsesMethodLocalConstructs && fvs.FreeLocals |> Zset.forall (fun v -> - // no direct-self-recursive refrences + // no direct-self-recursive references not (env.dontSplitVars.ContainsVal v) && (v.ValReprInfo.IsSome || // All the free variables (apart from things with an arity, i.e. compiled as methods) should be normal, i.e. not base/this etc. @@ -3036,7 +3056,9 @@ and OptimizeBinding cenv isRec env (TBind(v,e,spBind)) = else einfo if v.MustInline && IsPartialExprVal einfo.Info then errorR(InternalError("the mustinline value '"^v.LogicalName^"' was not inferred to have a known value",v.Range)); +#if DEBUG if verboseOptimizations then dprintf "val %s gets opt info %s\n" (showL(valL v)) (showL(exprValueInfoL cenv.g einfo.Info)); +#endif let env = BindInternalLocalVal cenv v (mkValInfo einfo v) env (TBind(v,repr',spBind), einfo), env @@ -3169,9 +3191,9 @@ and OptimizeModuleDefs cenv (env,bindInfosColl) defs = if verboseOptimizations then dprintf "OptimizeModuleDefs\n"; let defs,(env,bindInfosColl) = List.mapFold (OptimizeModuleDef cenv) (env,bindInfosColl) defs let defs,minfos = List.unzip defs - (defs,UnionModuleInfos minfos),(env,bindInfosColl) + (defs,UnionOptimizationInfos minfos),(env,bindInfosColl) -and OptimizeImplFileInternal cenv env isIncrementalFragment (TImplFile(qname, pragmas, (ModuleOrNamespaceExprWithSig(mty,_,_) as mexpr), hasExplicitEntryPoint,isScript)) = +and OptimizeImplFileInternal cenv env isIncrementalFragment hidden (TImplFile(qname, pragmas, (ModuleOrNamespaceExprWithSig(mty,_,_) as mexpr), hasExplicitEntryPoint,isScript)) = let env,mexpr',minfo = match mexpr with // FSI: FSI compiles everything as if you're typing incrementally into one module @@ -3187,16 +3209,16 @@ and OptimizeImplFileInternal cenv env isIncrementalFragment (TImplFile(qname, pr let env = { env with localExternalVals=env.localExternalVals.MarkAsCollapsible() } // take the chance to flatten to a dictionary env, mexpr', minfo - let hidden = ComputeHidingInfoAtAssemblyBoundary mty + let hidden = ComputeHidingInfoAtAssemblyBoundary mty hidden let minfo = AbstractLazyModulInfoByHiding true hidden minfo - env, TImplFile(qname,pragmas,mexpr',hasExplicitEntryPoint,isScript), minfo + env, TImplFile(qname,pragmas,mexpr',hasExplicitEntryPoint,isScript), minfo, hidden //------------------------------------------------------------------------- // Entry point //------------------------------------------------------------------------- -let OptimizeImplFile(settings,ccu,tcGlobals,tcVal, importMap,optEnv,isIncrementalFragment,emitTailcalls,mimpls) = +let OptimizeImplFile(settings,ccu,tcGlobals,tcVal, importMap,optEnv,isIncrementalFragment,emitTailcalls,hidden,mimpls) = let cenv = { settings=settings; scope=ccu; @@ -3207,7 +3229,7 @@ let OptimizeImplFile(settings,ccu,tcGlobals,tcVal, importMap,optEnv,isIncrementa localInternalVals=new System.Collections.Generic.Dictionary(10000); emitTailcalls=emitTailcalls; casApplied=new Dictionary() } - OptimizeImplFileInternal cenv optEnv isIncrementalFragment mimpls + OptimizeImplFileInternal cenv optEnv isIncrementalFragment hidden mimpls //------------------------------------------------------------------------- @@ -3239,6 +3261,7 @@ and p_ModuleInfo x st = and p_LazyModuleInfo x st = p_lazy p_ModuleInfo x st +let p_CcuOptimizationInfo x st = p_LazyModuleInfo x st #endif // !NO_COMPILER_BACKEND @@ -3267,3 +3290,4 @@ and u_ModuleInfo st = and u_LazyModuleInfo st = u_lazy u_ModuleInfo st +let u_CcuOptimizationInfo st = u_LazyModuleInfo st diff --git a/src/fsharp/Optimizer.fsi b/src/fsharp/Optimizer.fsi new file mode 100644 index 00000000000..34891f6a815 --- /dev/null +++ b/src/fsharp/Optimizer.fsi @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module internal Microsoft.FSharp.Compiler.Optimizer + +open Internal.Utilities +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.Tastops +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.AbstractIL +open Microsoft.FSharp.Compiler.AbstractIL.Internal + +type OptimizationSettings = + { abstractBigTargets : bool + jitOptUser : bool option + localOptUser : bool option + crossModuleOptUser : bool option + bigTargetSize : int + veryBigExprSize : int + lambdaInlineThreshold : int + reportingPhase : bool; + reportNoNeedToTailcall: bool + reportFunctionSizes : bool + reportHasEffect : bool + reportTotalSizes : bool } + + member jitOpt : unit -> bool + member localOpt : unit -> bool + static member Defaults : OptimizationSettings + +/// Optimization information +type ModuleInfo +type LazyModuleInfo = Lazy +type ImplFileOptimizationInfo = LazyModuleInfo +type CcuOptimizationInfo = LazyModuleInfo + +#if NO_COMPILER_BACKEND +#else +[] +type IncrementalOptimizationEnv = + static member Empty : IncrementalOptimizationEnv + +/// For building optimization environments incrementally +val internal BindCcu : CcuThunk -> CcuOptimizationInfo -> IncrementalOptimizationEnv -> TcGlobals -> IncrementalOptimizationEnv + +/// Optimize one implementation file in the given environment +val internal OptimizeImplFile : OptimizationSettings * CcuThunk * TcGlobals * ConstraintSolver.TcValF * Import.ImportMap * IncrementalOptimizationEnv * isIncrementalFragment: bool * emitTaicalls: bool * SignatureHidingInfo * TypedImplFile -> IncrementalOptimizationEnv * TypedImplFile * ImplFileOptimizationInfo * SignatureHidingInfo + +#if DEBUG +/// Displaying optimization data +val internal moduleInfoL : TcGlobals -> LazyModuleInfo -> Layout.layout +#endif + +/// Saving and re-reading optimization information +val p_CcuOptimizationInfo : CcuOptimizationInfo -> TastPickle.WriterState -> unit + +/// Rewrite the module info using the export remapping +val RemapOptimizationInfo : TcGlobals -> Tastops.Remap -> (CcuOptimizationInfo -> CcuOptimizationInfo) + +/// Ensure that 'internal' items are not exported in the optimization info +val AbstractOptimizationInfoToEssentials : (CcuOptimizationInfo -> CcuOptimizationInfo) + +/// Combine optimization infos +val UnionOptimizationInfos: seq -> CcuOptimizationInfo + +/// Check if an expression has an effect +val ExprHasEffect: TcGlobals -> Expr -> bool +#endif + +val internal u_CcuOptimizationInfo : TastPickle.ReaderState -> CcuOptimizationInfo diff --git a/src/fsharp/patcompile.fs b/src/fsharp/PatternMatchCompilation.fs similarity index 98% rename from src/fsharp/patcompile.fs rename to src/fsharp/PatternMatchCompilation.fs index 3b18175425f..94a2444f4f8 100644 --- a/src/fsharp/patcompile.fs +++ b/src/fsharp/PatternMatchCompilation.fs @@ -1,6 +1,6 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Patcompile +module internal Microsoft.FSharp.Compiler.PatternMatchCompilation open System.Collections.Generic open Internal.Utilities @@ -17,8 +17,8 @@ open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Tastops.DebugPrint open Microsoft.FSharp.Compiler.PrettyNaming -open Microsoft.FSharp.Compiler.Typrelns -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TypeRelations +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib exception MatchIncomplete of bool * (string * bool) option * range @@ -112,11 +112,11 @@ let BindSubExprOfInput g amap gtps (PBind(v,tyscheme)) m (SubExpr(accessf,(ve2,v mkTyparTy gtp else someSolved := true - Typrelns.ChooseTyparSolution g amap gtp + TypeRelations.ChooseTyparSolution g amap gtp let solutions = List.map freezeVar gtps if !someSolved then - Typrelns.IterativelySubstituteTyparSolutions g gtps solutions + TypeRelations.IterativelySubstituteTyparSolutions g gtps solutions else solutions @@ -298,7 +298,7 @@ let rec CombineRefutations g r1 r2 = | Const.Decimal(s1), Const.Decimal(s2) -> Const.Decimal(max s1 s2) | _ -> max c1 c2 - (* REVIEW: we couldd return a better enumeration literal field here if a field matches one of the enumeration cases *) + (* REVIEW: we could return a better enumeration literal field here if a field matches one of the enumeration cases *) Expr.Const(c12, m1, ty1) | _ -> r1 @@ -1024,7 +1024,7 @@ let CompilePatternBasic | _ -> Some(InvestigateFrontiers refuted fallthroughPathFrontiers) - // Build a new frontire that represents the result of a successful investigation + // Build a new frontier that represents the result of a successful investigation // at rule point (i',discrim,path) and GenerateNewFrontiersAfterSucccessfulInvestigation resPreBindOpt resPostBindOpt (Investigation(i',discrim,path)) (Frontier (i, active,valMap) as frontier) = if debug then dprintf "projecting success of investigation encompassing rule %d through rule %d \n" i' i; diff --git a/src/fsharp/patcompile.fsi b/src/fsharp/PatternMatchCompilation.fsi similarity index 87% rename from src/fsharp/patcompile.fsi rename to src/fsharp/PatternMatchCompilation.fsi index cb82196756b..ec6073435fb 100644 --- a/src/fsharp/patcompile.fsi +++ b/src/fsharp/PatternMatchCompilation.fsi @@ -1,6 +1,6 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Patcompile +module internal Microsoft.FSharp.Compiler.PatternMatchCompilation open Internal.Utilities open Microsoft.FSharp.Compiler @@ -8,6 +8,7 @@ open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Range @@ -47,8 +48,8 @@ and TypedMatchClause = /// Compile a pattern into a decision tree and a set of targets. val internal CompilePattern : - Env.TcGlobals -> - Tastops.DisplayEnv -> + TcGlobals -> + DisplayEnv -> Import.ImportMap -> // range of the expression we are matching on range -> diff --git a/src/fsharp/check.fs b/src/fsharp/PostInferenceChecks.fs similarity index 86% rename from src/fsharp/check.fs rename to src/fsharp/PostInferenceChecks.fs index 02aece18860..8ab4f90b485 100644 --- a/src/fsharp/check.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -1,26 +1,28 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.PostTypecheckSemanticChecks +/// Implements a set of checks on the TAST for a file that can only be performed after type inference +/// is complete. +module internal Microsoft.FSharp.Compiler.PostTypeCheckSemanticChecks open System.Collections.Generic open Internal.Utilities + +open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library -open Microsoft.FSharp.Compiler - open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.AbstractIL.IL -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.PrettyNaming @@ -31,11 +33,11 @@ open Microsoft.FSharp.Compiler.PrettyNaming //-------------------------------------------------------------------------- let testFlagMemberBody = ref false -let testHookMemberBody membInfo (expr:Expr) = +let testHookMemberBody (membInfo: ValMemberInfo) (expr:Expr) = if !testFlagMemberBody then let m = expr.Range printf "TestMemberBody,%A,%s,%d,%d,%d,%d\n" - (membInfo.MemberFlags.MemberKind) + membInfo.MemberFlags.MemberKind m.FileName m.StartLine m.StartColumn @@ -71,7 +73,7 @@ let testHookMemberBody membInfo (expr:Expr) = // C2: check type declarations to ensure no object field will have byref type. // C3: check no explicit lambda expressions capture any free byref typed expression. // C4: check byref type expr occur only as: -// C4.a) arg to functions occuring within their known arity. +// C4.a) arg to functions occurring within their known arity. // C4.b) arg to IL method calls, e.g. arising from calls to instance methods on mutable structs. // C4.c) arg to property getter on mutable struct (record field projection) // C4.d) rhs of byref typed binding (aliasing). @@ -126,7 +128,8 @@ let testHookMemberBody membInfo (expr:Expr) = //-------------------------------------------------------------------------- type env = - { boundTypars: Typar list; + { boundTyparNames: string list + boundTypars: TyparMap /// "module remap info", i.e. hiding information down the signature chain, used to compute what's hidden by a signature sigToImplRemapInfo: (Remap * SignatureHidingInfo) list; /// Constructor limited - are we in the prelude of a constructor, prior to object initialization @@ -136,12 +139,16 @@ type env = /// Are we under []? reflect : bool } -let BindTypar env tyv = { env with boundTypars= tyv::env.boundTypars } +let BindTypar env (tp:Typar) = + { env with + boundTyparNames = tp.Name :: env.boundTyparNames + boundTypars = env.boundTypars.Add (tp, ()) } -let BindTypars env (tps:Typar list) = +let BindTypars g env (tps:Typar list) = + let tps = NormalizeDeclaredTyparsForEquiRecursiveInference g tps if isNil tps then env else // Here we mutate to provide better names for generalized type parameters - let nms = PrettyTypes.PrettyTyparNames (fun _ -> true) (env.boundTypars |> List.map (fun tp -> tp.Name) ) tps + let nms = PrettyTypes.PrettyTyparNames (fun _ -> true) env.boundTyparNames tps (tps,nms) ||> List.iter2 (fun tp nm -> if PrettyTypes.NeedsPrettyTyparName tp then tp.Data.typar_id <- ident (nm,tp.Range)); @@ -184,10 +191,10 @@ let BindVals cenv vs = List.iter (BindVal cenv) vs // approx walk of type //-------------------------------------------------------------------------- -let rec CheckTypeDeep ((visitTyp,visitTyconRef,visitByrefsOfByrefs,visitTraitSolution) as f) typ = +let rec CheckTypeDeep ((visitTyp,visitTyconRefOpt,visitByrefsOfByrefsOpt,visitTraitSolutionOpt, visitTyparOpt) as f) g env typ = // We iterate the _solved_ constraints as well, to pick up any record of trait constraint solutions // This means we walk _all_ the constraints _everywhere_ in a type, including - // those attached to _solved_ type variables. This is used by PostTypecheckSemanticChecks to detect uses of + // those attached to _solved_ type variables. This is used by PostTypeCheckSemanticChecks to detect uses of // values as solutions to trait constraints and determine if inference has caused the value to escape its scope. // The only record of these solutions is in the _solved_ constraints of types. // In an ideal world we would, instead, record the solutions to these constraints as "witness variables" in expressions, @@ -197,7 +204,9 @@ let rec CheckTypeDeep ((visitTyp,visitTyconRef,visitByrefsOfByrefs,visitTraitSol tp.Constraints |> List.iter (fun cx -> match cx with | TyparConstraint.MayResolveMember((TTrait(_,_,_,_,_,soln)),_) -> - Option.iter visitTraitSolution !soln + match visitTraitSolutionOpt, !soln with + | Some visitTraitSolution, Some sln -> visitTraitSolution sln + | _ -> () | _ -> ()) | _ -> () @@ -206,28 +215,40 @@ let rec CheckTypeDeep ((visitTyp,visitTyconRef,visitByrefsOfByrefs,visitTraitSol match typ with | TType_forall (tps,body) -> - CheckTypeDeep f body; - tps |> List.iter (fun tp -> tp.Constraints |> List.iter (CheckTypeConstraintDeep f)) + let env = BindTypars g env tps + CheckTypeDeep f g env body; + tps |> List.iter (fun tp -> tp.Constraints |> List.iter (CheckTypeConstraintDeep f g env)) | TType_measure _ -> () | TType_app (tcref,tinst) -> - visitTyconRef tcref - CheckTypesDeep f tinst - visitByrefsOfByrefs (tcref, tinst) - - | TType_ucase (_,tinst) -> CheckTypesDeep f tinst - | TType_tuple typs -> CheckTypesDeep f typs - | TType_fun (s,t) -> CheckTypeDeep f s; CheckTypeDeep f t - | TType_var _tp -> () -and CheckTypesDeep f tys = List.iter (CheckTypeDeep f) tys -and CheckTypeConstraintDeep f x = + match visitTyconRefOpt with + | Some visitTyconRef -> visitTyconRef tcref + | None -> () + CheckTypesDeep f g env tinst + match visitByrefsOfByrefsOpt with + | Some visitByrefsOfByrefs -> visitByrefsOfByrefs (tcref, tinst) + | None -> () + + | TType_ucase (_,tinst) -> CheckTypesDeep f g env tinst + | TType_tuple typs -> CheckTypesDeep f g env typs + | TType_fun (s,t) -> CheckTypeDeep f g env s; CheckTypeDeep f g env t + | TType_var tp -> + if not tp.IsSolved then + match visitTyparOpt with + | None -> () + | Some visitTypar -> + visitTypar (env,tp) + +and CheckTypesDeep f g env tys = List.iter (CheckTypeDeep f g env) tys + +and CheckTypeConstraintDeep f g env x = match x with - | TyparConstraint.CoercesTo(ty,_) -> CheckTypeDeep f ty - | TyparConstraint.MayResolveMember(traitInfo,_) -> CheckTraitInfoDeep f traitInfo - | TyparConstraint.DefaultsTo(_,ty,_) -> CheckTypeDeep f ty - | TyparConstraint.SimpleChoice(tys,_) -> CheckTypesDeep f tys - | TyparConstraint.IsEnum(uty,_) -> CheckTypeDeep f uty - | TyparConstraint.IsDelegate(aty,bty,_) -> CheckTypeDeep f aty; CheckTypeDeep f bty + | TyparConstraint.CoercesTo(ty,_) -> CheckTypeDeep f g env ty + | TyparConstraint.MayResolveMember(traitInfo,_) -> CheckTraitInfoDeep f g env traitInfo + | TyparConstraint.DefaultsTo(_,ty,_) -> CheckTypeDeep f g env ty + | TyparConstraint.SimpleChoice(tys,_) -> CheckTypesDeep f g env tys + | TyparConstraint.IsEnum(uty,_) -> CheckTypeDeep f g env uty + | TyparConstraint.IsDelegate(aty,bty,_) -> CheckTypeDeep f g env aty; CheckTypeDeep f g env bty | TyparConstraint.SupportsComparison _ | TyparConstraint.SupportsEquality _ | TyparConstraint.SupportsNull _ @@ -235,18 +256,20 @@ and CheckTypeConstraintDeep f x = | TyparConstraint.IsUnmanaged _ | TyparConstraint.IsReferenceType _ | TyparConstraint.RequiresDefaultConstructor _ -> () -and CheckTraitInfoDeep ((_,_,_,visitTraitSolution) as f) (TTrait(typs,_,_,argtys,rty,soln)) = - CheckTypesDeep f typs; - CheckTypesDeep f argtys; - Option.iter (CheckTypeDeep f) rty; - Option.iter visitTraitSolution !soln +and CheckTraitInfoDeep ((_,_,_,visitTraitSolutionOpt,_) as f) g env (TTrait(typs,_,_,argtys,rty,soln)) = + CheckTypesDeep f g env typs; + CheckTypesDeep f g env argtys; + Option.iter (CheckTypeDeep f g env) rty; + match visitTraitSolutionOpt, !soln with + | Some visitTraitSolution, Some sln -> visitTraitSolution sln + | _ -> () //-------------------------------------------------------------------------- // check for byref types //-------------------------------------------------------------------------- -let CheckForByrefLikeType cenv typ check = - CheckTypeDeep (ignore, (fun tcref -> if isByrefLikeTyconRef cenv.g tcref then check()), ignore, ignore) typ +let CheckForByrefLikeType cenv env typ check = + CheckTypeDeep (ignore, Some (fun tcref -> if isByrefLikeTyconRef cenv.g tcref then check()), None, None, None) cenv.g env typ //-------------------------------------------------------------------------- @@ -307,7 +330,7 @@ let AccessInternalsVisibleToAsInternal thisCompPath internalsVisibleToPaths acce accessSubstPaths (thisCompPath,internalsVisibleToPath) access) -let CheckTypeForAccess (cenv:cenv) objName valAcc m ty = +let CheckTypeForAccess (cenv:cenv) env objName valAcc m ty = if cenv.reportErrors then let visitType ty = @@ -321,15 +344,22 @@ let CheckTypeForAccess (cenv:cenv) objName valAcc m ty = if isLessAccessible tyconAcc valAcc then errorR(Error(FSComp.SR.chkTypeLessAccessibleThanType(tcref.DisplayName, (objName())), m)) - CheckTypeDeep (visitType, ignore, ignore, ignore) ty + CheckTypeDeep (visitType, None, None, None, None) cenv.g env ty //-------------------------------------------------------------------------- // check type instantiations //-------------------------------------------------------------------------- -/// Check types occuring in the TAST. -let CheckType permitByrefs (cenv:cenv) m ty = +/// Check types occurring in the TAST. +let CheckType permitByrefs (cenv:cenv) env m ty = if cenv.reportErrors then + let visitTypar (env,tp) = + if not (env.boundTypars.ContainsKey tp) then + if tp.IsCompilerGenerated then + errorR (Error(FSComp.SR.checkNotSufficientlyGenericBecauseOfScopeAnon(),m)) + else + errorR (Error(FSComp.SR.checkNotSufficientlyGenericBecauseOfScope(tp.DisplayName),m)) + let visitTyconRef tcref = if not permitByrefs && isByrefLikeTyconRef cenv.g tcref then errorR(Error(FSComp.SR.chkErrorUseOfByref(), m)) @@ -345,7 +375,7 @@ let CheckType permitByrefs (cenv:cenv) m ty = | Some tcref -> if isByrefLikeTyconRef cenv.g tcref then errorR(Error(FSComp.SR.chkNoByrefsOfByrefs(NicePrint.minimalStringOfType cenv.denv ty), m)) - CheckTypesDeep (visitType, ignore, ignore, ignore) tinst + CheckTypesDeep (visitType, None, None, None, None) cenv.g env tinst let visitTraitSolution info = match info with @@ -356,19 +386,19 @@ let CheckType permitByrefs (cenv:cenv) m ty = cenv.potentialUnboundUsesOfVals <- cenv.potentialUnboundUsesOfVals.Add(vref.Stamp,m) | _ -> () - ty |> CheckTypeDeep (ignore, visitTyconRef, visitByrefsOfByrefs, visitTraitSolution); + CheckTypeDeep (ignore, Some visitTyconRef, Some visitByrefsOfByrefs, Some visitTraitSolution, Some visitTypar) cenv.g env ty -/// Check types occuring in TAST (like CheckType) and additionally reject any byrefs. +/// Check types occurring in TAST (like CheckType) and additionally reject any byrefs. /// The additional byref checks are to catch "byref instantiations" - one place were byref are not permitted. -let CheckTypeNoByrefs (cenv:cenv) m ty = CheckType false cenv m ty -let CheckTypePermitByrefs (cenv:cenv) m ty = CheckType true cenv m ty +let CheckTypeNoByrefs (cenv:cenv) env m ty = CheckType false cenv env m ty +let CheckTypePermitByrefs (cenv:cenv) env m ty = CheckType true cenv env m ty -let CheckTypeInstNoByrefs (cenv:cenv) m tyargs = - tyargs |> List.iter (CheckTypeNoByrefs cenv m) +let CheckTypeInstNoByrefs cenv env m tyargs = + tyargs |> List.iter (CheckTypeNoByrefs cenv env m) -let CheckTypeInstPermitByrefs (cenv:cenv) m tyargs = - tyargs |> List.iter (CheckType true cenv m) +let CheckTypeInstPermitByrefs cenv env m tyargs = + tyargs |> List.iter (CheckType true cenv env m) //-------------------------------------------------------------------------- @@ -426,7 +456,7 @@ let CheckMultipleInterfaceInstantiations cenv interfaces m = errorR(Error(FSComp.SR.chkMultipleGenericInterfaceInstantiations((NicePrint.minimalStringOfType cenv.denv typ1), (NicePrint.minimalStringOfType cenv.denv typ2)),m)) -let rec CheckExpr (cenv:cenv) (env:env) expr = +let rec CheckExpr (cenv:cenv) (env:env) expr = CheckExprInContext cenv env expr GeneralContext and CheckVal (cenv:cenv) (env:env) v m context = @@ -438,7 +468,7 @@ and CheckVal (cenv:cenv) (env:env) v m context = if isByrefLikeTy cenv.g v.Type then // byref typed val can only occur in permitting contexts if context <> DirectArg then errorR(Error(FSComp.SR.chkNoByrefAtThisPoint(v.DisplayName), m)) - CheckTypePermitByrefs cenv m v.Type + CheckTypePermitByrefs cenv env m v.Type and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = // dprintf "CheckExpr: %s\n" (showL(exprL expr)); @@ -455,7 +485,7 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = BindVal cenv bind.Var CheckExpr cenv env body | Expr.Const (_,m,ty) -> - CheckTypePermitByrefs cenv m ty + CheckTypePermitByrefs cenv env m ty | Expr.Val (v,vFlags,m) -> if cenv.reportErrors then @@ -482,13 +512,13 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = with QuotationTranslator.InvalidQuotedTerm e -> errorRecovery e m - CheckTypeNoByrefs cenv m ty + CheckTypeNoByrefs cenv env m ty | Expr.Obj (_,typ,basev,superInitCall,overrides,iimpls,m) -> CheckExpr cenv env superInitCall; CheckMethods cenv env basev overrides ; CheckInterfaceImpls cenv env basev iimpls; - CheckTypePermitByrefs cenv m typ + CheckTypePermitByrefs cenv env m typ let interfaces = [ if isInterfaceTy cenv.g typ then yield! AllSuperTypesOfType cenv.g cenv.amap m AllowMultiIntfInstantiations.Yes typ @@ -498,7 +528,7 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = CheckMultipleInterfaceInstantiations cenv interfaces m // Allow base calls to F# methods - | Expr.App((InnerExprPat(Expr.Val(v,vFlags,_) as f)),fty,tyargs,(Expr.Val(baseVal,_,_)::rest),m) + | Expr.App((InnerExprPat(ExprValWithPossibleTypeInst(v,vFlags,_,_) as f)),fty,tyargs,(Expr.Val(baseVal,_,_)::rest),m) when ((match vFlags with VSlotDirectCall -> true | _ -> false) && baseVal.BaseOrThisInfo = BaseVal) -> // dprintfn "GOT BASE VAL USE" @@ -508,8 +538,8 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = else CheckVal cenv env v m GeneralContext CheckVal cenv env baseVal m GeneralContext - CheckTypePermitByrefs cenv m fty; - CheckTypeInstPermitByrefs cenv m tyargs; + CheckTypePermitByrefs cenv env m fty; + CheckTypeInstPermitByrefs cenv env m tyargs; CheckExprsInContext cenv env rest (argAritiesOfFunExpr f) // Allow base calls to IL methods @@ -529,10 +559,10 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = errorR(Error(FSComp.SR.tcCannotCallAbstractBaseMember(mdef.Name),m)); with _ -> () // defensive coding | _ -> () - CheckTypeInstNoByrefs cenv m tyargs; - CheckTypeInstNoByrefs cenv m enclTypeArgs; - CheckTypeInstNoByrefs cenv m methTypeArgs; - CheckTypeInstNoByrefs cenv m tys; + CheckTypeInstNoByrefs cenv env m tyargs; + CheckTypeInstNoByrefs cenv env m enclTypeArgs; + CheckTypeInstNoByrefs cenv env m methTypeArgs; + CheckTypeInstNoByrefs cenv env m tys; CheckVal cenv env baseVal m GeneralContext CheckExprDirectArgs cenv env rest @@ -548,15 +578,46 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = // Allow '%expr' in quotations | Expr.App(Expr.Val(vref,_,_),_,tinst,[arg],m) when is_splice cenv.g vref && env.quote -> - CheckTypeInstPermitByrefs cenv m tinst; + CheckTypeInstPermitByrefs cenv env m tinst; CheckExpr cenv env arg | Expr.App(f,fty,tyargs,argsl,m) -> - // dprintfn "NO BASE VAL USE" - CheckTypeInstNoByrefs cenv m tyargs; - CheckTypePermitByrefs cenv m fty; - CheckTypeInstPermitByrefs cenv m tyargs; + let (|OptionalCoerce|) = function + | Expr.Op(TOp.Coerce _, _, [Expr.App(f, _, _, [], _)], _) -> f + | x -> x + if cenv.reportErrors then + let g = cenv.g + match f with + | OptionalCoerce(Expr.Val(v, _, funcRange)) + when (valRefEq g v g.raise_vref || valRefEq g v g.failwith_vref || valRefEq g v g.null_arg_vref || valRefEq g v g.invalid_op_vref) -> + match argsl with + | [] | [_] -> () + | _ :: _ :: _ -> + warning(Error(FSComp.SR.checkRaiseFamilyFunctionArgumentCount(v.DisplayName, 1, List.length argsl), funcRange)) + | OptionalCoerce(Expr.Val(v, _, funcRange)) when valRefEq g v g.invalid_arg_vref -> + match argsl with + | [] | [_] | [_; _] -> () + | _ :: _ :: _ :: _ -> + warning(Error(FSComp.SR.checkRaiseFamilyFunctionArgumentCount(v.DisplayName, 2, List.length argsl), funcRange)) + | OptionalCoerce(Expr.Val(failwithfFunc, _, funcRange)) when valRefEq g failwithfFunc g.failwithf_vref -> + match argsl with + | Expr.App (Expr.Val(newFormat, _, _), _, [_; typB; typC; _; _], [Expr.Const(Const.String formatString, formatRange, _)], _) :: xs when valRefEq g newFormat g.new_format_vref -> + match CheckFormatStrings.TryCountFormatStringArguments formatRange g formatString typB typC with + | Some n -> + let expected = n + 1 + let actual = List.length xs + 1 + if expected < actual then + warning(Error(FSComp.SR.checkRaiseFamilyFunctionArgumentCount(failwithfFunc.DisplayName, expected, actual), funcRange)) + | None -> () + | _ -> + () + | _ -> + () + + CheckTypeInstNoByrefs cenv env m tyargs; + CheckTypePermitByrefs cenv env m fty; + CheckTypeInstPermitByrefs cenv env m tyargs; CheckExpr cenv env f; CheckExprsInContext cenv env argsl (argAritiesOfFunExpr f) @@ -571,11 +632,12 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = let ty = tryMkForallTy tps rty in CheckLambdas None cenv env false topValInfo false expr m ty - | Expr.TyChoose(_,e1,_) -> + | Expr.TyChoose(tps,e1,_) -> + let env = BindTypars cenv.g env tps CheckExpr cenv env e1 | Expr.Match(_,_,dtree,targets,m,ty) -> - CheckTypeNoByrefs cenv m ty; + CheckTypeNoByrefs cenv env m ty; CheckDecisionTree cenv env dtree; CheckDecisionTreeTargets cenv env targets; | Expr.LetRec (binds,e,_,_) -> @@ -587,10 +649,10 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = CheckExpr cenv env e3; constraints |> List.iter (function | TTyconEqualsTycon(ty1,ty2) -> - CheckTypeNoByrefs cenv m ty1; - CheckTypeNoByrefs cenv m ty2 + CheckTypeNoByrefs cenv env m ty1; + CheckTypeNoByrefs cenv env m ty2 | TTyconIsStruct(ty1) -> - CheckTypeNoByrefs cenv m ty1) + CheckTypeNoByrefs cenv env m ty1) | Expr.Link _ -> failwith "Unexpected reclink" @@ -598,7 +660,7 @@ and CheckMethods cenv env baseValOpt l = l |> List.iter (CheckMethod cenv env baseValOpt) and CheckMethod cenv env baseValOpt (TObjExprMethod(_,attribs,tps,vs,e,m)) = - let env = BindTypars env tps + let env = BindTypars cenv.g env tps let vs = List.concat vs CheckAttribs cenv env attribs; CheckNoReraise cenv None e; @@ -615,33 +677,33 @@ and CheckInterfaceImpl cenv env baseValOpt (_ty,overrides) = and CheckExprOp cenv env (op,tyargs,args,m) context = let limitedCheck() = if env.limited then errorR(Error(FSComp.SR.chkObjCtorsCantUseExceptionHandling(), m)); - List.iter (CheckTypePermitByrefs cenv m) tyargs; + List.iter (CheckTypePermitByrefs cenv env m) tyargs; (* Special cases *) match op,tyargs,args,context with // Handle these as special cases since mutables are allowed inside their bodies | TOp.While _,_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_)],_ -> - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstNoByrefs cenv env m tyargs; CheckExprs cenv env [e1;e2] | TOp.TryFinally _,[_],[Expr.Lambda(_,_,_,[_],e1,_,_); Expr.Lambda(_,_,_,[_],e2,_,_)],_ -> - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstNoByrefs cenv env m tyargs; limitedCheck(); CheckExprs cenv env [e1;e2] | TOp.For(_),_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_);Expr.Lambda(_,_,_,[_],e3,_,_)],_ -> - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstNoByrefs cenv env m tyargs; CheckExprs cenv env [e1;e2;e3] | TOp.TryCatch _,[_],[Expr.Lambda(_,_,_,[_],e1,_,_); Expr.Lambda(_,_,_,[_],_e2,_,_); Expr.Lambda(_,_,_,[_],e3,_,_)],_ -> - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstNoByrefs cenv env m tyargs; limitedCheck(); CheckExprs cenv env [e1;(* e2; -- don't check filter body - duplicates logic in 'catch' body *) e3] | TOp.ILCall (_,_,_,_,_,_,_,_,enclTypeArgs,methTypeArgs,tys),_,_,_ -> - CheckTypeInstNoByrefs cenv m tyargs; - CheckTypeInstNoByrefs cenv m enclTypeArgs; - CheckTypeInstNoByrefs cenv m methTypeArgs; - CheckTypeInstNoByrefs cenv m tys; + CheckTypeInstNoByrefs cenv env m tyargs; + CheckTypeInstNoByrefs cenv env m enclTypeArgs; + CheckTypeInstNoByrefs cenv env m methTypeArgs; + CheckTypeInstNoByrefs cenv env m tys; CheckExprDirectArgs cenv env args // Tuple expression in known tuple context @@ -660,32 +722,32 @@ and CheckExprOp cenv env (op,tyargs,args,m) context = if cenv.reportErrors then errorR(Error(FSComp.SR.chkNoAddressOfAtThisPoint(v.DisplayName), m)) | TOp.ValFieldGet _rf,_,[arg1],_arity -> - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstNoByrefs cenv env m tyargs; CheckExprDirectArgs cenv env [arg1] (* See mkRecdFieldGetViaExprAddr -- byref arg1 when #args =1 *) (* Property getters on mutable structs come through here. *) | TOp.ValFieldSet _rf,_,[arg1;arg2],_arity -> - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstNoByrefs cenv env m tyargs; CheckExprDirectArgs cenv env [arg1]; (* See mkRecdFieldSetViaExprAddr -- byref arg1 when #args=2 *) CheckExprs cenv env [arg2] (* Property setters on mutable structs come through here (TBC). *) | TOp.Coerce,[_ty1;_ty2],[x],_arity -> - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstNoByrefs cenv env m tyargs; CheckExprInContext cenv env x context | TOp.Reraise,[_ty1],[],_arity -> - CheckTypeInstNoByrefs cenv m tyargs + CheckTypeInstNoByrefs cenv env m tyargs | TOp.ValFieldGetAddr rfref,tyargs,[],_ -> if context <> DirectArg && cenv.reportErrors then errorR(Error(FSComp.SR.chkNoAddressStaticFieldAtThisPoint(rfref.FieldName), m)); - CheckTypeInstNoByrefs cenv m tyargs + CheckTypeInstNoByrefs cenv env m tyargs (* NOTE: there are no arg exprs to check in this case *) | TOp.ValFieldGetAddr rfref,tyargs,[rx],_ -> if context <> DirectArg && cenv.reportErrors then errorR(Error(FSComp.SR.chkNoAddressFieldAtThisPoint(rfref.FieldName), m)); (* This construct is used for &(rx.rfield) and &(rx->rfield). Relax to permit byref types for rx. [See Bug 1263]. *) - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstNoByrefs cenv env m tyargs; CheckExprInContext cenv env rx DirectArg (* allow rx to be byref here *) | TOp.ILAsm (instrs,tys),_,_,_ -> - CheckTypeInstPermitByrefs cenv m tys; - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstPermitByrefs cenv env m tys; + CheckTypeInstNoByrefs cenv env m tyargs; begin match instrs,args with | [ I_stfld (_alignment,_vol,_fspec) ],[lhs;rhs] -> @@ -709,7 +771,7 @@ and CheckExprOp cenv env (op,tyargs,args,m) context = end | TOp.TraitCall _,_,_,_ -> - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstNoByrefs cenv env m tyargs; CheckExprDirectArgs cenv env args (* allow args to be byref here *) | ( TOp.Tuple @@ -730,22 +792,22 @@ and CheckExprOp cenv env (op,tyargs,args,m) context = | TOp.RefAddrGet | _ (* catch all! *) ),_,_,_ -> - CheckTypeInstNoByrefs cenv m tyargs; + CheckTypeInstNoByrefs cenv env m tyargs; CheckExprs cenv env args -and CheckLambdas memInfo cenv env inlined topValInfo alwaysCheckNoReraise e m ety = +and CheckLambdas (memInfo: ValMemberInfo option) cenv env inlined topValInfo alwaysCheckNoReraise e m ety = // The topValInfo here says we are _guaranteeing_ to compile a function value // as a .NET method with precisely the corresponding argument counts. match e with | Expr.TyChoose(tps,e1,m) -> - let env = BindTypars env tps + let env = BindTypars cenv.g env tps CheckLambdas memInfo cenv env inlined topValInfo alwaysCheckNoReraise e1 m ety | Expr.Lambda (_,_,_,_,_,m,_) | Expr.TyLambda(_,_,_,m,_) -> let tps,ctorThisValOpt,baseValOpt,vsl,body,bodyty = destTopLambda cenv.g cenv.amap topValInfo (e, ety) in - let env = BindTypars env tps + let env = BindTypars cenv.g env tps let thisAndBase = Option.toList ctorThisValOpt @ Option.toList baseValOpt let restArgs = List.concat vsl let syntacticArgs = thisAndBase @ restArgs @@ -776,7 +838,7 @@ and CheckLambdas memInfo cenv env inlined topValInfo alwaysCheckNoReraise e m et CheckExpr cenv env body; if cenv.reportErrors then if not inlined then - CheckForByrefLikeType cenv bodyty (fun () -> + CheckForByrefLikeType cenv env bodyty (fun () -> if vsl.Length = 0 then errorR(Error(FSComp.SR.chkFirstClassFuncNoByref(), m)) else @@ -786,7 +848,7 @@ and CheckLambdas memInfo cenv env inlined topValInfo alwaysCheckNoReraise e m et errorR(Error(FSComp.SR.chkTyparMultipleClassConstraints(), m)) | _ -> - CheckTypePermitByrefs cenv m ety; + CheckTypePermitByrefs cenv env m ety; if not inlined && isByrefLikeTy cenv.g ety then CheckExprInContext cenv env e DirectArg (* allow byref to occur as RHS of byref binding. *) else @@ -829,11 +891,11 @@ and CheckDecisionTreeSwitch cenv env (e,cases,dflt,m) = and CheckDecisionTreeTest cenv env m discrim = match discrim with - | Test.UnionCase (_,tinst) -> CheckTypeInstPermitByrefs cenv m tinst - | Test.ArrayLength (_,typ) -> CheckTypePermitByrefs cenv m typ + | Test.UnionCase (_,tinst) -> CheckTypeInstPermitByrefs cenv env m tinst + | Test.ArrayLength (_,typ) -> CheckTypePermitByrefs cenv env m typ | Test.Const _ -> () | Test.IsNull -> () - | Test.IsInst (srcTyp,dstTyp) -> (CheckTypePermitByrefs cenv m srcTyp; CheckTypePermitByrefs cenv m dstTyp) + | Test.IsInst (srcTyp,dstTyp) -> (CheckTypePermitByrefs cenv env m srcTyp; CheckTypePermitByrefs cenv env m dstTyp) | Test.ActivePatternCase (exp,_,_,_,_) -> CheckExpr cenv env exp and CheckAttrib cenv env (Attrib(_,_,args,props,_,_,_)) = @@ -918,7 +980,7 @@ and CheckArgInfo cenv env (argInfo : ArgReprInfo) = and CheckValSpec cenv env (v:Val) = v.Attribs |> CheckAttribs cenv env; v.ValReprInfo |> Option.iter (CheckValInfo cenv env); - v.Type |> CheckTypePermitByrefs cenv v.Range + v.Type |> CheckTypePermitByrefs cenv env v.Range and AdjustAccess isHidden (cpath: unit -> CompilationPath) access = if isHidden then @@ -943,12 +1005,12 @@ and CheckBinding cenv env alwaysCheckNoReraise (TBind(v,e,_) as bind) = let nm = v.DisplayName errorR(Error(FSComp.SR.chkMemberUsedInInvalidWay(nm, nm, stringOfRange m), v.Range)) - v.Type |> CheckTypePermitByrefs cenv v.Range; + v.Type |> CheckTypePermitByrefs cenv env v.Range; v.Attribs |> CheckAttribs cenv env; v.ValReprInfo |> Option.iter (CheckValInfo cenv env); if (v.IsMemberOrModuleBinding || v.IsMember) && not v.IsIncrClassGeneratedMember then let access = AdjustAccess (IsHiddenVal env.sigToImplRemapInfo v) (fun () -> v.TopValActualParent.CompilationPath) v.Accessibility - v.Type |> CheckTypeForAccess cenv (fun () -> NicePrint.stringOfQualifiedValOrMember cenv.denv v) access v.Range; + CheckTypeForAccess cenv env (fun () -> NicePrint.stringOfQualifiedValOrMember cenv.denv v) access v.Range v.Type let env = if v.IsConstructor && not v.IsIncrClassConstructor then { env with limited=true } else env @@ -959,7 +1021,7 @@ and CheckBinding cenv env alwaysCheckNoReraise (TBind(v,e,_) as bind) = // Check top-level let-bound values (arity=0 so not compiled not method) for byref types (not allowed) match bind.Var.ValReprInfo with | Some info when info.HasNoArgs -> - CheckForByrefLikeType cenv v.Type (fun () -> errorR(Error(FSComp.SR.chkNoByrefAsTopValue(),v.Range))) + CheckForByrefLikeType cenv env v.Type (fun () -> errorR(Error(FSComp.SR.chkNoByrefAsTopValue(),v.Range))) | _ -> () if isSome v.PublicPath then @@ -986,7 +1048,7 @@ and CheckBinding cenv env alwaysCheckNoReraise (TBind(v,e,_) as bind) = | None -> v.Data.val_defn <- Some e | Some _ -> () // Run the conversion process over the reflected definition to report any errors in the - // front end rather than the back end. We currenly re-run this during ilxgen.fs but there's + // front end rather than the back end. We currently re-run this during ilxgen.fs but there's // no real need for that except that it helps us to bundle all reflected definitions up into // one blob for pickling to the binary format try @@ -1163,14 +1225,14 @@ let CheckRecdField isUnion cenv env (tycon:Tycon) (rfield:RecdField) = let isHidden = IsHiddenTycon env.sigToImplRemapInfo tycon || IsHiddenTyconRepr env.sigToImplRemapInfo tycon || - (not isUnion && IsHiddenRecdField env.sigToImplRemapInfo (mkNestedRecdFieldRef (mkLocalTyconRef tycon) rfield)) + (not isUnion && IsHiddenRecdField env.sigToImplRemapInfo ((mkLocalTyconRef tycon).MakeNestedRecdFieldRef rfield)) let access = AdjustAccess isHidden (fun () -> tycon.CompilationPath) rfield.Accessibility - CheckTypeForAccess cenv (fun () -> rfield.Name) access rfield.Range rfield.FormalType; - CheckTypePermitByrefs cenv rfield.Range rfield.FormalType; + CheckTypeForAccess cenv env (fun () -> rfield.Name) access rfield.Range rfield.FormalType; + CheckTypePermitByrefs cenv env rfield.Range rfield.FormalType; CheckAttribs cenv env rfield.PropertyAttribs; CheckAttribs cenv env rfield.FieldAttribs; if cenv.reportErrors then - CheckForByrefLikeType cenv rfield.FormalType (fun () -> errorR(Error(FSComp.SR.chkCantStoreByrefValue(), tycon.Range))) + CheckForByrefLikeType cenv env rfield.FormalType (fun () -> errorR(Error(FSComp.SR.chkCantStoreByrefValue(), tycon.Range))) let CheckEntityDefn cenv env (tycon:Entity) = #if EXTENSIONTYPING @@ -1178,6 +1240,7 @@ let CheckEntityDefn cenv env (tycon:Entity) = #endif let env = { env with reflect = env.reflect || HasFSharpAttribute cenv.g cenv.g.attrib_ReflectedDefinitionAttribute tycon.Attribs } let m = tycon.Range + let env = BindTypars cenv.g env (tycon.Typars(m)) CheckAttribs cenv env tycon.Attribs; if cenv.reportErrors then begin @@ -1221,7 +1284,7 @@ let CheckEntityDefn cenv env (tycon:Entity) = //we have added all methods to the dictionary on the previous step let methods = hashOfImmediateMeths.[minfo.LogicalName] for m in methods do - // use referencial identity to filter out 'minfo' method + // use referential identity to filter out 'minfo' method if not(System.Object.ReferenceEquals(m, minfo)) then yield m ] @@ -1344,9 +1407,9 @@ let CheckEntityDefn cenv env (tycon:Entity) = // Considers TFsObjModelRepr, TRecdRepr and TFiniteUnionRepr. // [Review] are all cases covered: TILObjModelRepr,TAsmRepr. [Yes - these are FSharp.Core.dll only] tycon.AllFieldsArray |> Array.iter (CheckRecdField false cenv env tycon); - abstractSlotValsOfTycons [tycon] |> List.iter (typeOfVal >> CheckTypePermitByrefs cenv m); (* check vslots = abstract slots *) - tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.iter (CheckTypePermitByrefs cenv m); (* check implemented interface types *) - superOfTycon cenv.g tycon |> CheckTypePermitByrefs cenv m; (* check super type *) + abstractSlotValsOfTycons [tycon] |> List.iter (typeOfVal >> CheckTypePermitByrefs cenv env m); (* check vslots = abstract slots *) + tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.iter (CheckTypePermitByrefs cenv env m); (* check implemented interface types *) + superOfTycon cenv.g tycon |> CheckTypePermitByrefs cenv env m; (* check super type *) if tycon.IsUnionTycon then (* This covers finite unions. *) tycon.UnionCasesAsList |> List.iter (fun uc -> @@ -1354,7 +1417,7 @@ let CheckEntityDefn cenv env (tycon:Entity) = uc.RecdFields |> List.iter (CheckRecdField true cenv env tycon)) let access = AdjustAccess (IsHiddenTycon env.sigToImplRemapInfo tycon) (fun () -> tycon.CompilationPath) tycon.Accessibility - let visitType ty = CheckTypeForAccess cenv (fun () -> tycon.DisplayNameWithStaticParametersAndUnderscoreTypars) access tycon.Range ty + let visitType ty = CheckTypeForAccess cenv env (fun () -> tycon.DisplayNameWithStaticParametersAndUnderscoreTypars) access tycon.Range ty abstractSlotValsOfTycons [tycon] |> List.iter (typeOfVal >> visitType); (* check vslots = abstract slots *) superOfTycon cenv.g tycon |> visitType // We do not have to check access of interface implementations. See FSharp 1.0 5042 @@ -1376,7 +1439,7 @@ let CheckEntityDefn cenv env (tycon:Entity) = AllSuperTypesOfType cenv.g cenv.amap tycon.Range AllowMultiIntfInstantiations.Yes (generalizedTyconRef (mkLocalTyconRef tycon)) |> List.filter (isInterfaceTy cenv.g) - if tycon.IsFSharpInterfaceTycon then List.iter visitType interfaces // Check inheritted interface is as accessible + if tycon.IsFSharpInterfaceTycon then List.iter visitType interfaces // Check inherited interface is as accessible if cenv.reportErrors then if not tycon.IsTypeAbbrev then @@ -1401,7 +1464,7 @@ let CheckEntityDefn cenv env (tycon:Entity) = match tycon.TypeAbbrev with (* And type abbreviations *) | None -> () | Some typ -> - CheckForByrefLikeType cenv typ (fun () -> errorR(Error(FSComp.SR.chkNoByrefInTypeAbbrev(), tycon.Range))) + CheckForByrefLikeType cenv env typ (fun () -> errorR(Error(FSComp.SR.chkNoByrefInTypeAbbrev(), tycon.Range))) let CheckEntityDefns cenv env tycons = tycons |> List.iter (CheckEntityDefn cenv env) @@ -1478,7 +1541,8 @@ let CheckTopImpl (g,amap,reportErrors,infoReader,internalsVisibleToPaths,viewCcu { sigToImplRemapInfo=[] quote=false limited=false - boundTypars=[] + boundTyparNames=[] + boundTypars= TyparMap.Empty reflect=false } CheckModuleExpr cenv env mexpr; diff --git a/src/fsharp/PostInferenceChecks.fsi b/src/fsharp/PostInferenceChecks.fsi new file mode 100644 index 00000000000..834cd92b6ac --- /dev/null +++ b/src/fsharp/PostInferenceChecks.fsi @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +/// Implements a set of checks on the TAST for a file that can only be performed after type inference +/// is complete. +module internal Microsoft.FSharp.Compiler.PostTypeCheckSemanticChecks + +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.TcGlobals + +val testFlagMemberBody : bool ref +val CheckTopImpl : TcGlobals * Import.ImportMap * bool * Infos.InfoReader * Tast.CompilationPath list * Tast.CcuThunk * Tastops.DisplayEnv * Tast.ModuleOrNamespaceExprWithSig * Tast.Attribs * bool -> bool diff --git a/src/fsharp/PrettyNaming.fs b/src/fsharp/PrettyNaming.fs old mode 100644 new mode 100755 index 84e3848095c..1dd68081f03 --- a/src/fsharp/PrettyNaming.fs +++ b/src/fsharp/PrettyNaming.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. //---------------------------------------------------------------------------- // Some general F# utilities for mangling / unmangling / manipulating names. @@ -11,23 +11,24 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library - -/// Anything to do with special names of identifiers and other lexical rules - open System.Globalization open System.Collections.Generic + open System.Collections.Concurrent //------------------------------------------------------------------------ // Operator name compilation //----------------------------------------------------------------------- - let parenGet = ".()" - let parenSet = ".()<-" - let qmark = "?" - let qmarkSet = "?<-" + let [] parenGet = ".()" + let [] parenSet = ".()<-" + let [] qmark = "?" + let [] qmarkSet = "?<-" + + /// Prefix for compiled (mangled) operator names. + let [] opNamePrefix = "op_" let private opNameTable = - [ ("[]", "op_Nil"); + [|("[]", "op_Nil"); ("::", "op_ColonColon"); ("+", "op_Addition"); ("~%", "op_Splice"); @@ -78,14 +79,14 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming ("/=", "op_DivisionAssignment"); ("..", "op_Range"); (".. ..", "op_RangeStep"); - ("?", "op_Dynamic"); - ("?<-", "op_DynamicAssignment"); + (qmark, "op_Dynamic"); + (qmarkSet, "op_DynamicAssignment"); (parenGet, "op_ArrayLookup"); (parenSet, "op_ArrayAssign"); - ] + |] let private opCharTranslateTable = - [ ( '>', "Greater"); + [|( '>', "Greater"); ( '<', "Less"); ( '+', "Plus"); ( '-', "Minus"); @@ -109,66 +110,184 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming ( ')', "RParen"); ( ' ', "Space"); ( '[', "LBrack"); - ( ']', "RBrack"); ] + ( ']', "RBrack"); |] - let private opCharDict = - let t = new Dictionary<_,_>() - for (c,_) in opCharTranslateTable do - t.Add(c,1) + /// The set of characters usable in custom operators. + let private opCharSet = + let t = new HashSet<_>() + for (c,_) in opCharTranslateTable do + t.Add(c) |> ignore t - let IsOpName (n:string) = - let rec loop i = (i < n.Length && (opCharDict.ContainsKey(n.[i]) || loop (i+1))) + let IsOpName (name:string) = + let nameLen = name.Length + let rec loop i = (i < nameLen && (opCharSet.Contains(name.[i]) || loop (i+1))) loop 0 + let IsMangledOpName (n:string) = + n.StartsWith (opNamePrefix, System.StringComparison.Ordinal) + + // +++ GLOBAL STATE + /// Compiles a custom operator into a mangled operator name. + /// For example, "!%" becomes "op_DereferencePercent". + /// This function should only be used for custom operators; + /// if an operator is or potentially may be a built-in operator, + /// use the 'CompileOpName' function instead. + let private compileCustomOpName = + let t2 = + let t2 = Dictionary<_,_> (opCharTranslateTable.Length) + for x, y in opCharTranslateTable do + t2.Add (x, y) + t2 + /// The maximum length of the name for a custom operator character. + /// This value is used when initializing StringBuilders to avoid resizing. + let maxOperatorNameLength = + opCharTranslateTable + |> Array.maxBy (snd >> String.length) + |> snd + |> String.length + + /// Memoize compilation of custom operators. + /// They're typically used more than once so this avoids some CPU and GC overhead. + let compiledOperators = ConcurrentDictionary<_,_> (System.StringComparer.Ordinal) + + fun op -> + // Has this operator already been compiled? + match compiledOperators.TryGetValue op with + | true, opName -> opName + | false, _ -> + let opLength = op.Length + let sb = new System.Text.StringBuilder (opNamePrefix, opNamePrefix.Length + (opLength * maxOperatorNameLength)) + for i = 0 to opLength - 1 do + let c = op.[i] + match t2.TryGetValue c with + | true, x -> + sb.Append(x) |> ignore + | false, _ -> + sb.Append(c) |> ignore + + /// The compiled (mangled) operator name. + let opName = sb.ToString () + + // Cache the compiled name so it can be reused. + compiledOperators.TryAdd (op, opName) |> ignore + opName + + // +++ GLOBAL STATE + /// Compiles an operator into a mangled operator name. + /// For example, "!%" becomes "op_DereferencePercent". + /// This function accepts both built-in and custom operators. let CompileOpName = - let t = Map.ofList opNameTable - let t2 = Map.ofList opCharTranslateTable - fun n -> - match t.TryFind(n) with - | Some(x) -> x - | None -> - if IsOpName n then - let mutable r = [] - for i = 0 to String.length n - 1 do - let c = n.[i] - let c2 = match t2.TryFind(c) with Some(x) -> x | None -> string c - r <- c2 :: r - "op_"^(String.concat "" (List.rev r)) - else n - - let IsMangledOpName (n:string) = n.Length >= 3 && n.Substring(0,3) = "op_" - - let DecompileOpName = - let t = new Dictionary() - for (x,y) in opNameTable do - t.Add(y,x) - fun n -> - let mutable res = Unchecked.defaultof<_> - if t.TryGetValue(n,&res) then - res - else - if n.StartsWith("op_",System.StringComparison.Ordinal) then - let rec loop (remaining:string) = - let l = remaining.Length - if l = 0 then Some(remaining) else - let choice = - opCharTranslateTable |> List.tryPick (fun (a,b) -> - let bl = b.Length - if bl <= l && remaining.Substring(0,bl) = b then - Some(string a, remaining.Substring(bl,l - bl)) - else None) - - match choice with - | Some (a,remaining2) -> - match loop remaining2 with - | None -> None - | Some a2 -> Some(a^a2) - | None -> None (* giveup *) - match loop (n.Substring(3,n.Length - 3)) with - | Some res -> res - | None -> n - else n + /// Maps the built-in F# operators to their mangled operator names. + let standardOpNames = + let opNames = Dictionary<_,_> (opNameTable.Length, System.StringComparer.Ordinal) + for x, y in opNameTable do + opNames.Add (x, y) + opNames + + fun op -> + match standardOpNames.TryGetValue op with + | true, x -> x + | false, _ -> + if IsOpName op then + compileCustomOpName op + else op + + // +++ GLOBAL STATE + /// Decompiles the mangled name of a custom operator back into an operator. + /// For example, "op_DereferencePercent" becomes "!%". + /// This function should only be used for mangled names of custom operators; + /// if a mangled name potentially represents a built-in operator, + /// use the 'DecompileOpName' function instead. + let private decompileCustomOpName = + // Memoize this operation. Custom operators are typically used more than once + // so this avoids repeating decompilation. + let decompiledOperators = ConcurrentDictionary<_,_> (System.StringComparer.Ordinal) + + /// The minimum length of the name for a custom operator character. + /// This value is used when initializing StringBuilders to avoid resizing. + let minOperatorNameLength = + opCharTranslateTable + |> Array.minBy (snd >> String.length) + |> snd + |> String.length + + fun opName -> + // Has this operator name already been decompiled? + match decompiledOperators.TryGetValue opName with + | true, op -> op + | false, _ -> + let opNameLen = opName.Length + + /// Function which decompiles the mangled operator name back into a string of operator characters. + /// Returns None if the name contains text which doesn't correspond to an operator; + /// otherwise returns Some containing the original operator. + let rec decompile (sb : System.Text.StringBuilder) idx = + // Have we reached the end of 'opName'? + if idx = opNameLen then + // Finished decompiling. + // Cache the decompiled operator before returning so it can be reused. + let decompiledOp = sb.ToString () + decompiledOperators.TryAdd (opName, decompiledOp) |> ignore + decompiledOp + else + let choice = + opCharTranslateTable + |> Array.tryFind (fun (_, opCharName) -> + // If this operator character name is longer than the remaining piece of 'opName', + // it's obviously not a match. + let opCharNameLen = opCharName.Length + if opNameLen - idx < opCharNameLen then false + else + // Does 'opCharName' match the current position in 'opName'? + System.String.Compare (opName, idx, opCharName, 0, opCharNameLen, System.StringComparison.Ordinal) = 0) + + match choice with + | None -> + // Couldn't decompile, so just return the original 'opName'. + opName + | Some (opChar, opCharName) -> + // 'opCharName' matched the current position in 'opName'. + // Append the corresponding operator character to the StringBuilder + // and continue decompiling at the index following this instance of 'opCharName'. + sb.Append opChar |> ignore + decompile sb (idx + opCharName.Length) + + let opNamePrefixLen = opNamePrefix.Length + let sb = + /// The maximum number of operator characters that could be contained in the + /// decompiled operator given the length of the mangled custom operator name. + let maxPossibleOpCharCount = (opNameLen - opNamePrefixLen) / minOperatorNameLength + System.Text.StringBuilder (maxPossibleOpCharCount) + + // Start decompiling just after the operator prefix. + decompile sb opNamePrefixLen + + // +++ GLOBAL STATE + /// Decompiles a mangled operator name back into an operator. + /// For example, "op_DereferencePercent" becomes "!%". + /// This function accepts mangled names for both built-in and custom operators. + let DecompileOpName = + /// Maps the mangled operator names of built-in F# operators back to the operators. + let standardOps = + let ops = Dictionary (opNameTable.Length, System.StringComparer.Ordinal) + for x, y in opNameTable do + ops.Add(y,x) + ops + + fun opName -> + match standardOps.TryGetValue opName with + | true, res -> res + | false, _ -> + if IsMangledOpName opName then + decompileCustomOpName opName + else + opName + + let DemangleOperatorName nm = + let nm = DecompileOpName nm + if IsOpName nm then "( " + nm + " )" + else nm let opNameCons = CompileOpName "::" let opNameNil = CompileOpName "[]" @@ -177,59 +296,95 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming let opNameNullableEquals = CompileOpName "?=" let opNameNullableEqualsNullable = CompileOpName "?=?" - /// The characters that are allowed to be the first character of an identifier. let IsIdentifierFirstCharacter c = - let cat = System.Char.GetUnicodeCategory(c) - c='_' || - ( cat = UnicodeCategory.UppercaseLetter // Letters - || cat = UnicodeCategory.LowercaseLetter - || cat = UnicodeCategory.TitlecaseLetter - || cat = UnicodeCategory.ModifierLetter - || cat = UnicodeCategory.OtherLetter - || cat = UnicodeCategory.LetterNumber - ) + if c = '_' then true + else + match System.Char.GetUnicodeCategory c with + // Letters + | UnicodeCategory.UppercaseLetter + | UnicodeCategory.LowercaseLetter + | UnicodeCategory.TitlecaseLetter + | UnicodeCategory.ModifierLetter + | UnicodeCategory.OtherLetter + | UnicodeCategory.LetterNumber -> true + | _ -> false /// The characters that are allowed to be in an identifier. let IsIdentifierPartCharacter c = - let cat = System.Char.GetUnicodeCategory(c) - ( cat = UnicodeCategory.UppercaseLetter // Letters - || cat = UnicodeCategory.LowercaseLetter - || cat = UnicodeCategory.TitlecaseLetter - || cat = UnicodeCategory.ModifierLetter - || cat = UnicodeCategory.OtherLetter - || cat = UnicodeCategory.LetterNumber - || cat = UnicodeCategory.DecimalDigitNumber // Numbers - || cat = UnicodeCategory.ConnectorPunctuation // Connectors - || cat = UnicodeCategory.NonSpacingMark // Combiners - || cat = UnicodeCategory.SpacingCombiningMark - || c = '\'' // Tick - ) - - /// Is this character a part of a long identifier - let IsLongIdentifierPartCharacter c = - (IsIdentifierPartCharacter c) || (c = '.') - - let IsValidPrefixOperatorUse s = + if c = '\'' then true // Tick + else + match System.Char.GetUnicodeCategory c with + // Letters + | UnicodeCategory.UppercaseLetter + | UnicodeCategory.LowercaseLetter + | UnicodeCategory.TitlecaseLetter + | UnicodeCategory.ModifierLetter + | UnicodeCategory.OtherLetter + | UnicodeCategory.LetterNumber + // Numbers + | UnicodeCategory.DecimalDigitNumber + // Connectors + | UnicodeCategory.ConnectorPunctuation + // Combiners + | UnicodeCategory.NonSpacingMark + | UnicodeCategory.SpacingCombiningMark -> true + | _ -> false + + /// Is this character a part of a long identifier? + let IsLongIdentifierPartCharacter c = + c = '.' + || IsIdentifierPartCharacter c + + let IsValidPrefixOperatorUse s = + if System.String.IsNullOrEmpty s then false else match s with | "?+" | "?-" | "+" | "-" | "+." | "-." | "%" | "%%" | "&" | "&&" -> true - | _ -> s.[0] = '!' || (s.[0] = '~' && String.forall (fun c -> c = s.[0]) s) + | _ -> + s.[0] = '!' + // The check for the first character here could be eliminated since it's covered + // by the call to String.forall; it is a fast check used to avoid the call if possible. + || (s.[0] = '~' && String.forall (fun c -> c = '~') s) let IsValidPrefixOperatorDefinitionName s = + if System.String.IsNullOrEmpty s then false else match s with | "~?+" | "~?-" | "~+" | "~-" | "~+." | "~-." | "~%" | "~%%" | "~&" | "~&&" -> true - | _ -> (s.[0] = '!' && s <> "!=") || (s.[0] = '~' && String.forall (fun c -> c = s.[0]) s) + | _ -> + (s.[0] = '!' && s <> "!=") + // The check for the first character here could be eliminated since it's covered + // by the call to String.forall; it is a fast check used to avoid the call if possible. + || (s.[0] = '~' && String.forall (fun c -> c = '~') s) - let IsPrefixOperator s = + let IsPrefixOperator s = + if System.String.IsNullOrEmpty s then false else let s = DecompileOpName s match s with | "~?+" | "~?-" | "~+" | "~-" | "~+." | "~-." | "~%" | "~%%" | "~&" | "~&&" -> true - | _ -> (s.[0] = '!' && s <> "!=") || (s.[0] = '~' && String.forall (fun c -> c = s.[0]) s) + | _ -> + (s.[0] = '!' && s <> "!=") + // The check for the first character here could be eliminated since it's covered + // by the call to String.forall; it is a fast check used to avoid the call if possible. + || (s.[0] = '~' && String.forall (fun c -> c = '~') s) let IsTernaryOperator s = - DecompileOpName s = "?<-" - - let IsInfixOperator s (* where s is assumed to be a compiled name *) = + (DecompileOpName s = qmarkSet) + + let IsInfixOperator = + /// EQUALS, INFIX_COMPARE_OP, LESS, GREATER + let relational = [| "=";"!=";"<";">";"$"|] + /// INFIX_AT_HAT_OP + let concat = [| "@";"^" |] + /// PLUS_MINUS_OP, MINUS + let plusMinus = [| "+"; "-" |] + /// PERCENT_OP, STAR, INFIX_STAR_DIV_MOD_OP + let otherMath = [| "*";"/";"%" |] + + /// Characters ignored at the start of the operator name + /// when determining whether an operator is an infix operator. + let ignoredChars = [| '.'; '?' |] + + fun s (* where s is assumed to be a compiled name *) -> // Certain operator idents are parsed as infix expression operators. // The parsing as infix operators is hardwired in the grammar [see declExpr productions] // where certain operator tokens are accepted in infix forms, i.e. . @@ -237,32 +392,40 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming //------ // This function recognises these "infix operator" names. let s = DecompileOpName s - let skipIgnoredChars = s.TrimStart('.', '?') + let skipIgnoredChars = s.TrimStart(ignoredChars) let afterSkipStartsWith prefix = skipIgnoredChars.StartsWith(prefix,System.StringComparison.Ordinal) - let afterSkipStarts prefixes = List.exists afterSkipStartsWith prefixes - // The following conditions follow the declExpr infix clauses. The test corresponds to the lexer definition for the token. + let afterSkipStarts prefixes = Array.exists afterSkipStartsWith prefixes + // The following conditions follow the declExpr infix clauses. + // The test corresponds to the lexer definition for the token. s = ":=" || // COLON_EQUALS afterSkipStartsWith "|" || // BAR_BAR, INFIX_BAR_OP (* REVIEW: OR is deadcode, now called BAR? *) // OR afterSkipStartsWith "&" || // AMP, AMP_AMP, INFIX_AMP_OP - afterSkipStarts ["=";"!=";"<";">";"$"] || // EQUALS, INFIX_COMPARE_OP, LESS, GREATER + afterSkipStarts relational || // EQUALS, INFIX_COMPARE_OP, LESS, GREATER s = "$" || // DOLLAR - afterSkipStarts ["@";"^"] || // INFIX_AT_HAT_OP + afterSkipStarts concat || // INFIX_AT_HAT_OP s = "::" || // COLON_COLON - afterSkipStarts ["+";"-"] || // PLUS_MINUS_OP, MINUS - afterSkipStarts ["*";"/";"%"] || // PERCENT_OP, STAR, INFIX_STAR_DIV_MOD_OP + afterSkipStarts plusMinus || // PLUS_MINUS_OP, MINUS + afterSkipStarts otherMath || // PERCENT_OP, STAR, INFIX_STAR_DIV_MOD_OP s = "**" // INFIX_STAR_STAR_OP - let (|Control|Equality|Relational|Indexer|FixedTypes|Other|) opName = - if (opName = "&" || opName = "or" || opName = "&&" || opName = "||") then Control - elif (opName = "<>" || opName = "=" ) then Equality - elif (opName = "<" || opName = ">" || opName = "<=" || opName = ">=") then Relational - elif (opName = "<<" || opName = "<|" || opName = "<||" || opName = "<||" || opName = "|>" || opName = "||>" || opName = "|||>" || opName = ">>" || opName = "^" || opName = ":=" || opName = "@") then FixedTypes - elif (opName = ".[]" ) then Indexer - else Other - - let private compilerGeneratedMarker = "@" - let private compilerGeneratedMarkerChar = '@' + let (|Control|Equality|Relational|Indexer|FixedTypes|Other|) opName = + match opName with + | "&" | "or" | "&&" | "||" -> + Control + | "<>" | "=" -> + Equality + | "<" | ">" | "<=" | ">=" -> + Relational + | "<<" | "<|" | "<||" | "<||" | "|>" | "||>" | "|||>" | ">>" | "^" | ":=" | "@" -> + FixedTypes + | ".[]" -> + Indexer + | _ -> + Other + + let [] private compilerGeneratedMarker = "@" + let [] private compilerGeneratedMarkerChar = '@' let IsCompilerGeneratedName (nm:string) = nm.IndexOf compilerGeneratedMarkerChar <> -1 @@ -283,17 +446,17 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming // Handle mangled .NET generic type names //------------------------------------------------------------------------- - let private mangledGenericTypeNameSym = '`' + let [] private mangledGenericTypeNameSym = '`' let IsMangledGenericName (n:string) = n.IndexOf mangledGenericTypeNameSym <> -1 && (* check what comes after the symbol is a number *) let m = n.LastIndexOf mangledGenericTypeNameSym let mutable res = m < n.Length - 1 for i = m + 1 to n.Length - 1 do - res <- res && n.[i] >= '0' && n.[i] <= '9'; + res <- res && n.[i] >= '0' && n.[i] <= '9' res - type NameArityPair = NameArityPair of string*int + type NameArityPair = NameArityPair of string * int let DecodeGenericTypeName n = if IsMangledGenericName n then let pos = n.LastIndexOf mangledGenericTypeNameSym @@ -318,38 +481,33 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming let private chopStringTo (s:string) (c:char) = (* chopStringTo "abcdef" 'c' --> "def" *) - if s.IndexOf c <> -1 then - let i = s.IndexOf c + 1 + match s.IndexOf c with + | -1 -> s + | idx -> + let i = idx + 1 s.Substring(i, s.Length - i) - else - s /// Try to chop "get_" or "set_" from a string let TryChopPropertyName (s: string) = - // extract the logical name from any mangled name produced by MakeMemberDataAndMangledNameForMemberVal - let s = - if s.StartsWith("get_", System.StringComparison.Ordinal) || - s.StartsWith("set_", System.StringComparison.Ordinal) - then s - else chopStringTo s '.' - - if s.Length <= 4 || (let s = s.Substring(0,4) in s <> "get_" && s <> "set_") then - None - else - Some(s.Substring(4,s.Length - 4) ) - - + // extract the logical name from any mangled name produced by MakeMemberDataAndMangledNameForMemberVal + if s.Length <= 4 then None else + if s.StartsWith("get_", System.StringComparison.Ordinal) || + s.StartsWith("set_", System.StringComparison.Ordinal) + then Some (s.Substring(4, s.Length - 4)) + else + let s = chopStringTo s '.' + if s.StartsWith("get_", System.StringComparison.Ordinal) || + s.StartsWith("set_", System.StringComparison.Ordinal) + then Some (s.Substring(4, s.Length - 4)) + else None + + /// Try to chop "get_" or "set_" from a string. + /// If the string does not start with "get_" or "set_", this function raises an exception. let ChopPropertyName s = match TryChopPropertyName s with | None -> - failwith("Invalid internal property name: '"^s^"'"); - s + failwithf "Invalid internal property name: '%s'" s | Some res -> res - - - let DemangleOperatorName nm = - let nm = DecompileOpName nm - if IsOpName nm then "( "^nm^" )" else nm let SplitNamesForILPath (s : string) : string list = if s.StartsWith("``",System.StringComparison.Ordinal) && s.EndsWith("``",System.StringComparison.Ordinal) && s.Length > 4 then [s.Substring(2, s.Length-4)] // identifier is enclosed in `` .. ``, so it is only a single element (this is very approximate) @@ -358,12 +516,11 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming // Return a string array delimited by the given separator. // Note that a quoted string is not going to be mangled into pieces. let private splitAroundQuotation (text:string) (separator:char) = - let text' = text.ToCharArray() - let length = text'.Length - let isNotQuotedQuotation n = n > 0 && text'.[n-1] <> '\\' + let length = text.Length + let isNotQuotedQuotation n = n > 0 && text.[n-1] <> '\\' let rec split (i, cur, group, insideQuotation) = if i>=length then List.rev (cur::group) else - match text'.[i], insideQuotation with + match text.[i], insideQuotation with // split when seeing a separator | c, false when c = separator -> split (i+1, "", cur::group, false) // keep reading if a separator is inside quotation @@ -383,22 +540,26 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming | true -> Array.append (mangledText.[0..(count-2)]) ([| mangledText.[(count-1)..] |> String.concat (System.Char.ToString separator) |]) | false -> mangledText - let FSharpModuleSuffix = "Module" + let [] FSharpModuleSuffix = "Module" - let MangledGlobalName = "`global`" + let [] MangledGlobalName = "`global`" let IllegalCharactersInTypeAndNamespaceNames = [| '.'; '+'; '$'; '&'; '['; ']'; '/'; '\\'; '*'; '\"'; '`' |] + /// Determines if the specified name is a valid name for an active pattern. let IsActivePatternName (nm:string) = + let nameLen = nm.Length + // The name must start and end with '|' (nm.IndexOf '|' = 0) && - nm.Length >= 3 && - (nm.LastIndexOf '|' = nm.Length - 1) && + (nm.LastIndexOf '|' = nameLen - 1) && + // The name must contain at least one character between the starting and ending delimiters. + nameLen >= 3 && ( - let core = nm.Substring(1, nm.Length - 2) + let core = nm.Substring(1, nameLen - 2) // no operator characters except '|' and ' ' - core |> String.forall (fun c -> c = '|' || c = ' ' || not (opCharDict.ContainsKey c)) && + core |> String.forall (fun c -> c = '|' || c = ' ' || not (opCharSet.Contains c)) && // at least one non-operator or space character - core |> String.exists (fun c -> c = ' ' || not (opCharDict.ContainsKey c)) + core |> String.exists (fun c -> c = ' ' || not (opCharSet.Contains c)) ) //IsActivePatternName "|+|" = false @@ -408,37 +569,46 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming //IsActivePatternName "||S|" = true type ActivePatternInfo = - | APInfo of bool * string list - member x.IsTotal = let (APInfo(p,_)) = x in p - member x.ActiveTags = let (APInfo(_,tags)) = x in tags - - let ActivePatternInfoOfValName nm = - let rec loop (nm:string) = + | APInfo of bool * (string * Range.range) list * Range.range + member x.IsTotal = let (APInfo(p,_,_)) = x in p + member x.ActiveTags = let (APInfo(_,tags,_)) = x in List.map fst tags + member x.ActiveTagsWithRanges = let (APInfo(_,tags,_)) = x in tags + member x.Range = let (APInfo(_,_,m)) = x in m + + let ActivePatternInfoOfValName nm (m:Range.range) = + // Note: The approximate range calculations in this code assume the name is of the form "(|A|B|)" not "(| A | B |)" + // The ranges are used for IDE refactoring support etc. If names of the second type are used, + // renaming may be inaccurate/buggy. However names of the first form are dominant in F# code. + let rec loop (nm:string) (mp:Range.range) = let n = nm.IndexOf '|' if n > 0 then - nm.[0..n-1] :: loop nm.[n+1..] + let m1 = Range.mkRange mp.FileName mp.Start (Range.mkPos mp.StartLine (mp.StartColumn + n)) + let m2 = Range.mkRange mp.FileName (Range.mkPos mp.StartLine (mp.StartColumn + n + 1)) mp.End + (nm.[0..n-1], m1) :: loop nm.[n+1..] m2 else - [nm] + let m1 = Range.mkRange mp.FileName mp.Start (Range.mkPos mp.StartLine (mp.StartColumn + nm.Length)) + [(nm, m1)] let nm = DecompileOpName nm if IsActivePatternName nm then - let res = loop nm.[1..nm.Length-2] - let resH,resT = List.frontAndBack res - Some(if resT = "_" then APInfo(false,resH) else APInfo(true,res)) + // Skip the '|' at each end when recovering ranges + let m0 = Range.mkRange m.FileName (Range.mkPos m.StartLine (m.StartColumn + 1)) (Range.mkPos m.EndLine (m.EndColumn - 1)) + let names = loop nm.[1..nm.Length-2] m0 + let resH,resT = List.frontAndBack names + Some(if fst resT = "_" then APInfo(false,resH,m) else APInfo(true,names,m)) else None let private mangleStaticStringArg (nm:string,v:string) = nm + "=" + "\"" + v.Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"" - let private tryDemangleStaticStringArg (mangledText:string) = - let pieces = splitAroundQuotationWithCount mangledText '=' 2 - if pieces.Length <> 2 then None else - let nm = pieces.[0] - let v = pieces.[1] - if v.Length >= 2 then - Some(nm,v.[1..v.Length-2].Replace("\\\\","\\").Replace("\\\"","\"")) - else - Some(nm,v) + let private tryDemangleStaticStringArg (mangledText:string) = + match splitAroundQuotationWithCount mangledText '=' 2 with + | [| nm; v |] -> + if v.Length >= 2 then + Some(nm,v.[1..v.Length-2].Replace("\\\\","\\").Replace("\\\"","\"")) + else + Some(nm,v) + | _ -> None // Demangle the static parameters exception InvalidMangledStaticArg of string @@ -478,4 +648,4 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming match defaultArgValue with | Some v when v = actualArgValue -> None | _ -> Some (defaultArgName, actualArgValue)) - mangleProvidedTypeName (nm, nonDefaultArgs) \ No newline at end of file + mangleProvidedTypeName (nm, nonDefaultArgs) diff --git a/src/fsharp/QueueList.fs b/src/fsharp/QueueList.fs index f9ab04fcba3..f7720ce48b0 100644 --- a/src/fsharp/QueueList.fs +++ b/src/fsharp/QueueList.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Internal.Utilities @@ -6,7 +6,7 @@ open System.Collections open System.Collections.Generic /// Iterable functional collection with O(1) append-1 time. Useful for data structures where elements get added at the -/// end but the collection must occadionally be iterated. Iteration is slower and may allocate because +/// end but the collection must occasionally be iterated. Iteration is slower and may allocate because /// a suffix of elements is stored in reverse order. /// /// The type doesn't support structural hashing or comparison. diff --git a/src/fsharp/sreflect.fs b/src/fsharp/QuotationPickler.fs similarity index 98% rename from src/fsharp/sreflect.fs rename to src/fsharp/QuotationPickler.fs index dde90bfb8c6..dfd981c2daf 100644 --- a/src/fsharp/sreflect.fs +++ b/src/fsharp/QuotationPickler.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. //------------------------------------------------------------------------- // Expression and Type Specifications. These are what we save diff --git a/src/fsharp/sreflect.fsi b/src/fsharp/QuotationPickler.fsi similarity index 96% rename from src/fsharp/sreflect.fsi rename to src/fsharp/QuotationPickler.fsi index f815d916ee5..f6a2957d7d4 100644 --- a/src/fsharp/sreflect.fsi +++ b/src/fsharp/QuotationPickler.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Code to pickle out quotations in the quotation binary format. module internal Microsoft.FSharp.Compiler.QuotationPickler diff --git a/src/fsharp/creflect.fs b/src/fsharp/QuotationTranslator.fs similarity index 98% rename from src/fsharp/creflect.fs rename to src/fsharp/QuotationTranslator.fs index 1785af219ed..22090236d4b 100644 --- a/src/fsharp/creflect.fs +++ b/src/fsharp/QuotationTranslator.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.QuotationTranslator @@ -15,8 +15,8 @@ open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.PrettyNaming open Microsoft.FSharp.Compiler.ErrorLogger -open Microsoft.FSharp.Compiler.Env -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.Range open System.Collections.Generic @@ -38,7 +38,7 @@ type QuotationSerializationFormat = | FSharp_20_Plus type QuotationGenerationScope = - { g: Env.TcGlobals; + { g: TcGlobals; amap: Import.ImportMap; scope: CcuThunk; // Accumulate the references to type definitions @@ -71,7 +71,7 @@ type QuotationGenerationScope = static member ComputeQuotationFormat g = let deserializeExValRef = ValRefForIntrinsic g.deserialize_quoted_FSharp_40_plus_info - if deserializeExValRef.TryDeref.IsSome then + if deserializeExValRef.TryDeref.IsSome then QuotationSerializationFormat.FSharp_40_Plus else QuotationSerializationFormat.FSharp_20_Plus @@ -125,7 +125,7 @@ exception IgnoringPartOfQuotedTermWarning of string * Range.range let wfail e = raise (InvalidQuotedTerm(e)) -let (|ModuleValueOrMemberUse|_|) cenv expr = +let (|ModuleValueOrMemberUse|_|) g expr = let rec loop expr args = match stripExpr expr with | Expr.App((InnerExprPat(Expr.Val(vref,vFlags,_) as f)),fty,tyargs,actualArgs,_m) when vref.IsMemberOrModuleBinding -> @@ -133,7 +133,7 @@ let (|ModuleValueOrMemberUse|_|) cenv expr = | Expr.App(f,_fty,[],actualArgs,_) -> loop f (actualArgs @ args) | (Expr.Val(vref,vFlags,_m) as f) when (match vref.ActualParent with ParentNone -> false | _ -> true) -> - let fty = tyOfExpr cenv.g f + let fty = tyOfExpr g f Some(vref,vFlags,f,fty,[],args) | _ -> None @@ -203,8 +203,7 @@ and ConvExpr cenv env (expr : Expr) = and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP.ExprData = - // Eliminate integer 'for' loops - let expr = DetectFastIntegerForLoops cenv.g expr + let expr = DetectAndOptimizeForExpression cenv.g OptimizeIntRangesOnly expr // Eliminate subsumption coercions for functions. This must be done post-typechecking because we need // complete inference types. @@ -229,7 +228,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. let hole = QP.mkHole(ConvType cenv env m ty,idx) (hole, rest) ||> List.fold (fun fR arg -> QP.mkApp (fR,ConvExpr cenv env arg)) - | ModuleValueOrMemberUse cenv (vref,vFlags,_f,_fty,tyargs,curriedArgs) + | ModuleValueOrMemberUse cenv.g (vref,vFlags,_f,_fty,tyargs,curriedArgs) when not (isSplice cenv.g vref) -> let m = expr.Range @@ -405,7 +404,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. QP.mkDelegate(tyargR, fR) | Expr.StaticOptimization (_,_,x,_) -> ConvExpr cenv env x - | Expr.TyChoose _ -> ConvExpr cenv env (Typrelns.ChooseTyparSolutionsForFreeChoiceTypars cenv.g cenv.amap expr) + | Expr.TyChoose _ -> ConvExpr cenv env (TypeRelations.ChooseTyparSolutionsForFreeChoiceTypars cenv.g cenv.amap expr) | Expr.Sequential (x0,x1,ThenDoSeq,_,_) -> QP.mkSequential(ConvExpr cenv env x0, ConvExpr cenv env x1) | Expr.Obj (_lambdaId,_typ,_basev,_basecall,_overrides,_iimpls,m) -> wfail(Error(FSComp.SR.crefQuotationsCantContainObjExprs(),m)) @@ -445,6 +444,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. QP.mkTupleGet(tyR, n, ConvExpr cenv env e) | TOp.ILAsm(([ I_ldfld(_,_,fspec) ] + | [ I_ldfld(_,_,fspec); AI_nop ] | [ I_ldsfld (_,fspec) ] | [ I_ldsfld (_,fspec); AI_nop ]),_),enclTypeArgs,args -> ConvLdfld cenv env m fspec enclTypeArgs args @@ -622,7 +622,7 @@ and ConvLetBind cenv env (bind : Binding) = // 'let v = isinst e in .... if nonnull v then ...v .... ' // construct arising out the compilation of pattern matching. We decode these back to the form // 'if istype e then ...unbox e .... ' - // It's bit annoying that pattern matching does this tranformation. Like all premature optimization we pay a + // It's bit annoying that pattern matching does this transformation. Like all premature optimization we pay a // cost here to undo it. | Expr.Op(TOp.ILAsm([ I_isinst _ ],_),[ty],[e],_) -> None, BindIsInstVal env bind.Var (ty,e) diff --git a/src/fsharp/creflect.fsi b/src/fsharp/QuotationTranslator.fsi old mode 100644 new mode 100755 similarity index 59% rename from src/fsharp/creflect.fsi rename to src/fsharp/QuotationTranslator.fsi index 616bb006119..3b33c128c95 --- a/src/fsharp/creflect.fsi +++ b/src/fsharp/QuotationTranslator.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Convert quoted TAST data structures to structures ready for pickling @@ -6,7 +6,9 @@ module internal Microsoft.FSharp.Compiler.QuotationTranslator open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.Import open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.AbstractIL.IL @@ -31,11 +33,17 @@ type QuotationSerializationFormat = [] type QuotationGenerationScope = - static member Create: Env.TcGlobals * Import.ImportMap * CcuThunk * IsReflectedDefinition -> QuotationGenerationScope + static member Create: TcGlobals * ImportMap * CcuThunk * IsReflectedDefinition -> QuotationGenerationScope member Close: unit -> ILTypeRef list * (TType * range) list * (Expr * range) list - static member ComputeQuotationFormat : Env.TcGlobals -> QuotationSerializationFormat + static member ComputeQuotationFormat : TcGlobals -> QuotationSerializationFormat val ConvExprPublic : QuotationGenerationScope -> QuotationTranslationEnv -> Expr -> QuotationPickler.ExprData val ConvMethodBase : QuotationGenerationScope -> QuotationTranslationEnv -> string * Val -> QuotationPickler.MethodBaseData +val (|ModuleValueOrMemberUse|_|) : TcGlobals -> Expr -> (ValRef * ValUseFlag * Expr * TType * TypeInst * Expr list) option +val (|SimpleArrayLoopUpperBound|_|) : Expr -> unit option +val (|SimpleArrayLoopBody|_|) : TcGlobals -> Expr -> (Expr * TType * Expr) option +val (|ObjectInitializationCheck|_|) : TcGlobals -> Expr -> unit option +val isSplice : TcGlobals -> ValRef -> bool + diff --git a/src/fsharp/ReferenceResolution.fs b/src/fsharp/ReferenceResolution.fs index f0346c99d3e..331a35a39cf 100644 --- a/src/fsharp/ReferenceResolution.fs +++ b/src/fsharp/ReferenceResolution.fs @@ -1,22 +1,20 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Viz - -/// This type exists to have a concrete 'Target' type for a DebuggerVisualizerAttribute. -/// Ideally it would be out in its own assembly, but then the compiler would need to take a dependency on that assembly, so instead we -/// pragmatically just shove this into the compiler assembly itself. -type internal Visualizable(o:obj) = - member this.Data = o - /// assuming this assembly is already in the debuggee process, then Viz.Visualiable.Make(foo) in the Watch window will make a visualizer for foo - static member Make(o:obj) = new Visualizable(o) +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Compiler module internal MSBuildResolver = + open System + open System.IO + open Microsoft.Build.Tasks + open Microsoft.Build.Utilities + open Microsoft.Build.Framework + open Microsoft.Build.BuildEngine open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library + exception ResolutionFailure + /// Describes the location where the reference was found. type ResolvedFrom = | AssemblyFolders | AssemblyFoldersEx @@ -26,77 +24,111 @@ module internal MSBuildResolver = | Path of string | Unknown - type ResolutionEnvironment = CompileTimeLike | RuntimeLike | DesigntimeLike + /// Indicates whether the resolve should follow compile-time rules or runtime rules. + type ResolutionEnvironment = + | CompileTimeLike + | RuntimeLike + | DesigntimeLike - open System - open Microsoft.Build.Tasks - open Microsoft.Build.Utilities - open Microsoft.Build.Framework - open Microsoft.Build.BuildEngine - open System.IO - - type ResolvedFile = { - itemSpec:string - resolvedFrom:ResolvedFrom - fusionName:string - version:string - redist:string - baggage:string + /// Information about a resolved file. + type ResolvedFile = + { /// Item specification + itemSpec:string + /// Location that the assembly was resolved from + resolvedFrom:ResolvedFrom + /// The long fusion name of the assembly + fusionName:string + /// The version of the assembly (like 4.0.0.0) + version:string + /// The name of the redist the assembly was found in + redist:string + /// Round-tripped baggage string + baggage:string } - with override this.ToString() = sprintf "ResolvedFile(%s)" this.itemSpec + + override this.ToString() = sprintf "ResolvedFile(%s)" this.itemSpec - type ResolutionResults = { - resolvedFiles:ResolvedFile array - referenceDependencyPaths:string array - relatedPaths:string array - referenceSatellitePaths:string array - referenceScatterPaths:string array - referenceCopyLocalPaths:string array - suggestedBindingRedirects:string array + /// Reference resolution results. All paths are fully qualified. + type ResolutionResults = + { /// Paths to primary references + resolvedFiles:ResolvedFile[] + /// Paths to dependencies + referenceDependencyPaths:string[] + /// Paths to related files (like .xml and .pdb) + relatedPaths:string[] + /// Paths to satellite assemblies used for localization. + referenceSatellitePaths:string[] + /// Additional files required to support multi-file assemblies. + referenceScatterPaths:string[] + /// Paths to files that reference resolution recommend be copied to the local directory + referenceCopyLocalPaths:string[] + /// Binding redirects that reference resolution recommends for the app.config file. + suggestedBindingRedirects:string[] } - let DotNetFrameworkReferenceAssembliesRootDirectory = + static member Empty = + { resolvedFiles = [| |] + referenceDependencyPaths = [| |] + relatedPaths = [| |] + referenceSatellitePaths = [| |] + referenceScatterPaths = [| |] + referenceCopyLocalPaths = [| |] + suggestedBindingRedirects = [| |] } + + + /// Get the Reference Assemblies directory for the .NET Framework on Window + let DotNetFrameworkReferenceAssembliesRootDirectoryOnWindows = // Note that ProgramFilesX86 is correct for both x86 and x64 architectures (the reference assemblies are always in the 32-bit location, which is PF(x86) on an x64 machine) let PF = - //System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86) // This API is not available to bootstrap compiler - match System.Environment.GetEnvironmentVariable("ProgramFiles(x86)") with - | null -> System.Environment.GetEnvironmentVariable("ProgramFiles") // if PFx86 is null, then we are 32-bit and just get PF + match Environment.GetEnvironmentVariable("ProgramFiles(x86)") with + | null -> Environment.GetEnvironmentVariable("ProgramFiles") // if PFx86 is null, then we are 32-bit and just get PF | s -> s PF + @"\Reference Assemblies\Microsoft\Framework\.NETFramework" - let ReplaceFrameworkVariables(dirs) = - let windowsFramework = System.Environment.GetEnvironmentVariable("windir")+ @"\Microsoft.NET\Framework" - let referenceAssemblies = DotNetFrameworkReferenceAssembliesRootDirectory - dirs|>List.map(fun (d:string)->d.Replace("{WindowsFramework}",windowsFramework).Replace("{ReferenceAssemblies}",referenceAssemblies)) + /// When targeting .NET 2.0-3.5 on Windows, we expand the {WindowsFramework} and {ReferenceAssemblies} paths manually + let internal ReplaceVariablesForLegacyFxOnWindows(dirs: string list) = + let windowsFramework = Environment.GetEnvironmentVariable("windir")+ @"\Microsoft.NET\Framework" + let referenceAssemblies = DotNetFrameworkReferenceAssembliesRootDirectoryOnWindows + dirs |> List.map(fun d -> d.Replace("{WindowsFramework}",windowsFramework).Replace("{ReferenceAssemblies}",referenceAssemblies)) // ATTENTION!: the following code needs to be updated every time we are switching to the new MSBuild version because new .NET framework version was released // 1. List of frameworks // 2. DeriveTargetFrameworkDirectoriesFor45Plus // 3. HighestInstalledNetFrameworkVersionMajorMinor - // 4. GetPathToDotNetFramework + // 4. GetPathToDotNetFrameworkImlpementationAssemblies [] let private Net10 = "v1.0" + [] let private Net11 = "v1.1" + [] let private Net20 = "v2.0" + [] let private Net30 = "v3.0" + [] let private Net35 = "v3.5" + [] let private Net40 = "v4.0" + [] let private Net45 = "v4.5" + [] let private Net451 = "v4.5.1" + /// The list of supported .NET Framework version numbers, using the monikers of the Reference Assemblies folder. let SupportedNetFrameworkVersions = set [ Net20; Net30; Net35; Net40; Net45; Net451; (*SL only*) "v5.0" ] - let GetPathToDotNetFramework(v) = + /// Get the path to the .NET Framework implementation assemblies by using ToolLocationHelper.GetPathToDotNetFramework. + /// This is only used to specify the "last resort" path for assembly resolution. + let GetPathToDotNetFrameworkImlpementationAssemblies(v) = #if FX_ATLEAST_45 let v = match v with @@ -120,7 +152,7 @@ module internal MSBuildResolver = [] #endif - let DeriveTargetFrameworkDirectoriesFor40Plus(version) = + let GetPathToDotNetFrameworkReferenceAssembliesFor40Plus(version) = #if FX_ATLEAST_45 // starting with .Net 4.0, the runtime dirs (WindowsFramework) are never used by MSBuild RAR let v = @@ -141,8 +173,7 @@ module internal MSBuildResolver = [] #endif - /// Determine the default "frameworkVersion" (which is passed into MSBuild resolve). - /// This code uses MSBuild to determine version of the highest installed framework. + /// Use MSBuild to determine the version of the highest installed framework. let HighestInstalledNetFrameworkVersionMajorMinor() = #if FX_ATLEAST_45 if box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version451)) <> null then 4, Net451 @@ -154,133 +185,133 @@ module internal MSBuildResolver = #endif /// Derive the target framework directories. - let DeriveTargetFrameworkDirectories - (targetFrameworkVersion:string, // e.g. v2.0, v3.0, v3.5, v4.0 etc - logmessage:string->unit) = + let DeriveTargetFrameworkDirectories (targetFrameworkVersion:string, logMessage) = + let targetFrameworkVersion = - if not(targetFrameworkVersion.StartsWith("v",StringComparison.Ordinal)) then "v"^targetFrameworkVersion + if not(targetFrameworkVersion.StartsWith("v",StringComparison.Ordinal)) then "v"+targetFrameworkVersion else targetFrameworkVersion - let FrameworkStartsWith(short) = - targetFrameworkVersion.StartsWith(short,StringComparison.Ordinal) + let result = - if FrameworkStartsWith(Net10) then ReplaceFrameworkVariables([@"{WindowsFramework}\v1.0.3705"]) - else if FrameworkStartsWith(Net11) then ReplaceFrameworkVariables([@"{WindowsFramework}\v1.1.4322"]) - else if FrameworkStartsWith(Net20) then ReplaceFrameworkVariables([@"{WindowsFramework}\v2.0.50727"]) - else if FrameworkStartsWith(Net30) then ReplaceFrameworkVariables([@"{ReferenceAssemblies}\v3.0"; @"{WindowsFramework}\v3.0"; @"{WindowsFramework}\v2.0.50727"]) - else if FrameworkStartsWith(Net35) then ReplaceFrameworkVariables([@"{ReferenceAssemblies}\v3.5"; @"{WindowsFramework}\v3.5"; @"{ReferenceAssemblies}\v3.0"; @"{WindowsFramework}\v3.0"; @"{WindowsFramework}\v2.0.50727"]) - else DeriveTargetFrameworkDirectoriesFor40Plus(targetFrameworkVersion) + if targetFrameworkVersion.StartsWith(Net10, StringComparison.Ordinal) then ReplaceVariablesForLegacyFxOnWindows([@"{WindowsFramework}\v1.0.3705"]) + elif targetFrameworkVersion.StartsWith(Net11, StringComparison.Ordinal) then ReplaceVariablesForLegacyFxOnWindows([@"{WindowsFramework}\v1.1.4322"]) + elif targetFrameworkVersion.StartsWith(Net20, StringComparison.Ordinal) then ReplaceVariablesForLegacyFxOnWindows([@"{WindowsFramework}\v2.0.50727"]) + elif targetFrameworkVersion.StartsWith(Net30, StringComparison.Ordinal) then ReplaceVariablesForLegacyFxOnWindows([@"{ReferenceAssemblies}\v3.0"; @"{WindowsFramework}\v3.0"; @"{WindowsFramework}\v2.0.50727"]) + elif targetFrameworkVersion.StartsWith(Net35, StringComparison.Ordinal) then ReplaceVariablesForLegacyFxOnWindows([@"{ReferenceAssemblies}\v3.5"; @"{WindowsFramework}\v3.5"; @"{ReferenceAssemblies}\v3.0"; @"{WindowsFramework}\v3.0"; @"{WindowsFramework}\v2.0.50727"]) + else GetPathToDotNetFrameworkReferenceAssembliesFor40Plus(targetFrameworkVersion) let result = result |> Array.ofList - logmessage (sprintf "Derived target framework directories for version %s are: %s" targetFrameworkVersion (String.Join(",", result))) + logMessage (sprintf "Derived target framework directories for version %s are: %s" targetFrameworkVersion (String.Join(",", result))) result /// Decode the ResolvedFrom code from MSBuild. let DecodeResolvedFrom(resolvedFrom:string) : ResolvedFrom = - let Same a b = - String.CompareOrdinal(a,b) = 0 match resolvedFrom with - | r when Same "{RawFileName}" r -> RawFileName - | r when Same "{GAC}" r -> GlobalAssemblyCache - | r when Same "{TargetFrameworkDirectory}" r -> TargetFrameworkDirectory - | r when Same "{AssemblyFolders}" r -> AssemblyFolders - | r when r.Length >= 10 && Same "{Registry:" (r.Substring(0,10)) -> AssemblyFoldersEx + | "{RawFileName}" -> RawFileName + | "{GAC}" -> GlobalAssemblyCache + | "{TargetFrameworkDirectory}" -> TargetFrameworkDirectory + | "{AssemblyFolders}" -> AssemblyFolders + | r when r.Length >= 10 && "{Registry:" = r.Substring(0,10) -> AssemblyFoldersEx | r -> ResolvedFrom.Path r - type ErrorWarningCallbackSig = ((*code:*)string->(*message*)string->unit) - - type Foregrounded = - | ForegroundedMessage of string - | ForegroundedError of string * string - | ForegroundedWarning of string * string - - let ResolveCore( - resolutionEnvironment: ResolutionEnvironment, + /// Perform assembly resolution by instantiating the ResolveAssemblyReference task directly from the MSBuild SDK. + let ResolveCore(resolutionEnvironment: ResolutionEnvironment, references:(string*(*baggage*)string)[], - targetFrameworkVersion:string, - targetFrameworkDirectories:string list, - targetProcessorArchitecture:string, - outputDirectory:string, - fsharpCoreExplicitDirOrFSharpBinariesDir:string, - explicitIncludeDirs:string list, - implicitIncludeDir:string, - frameworkRegistryBase:string, - assemblyFoldersSuffix:string, - assemblyFoldersConditions:string, - allowRawFileName:bool, - logmessage:string->unit, - logwarning:ErrorWarningCallbackSig, - logerror:ErrorWarningCallbackSig ) = - - // Message Foregrounding: - // In version 4.0 MSBuild began calling log methods on a background (non-UI) thread. If there is an exception thrown from - // logmessage, logwarning or logerror then it would kill the process. - // The fix is to catch these exceptions and log the rest of the messages to a list to output at the end. - // It looks simpler to always just accumulate the messages during resolution and show them all at the end, but then - // we couldn't see the messages as resolution progresses. - let foregrounded = ref [] - let backgroundException : exn option ref = ref None + targetFrameworkVersion: string, + targetFrameworkDirectories: string list, + targetProcessorArchitecture: string, + outputDirectory: string, + fsharpCoreExplicitDirOrFSharpBinariesDir: string, + explicitIncludeDirs: string list, + implicitIncludeDir: string, + frameworkRegistryBase: string, + assemblyFoldersSuffix: string, + assemblyFoldersConditions: string, + allowRawFileName: bool, + logMessage: (string -> unit), + logWarning: (string -> string -> unit), + logError: (string -> string -> unit)) = + + if Array.isEmpty references then ResolutionResults.Empty else + + let backgroundException = ref false - let logmessage message = - match !backgroundException with - | Some _ -> foregrounded := ForegroundedMessage(message) :: !foregrounded - | None -> - try - logmessage message - with e -> - backgroundException := Some(e) - foregrounded := ForegroundedMessage(message) :: !foregrounded - - let logwarning code message = - match !backgroundException with - | Some _ -> foregrounded := ForegroundedWarning(code,message) :: !foregrounded - | None -> - try - logwarning code message - with e -> - backgroundException := Some(e) - foregrounded := ForegroundedWarning(code,message) :: !foregrounded - - let logerror code message = - match !backgroundException with - | Some _ -> foregrounded := ForegroundedError(code,message) :: !foregrounded - | None -> - try - logerror code message - with e -> - backgroundException := Some(e) - foregrounded := ForegroundedError(code,message) :: !foregrounded + let protect f = + if not !backgroundException then + try f() + with _ -> backgroundException := true - - let engine = { new IBuildEngine with - member be.BuildProjectFile(projectFileName, targetNames, globalProperties, targetOutputs) = true - member be.LogCustomEvent(e) = logmessage e.Message - member be.LogErrorEvent(e) = logerror e.Code e.Message - member be.LogMessageEvent(e) = logmessage e.Message - member be.LogWarningEvent(e) = logwarning e.Code e.Message - member be.ColumnNumberOfTaskNode with get() = 1 - member be.LineNumberOfTaskNode with get() = 1 - member be.ContinueOnError with get() = true - member be.ProjectFileOfTaskNode with get() = "" } + let engine = + { new IBuildEngine with + member __.BuildProjectFile(projectFileName, targetNames, globalProperties, targetOutputs) = true + member __.LogCustomEvent(e) = protect (fun () -> logMessage e.Message) + member __.LogErrorEvent(e) = protect (fun () -> logError e.Code e.Message) + member __.LogMessageEvent(e) = protect (fun () -> logMessage e.Message) + member __.LogWarningEvent(e) = protect (fun () -> logWarning e.Code e.Message) + member __.ColumnNumberOfTaskNode = 1 + member __.LineNumberOfTaskNode = 1 + member __.ContinueOnError = true + member __.ProjectFileOfTaskNode = "" } - let rar = new ResolveAssemblyReference() - rar.BuildEngine <- engine - - // Derive target framework directory if none was supplied. + // Derive the target framework directory if none was supplied. let targetFrameworkDirectories = - if targetFrameworkDirectories=[] then DeriveTargetFrameworkDirectories(targetFrameworkVersion, logmessage) + if targetFrameworkDirectories=[] then DeriveTargetFrameworkDirectories(targetFrameworkVersion, logMessage) else targetFrameworkDirectories |> Array.ofList - // Filter for null and zero length, and escape backslashes so legitimate path characters aren't mistaken for - // escape characters (E.g., ".\r.dll") - let explicitIncludeDirs = explicitIncludeDirs |> List.filter(fun eid->not(String.IsNullOrEmpty(eid))) - let references = references |> Array.filter(fun (path,_)->not(String.IsNullOrEmpty(path))) // |> Array.map (fun (path,baggage) -> (path.Replace("\\","\\\\"),baggage)) - - rar.TargetFrameworkDirectories <- targetFrameworkDirectories - rar.FindRelatedFiles <- false - rar.FindDependencies <- false - rar.FindSatellites <- false - rar.FindSerializationAssemblies <- false + // Filter for null and zero length + let references = references |> Array.filter(fst >> String.IsNullOrEmpty >> not) + + // Determine the set of search paths for the resolution + let searchPaths = + + let explicitIncludeDirs = explicitIncludeDirs |> List.filter(String.IsNullOrEmpty >> not) + + let rawFileNamePath = if allowRawFileName then ["{RawFileName}"] else [] + + let registry = sprintf "{Registry:%s,%s,%s%s}" frameworkRegistryBase targetFrameworkVersion assemblyFoldersSuffix assemblyFoldersConditions + + [| match resolutionEnvironment with + | DesigntimeLike + | RuntimeLike -> + logMessage("Using scripting resolution precedence.") + // These are search paths for runtime-like or scripting resolution. GAC searching is present. + yield! rawFileNamePath // Quick-resolve straight to filename first + yield! explicitIncludeDirs // From -I, #I + yield fsharpCoreExplicitDirOrFSharpBinariesDir // Location of explicit reference to FSharp.Core, otherwise location of fsc.exe + yield implicitIncludeDir // Usually the project directory + yield "{TargetFrameworkDirectory}" + yield registry + yield "{AssemblyFolders}" + yield "{GAC}" + + | CompileTimeLike -> + logMessage("Using compilation resolution precedence.") + // These are search paths for compile-like resolution. GAC searching is not present. + yield "{TargetFrameworkDirectory}" + yield! rawFileNamePath // Quick-resolve straight to filename first + yield! explicitIncludeDirs // From -I, #I + yield fsharpCoreExplicitDirOrFSharpBinariesDir // Location of explicit reference to FSharp.Core, otherwise location of fsc.exe + yield implicitIncludeDir // Usually the project directory + yield registry + yield "{AssemblyFolders}" + yield outputDirectory + yield "{GAC}" + // use path to implementation assemblies as the last resort + yield! GetPathToDotNetFrameworkImlpementationAssemblies targetFrameworkVersion + |] + + let assemblies = + [| for (referenceName,baggage) in references -> + let item = new Microsoft.Build.Utilities.TaskItem(referenceName) + item.SetMetadata("Baggage", baggage) + item:>ITaskItem |] + + let rar = + ResolveAssemblyReference(BuildEngine=engine, TargetFrameworkDirectories=targetFrameworkDirectories, + FindRelatedFiles=false, FindDependencies=false, FindSatellites=false, + FindSerializationAssemblies=false, Assemblies=assemblies, + SearchPaths=searchPaths, + AllowedAssemblyExtensions= [| ".dll" ; ".exe" |]) #if BUILDING_WITH_LKG ignore targetProcessorArchitecture #else @@ -288,147 +319,60 @@ module internal MSBuildResolver = rar.TargetProcessorArchitecture <- targetProcessorArchitecture rar.CopyLocalDependenciesWhenParentReferenceInGac <- true #endif - rar.Assemblies <- [|for (referenceName,baggage) in references -> - let item = new Microsoft.Build.Utilities.TaskItem(referenceName) - item.SetMetadata("Baggage", baggage) - item:>ITaskItem|] - - let rawFileNamePath = if allowRawFileName then ["{RawFileName}"] else [] - let searchPaths = - match resolutionEnvironment with - | DesigntimeLike - | RuntimeLike -> - logmessage("Using scripting resolution precedence.") - // These are search paths for runtime-like or scripting resolution. GAC searching is present. - rawFileNamePath @ // Quick-resolve straight to filename first - explicitIncludeDirs @ // From -I, #I - [implicitIncludeDir] @ // Usually the project directory - [fsharpCoreExplicitDirOrFSharpBinariesDir] @ // Location of explicit reference to FSharp.Core, otherwise location of fsc.exe - ["{TargetFrameworkDirectory}"] @ - [sprintf "{Registry:%s,%s,%s%s}" frameworkRegistryBase targetFrameworkVersion assemblyFoldersSuffix assemblyFoldersConditions] @ - ["{AssemblyFolders}"] @ - ["{GAC}"] - | CompileTimeLike -> - logmessage("Using compilation resolution precedence.") - // These are search paths for compile-like resolution. GAC searching is not present. - ["{TargetFrameworkDirectory}"] @ - rawFileNamePath @ // Quick-resolve straight to filename first - explicitIncludeDirs @ // From -I, #I - [implicitIncludeDir] @ // Usually the project directory - [fsharpCoreExplicitDirOrFSharpBinariesDir] @ // Location of explicit reference to FSharp.Core, otherwise location of fsc.exe - [sprintf "{Registry:%s,%s,%s%s}" frameworkRegistryBase targetFrameworkVersion assemblyFoldersSuffix assemblyFoldersConditions] @ // Like {Registry:Software\Microsoft\.NETFramework,v2.0,AssemblyFoldersEx} - ["{AssemblyFolders}"] @ - [outputDirectory] @ - ["{GAC}"] @ - GetPathToDotNetFramework targetFrameworkVersion // use path to implementation assemblies as the last resort - - rar.SearchPaths <- searchPaths |> Array.ofList - - rar.AllowedAssemblyExtensions <- [| ".dll" ; ".exe" |] let succeeded = rar.Execute() - // Unroll any foregrounded messages - match !backgroundException with - | Some(backGroundException) -> - logwarning "" "Saw error on logger thread during resolution." - logwarning "" (sprintf "%A" backGroundException) - logwarning "" "Showing messages seen after exception." - - !foregrounded - |> List.iter(fun message-> - match message with - | ForegroundedMessage(message) -> logmessage message - | ForegroundedWarning(code,message) -> logwarning code message - | ForegroundedError(code,message) -> logerror code message ) - | None -> () - if not succeeded then raise ResolutionFailure - { - resolvedFiles = [| for p in rar.ResolvedFiles -> {itemSpec = p.ItemSpec; - resolvedFrom = DecodeResolvedFrom(p.GetMetadata("ResolvedFrom")); - fusionName = p.GetMetadata("FusionName"); - version = p.GetMetadata("Version"); - redist = p.GetMetadata("Redist"); - baggage = p.GetMetadata("Baggage") } |] - referenceDependencyPaths = [| for p in rar.ResolvedDependencyFiles -> p.ItemSpec |] - relatedPaths = [| for p in rar.RelatedFiles -> p.ItemSpec |] - referenceSatellitePaths = [| for p in rar.SatelliteFiles -> p.ItemSpec |] - referenceScatterPaths = [| for p in rar.ScatterFiles -> p.ItemSpec |] - referenceCopyLocalPaths = [| for p in rar.CopyLocalFiles -> p.ItemSpec |] - suggestedBindingRedirects = [| for p in rar.SuggestedRedirects -> p.ItemSpec |] - } + let resolvedFiles = + [| for p in rar.ResolvedFiles -> + { itemSpec = p.ItemSpec + resolvedFrom = DecodeResolvedFrom(p.GetMetadata("ResolvedFrom")) + fusionName = p.GetMetadata("FusionName") + version = p.GetMetadata("Version") + redist = p.GetMetadata("Redist") + baggage = p.GetMetadata("Baggage") } |] + + { resolvedFiles = resolvedFiles + referenceDependencyPaths = [| for p in rar.ResolvedDependencyFiles -> p.ItemSpec |] + relatedPaths = [| for p in rar.RelatedFiles -> p.ItemSpec |] + referenceSatellitePaths = [| for p in rar.SatelliteFiles -> p.ItemSpec |] + referenceScatterPaths = [| for p in rar.ScatterFiles -> p.ItemSpec |] + referenceCopyLocalPaths = [| for p in rar.CopyLocalFiles -> p.ItemSpec |] + suggestedBindingRedirects = [| for p in rar.SuggestedRedirects -> p.ItemSpec |] } + + + + /// Perform the resolution on rooted and unrooted paths, and then combine the results. + let Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, + outputDirectory, fsharpCoreExplicitDirOrFSharpBinariesDir, explicitIncludeDirs, implicitIncludeDir, frameworkRegistryBase, + assemblyFoldersSuffix, assemblyFoldersConditions, logMessage, logWarning, logError) = - let Resolve( - resolutionEnvironment: ResolutionEnvironment, - references:(string*(*baggage*)string)[], - targetFrameworkVersion:string, - targetFrameworkDirectories:string list, - targetProcessorArchitecture:string, - outputDirectory:string, - fsharpCoreExplicitDirOrFSharpBinariesDir:string, - explicitIncludeDirs:string list, - implicitIncludeDir:string, - frameworkRegistryBase:string, - assemblyFoldersSuffix:string, - assemblyFoldersConditions:string, - logmessage:string->unit, - logwarning:ErrorWarningCallbackSig, - logerror:ErrorWarningCallbackSig ) = // The {RawFileName} target is 'dangerous', in the sense that is uses Directory.GetCurrentDirectory() to resolve unrooted file paths. // It is unreliable to use this mutable global state inside Visual Studio. As a result, we partition all references into a "rooted" set // (which contains e.g. C:\MyDir\MyAssem.dll) and "unrooted" (everything else). We only allow "rooted" to use {RawFileName}. Note that // unrooted may still find 'local' assemblies by virtue of the fact that "implicitIncludeDir" is one of the places searched during // assembly resolution. - let references = references |> Array.map (fun ((file,baggage) as data) -> - // However, MSBuild will not resolve 'relative' paths, even when e.g. implicitIncludeDir is part of the search. As a result, - // if we have an unrooted path+filename, we'll assume this is relative to the project directory and root it. - if FileSystem.IsPathRootedShim(file) then - data // fine, e.g. "C:\Dir\foo.dll" - elif not(file.Contains("\\") || file.Contains("/")) then - data // fine, e.g. "System.Transactions.dll" - else - // we have a 'relative path', e.g. "bin/Debug/foo.exe" or "..\Yadda\bar.dll" - // turn it into an absolute path based at implicitIncludeDir - (System.IO.Path.Combine(implicitIncludeDir, file), baggage) - ) - let rooted, unrooted = references |> Array.partition (fun (file,_baggage) -> FileSystem.IsPathRootedShim(file)) - - let CallResolveCore(references, allowRawFileName) = - if Array.isEmpty references then - { - resolvedFiles = [| |] - referenceDependencyPaths = [| |] - relatedPaths = [| |] - referenceSatellitePaths = [| |] - referenceScatterPaths = [| |] - referenceCopyLocalPaths = [| |] - suggestedBindingRedirects = [| |] - } - else - // all the params are the same... - ResolveCore( - resolutionEnvironment, - references, // ... except this - targetFrameworkVersion, - targetFrameworkDirectories, - targetProcessorArchitecture, - outputDirectory, - fsharpCoreExplicitDirOrFSharpBinariesDir, - explicitIncludeDirs, - implicitIncludeDir, - frameworkRegistryBase, - assemblyFoldersSuffix, - assemblyFoldersConditions, - allowRawFileName, // ... and this - logmessage, - logwarning, - logerror) - - let rootedResults = CallResolveCore(rooted, true) - let unrootedResults = CallResolveCore(unrooted, false) + let references = + [| for ((file,baggage) as data) in references -> + // However, MSBuild will not resolve 'relative' paths, even when e.g. implicitIncludeDir is part of the search. As a result, + // if we have an unrooted path+filename, we'll assume this is relative to the project directory and root it. + if FileSystem.IsPathRootedShim(file) then + data // fine, e.g. "C:\Dir\foo.dll" + elif not(file.Contains("\\") || file.Contains("/")) then + data // fine, e.g. "System.Transactions.dll" + else + // we have a 'relative path', e.g. "bin/Debug/foo.exe" or "..\Yadda\bar.dll" + // turn it into an absolute path based at implicitIncludeDir + (Path.Combine(implicitIncludeDir, file), baggage) |] + + let rooted, unrooted = references |> Array.partition (fst >> FileSystem.IsPathRootedShim) + + let rootedResults = ResolveCore(resolutionEnvironment, rooted, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, outputDirectory, fsharpCoreExplicitDirOrFSharpBinariesDir, explicitIncludeDirs, implicitIncludeDir, frameworkRegistryBase, assemblyFoldersSuffix, assemblyFoldersConditions, true, logMessage, logWarning, logError) + + let unrootedResults = ResolveCore(resolutionEnvironment, unrooted, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, outputDirectory, fsharpCoreExplicitDirOrFSharpBinariesDir, explicitIncludeDirs, implicitIncludeDir, frameworkRegistryBase, assemblyFoldersSuffix, assemblyFoldersConditions, false, logMessage, logWarning, logError) + // now unify the two sets of results { resolvedFiles = Array.concat [| rootedResults.resolvedFiles; unrootedResults.resolvedFiles |] diff --git a/src/fsharp/ReferenceResolution.fsi b/src/fsharp/ReferenceResolution.fsi index 003cfdbe5ed..03b6980239f 100644 --- a/src/fsharp/ReferenceResolution.fsi +++ b/src/fsharp/ReferenceResolution.fsi @@ -1,15 +1,5 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -namespace Viz - -/// This type exists to have a concrete 'Target' type for a DebuggerVisualizerAttribute. -/// Ideally it would be out in its own assembly, but then the compiler would need to take a dependency on that assembly, so instead we -/// pragmatically just shove this into the compiler assembly itself. -type internal Visualizable = - new : obj -> Visualizable - member Data : obj - /// assuming this assembly is already in the debuggee process, then Viz.Visualiable.Make(foo) in the Watch window will make a visualizer for foo - static member Make : obj -> Visualizable namespace Microsoft.FSharp.Compiler @@ -18,6 +8,7 @@ module internal MSBuildResolver = exception ResolutionFailure val SupportedNetFrameworkVersions : Set + val HighestInstalledNetFrameworkVersionMajorMinor : unit -> int * string /// Describes the location where the reference was found. @@ -30,59 +21,53 @@ module internal MSBuildResolver = | Path of string | Unknown - /// Whether the resolve should follow compile-time rules or runtime rules. + /// Indicates whether the resolve should follow compile-time rules or runtime rules. type ResolutionEnvironment = | CompileTimeLike | RuntimeLike // Don't allow stubbed-out reference assemblies | DesigntimeLike -#if SILVERLIGHT -#else - - val DotNetFrameworkReferenceAssembliesRootDirectory : string + /// Get the Reference Assemblies directory for the .NET Framework on Window + val DotNetFrameworkReferenceAssembliesRootDirectoryOnWindows : string /// Information about a resolved file. - type ResolvedFile = { - /// Item specification - itemSpec:string - /// Location that the assembly was resolved from - resolvedFrom:ResolvedFrom - /// The long fusion name of the assembly - fusionName:string - /// The version of the assembly (like 4.0.0.0) - version:string - /// The name of the redist the assembly was found in - redist:string - /// Round-tripped baggage string - baggage:string + type ResolvedFile = + { /// Item specification + itemSpec:string + /// Location that the assembly was resolved from + resolvedFrom:ResolvedFrom + /// The long fusion name of the assembly + fusionName:string + /// The version of the assembly (like 4.0.0.0) + version:string + /// The name of the redist the assembly was found in + redist:string + /// Round-tripped baggage string + baggage:string } /// Reference resolution results. All paths are fully qualified. - type ResolutionResults = { - /// Paths to primary references - resolvedFiles:ResolvedFile array - /// Paths to dependencies - referenceDependencyPaths:string array - /// Paths to related files (like .xml and .pdb) - relatedPaths:string array - /// Paths to satellite assemblies used for localization. - referenceSatellitePaths:string array - /// Additional files required to support multi-file assemblies. - referenceScatterPaths:string array - /// Paths to files that reference resolution recommend be copied to the local directory - referenceCopyLocalPaths:string array - /// Binding redirects that reference resolution recommends for the app.config file. - suggestedBindingRedirects:string array - } + type ResolutionResults = + { /// Paths to primary references + resolvedFiles:ResolvedFile[] + /// Paths to dependencies + referenceDependencyPaths:string[] + /// Paths to related files (like .xml and .pdb) + relatedPaths:string[] + /// Paths to satellite assemblies used for localization. + referenceSatellitePaths:string[] + /// Additional files required to support multi-file assemblies. + referenceScatterPaths:string[] + /// Paths to files that reference resolution recommend be copied to the local directory + referenceCopyLocalPaths:string[] + /// Binding redirects that reference resolution recommends for the app.config file. + suggestedBindingRedirects:string[] } - /// Callback for errors and warnings. - type ErrorWarningCallbackSig = - ((*code:*)string->(*message*)string->unit) - - val Resolve : + /// Perform assembly resolution on the given references + val Resolve: resolutionEnvironment: ResolutionEnvironment * - references:(string*(*baggage*)string)[] * + references:seq * targetFrameworkVersion:string * targetFrameworkDirectories:string list * targetProcessorArchitecture:string * @@ -94,6 +79,6 @@ module internal MSBuildResolver = assemblyFoldersSuffix:string * assemblyFoldersConditions:string * logmessage:(string->unit) * - logwarning:ErrorWarningCallbackSig * - logerror:ErrorWarningCallbackSig -> ResolutionResults -#endif + logwarning:(string->string->unit) * + logerror:(string->string->unit) + -> ResolutionResults diff --git a/src/fsharp/tastops.fs b/src/fsharp/TastOps.fs old mode 100644 new mode 100755 similarity index 97% rename from src/fsharp/tastops.fs rename to src/fsharp/TastOps.fs index 8004bade597..932e1929d5d --- a/src/fsharp/tastops.fs +++ b/src/fsharp/TastOps.fs @@ -1,6 +1,6 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -/// Derived expression manipulation and construction functions. +/// Defines derived expression manipulation and construction functions. module internal Microsoft.FSharp.Compiler.Tastops #nowarn "44" // This construct is deprecated. please use List.item @@ -20,7 +20,7 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.PrettyNaming #if EXTENSIONTYPING @@ -82,12 +82,14 @@ let emptyTyparInst = ([] : TyparInst) type Remap = { tpinst : TyparInst; valRemap: ValRemap; - tyconRefRemap : TyconRefRemap } + tyconRefRemap : TyconRefRemap; + removeTraitSolutions: bool } let emptyRemap = { tpinst = emptyTyparInst; tyconRefRemap = emptyTyconRefRemap; - valRemap = ValMap.Empty } + valRemap = ValMap.Empty; + removeTraitSolutions = false } type Remap with static member Empty = emptyRemap @@ -228,6 +230,7 @@ and remapTraitAux tyenv (TTrait(typs,nm,mf,argtys,rty,slnCell)) = let slnCell = match !slnCell with | None -> None + | _ when tyenv.removeTraitSolutions -> None | Some sln -> let sln = match sln with @@ -343,7 +346,8 @@ let remapSlotSig remapAttrib tyenv (TSlotSig(nm,typ, ctps,methTypars,paraml, rty let mkInstRemap tpinst = { tyconRefRemap = emptyTyconRefRemap; tpinst = tpinst; - valRemap = ValMap.Empty } + valRemap = ValMap.Empty; + removeTraitSolutions = false } // entry points for "typar -> TType" instantiation let instType tpinst x = if List.isEmpty tpinst then x else remapTypeAux (mkInstRemap tpinst) x @@ -1264,6 +1268,8 @@ let tryRescopeEntity viewedCcu (entity:Entity) : EntityRef option = let tryRescopeVal viewedCcu (entityRemap:Remap) (vspec:Val) : ValRef option = match vspec.PublicPath with | Some (ValPubPath(p,fullLinkageKey)) -> + // The type information in the val linkage doesn't need to keep any information to trait solutions. + let entityRemap = { entityRemap with removeTraitSolutions = true } let fullLinkageKey = remapValLinkage entityRemap fullLinkageKey let vref = // This compensates for the somewhat poor design decision in the F# compiler and metadata where @@ -1427,6 +1433,11 @@ let destArrayTy (g:TcGlobals) ty = | [ty] -> ty | _ -> failwith "destArrayTy"; +let destListTy (g:TcGlobals) ty = + let _,tinst = destAppTy g ty + match tinst with + | [ty] -> ty + | _ -> failwith "destListTy"; let isTypeConstructorEqualToOptional g tcOpt tc = match tcOpt with @@ -1439,6 +1450,8 @@ let isByrefLikeTyconRef g tcref = isTypeConstructorEqualToOptional g g.system_ArgIterator_tcref tcref || isTypeConstructorEqualToOptional g g.system_RuntimeArgumentHandle_tcref tcref +let isStringTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref,_) -> tyconRefEq g tcref g.system_String_tcref | _ -> false) +let isListTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref,_) -> tyconRefEq g tcref g.list_tcr_canon | _ -> false) let isArrayTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref,_) -> isArrayTyconRef g tcref | _ -> false) let isArray1DTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref,_) -> tyconRefEq g tcref g.il_arr_tcr_map.[0] | _ -> false) let isUnitTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref,_) -> tyconRefEq g g.unit_tcr_canon tcref | _ -> false) @@ -1553,7 +1566,7 @@ let isStructTy g ty = (isAppTy g ty && (tyconOfAppTy g ty).IsStructOrEnumTycon) || isTupleStructTy g ty // ECMA C# LANGUAGE SPECIFICATION, 27.2 -// An unmanaged-type is any type that isnt a reference-type, a type-parameter, or a generic struct-type and +// An unmanaged-type is any type that isn't a reference-type, a type-parameter, or a generic struct-type and // contains no fields whose type is not an unmanaged-type. In other words, an unmanaged-type is one of the // following: // - sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, or bool. @@ -2269,8 +2282,9 @@ module PrettyTypes = begin let PrettifyTypes1 g x = PrettifyTypes g (fun f -> f) (fun f -> f) x let PrettifyTypes2 g x = PrettifyTypes g (fun f -> foldPair (f,f)) (fun f -> mapPair (f,f)) x let PrettifyTypesN g x = PrettifyTypes g List.fold List.map x + let PrettifyTypesNN g x = PrettifyTypes g (fun f -> List.fold (List.fold f)) List.mapSquared x + let PrettifyTypesNN1 g x = PrettifyTypes g (fun f -> foldPair (List.fold (List.fold f),f)) (fun f -> mapPair (List.mapSquared f,f)) x let PrettifyTypesN1 g (x:UncurriedArgInfos * TType) = PrettifyTypes g (fun f -> foldPair (List.fold (fold1Of2 f), f)) (fun f -> mapPair (List.map (map1Of2 f),f)) x - let PrettifyTypesNN1 g x = PrettifyTypes g (fun f -> foldTriple (List.fold f, List.fold (fold1Of2 f),f)) (fun f -> mapTriple (List.map f, List.map (map1Of2 f), f)) x let PrettifyTypesNM1 g (x:TType list * CurriedArgInfos * TType) = PrettifyTypes g (fun f -> foldTriple (List.fold f, List.fold (List.fold (fold1Of2 f)),f)) (fun f -> mapTriple (List.map f, List.mapSquared (map1Of2 f), f)) x end @@ -2515,8 +2529,8 @@ let isILAttrib (tref:ILTypeRef) (attr: ILAttribute) = // results of attribute lookups in the TAST let HasILAttribute tref (attrs: ILAttributes) = List.exists (isILAttrib tref) attrs.AsList -let TryDecodeILAttribute g tref scope (attrs: ILAttributes) = - attrs.AsList |> List.tryPick(fun x -> if isILAttrib tref x then Some(decodeILAttribData g.ilg x scope) else None) +let TryDecodeILAttribute g tref (attrs: ILAttributes) = + attrs.AsList |> List.tryPick(fun x -> if isILAttrib tref x then Some(decodeILAttribData g.ilg x) else None) // This one is done by name to ensure the compiler doesn't take a dependency on dereferencing a type that only exists in .NET 3.5 let ILThingHasExtensionAttribute (attrs : ILAttributes) = @@ -2583,7 +2597,7 @@ let TryBindTyconRefAttribute g (m:range) (AttribInfo (atref,_) as args) (tcref:T | None -> None #endif | ILTypeMetadata (_,tdef) -> - match TryDecodeILAttribute g atref (Some(atref.Scope)) tdef.CustomAttrs with + match TryDecodeILAttribute g atref tdef.CustomAttrs with | Some attr -> f1 attr | _ -> None | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> @@ -2817,9 +2831,6 @@ module DebugPrint = begin stat let stampL _n w = -#if DEBUG - if !verboseStamps then w ^^ sepL "#" ^^ int64L _n else -#endif w let layoutTyconRef (tc:TyconRef) = wordL tc.DisplayNameWithStaticParameters |> stampL tc.Stamp @@ -3018,11 +3029,6 @@ module DebugPrint = begin let valL (vspec:Val) = let vsL = wordL (DecompileOpName vspec.LogicalName) |> stampL vspec.Stamp - let vsL = -#if DEBUG - if !verboseStamps then vsL ^^ rightL (if isSome(vspec.PublicPath) then "+" else "-") else -#endif - vsL let vsL = vsL -- layoutAttribs (vspec.Attribs) vsL @@ -3131,7 +3137,7 @@ module DebugPrint = begin let layoutUnionCaseArgTypes argtys = sepListL (wordL "*") (List.map typeL argtys) - let ucaseL prefixL ucase = + let ucaseL prefixL (ucase: UnionCase) = let nmL = wordL (DemangleOperatorName ucase.Id.idText) match ucase.RecdFields |> List.map (fun rfld -> rfld.FormalType) with | [] -> (prefixL ^^ nmL) @@ -3229,17 +3235,6 @@ module DebugPrint = begin | Expr.Val (v,flags,_) -> let xL = valL v.Deref let xL = -#if DEBUG - if !verboseStamps then - let tag = - match v with - | VRefLocal _ -> "" - | VRefNonLocal _ -> "!!" - xL ^^ rightL tag - else -#endif - xL - let xL = match flags with | PossibleConstrainedCall _ -> xL ^^ rightL "" | CtorValUsedAsSelfInit -> xL ^^ rightL "" @@ -3494,7 +3489,8 @@ let addValRemap v v' tmenv = let mkRepackageRemapping mrpi = { valRemap = ValMap.OfList (mrpi.mrpiVals |> List.map (fun (vref,x) -> vref.Deref, x)); tpinst = emptyTyparInst; - tyconRefRemap = TyconRefMap.OfList mrpi.mrpiEntities } + tyconRefRemap = TyconRefMap.OfList mrpi.mrpiEntities + removeTraitSolutions = false } //-------------------------------------------------------------------------- // Compute instances of the above for mty -> mty @@ -3528,7 +3524,7 @@ let accEntityRemap (msigty:ModuleOrNamespaceType) (entity:Entity) (mrpi,mhi) = mhi | _ -> // The field is not in the signature. Hence it is regarded as hidden. - let rfref = mkNestedRecdFieldRef tcref rfield + let rfref = tcref.MakeNestedRecdFieldRef rfield { mhi with mhiRecdFields = Zset.add rfref mhi.mhiRecdFields }) entity.AllFieldsArray |> List.foldBack (fun (ucase:UnionCase) mhi -> @@ -3538,7 +3534,7 @@ let accEntityRemap (msigty:ModuleOrNamespaceType) (entity:Entity) (mrpi,mhi) = mhi | _ -> // The constructor is not in the signature. Hence it is regarded as hidden. - let ucref = mkNestedUnionCaseRef tcref ucase + let ucref = tcref.MakeNestedUnionCaseRef ucase { mhi with mhiUnionCases = Zset.add ucref mhi.mhiUnionCases }) (entity.UnionCasesAsList) (mrpi,mhi) @@ -3575,10 +3571,6 @@ let accValRemap g aenv (msigty:ModuleOrNamespaceType) (implVal:Val) (mrpi,mhi) = (mrpi,mhi) | Some (sigVal:Val) -> // The value is in the signature. Add the repackage entry. -#if DEBUG - if !verboseStamps then dprintf "accValRemap, remap value %s#%d --> %s#%d\n" implVal.LogicalName implVal.Stamp sigVal.LogicalName sigVal.Stamp; -#endif - let mrpi = { mrpi with mrpiVals = (vref,mkLocalValRef sigVal) :: mrpi.mrpiVals } (mrpi,mhi) @@ -3677,7 +3669,7 @@ let accTyconHidingInfoAtAssemblyBoundary (tycon:Tycon) mhi = (fun (rfield:RecdField) mhi -> if not (canAccessFromEverywhere rfield.Accessibility) then let tcref = mkLocalTyconRef tycon - let rfref = mkNestedRecdFieldRef tcref rfield + let rfref = tcref.MakeNestedRecdFieldRef rfield { mhi with mhiRecdFields = Zset.add rfref mhi.mhiRecdFields } else mhi) tycon.AllFieldsArray @@ -3685,7 +3677,7 @@ let accTyconHidingInfoAtAssemblyBoundary (tycon:Tycon) mhi = (fun (ucase:UnionCase) mhi -> if not (canAccessFromEverywhere ucase.Accessibility) then let tcref = mkLocalTyconRef tycon - let ucref = mkNestedUnionCaseRef tcref ucase + let ucref = tcref.MakeNestedUnionCaseRef ucase { mhi with mhiUnionCases = Zset.add ucref mhi.mhiUnionCases } else mhi) (tycon.UnionCasesAsList) @@ -3711,9 +3703,9 @@ let rec accModuleOrNamespaceHidingInfoAtAssemblyBoundary mty acc = let acc = QueueList.foldBack accValHidingInfoAtAssemblyBoundary mty.AllValsAndMembers acc acc -let ComputeHidingInfoAtAssemblyBoundary mty = +let ComputeHidingInfoAtAssemblyBoundary mty acc = // dprintf "ComputeRemappingFromInferredSignatureToExplicitSignature,\nmty = %s\nmmsigty=%s\n" (showL(entityTypeL mty)) (showL(entityTypeL msigty)); - accModuleOrNamespaceHidingInfoAtAssemblyBoundary mty SignatureHidingInfo.Empty + accModuleOrNamespaceHidingInfoAtAssemblyBoundary mty acc //-------------------------------------------------------------------------- // Compute instances of the above for mexpr -> mty @@ -4456,9 +4448,6 @@ and remapValReprInfo g tmenv (ValReprInfo(tpNames,arginfosl,retInfo)) = ValReprInfo(tpNames,List.mapSquared (remapArgData g tmenv) arginfosl, remapArgData g tmenv retInfo) and remapValData g tmenv d = -#if DEBUG - if !verboseStamps then dprintf "remap val data #%d\n" d.val_stamp; -#endif let ty = d.val_type let topValInfo = d.val_repr_info let ty' = ty |> remapPossibleForallTy g tmenv @@ -4466,7 +4455,7 @@ and remapValData g tmenv d = val_type = ty'; val_actual_parent = d.val_actual_parent |> remapParentRef tmenv; val_repr_info = d.val_repr_info |> Option.map (remapValReprInfo g tmenv); - val_member_info = d.val_member_info |> Option.map (remapMemberInfo g d.val_defn_range topValInfo ty ty' tmenv); + val_member_info = d.val_member_info |> Option.map (remapMemberInfo g d.val_range topValInfo ty ty' tmenv); val_attribs = d.val_attribs |> remapAttribs g tmenv } and remapParentRef tyenv p = @@ -4702,7 +4691,7 @@ and remapRecdField g tmenv x = rfield_fattribs = x.rfield_fattribs |> remapAttribs g tmenv; } and remapRecdFields g tmenv (x:TyconRecdFields) = x.AllFieldsAsList |> List.map (remapRecdField g tmenv) |> MakeRecdFieldsTable -and remapUnionCase g tmenv x = +and remapUnionCase g tmenv (x:UnionCase) = { x with FieldTable = x.FieldTable |> remapRecdFields g tmenv; ReturnType = x.ReturnType |> remapType tmenv; @@ -4809,13 +4798,6 @@ and copyAndRemapAndBindTyconsAndVals g compgen tmenv tycons vs = // Values need to be copied and renamed. let vs',tmenvinner = copyAndRemapAndBindVals g compgen tmenvinner vs -#if DEBUG - if !verboseStamps then - for tycon in tycons do - dprintf "copyAndRemapAndBindTyconsAndVals: tycon %s#%d\n" tycon.LogicalName tycon.Stamp; - for v in vs do - dprintf "copyAndRemapAndBindTyconsAndVals: val %s#%d\n" v.LogicalName v.Stamp; -#endif // "if a type constructor is hidden then all its inner values and inner type constructors must also be hidden" // Hence we can just lookup the inner tycon/value mappings in the tables. @@ -4824,10 +4806,6 @@ and copyAndRemapAndBindTyconsAndVals g compgen tmenv tycons vs = let vref = try let res = tmenvinner.valRemap.[v] -#if DEBUG - if !verboseStamps then - dprintf "remaped internal value %s#%d --> %s#%d\n" v.LogicalName v.Stamp res.LogicalName res.Stamp; -#endif res with :? KeyNotFoundException -> errorR(InternalError(sprintf "couldn't remap internal value '%s'" v.LogicalName,v.Range)); @@ -4838,10 +4816,6 @@ and copyAndRemapAndBindTyconsAndVals g compgen tmenv tycons vs = let tcref = try let res = tmenvinner.tyconRefRemap.[mkLocalTyconRef tycon] -#if DEBUG - if !verboseStamps then - dprintf "remaped internal tycon %s#%d --> %s#%d\n" tycon.LogicalName tycon.Stamp res.LogicalName res.Stamp; -#endif res with :? KeyNotFoundException -> errorR(InternalError("couldn't remap internal tycon "^showL(DebugPrint.tyconL tycon),tycon.Range)); @@ -5024,7 +4998,7 @@ and remarkBind m (TBind(v,repr,_)) = //-------------------------------------------------------------------------- let isRecdOrStructFieldAllocObservable (f:RecdField) = not f.IsStatic && f.IsMutable -let ucaseAllocObservable uc = uc.FieldTable.FieldsByIndex |> Array.exists isRecdOrStructFieldAllocObservable +let ucaseAllocObservable (uc:UnionCase) = uc.FieldTable.FieldsByIndex |> Array.exists isRecdOrStructFieldAllocObservable let isUnionCaseAllocObservable (uc:UnionCaseRef) = uc.UnionCase |> ucaseAllocObservable let isRecdOrUnionOrStructTyconAllocObservable (_g:TcGlobals) (tycon:Tycon) = @@ -5897,6 +5871,8 @@ let mkIsInst ty e m = mkAsmExpr ([ isinst ], [ty],[e], [ ty ], m) let mspec_Object_GetHashCode ilg = IL.mkILNonGenericInstanceMethSpecInTy(ilg.typ_Object,"GetHashCode",[],ilg.typ_int32) let mspec_Type_GetTypeFromHandle ilg = IL.mkILNonGenericStaticMethSpecInTy(ilg.typ_Type,"GetTypeFromHandle",[ilg.typ_RuntimeTypeHandle],ilg.typ_Type) +let mspec_String_Length ilg = mkILNonGenericInstanceMethSpecInTy (ilg.typ_String, "get_Length", [], ilg.typ_int32) + let fspec_Missing_Value ilg = IL.mkILFieldSpecInTy(ilg.typ_Missing.Value, "Value", ilg.typ_Missing.Value) @@ -6043,6 +6019,14 @@ let mkCallQuoteToLinqLambdaExpression g m ty e1 = let mkLazyDelayed g m ty f = mkApps g (typedExprForIntrinsic g m g.lazy_create_info, [[ty]], [ f ], m) let mkLazyForce g m ty e = mkApps g (typedExprForIntrinsic g m g.lazy_force_info, [[ty]], [ e; mkUnit g m ], m) +let mkGetString g m e1 e2 = mkApps g (typedExprForIntrinsic g m g.getstring_info, [], [e1;e2], m) +let mkGetStringChar = mkGetString +let mkGetStringLength g m e = + let mspec = mspec_String_Length g.ilg + /// ILCall(useCallvirt,isProtected,valu,newobj,valUseFlags,isProp,noTailCall,mref,actualTypeInst,actualMethInst, retTy) + Expr.Op(TOp.ILCall(false,false,false,false,ValUseFlag.NormalValUse,true,false,mspec.MethodRef,[],[],[g.int32_ty]),[],[e],m) + + // Quotations can't contain any IL. // As a result, we aim to get rid of all IL generation in the typechecker and pattern match // compiler, or else train the quotation generator to understand the generated IL. @@ -6135,8 +6119,7 @@ let isTypeProviderAssemblyAttr (cattr:ILAttribute) = let TryDecodeTypeProviderAssemblyAttr ilg (cattr:ILAttribute) = if isTypeProviderAssemblyAttr cattr then - // ok to use ecmaILGlobals here since we're querying metadata, not making it - let parms, _args = decodeILAttribData ilg cattr None + let parms, _args = decodeILAttribData ilg cattr match parms with // The first parameter to the attribute is the name of the assembly with the compiler extensions. | (ILAttribElem.String (Some assemblyName))::_ -> Some assemblyName | (ILAttribElem.String None)::_ -> Some null @@ -6168,8 +6151,7 @@ let tref_AutoOpenAttr () = mkILTyRef(IlxSettings.ilxFsharpCoreLibScopeRef (), tn let IsSignatureDataVersionAttr cattr = isILAttrib (tref_SignatureDataVersionAttr ()) cattr let TryFindAutoOpenAttr (ilg : IL.ILGlobals) cattr = if isILAttrib (tref_AutoOpenAttr ()) cattr then - // ok to use ecmaILGlobals here since we're querying metadata, not making it - match decodeILAttribData ilg cattr None with + match decodeILAttribData ilg cattr with | [ILAttribElem.String s],_ -> s | [],_ -> None | _ -> @@ -6183,8 +6165,7 @@ let tref_InternalsVisibleToAttr (ilg : IL.ILGlobals) = let TryFindInternalsVisibleToAttr ilg cattr = if isILAttrib (tref_InternalsVisibleToAttr ilg) cattr then - // ok to use ecmaILGlobals here since we're querying metadata, not making it - match decodeILAttribData ilg cattr None with + match decodeILAttribData ilg cattr with | [ILAttribElem.String s],_ -> s | [],_ -> None | _ -> @@ -6195,8 +6176,7 @@ let TryFindInternalsVisibleToAttr ilg cattr = let IsMatchingSignatureDataVersionAttr ilg ((v1,v2,v3,_) : ILVersionInfo) cattr = IsSignatureDataVersionAttr cattr && - // ok to use ecmaILGlobals here since we're querying metadata, not making it - match decodeILAttribData ilg cattr None with + match decodeILAttribData ilg cattr with | [ILAttribElem.Int32 u1; ILAttribElem.Int32 u2;ILAttribElem.Int32 u3 ],_ -> (v1 = uint16 u1) && (v2 = uint16 u2) && (v3 = uint16 u3) | _ -> @@ -6459,7 +6439,7 @@ let AdjustPossibleSubsumptionExpr g (expr: Expr) (suppliedArgs: Expr list) : (Ex let suppliedArgs, droppedSuppliedArgs = List.chop (min suppliedArgs.Length curriedNiceNames.Length) suppliedArgs - /// THe relevant range for any expressions and applications includes the arguments + /// The relevant range for any expressions and applications includes the arguments let appm = (m,suppliedArgs) ||> List.fold (fun m e -> unionRanges m (e.Range)) // See if we have 'enough' suppliedArgs. If not, we have to build some lambdas, and, @@ -6468,9 +6448,7 @@ let AdjustPossibleSubsumptionExpr g (expr: Expr) (suppliedArgs: Expr list) : (Ex // is a classic case. Here we generate // let tmp = (effect;4) in // (fun v -> Seq.take tmp (v :> seq<_>)) - let buildingLambdas = (suppliedArgs.Length <> curriedNiceNames.Length) - //printfn "buildingLambdas = %A" buildingLambdas - //printfn "suppliedArgs.Length = %d" suppliedArgs.Length + let buildingLambdas = suppliedArgs.Length <> curriedNiceNames.Length /// Given a tuple of argument variables that has a tuple type that satisfies the input argument types, /// coerce it to a tuple that satisfies the matching coerced argument type(s). @@ -7072,7 +7050,7 @@ let ModuleNameIsMangled g attrs = let CompileAsEvent g attrs = HasFSharpAttribute g g.attrib_CLIEventAttribute attrs -let MemberIsCompiledAsInstance g parent isExtensionMember membInfo attrs = +let MemberIsCompiledAsInstance g parent isExtensionMember (membInfo:ValMemberInfo) attrs = // All extension members are compiled as static members if isExtensionMember then false // Anything implementing a dispatch slot is compiled as an instance member @@ -7165,14 +7143,15 @@ let TryGetActivePatternInfo (vref:ValRef) = if logicalName.Length = 0 || logicalName.[0] <> '|' then None else - ActivePatternInfoOfValName vref.CoreDisplayName + ActivePatternInfoOfValName vref.CoreDisplayName vref.Range type ActivePatternElemRef with member x.Name = let (APElemRef(_,vref,n)) = x match TryGetActivePatternInfo vref with | None -> error(InternalError("not an active pattern name", vref.Range)) - | Some (APInfo(_,nms)) -> + | Some apinfo -> + let nms = apinfo.ActiveTags if n < 0 || n >= List.length nms then error(InternalError("name_of_apref: index out of range for active pattern refernce", vref.Range)); List.nth nms n @@ -7197,8 +7176,7 @@ let mkChoiceCaseRef g m n i = mkUnionCaseRef (mkChoiceTyconRef g m n) ("Choice"+string (i+1)+"Of"+string n) type PrettyNaming.ActivePatternInfo with - member x.Names = let (APInfo(_,nms)) = x in nms - member x.IsTotal = let (APInfo(total,_)) = x in total + member x.Names = x.ActiveTags member apinfo.ResultType g m rtys = let choicety = mkChoiceTy g m rtys @@ -7416,9 +7394,6 @@ let MakeExportRemapping viewedCcu (mspec:ModuleOrNamespace) = let accEntityRemap (entity:Entity) acc = match tryRescopeEntity viewedCcu entity with | Some eref -> -#if DEBUG - if !verboseStamps then dprintf "adding export remapping for entity %s#%d\n" entity.LogicalName entity.Stamp; -#endif addTyconRefRemap (mkLocalTyconRef entity) eref acc | None -> if entity.IsNamespace then @@ -7430,9 +7405,6 @@ let MakeExportRemapping viewedCcu (mspec:ModuleOrNamespace) = // The acc contains the entity remappings match tryRescopeVal viewedCcu acc vspec with | Some vref -> -#if DEBUG - if !verboseStamps then dprintf "adding export remapping for value %s#%d\n" vspec.LogicalName vspec.Stamp; -#endif {acc with valRemap=acc.valRemap.Add vspec vref } | None -> error(InternalError("Unexpected value without a pubpath when remapping assembly data",vspec.Range)) @@ -7601,7 +7573,7 @@ let EvalArithBinOp (opInt8, opInt16, opInt32, opInt64, opUInt8, opUInt16, opUInt | _ -> error (Error ( FSComp.SR.tastNotAConstantExpression(),m)) with :? System.OverflowException -> error (Error ( FSComp.SR.tastConstantExpressionOverflow(),m)) -// See also PostTypecheckSemanticChecks.CheckAttribArgExpr, which must match this precisely +// See also PostTypeCheckSemanticChecks.CheckAttribArgExpr, which must match this precisely let rec EvalAttribArgExpr g x = match x with @@ -7770,34 +7742,126 @@ let (|RangeInt32Step|_|) g expr = when valRefEq g vf g.range_op_vref && typeEquiv g tyarg g.int_ty -> Some(startExpr, 1, finishExpr) // detect (RangeInt32 startExpr N finishExpr), the inlined/compiled form of 'n .. m' and 'n .. N .. m' - | Expr.App(Expr.Val(vf,_,_),_,[],[startExpr; Int32Expr n; finishExpr],_) + | Expr.App(Expr.Val(vf,_,_),_,[],[startExpr; Int32Expr n; finishExpr],_) when valRefEq g vf g.range_int32_op_vref -> Some(startExpr, n, finishExpr) | _ -> None - -// Detect the compiled or optimized form of a 'for in .. do ' expression over integers -// Detect the compiled or optimized form of a 'for in .. .. do ' expression over integers when step is positive -let (|CompiledInt32ForEachExprWithKnownStep|_|) g expr = - match expr with - | Let (_enumerableVar, RangeInt32Step g (startExpr, step, finishExpr), _, - Let (_enumeratorVar, _getEnumExpr, spBind, - TryFinally (WhileLoopForCompiledForEachExpr (_guardExpr, Let (elemVar,_currentExpr,_,bodyExpr), m), _cleanupExpr))) -> +let (|GetEnumeratorCall|_|) expr = + match expr with + | Expr.Op (TOp.ILCall( _, _, _, _, _, _, _, iLMethodRef, _, _, _),_,[Expr.Val(vref,_,_) | Expr.Op(_, _, [Expr.Val(vref, ValUseFlag.NormalValUse, _)], _) ],_) -> + if iLMethodRef.Name = "GetEnumerator" then Some(vref) + else None + | _ -> None + +let (|CompiledForEachExpr|_|) g expr = + match expr with + | Let (enumerableVar, enumerableExpr, _, + Let (enumeratorVar, GetEnumeratorCall enumerableVar2, enumeratorBind, + TryFinally (WhileLoopForCompiledForEachExpr (_, Let (elemVar,_,_,bodyExpr), _), _))) + // Apply correctness conditions to ensure this really is a compiled for-each expression. + when valRefEq g (mkLocalValRef enumerableVar) enumerableVar2 && + enumerableVar.IsCompilerGenerated && + enumeratorVar.IsCompilerGenerated && + (let fvs = (freeInExpr CollectLocals bodyExpr) + not (Zset.contains enumerableVar fvs.FreeLocals) && + not (Zset.contains enumeratorVar fvs.FreeLocals)) -> + + // Extract useful ranges + let m = enumerableExpr.Range + let mBody = bodyExpr.Range + + let spForLoop,mForLoop = match enumeratorBind with SequencePointAtBinding(spStart) -> SequencePointAtForLoop(spStart),spStart | _ -> NoSequencePointAtForLoop,m + let spWhileLoop = match enumeratorBind with SequencePointAtBinding(spStart) -> SequencePointAtWhileLoop(spStart)| _ -> NoSequencePointAtWhileLoop + let enumerableTy = tyOfExpr g enumerableExpr + + Some (enumerableTy, enumerableExpr, elemVar, bodyExpr, (m, mBody, spForLoop, mForLoop, spWhileLoop)) + | _ -> None + - let spForLoop = match spBind with SequencePointAtBinding(spStart) -> SequencePointAtForLoop(spStart) | _ -> NoSequencePointAtForLoop +let (|CompiledInt32RangeForEachExpr|_|) g expr = + match expr with + | CompiledForEachExpr g (_, RangeInt32Step g (startExpr, step, finishExpr), elemVar, bodyExpr, ranges) -> + Some (startExpr, step, finishExpr, elemVar, bodyExpr, ranges) + | _ -> None + | _ -> None - Some(spForLoop,elemVar,startExpr,step,finishExpr,bodyExpr,m) - | _ -> - None -let DetectFastIntegerForLoops g expr = - match expr with - | CompiledInt32ForEachExprWithKnownStep g (spForLoop,elemVar,startExpr,step,finishExpr,bodyExpr,m) - // fast for loops only allow steps 1 and -1 steps at the moment - when step = 1 || step = -1 -> - mkFastForLoop g (spForLoop,m,elemVar,startExpr,(step = 1),finishExpr,bodyExpr) - | _ -> expr +type OptimizeForExpressionOptions = OptimizeIntRangesOnly | OptimizeAllForExpressions + +let DetectAndOptimizeForExpression g option expr = + match option, expr with + | _, CompiledInt32RangeForEachExpr g (startExpr, (1 | -1 as step), finishExpr, elemVar, bodyExpr, ranges) -> + + let (m, _mBody, spForLoop, _mForLoop, _spWhileLoop) = ranges + mkFastForLoop g (spForLoop,m,elemVar,startExpr,(step = 1),finishExpr,bodyExpr) + + | OptimizeAllForExpressions,CompiledForEachExpr g (enumerableTy, enumerableExpr, elemVar, bodyExpr, ranges) -> + + let (m, mBody, spForLoop, mForLoop, spWhileLoop) = ranges + if isStringTy g enumerableTy then + // type is string, optimize for expression as: + // let $str = enumerable + // for $idx in 0..(str.Length - 1) do + // let elem = str.[idx] + // body elem + + let strVar ,strExpr = mkCompGenLocal m "str" enumerableTy + let idxVar ,idxExpr = mkCompGenLocal m "idx" g.int32_ty + + let lengthExpr = mkGetStringLength g m strExpr + let charExpr = mkGetStringChar g m strExpr idxExpr + + let startExpr = mkZero g m + let finishExpr = mkDecr g mForLoop lengthExpr + let loopItemExpr = mkCoerceIfNeeded g elemVar.Type g.char_ty charExpr // for compat reasons, loop item over string is sometimes object, not char + let bodyExpr = mkCompGenLet mBody elemVar loopItemExpr bodyExpr + let forExpr = mkFastForLoop g (spForLoop,m,idxVar,startExpr,true,finishExpr,bodyExpr) + let expr = mkCompGenLet m strVar enumerableExpr forExpr + + expr + + elif isListTy g enumerableTy then + // type is list, optimize for expression as: + // let mutable $currentVar = listExpr + // let mutable $nextVar = $tailOrNull + // while $guardExpr do + // let i = $headExpr + // bodyExpr () + // $current <- $next + // $next <- $tailOrNull + + let IndexHead = 0 + let IndexTail = 1 + + let currentVar ,currentExpr = mkMutableCompGenLocal m "current" enumerableTy + let nextVar ,nextExpr = mkMutableCompGenLocal m "next" enumerableTy + let elemTy = destListTy g enumerableTy + + let guardExpr = mkNonNullTest g m nextExpr + let headOrDefaultExpr = mkUnionCaseFieldGetUnproven(currentExpr,g.cons_ucref,[elemTy],IndexHead,m) + let tailOrNullExpr = mkUnionCaseFieldGetUnproven(currentExpr,g.cons_ucref,[elemTy],IndexTail,mBody) + let bodyExpr = + mkCompGenLet m elemVar headOrDefaultExpr + (mkCompGenSequential mBody + bodyExpr + (mkCompGenSequential mBody + (mkValSet mBody (mkLocalValRef currentVar) nextExpr) + (mkValSet mBody (mkLocalValRef nextVar) tailOrNullExpr) + ) + ) + let whileExpr = mkWhile g (spWhileLoop, WhileLoopForCompiledForEachExprMarker, guardExpr, bodyExpr, m) + + let expr = + mkCompGenLet m currentVar enumerableExpr + (mkCompGenLet m nextVar tailOrNullExpr whileExpr) + + expr + + else + expr + | _ -> expr // Used to remove Expr.Link for inner expressions in pattern matches -let (|InnerExprPat|) expr = stripExpr expr \ No newline at end of file +let (|InnerExprPat|) expr = stripExpr expr diff --git a/src/fsharp/tastops.fsi b/src/fsharp/TastOps.fsi old mode 100644 new mode 100755 similarity index 95% rename from src/fsharp/tastops.fsi rename to src/fsharp/TastOps.fsi index 447f9f1fe41..b63625a222e --- a/src/fsharp/tastops.fsi +++ b/src/fsharp/TastOps.fsi @@ -1,6 +1,6 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -/// Derived expression manipulation and construction functions. +/// Defines derived expression manipulation and construction functions. module internal Microsoft.FSharp.Compiler.Tastops open System.Text @@ -15,7 +15,7 @@ open Microsoft.FSharp.Compiler.Rational open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.Lib @@ -61,6 +61,7 @@ val ensureCcuHasModuleOrNamespaceAtPath : CcuThunk -> Ident list -> CompilationP val stripExpr : Expr -> Expr val valsOfBinds : Bindings -> FlatVals +val (|ExprValWithPossibleTypeInst|_|) : Expr -> (ValRef * ValUseFlag * TType list * range) option //------------------------------------------------------------------------- // Build decision trees imperatively @@ -150,7 +151,7 @@ val mkLetRecBinds : range -> Bindings -> Expr -> Expr /// TypeSchme (generalizedTypars, tauTy) /// /// generalizedTypars -- the truly generalized type parameters -/// tauTy -- the body of the generalized type. A 'tau' type is one with its type paramaeters stripped off. +/// tauTy -- the body of the generalized type. A 'tau' type is one with its type parameters stripped off. type TypeScheme = TypeScheme of Typars * TType val mkGenericBindRhs : TcGlobals -> range -> Typars -> TypeScheme -> Expr -> Expr @@ -311,7 +312,8 @@ type ValRemap = ValMap type Remap = { tpinst : TyparInst; valRemap: ValRemap; - tyconRefRemap : TyconRefRemap } + tyconRefRemap : TyconRefRemap; + removeTraitSolutions: bool } static member Empty : Remap @@ -580,6 +582,8 @@ module PrettyTypes = val PrettifyTypes1 : TcGlobals -> TType -> TyparInst * TType * TyparConstraintsWithTypars val PrettifyTypes2 : TcGlobals -> TType * TType -> TyparInst * (TType * TType) * TyparConstraintsWithTypars val PrettifyTypesN : TcGlobals -> TType list -> TyparInst * TType list * TyparConstraintsWithTypars + val PrettifyTypesNN : TcGlobals -> TType list list -> TyparInst * TType list list * TyparConstraintsWithTypars + val PrettifyTypesNN1 : TcGlobals -> TType list list * TType -> TyparInst * (TType list list * TType) * TyparConstraintsWithTypars val PrettifyTypesN1 : TcGlobals -> UncurriedArgInfos * TType -> TyparInst * (UncurriedArgInfos * TType) * TyparConstraintsWithTypars val PrettifyTypesNM1 : TcGlobals -> TType list * CurriedArgInfos * TType -> TyparInst * (TType list * CurriedArgInfos * TType) * TyparConstraintsWithTypars @@ -745,10 +749,11 @@ type SignatureHidingInfo = mhiVals : Zset; mhiRecdFields : Zset; mhiUnionCases : Zset } + static member Empty : SignatureHidingInfo val ComputeRemappingFromInferredSignatureToExplicitSignature : TcGlobals -> ModuleOrNamespaceType -> ModuleOrNamespaceType -> SignatureRepackageInfo * SignatureHidingInfo val ComputeRemappingFromImplementationToSignature : TcGlobals -> ModuleOrNamespaceExpr -> ModuleOrNamespaceType -> SignatureRepackageInfo * SignatureHidingInfo -val ComputeHidingInfoAtAssemblyBoundary : ModuleOrNamespaceType -> SignatureHidingInfo +val ComputeHidingInfoAtAssemblyBoundary : ModuleOrNamespaceType -> SignatureHidingInfo -> SignatureHidingInfo val mkRepackageRemapping : SignatureRepackageInfo -> Remap val wrapModuleOrNamespaceExprInNamespace : Ident -> CompilationPath -> ModuleOrNamespaceExpr -> ModuleOrNamespaceExpr @@ -823,7 +828,7 @@ val mkAndSimplifyMatch : SequencePointInfoForBinding -> range -> range -> TType val primMkMatch : SequencePointInfoForBinding * range * DecisionTree * DecisionTreeTarget array * range * TType -> Expr //------------------------------------------------------------------------- -// Work out what things on the r.h.s. of a letrec need to be fixed up +// Work out what things on the r.h.s. of a let rec need to be fixed up //------------------------------------------------------------------------- val IterateRecursiveFixups : @@ -949,10 +954,13 @@ type TypeDefMetadata = val metadataOfTycon : Tycon -> TypeDefMetadata val metadataOfTy : TcGlobals -> TType -> TypeDefMetadata +val isStringTy : TcGlobals -> TType -> bool +val isListTy : TcGlobals -> TType -> bool val isILAppTy : TcGlobals -> TType -> bool val isArrayTy : TcGlobals -> TType -> bool val isArray1DTy : TcGlobals -> TType -> bool val destArrayTy : TcGlobals -> TType -> TType +val destListTy : TcGlobals -> TType -> TType val mkArrayTy : TcGlobals -> int -> TType -> range -> TType val isArrayTyconRef : TcGlobals -> TyconRef -> bool @@ -1194,31 +1202,31 @@ val mkLdelem : TcGlobals -> range -> TType -> Expr -> Expr -> Expr // Analyze attribute sets //------------------------------------------------------------------------- -val TryDecodeILAttribute : TcGlobals -> ILTypeRef -> ILScopeRef option -> ILAttributes -> (ILAttribElem list * ILAttributeNamedArg list) option -val TryFindILAttribute : Env.BuiltinAttribInfo -> ILAttributes -> bool -val TryFindILAttributeOpt : Env.BuiltinAttribInfo option -> ILAttributes -> bool +val TryDecodeILAttribute : TcGlobals -> ILTypeRef -> ILAttributes -> (ILAttribElem list * ILAttributeNamedArg list) option +val TryFindILAttribute : BuiltinAttribInfo -> ILAttributes -> bool +val TryFindILAttributeOpt : BuiltinAttribInfo option -> ILAttributes -> bool -val IsMatchingFSharpAttribute : TcGlobals -> Env.BuiltinAttribInfo -> Attrib -> bool -val IsMatchingFSharpAttributeOpt : TcGlobals -> Env.BuiltinAttribInfo option -> Attrib -> bool -val HasFSharpAttribute : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> bool -val HasFSharpAttributeOpt : TcGlobals -> Env.BuiltinAttribInfo option -> Attribs -> bool -val TryFindFSharpAttribute : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> Attrib option -val TryFindFSharpAttributeOpt : TcGlobals -> Env.BuiltinAttribInfo option -> Attribs -> Attrib option -val TryFindFSharpBoolAttribute : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> bool option -val TryFindFSharpBoolAttributeAssumeFalse : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> bool option -val TryFindFSharpStringAttribute : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> string option -val TryFindFSharpInt32Attribute : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> int32 option +val IsMatchingFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attrib -> bool +val IsMatchingFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attrib -> bool +val HasFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool +val HasFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attribs -> bool +val TryFindFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> Attrib option +val TryFindFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attribs -> Attrib option +val TryFindFSharpBoolAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option +val TryFindFSharpBoolAttributeAssumeFalse : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option +val TryFindFSharpStringAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> string option +val TryFindFSharpInt32Attribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> int32 option /// Try to find a specific attribute on a type definition, where the attribute accepts a string argument. /// /// This is used to detect the 'DefaultMemberAttribute' and 'ConditionalAttribute' attributes (on type definitions) -val TryFindTyconRefStringAttribute : TcGlobals -> range -> Env.BuiltinAttribInfo -> TyconRef -> string option +val TryFindTyconRefStringAttribute : TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> string option /// Try to find a specific attribute on a type definition, where the attribute accepts a bool argument. -val TryFindTyconRefBoolAttribute : TcGlobals -> range -> Env.BuiltinAttribInfo -> TyconRef -> bool option +val TryFindTyconRefBoolAttribute : TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool option /// Try to find a specific attribute on a type definition -val TyconRefHasAttribute : TcGlobals -> range -> Env.BuiltinAttribInfo -> TyconRef -> bool +val TyconRefHasAttribute : TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool /// Try to find the AttributeUsage attribute, looking for the value of the AllowMultiple named parameter val TryFindAttributeUsageAttribute : TcGlobals -> range -> TyconRef -> bool option @@ -1298,14 +1306,14 @@ type StaticOptimizationAnswer = | Yes = 1y | No = -1y | Unknown = 0y -val DecideStaticOptimizations : Env.TcGlobals -> StaticOptimization list -> StaticOptimizationAnswer -val mkStaticOptimizationExpr : Env.TcGlobals -> StaticOptimization list * Expr * Expr * range -> Expr +val DecideStaticOptimizations : TcGlobals -> StaticOptimization list -> StaticOptimizationAnswer +val mkStaticOptimizationExpr : TcGlobals -> StaticOptimization list * Expr * Expr * range -> Expr //--------------------------------------------------------------------------- // Build for loops //------------------------------------------------------------------------- -val mkFastForLoop : Env.TcGlobals -> SequencePointInfoForForLoop * range * Val * Expr * bool * Expr * Expr -> Expr +val mkFastForLoop : TcGlobals -> SequencePointInfoForForLoop * range * Val * Expr * bool * Expr * Expr -> Expr //--------------------------------------------------------------------------- // Active pattern helpers @@ -1315,16 +1323,15 @@ type ActivePatternElemRef with member Name : string val TryGetActivePatternInfo : ValRef -> PrettyNaming.ActivePatternInfo option -val mkChoiceCaseRef : Env.TcGlobals -> range -> int -> int -> UnionCaseRef +val mkChoiceCaseRef : TcGlobals -> range -> int -> int -> UnionCaseRef type PrettyNaming.ActivePatternInfo with member Names : string list - member IsTotal: bool - member ResultType : Env.TcGlobals -> range -> TType list -> TType - member OverallType : Env.TcGlobals -> range -> TType -> TType list -> TType + member ResultType : TcGlobals -> range -> TType list -> TType + member OverallType : TcGlobals -> range -> TType -> TType list -> TType -val doesActivePatternHaveFreeTypars : Env.TcGlobals -> ValRef -> bool +val doesActivePatternHaveFreeTypars : TcGlobals -> ValRef -> bool //--------------------------------------------------------------------------- // Structural rewrites @@ -1373,7 +1380,9 @@ val (|SpecialComparableHeadType|_|) : TcGlobals -> TType -> TType list option val (|SpecialEquatableHeadType|_|) : TcGlobals -> TType -> TType list option val (|SpecialNotEquatableHeadType|_|) : TcGlobals -> TType -> unit option -val DetectFastIntegerForLoops : TcGlobals -> Expr -> Expr +type OptimizeForExpressionOptions = OptimizeIntRangesOnly | OptimizeAllForExpressions +val DetectAndOptimizeForExpression : TcGlobals -> OptimizeForExpressionOptions -> Expr -> Expr + val TryEliminateDesugaredConstants : TcGlobals -> range -> Const -> Expr option val ValIsExplicitImpl : TcGlobals -> Val -> bool diff --git a/src/fsharp/pickle.fs b/src/fsharp/TastPickle.fs old mode 100644 new mode 100755 similarity index 98% rename from src/fsharp/pickle.fs rename to src/fsharp/TastPickle.fs index 730da22cff8..57d5badbdf1 --- a/src/fsharp/pickle.fs +++ b/src/fsharp/TastPickle.fs @@ -1,6 +1,6 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Pickle +module internal Microsoft.FSharp.Compiler.TastPickle open System.Collections.Generic open System.Text @@ -19,6 +19,7 @@ open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Rational open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.ErrorLogger @@ -121,7 +122,7 @@ type WriterState = opubpaths: Table; onlerefs: Table; osimpletyps: Table; - oglobals : Env.TcGlobals; + oglobals : TcGlobals; ofile : string; } let pfailwith st str = ffailwith st.ofile str @@ -153,7 +154,7 @@ type ReaderState = inlerefs: InputTable; isimpletyps: InputTable; ifile: string; - iILModule : ILModuleDef // the Abstract IL metadata for the DLL being read + iILModule : ILModuleDef option // the Abstract IL metadata for the DLL being read } let ufailwith st str = ffailwith st.ifile str @@ -730,7 +731,7 @@ let check (ilscope:ILScopeRef) (inMap : NodeInTable<_,_>) = warning(Error(FSComp.SR.pickleMissingDefinition (i, inMap.Name, ilscope.QualifiedName), range0)) // Note for compiler developers: to get information about which item this index relates to, enable the conditional in Pickle.p_osgn_ref to refer to the given index number and recompile an identical copy of the source for the DLL containing the data being unpickled. A message will then be printed indicating the name of the item.\n" -let unpickleObjWithDanglingCcus file ilscope (iILModule:ILModuleDef) u (phase2bytes:byte[]) = +let unpickleObjWithDanglingCcus file ilscope (iILModule:ILModuleDef option) u (phase2bytes:byte[]) = let st2 = { is = ByteStream.FromBytes (phase2bytes,0,phase2bytes.Length); iilscope= ilscope; @@ -1270,10 +1271,12 @@ let p_typs = (p_list p_typ) let fill_p_attribs,p_attribs = p_hole() -let p_nonlocal_val_ref {EnclosingEntity=a;ItemKey= key } st = +let p_nonlocal_val_ref (nlv:NonLocalValOrMemberRef) st = + let a = nlv.EnclosingEntity + let key = nlv.ItemKey let pkey = key.PartialKey - p_tcref "nlvref" a st; - p_option p_string pkey.MemberParentMangledName st; + p_tcref "nlvref" a st + p_option p_string pkey.MemberParentMangledName st p_bool pkey.MemberIsOverride st; p_string pkey.LogicalName st; p_int pkey.TotalArgCount st; @@ -1291,14 +1294,15 @@ let fill_u_typ,u_typ = u_hole() let u_typs = (u_list u_typ) let fill_u_attribs,u_attribs = u_hole() -let u_nonlocal_val_ref st = +let u_nonlocal_val_ref st : NonLocalValOrMemberRef = let a = u_tcref st let b1 = u_option u_string st let b2 = u_bool st let b3 = u_string st let c = u_int st let d = u_option u_typ st - {EnclosingEntity = a; ItemKey=ValLinkageFullKey({ MemberParentMangledName=b1; MemberIsOverride=b2;LogicalName=b3; TotalArgCount=c }, d) } + { EnclosingEntity = a + ItemKey=ValLinkageFullKey({ MemberParentMangledName=b1; MemberIsOverride=b2;LogicalName=b3; TotalArgCount=c }, d) } let u_vref st = let tag = u_byte st @@ -1783,7 +1787,7 @@ and p_attrib_expr (AttribExpr(e1,e2)) st = and p_attrib_arg (AttribNamedArg(a,b,c,d)) st = p_tup4 p_string p_typ p_bool p_attrib_expr (a,b,c,d) st -and p_member_info x st = +and p_member_info (x:ValMemberInfo) st = p_tup4 (p_tcref "member_info") p_MemberFlags (p_list p_slotsig) p_bool (x.ApparentParent,x.MemberFlags,x.ImplementedSlotSigs,x.IsImplemented) st @@ -1836,7 +1840,7 @@ and p_ValData x st = ( x.val_logical_name, x.val_compiled_name, // only keep range information on published values, not on optimization data - (if x.val_repr_info.IsSome then Some(x.val_range, x.val_defn_range) else None), + (if x.val_repr_info.IsSome then Some(x.val_range, x.DefinitionRange) else None), x.val_type, x.val_flags.PickledBits, x.val_member_info, @@ -1883,13 +1887,16 @@ and u_tycon_repr st = (fun flagBit -> if flagBit then let iltref = v.TypeRef + match st.iILModule with + | None -> TNoRepr + | Some iILModule -> try let rec find acc enclosingTypeNames (tdefs:ILTypeDefs) = match enclosingTypeNames with | [] -> List.rev acc, tdefs.FindByName iltref.Name | h::t -> let nestedTypeDef = tdefs.FindByName h find (tdefs.FindByName h :: acc) t nestedTypeDef.NestedTypes - let nestedILTypeDefs,ilTypeDef = find [] iltref.Enclosing st.iILModule.TypeDefs + let nestedILTypeDefs,ilTypeDef = find [] iltref.Enclosing iILModule.TypeDefs TILObjModelRepr(st.iilscope,nestedILTypeDefs,ilTypeDef) with _ -> System.Diagnostics.Debug.Assert(false, sprintf "failed to find IL backing metadata for cross-assembly generated type %s" iltref.FullName) @@ -1911,7 +1918,14 @@ and u_tycon_objmodel_data st = and u_unioncase_spec st = let a,b,c,d,e,f,i = u_tup7 u_rfield_table u_typ u_string u_ident u_attribs u_string u_access st - {FieldTable=a; ReturnType=b; CompiledName=c; Id=d; Attribs=e;XmlDoc=XmlDoc.Empty;XmlDocSig=f;Accessibility=i } + {FieldTable=a; + ReturnType=b; + CompiledName=c; + Id=d; + Attribs=e; + XmlDoc=XmlDoc.Empty; + XmlDocSig=f;Accessibility=i; + OtherRangeOpt=None } and u_exnc_spec_data st = u_entity_spec_data st @@ -1957,7 +1971,8 @@ and u_recdfield_spec st = rfield_fattribs=e2; rfield_xmldoc=XmlDoc.Empty; rfield_xmldocsig=f; - rfield_access=g } + rfield_access=g + rfield_other_range = None } and u_rfield_table st = MakeRecdFieldsTable (u_list u_recdfield_spec st) @@ -1991,6 +2006,7 @@ and u_entity_spec_data st : EntityData = entity_logical_name=x2a; entity_compiled_name=x2b; entity_range=x2c; + entity_other_range=None; entity_pubpath=x3; entity_accessiblity=x4a; entity_tycon_repr_accessibility=x4b; @@ -2064,7 +2080,7 @@ and u_attrib_arg st = let a,b,c,d = u_tup4 u_string u_typ u_bool u_attrib_expr st AttribNamedArg(a,b,c,d) -and u_member_info st = +and u_member_info st : ValMemberInfo = let x2,x3,x4,x5 = u_tup4 u_tcref u_MemberFlags (u_list u_slotsig) u_bool st { ApparentParent=x2; MemberFlags=x3; @@ -2125,7 +2141,7 @@ and u_ValData st = { val_logical_name=x1; val_compiled_name=x1z; val_range=(match x1a with None -> range0 | Some(a,_) -> a); - val_defn_range=(match x1a with None -> range0 | Some(_,b) -> b); + val_other_range=(match x1a with None -> None | Some(_,b) -> Some(b,true)); val_type=x2; val_stamp=newStamp(); val_flags=ValFlags(x4); @@ -2524,12 +2540,12 @@ let _ = fill_u_FlatVals (u_FlatList u_Val) #if INCLUDE_METADATA_WRITER let pickleModuleOrNamespace mspec st = p_tycon_spec mspec st -let pickleModuleInfo minfo st = +let pickleCcuInfo minfo st = p_tup4 pickleModuleOrNamespace p_string p_bool (p_space 3) (minfo.mspec, minfo.compileTimeWorkingDir, minfo.usesQuotations,()) st #endif let unpickleModuleOrNamespace st = u_tycon_spec st -let unpickleModuleInfo st = +let unpickleCcuInfo st = let a,b,c,_space = u_tup4 unpickleModuleOrNamespace u_string u_bool (u_space 3) st { mspec=a; compileTimeWorkingDir=b; usesQuotations=c } diff --git a/src/fsharp/TastPickle.fsi b/src/fsharp/TastPickle.fsi new file mode 100644 index 00000000000..a5bf150061c --- /dev/null +++ b/src/fsharp/TastPickle.fsi @@ -0,0 +1,151 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +/// Defines the framework for serializing and de-serializing TAST data structures as binary blobs for the F# metadata format. +module internal Microsoft.FSharp.Compiler.TastPickle + +open Internal.Utilities +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.AbstractIL +open Microsoft.FSharp.Compiler.AbstractIL.IL +open Microsoft.FSharp.Compiler.AbstractIL.Internal +open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library +open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals + +/// Represents deserialized data with a dangling set of CCU fixup thunks indexed by name +[] +type PickledDataWithReferences<'RawData> = + { /// The data that uses a collection of CcuThunks internally + RawData: 'RawData; + /// The assumptions that need to be fixed up + FixupThunks: list } + + member Fixup : (CcuReference -> CcuThunk) -> 'RawData + /// Like Fixup but loader may return None, in which case there is no fixup. + member OptionalFixup: (CcuReference -> CcuThunk option) -> 'RawData + +#if INCLUDE_METADATA_WRITER +/// The type of state written to by picklers +type WriterState + +/// A function to pickle a value into a given stateful writer +type pickler<'T> = 'T -> WriterState -> unit + +/// Serialize a byte +val internal p_byte : int -> WriterState -> unit + +/// Serialize a boolean value +val internal p_bool : bool -> WriterState -> unit + +/// Serialize an integer +val internal p_int : int -> WriterState -> unit + +/// Serialize a string +val internal p_string : string -> WriterState -> unit + +/// Serialize a lazy value (eagerly) +val internal p_lazy : pickler<'T> -> Lazy<'T> pickler + +/// Serialize a tuple of data +val inline internal p_tup2 : pickler<'T1> -> pickler<'T2> -> pickler<'T1 * 'T2> + +/// Serialize a tuple of data +val inline internal p_tup3 : pickler<'T1> -> pickler<'T2> -> pickler<'T3> -> pickler<'T1 * 'T2 * 'T3> + +/// Serialize a tuple of data +val inline internal p_tup4 : pickler<'T1> -> pickler<'T2> -> pickler<'T3> -> pickler<'T4> -> pickler<'T1 * 'T2 * 'T3 * 'T4> + +/// Serialize an array of data +val internal p_array : pickler<'T> -> pickler<'T[]> + +/// Serialize a namemap of data +val internal p_namemap : pickler<'T> -> pickler> + +/// Serialize a TAST constant +val internal p_const : pickler + +/// Serialize a TAST value reference +val internal p_vref : string -> pickler + +/// Serialize a TAST type or entity reference +val internal p_tcref : string -> pickler + +/// Serialize a TAST union case reference +val internal p_ucref : pickler + +/// Serialize a TAST expression +val internal p_expr : pickler + +/// Serialize a TAST type +val internal p_typ : pickler + +/// Serialize a TAST description of a compilation unit +val internal pickleCcuInfo : pickler + +/// Serialize an arbitrary object using the given pickler +val pickleObjWithDanglingCcus : string -> TcGlobals -> scope:CcuThunk -> pickler<'T> -> 'T -> byte[] +#else +#endif + +/// The type of state unpicklers read from +type ReaderState + +/// A function to read a value from a given state +type unpickler<'T> = ReaderState -> 'T + +/// Deserialize a byte +val internal u_byte : ReaderState -> int + +/// Deserialize a bool +val internal u_bool : ReaderState -> bool + +/// Deserialize an integer +val internal u_int : ReaderState -> int + +/// Deserialize a string +val internal u_string : ReaderState -> string + +/// Deserialize a lazy value (eagerly) +val internal u_lazy : unpickler<'T> -> unpickler> + +/// Deserialize a tuple +val inline internal u_tup2 : unpickler<'T2> -> unpickler<'T3> -> unpickler<'T2 * 'T3> + +/// Deserialize a tuple +val inline internal u_tup3 : unpickler<'T2> -> unpickler<'T3> -> unpickler<'T4> -> unpickler<'T2 * 'T3 * 'T4> + +/// Deserialize a tuple +val inline internal u_tup4 : unpickler<'T2> -> unpickler<'T3> -> unpickler<'T4> -> unpickler<'T5> -> unpickler<'T2 * 'T3 * 'T4 * 'T5> + +/// Deserialize an array of values +val internal u_array : unpickler<'T> -> unpickler<'T[]> + +/// Deserialize a namemap +val internal u_namemap : unpickler<'T> -> unpickler> + +/// Deserialize a TAST constant +val internal u_const : unpickler + +/// Deserialize a TAST value reference +val internal u_vref : unpickler + +/// Deserialize a TAST type reference +val internal u_tcref : unpickler + +/// Deserialize a TAST union case reference +val internal u_ucref : unpickler + +/// Deserialize a TAST expression +val internal u_expr : unpickler + +/// Deserialize a TAST type +val internal u_typ : unpickler + +/// Deserialize a TAST description of a compilation unit +val internal unpickleCcuInfo : ReaderState -> PickledCcuInfo + +/// Deserialize an arbitrary object which may have holes referring to other compilation units +val internal unpickleObjWithDanglingCcus : string -> viewedScope:ILScopeRef -> ilModule:ILModuleDef option -> ('T unpickler) -> byte[] -> PickledDataWithReferences<'T> + + + diff --git a/src/fsharp/env.fs b/src/fsharp/TcGlobals.fs old mode 100644 new mode 100755 similarity index 70% rename from src/fsharp/env.fs rename to src/fsharp/TcGlobals.fs index 940bcf4caab..b9174acb89b --- a/src/fsharp/env.fs +++ b/src/fsharp/TcGlobals.fs @@ -1,15 +1,12 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -//------------------------------------------------------------------------- -// Define Initial Environment. A bunch of types and values are hard-wired -// into the compiler. This lets the compiler perform particular optimizations -// for these types and values, for example emitting optimized calls for -// comparison and hashing functions. The compiler generates the compiled code -// for these types and values when the the --compiling-fslib switch is -// provided when linking the FSharp.Core.dll assembly. -//------------------------------------------------------------------------- - -module internal Microsoft.FSharp.Compiler.Env +/// Defines the global environment for all type checking. +/// +/// The environment (TcGlobals) are well-known types and values are hard-wired +/// into the compiler. This lets the compiler perform particular optimizations +/// for these types and values, for example emitting optimized calls for +/// comparison and hashing functions. +module internal Microsoft.FSharp.Compiler.TcGlobals #nowarn "44" // This construct is deprecated. please use List.item @@ -34,20 +31,6 @@ open System.Collections.Generic let internal DummyFileNameForRangesWithoutASpecificLocation = "startup" let private envRange = rangeN DummyFileNameForRangesWithoutASpecificLocation 0 -let vara = NewRigidTypar "a" envRange -let varb = NewRigidTypar "b" envRange -let private varc = NewRigidTypar "c" envRange -let private vard = NewRigidTypar "d" envRange -let private vare = NewRigidTypar "e" envRange -let private varf = NewRigidTypar "f" envRange -let private varg = NewRigidTypar "g" envRange - -let varaTy = mkTyparTy vara -let varbTy = mkTyparTy varb -let private varcTy = mkTyparTy varc -let private vardTy = mkTyparTy vard -let private vareTy = mkTyparTy vare - type public IntrinsicValRef = IntrinsicValRef of NonLocalEntityRef * string * bool * TType * ValLinkageFullKey let ValRefForIntrinsic (IntrinsicValRef(mvr,_,_,_,key)) = mkNonLocalValRef mvr key @@ -120,432 +103,447 @@ type public BuiltinAttribInfo = [] type public TcGlobals = - { ilg : ILGlobals; + { ilg : ILGlobals #if NO_COMPILER_BACKEND #else - ilxPubCloEnv : EraseIlxFuncs.cenv; + ilxPubCloEnv : EraseClosures.cenv #endif emitDebugInfoInQuotations : bool - compilingFslib: bool; - mlCompatibility : bool; - directoryToResolveRelativePaths : string; - fslibCcu: CcuThunk; - sysCcu: CcuThunk; - using40environment: bool; - indirectCallArrayMethods: bool; - better_tcref_map: TyconRef -> TypeInst -> TType option; - refcell_tcr_canon: TyconRef; - option_tcr_canon : TyconRef; - choice2_tcr : TyconRef; - choice3_tcr : TyconRef; - choice4_tcr : TyconRef; - choice5_tcr : TyconRef; - choice6_tcr : TyconRef; - choice7_tcr : TyconRef; - list_tcr_canon : TyconRef; - set_tcr_canon : TyconRef; - map_tcr_canon : TyconRef; - lazy_tcr_canon : TyconRef; + compilingFslib: bool + mlCompatibility : bool + directoryToResolveRelativePaths : string + fslibCcu: CcuThunk + sysCcu: CcuThunk + using40environment: bool + better_tcref_map: TyconRef -> TypeInst -> TType option + refcell_tcr_canon: TyconRef + option_tcr_canon : TyconRef + choice2_tcr : TyconRef + choice3_tcr : TyconRef + choice4_tcr : TyconRef + choice5_tcr : TyconRef + choice6_tcr : TyconRef + choice7_tcr : TyconRef + list_tcr_canon : TyconRef + set_tcr_canon : TyconRef + map_tcr_canon : TyconRef + lazy_tcr_canon : TyconRef // These have a slightly different behaviour when compiling GetFSharpCoreLibraryName // hence they are 'methods' on the TcGlobals structure. - unionCaseRefEq : UnionCaseRef -> UnionCaseRef -> bool; - valRefEq : ValRef -> ValRef -> bool; - - refcell_tcr_nice: TyconRef; - option_tcr_nice : TyconRef; - list_tcr_nice : TyconRef; - lazy_tcr_nice : TyconRef; - - format_tcr : TyconRef; - expr_tcr : TyconRef; - raw_expr_tcr : TyconRef; - nativeint_tcr : TyconRef; - int32_tcr : TyconRef; - int16_tcr : TyconRef; - int64_tcr : TyconRef; - uint16_tcr : TyconRef; - uint32_tcr : TyconRef; - uint64_tcr : TyconRef; - sbyte_tcr : TyconRef; - decimal_tcr : TyconRef; - date_tcr : TyconRef; - pdecimal_tcr : TyconRef; - byte_tcr : TyconRef; - bool_tcr : TyconRef; - unit_tcr_canon : TyconRef; - unit_tcr_nice : TyconRef; - exn_tcr : TyconRef; - char_tcr : TyconRef; - float_tcr : TyconRef; - float32_tcr : TyconRef; - pfloat_tcr : TyconRef; - pfloat32_tcr : TyconRef; - pint_tcr : TyconRef; - pint8_tcr : TyconRef; - pint16_tcr : TyconRef; - pint64_tcr : TyconRef; - byref_tcr : TyconRef; - nativeptr_tcr : TyconRef; - ilsigptr_tcr : TyconRef; - fastFunc_tcr : TyconRef; - array_tcr_nice : TyconRef; - seq_tcr : TyconRef; - seq_base_tcr : TyconRef; + unionCaseRefEq : UnionCaseRef -> UnionCaseRef -> bool + valRefEq : ValRef -> ValRef -> bool + + refcell_tcr_nice: TyconRef + option_tcr_nice : TyconRef + list_tcr_nice : TyconRef + lazy_tcr_nice : TyconRef + + format_tcr : TyconRef + expr_tcr : TyconRef + raw_expr_tcr : TyconRef + nativeint_tcr : TyconRef + int32_tcr : TyconRef + int16_tcr : TyconRef + int64_tcr : TyconRef + uint16_tcr : TyconRef + uint32_tcr : TyconRef + uint64_tcr : TyconRef + sbyte_tcr : TyconRef + decimal_tcr : TyconRef + date_tcr : TyconRef + pdecimal_tcr : TyconRef + byte_tcr : TyconRef + bool_tcr : TyconRef + unit_tcr_canon : TyconRef + unit_tcr_nice : TyconRef + exn_tcr : TyconRef + char_tcr : TyconRef + float_tcr : TyconRef + float32_tcr : TyconRef + pfloat_tcr : TyconRef + pfloat32_tcr : TyconRef + pint_tcr : TyconRef + pint8_tcr : TyconRef + pint16_tcr : TyconRef + pint64_tcr : TyconRef + byref_tcr : TyconRef + nativeptr_tcr : TyconRef + ilsigptr_tcr : TyconRef + fastFunc_tcr : TyconRef + array_tcr_nice : TyconRef + seq_tcr : TyconRef + seq_base_tcr : TyconRef measureproduct_tcr : TyconRef measureinverse_tcr : TyconRef measureone_tcr : TyconRef - il_arr_tcr_map : TyconRef[]; - tuple1_tcr : TyconRef; - tuple2_tcr : TyconRef; - tuple3_tcr : TyconRef; - tuple4_tcr : TyconRef; - tuple5_tcr : TyconRef; - tuple6_tcr : TyconRef; - tuple7_tcr : TyconRef; - tuple8_tcr : TyconRef; - - tcref_IQueryable : TyconRef; - tcref_IObservable : TyconRef; - tcref_IObserver : TyconRef; - fslib_IEvent2_tcr : TyconRef; - fslib_IDelegateEvent_tcr: TyconRef; - system_Nullable_tcref : TyconRef; - system_GenericIComparable_tcref : TyconRef; - system_GenericIEquatable_tcref : TyconRef; - system_IndexOutOfRangeException_tcref : TyconRef; - int_ty : TType; - nativeint_ty : TType; - unativeint_ty : TType; - int32_ty : TType; - int16_ty : TType; - int64_ty : TType; - uint16_ty : TType; - uint32_ty : TType; - uint64_ty : TType; - sbyte_ty : TType; - byte_ty : TType; - bool_ty : TType; - string_ty : TType; - obj_ty : TType; - unit_ty : TType; - exn_ty : TType; - char_ty : TType; - decimal_ty : TType; - float_ty : TType; - float32_ty : TType; - system_Array_typ : TType; - system_Object_typ : TType; - system_IDisposable_typ : TType; - system_Value_typ : TType; - system_Delegate_typ : TType; - system_MulticastDelegate_typ : TType; - system_Enum_typ : TType; - system_Exception_typ : TType; - system_Int32_typ : TType; - system_String_typ : TType; - system_Type_typ : TType; - system_TypedReference_tcref : TyconRef option; - system_ArgIterator_tcref : TyconRef option; - system_Decimal_tcref : TyconRef; - system_SByte_tcref : TyconRef; - system_Int16_tcref : TyconRef; - system_Int32_tcref : TyconRef; - system_Int64_tcref : TyconRef; - system_IntPtr_tcref : TyconRef; - system_Bool_tcref : TyconRef; - system_Char_tcref : TyconRef; - system_Byte_tcref : TyconRef; - system_UInt16_tcref : TyconRef; - system_UInt32_tcref : TyconRef; - system_UInt64_tcref : TyconRef; - system_UIntPtr_tcref : TyconRef; - system_Single_tcref : TyconRef; - system_Double_tcref : TyconRef; - system_RuntimeArgumentHandle_tcref : TyconRef option; - system_RuntimeTypeHandle_typ : TType; - system_RuntimeMethodHandle_typ : TType; - system_MarshalByRefObject_tcref : TyconRef option; - system_MarshalByRefObject_typ : TType option; - system_Reflection_MethodInfo_typ : TType; - system_Array_tcref : TyconRef; - system_Object_tcref : TyconRef; - system_Void_tcref : TyconRef; - system_LinqExpression_tcref : TyconRef; - mk_IComparable_ty : TType; - mk_IStructuralComparable_ty : TType; - mk_IStructuralEquatable_ty : TType; - mk_IComparer_ty : TType; - mk_IEqualityComparer_ty : TType; - tcref_System_Collections_IComparer : TyconRef; - tcref_System_Collections_IEqualityComparer : TyconRef; - tcref_System_Collections_Generic_IEqualityComparer : TyconRef; - tcref_System_Collections_Generic_Dictionary : TyconRef; - tcref_System_IComparable : TyconRef; - tcref_System_IStructuralComparable : TyconRef; - tcref_System_IStructuralEquatable : TyconRef; - tcref_LanguagePrimitives : TyconRef; - attrib_CustomOperationAttribute : BuiltinAttribInfo; - attrib_ProjectionParameterAttribute : BuiltinAttribInfo; - attrib_AttributeUsageAttribute : BuiltinAttribInfo; - attrib_ParamArrayAttribute : BuiltinAttribInfo; - attrib_IDispatchConstantAttribute : BuiltinAttribInfo option; - attrib_IUnknownConstantAttribute : BuiltinAttribInfo option; - attrib_SystemObsolete : BuiltinAttribInfo; - attrib_DllImportAttribute : BuiltinAttribInfo option; - attrib_CompiledNameAttribute : BuiltinAttribInfo; - attrib_NonSerializedAttribute : BuiltinAttribInfo option; - attrib_AutoSerializableAttribute : BuiltinAttribInfo; - attrib_StructLayoutAttribute : BuiltinAttribInfo; - attrib_TypeForwardedToAttribute : BuiltinAttribInfo; - attrib_ComVisibleAttribute : BuiltinAttribInfo; - attrib_ComImportAttribute : BuiltinAttribInfo option; - attrib_FieldOffsetAttribute : BuiltinAttribInfo; - attrib_MarshalAsAttribute : BuiltinAttribInfo option; - attrib_InAttribute : BuiltinAttribInfo option; - attrib_OutAttribute : BuiltinAttribInfo; - attrib_OptionalAttribute : BuiltinAttribInfo option; - attrib_ThreadStaticAttribute : BuiltinAttribInfo option; - attrib_SpecialNameAttribute : BuiltinAttribInfo option; - attrib_VolatileFieldAttribute : BuiltinAttribInfo; - attrib_ContextStaticAttribute : BuiltinAttribInfo option; - attrib_FlagsAttribute : BuiltinAttribInfo; - attrib_DefaultMemberAttribute : BuiltinAttribInfo; - attrib_DebuggerDisplayAttribute : BuiltinAttribInfo; - attrib_DebuggerTypeProxyAttribute : BuiltinAttribInfo; - attrib_PreserveSigAttribute : BuiltinAttribInfo option; - attrib_MethodImplAttribute : BuiltinAttribInfo; - attrib_ExtensionAttribute : BuiltinAttribInfo; - tcref_System_Collections_Generic_IList : TyconRef; - tcref_System_Collections_Generic_IReadOnlyList : TyconRef; - tcref_System_Collections_Generic_ICollection : TyconRef; - tcref_System_Collections_Generic_IReadOnlyCollection : TyconRef; - tcref_System_Collections_Generic_IEnumerable : TyconRef; - tcref_System_Collections_IEnumerable : TyconRef; - tcref_System_Collections_Generic_IEnumerator : TyconRef; - tcref_System_Attribute : TyconRef; - - attrib_RequireQualifiedAccessAttribute : BuiltinAttribInfo; - attrib_EntryPointAttribute : BuiltinAttribInfo; - attrib_DefaultAugmentationAttribute : BuiltinAttribInfo; - attrib_CompilerMessageAttribute : BuiltinAttribInfo; - attrib_ExperimentalAttribute : BuiltinAttribInfo; - attrib_UnverifiableAttribute : BuiltinAttribInfo; - attrib_LiteralAttribute : BuiltinAttribInfo; - attrib_ConditionalAttribute : BuiltinAttribInfo; - attrib_OptionalArgumentAttribute : BuiltinAttribInfo; - attrib_RequiresExplicitTypeArgumentsAttribute : BuiltinAttribInfo; - attrib_DefaultValueAttribute : BuiltinAttribInfo; - attrib_ClassAttribute : BuiltinAttribInfo; - attrib_InterfaceAttribute : BuiltinAttribInfo; - attrib_StructAttribute : BuiltinAttribInfo; - attrib_ReflectedDefinitionAttribute : BuiltinAttribInfo; - attrib_AutoOpenAttribute : BuiltinAttribInfo; - attrib_CompilationRepresentationAttribute : BuiltinAttribInfo; - attrib_CompilationArgumentCountsAttribute : BuiltinAttribInfo; - attrib_CompilationMappingAttribute : BuiltinAttribInfo; - - attrib_CLIEventAttribute : BuiltinAttribInfo; - attrib_AllowNullLiteralAttribute : BuiltinAttribInfo; - attrib_CLIMutableAttribute : BuiltinAttribInfo; - attrib_NoComparisonAttribute : BuiltinAttribInfo; - attrib_NoEqualityAttribute : BuiltinAttribInfo; - attrib_CustomComparisonAttribute : BuiltinAttribInfo; - attrib_CustomEqualityAttribute : BuiltinAttribInfo; - attrib_EqualityConditionalOnAttribute : BuiltinAttribInfo; - attrib_ComparisonConditionalOnAttribute : BuiltinAttribInfo; - attrib_ReferenceEqualityAttribute : BuiltinAttribInfo; - attrib_StructuralEqualityAttribute : BuiltinAttribInfo; - attrib_StructuralComparisonAttribute : BuiltinAttribInfo; - attrib_SealedAttribute : BuiltinAttribInfo; - attrib_AbstractClassAttribute : BuiltinAttribInfo; - attrib_GeneralizableValueAttribute : BuiltinAttribInfo; - attrib_MeasureAttribute : BuiltinAttribInfo; - attrib_MeasureableAttribute : BuiltinAttribInfo; - attrib_NoDynamicInvocationAttribute : BuiltinAttribInfo; + il_arr_tcr_map : TyconRef[] + tuple1_tcr : TyconRef + tuple2_tcr : TyconRef + tuple3_tcr : TyconRef + tuple4_tcr : TyconRef + tuple5_tcr : TyconRef + tuple6_tcr : TyconRef + tuple7_tcr : TyconRef + tuple8_tcr : TyconRef + + tcref_IQueryable : TyconRef + tcref_IObservable : TyconRef + tcref_IObserver : TyconRef + fslib_IEvent2_tcr : TyconRef + fslib_IDelegateEvent_tcr: TyconRef + system_Nullable_tcref : TyconRef + system_GenericIComparable_tcref : TyconRef + system_GenericIEquatable_tcref : TyconRef + system_IndexOutOfRangeException_tcref : TyconRef + int_ty : TType + nativeint_ty : TType + unativeint_ty : TType + int32_ty : TType + int16_ty : TType + int64_ty : TType + uint16_ty : TType + uint32_ty : TType + uint64_ty : TType + sbyte_ty : TType + byte_ty : TType + bool_ty : TType + string_ty : TType + obj_ty : TType + unit_ty : TType + exn_ty : TType + char_ty : TType + decimal_ty : TType + float_ty : TType + float32_ty : TType + system_Array_typ : TType + system_Object_typ : TType + system_IDisposable_typ : TType + system_Value_typ : TType + system_Delegate_typ : TType + system_MulticastDelegate_typ : TType + system_Enum_typ : TType + system_Exception_typ : TType + system_Int32_typ : TType + system_String_typ : TType + system_String_tcref : TyconRef + system_Type_typ : TType + system_TypedReference_tcref : TyconRef option + system_ArgIterator_tcref : TyconRef option + system_Decimal_tcref : TyconRef + system_SByte_tcref : TyconRef + system_Int16_tcref : TyconRef + system_Int32_tcref : TyconRef + system_Int64_tcref : TyconRef + system_IntPtr_tcref : TyconRef + system_Bool_tcref : TyconRef + system_Char_tcref : TyconRef + system_Byte_tcref : TyconRef + system_UInt16_tcref : TyconRef + system_UInt32_tcref : TyconRef + system_UInt64_tcref : TyconRef + system_UIntPtr_tcref : TyconRef + system_Single_tcref : TyconRef + system_Double_tcref : TyconRef + system_RuntimeArgumentHandle_tcref : TyconRef option + system_RuntimeTypeHandle_typ : TType + system_RuntimeMethodHandle_typ : TType + system_MarshalByRefObject_tcref : TyconRef option + system_MarshalByRefObject_typ : TType option + system_Reflection_MethodInfo_typ : TType + system_Array_tcref : TyconRef + system_Object_tcref : TyconRef + system_Void_tcref : TyconRef + system_LinqExpression_tcref : TyconRef + mk_IComparable_ty : TType + mk_IStructuralComparable_ty : TType + mk_IStructuralEquatable_ty : TType + mk_IComparer_ty : TType + mk_IEqualityComparer_ty : TType + tcref_System_Collections_IComparer : TyconRef + tcref_System_Collections_IEqualityComparer : TyconRef + tcref_System_Collections_Generic_IEqualityComparer : TyconRef + tcref_System_Collections_Generic_Dictionary : TyconRef + tcref_System_IComparable : TyconRef + tcref_System_IStructuralComparable : TyconRef + tcref_System_IStructuralEquatable : TyconRef + tcref_LanguagePrimitives : TyconRef + attrib_CustomOperationAttribute : BuiltinAttribInfo + attrib_ProjectionParameterAttribute : BuiltinAttribInfo + attrib_AttributeUsageAttribute : BuiltinAttribInfo + attrib_ParamArrayAttribute : BuiltinAttribInfo + attrib_IDispatchConstantAttribute : BuiltinAttribInfo option + attrib_IUnknownConstantAttribute : BuiltinAttribInfo option + attrib_SystemObsolete : BuiltinAttribInfo + attrib_DllImportAttribute : BuiltinAttribInfo option + attrib_CompiledNameAttribute : BuiltinAttribInfo + attrib_NonSerializedAttribute : BuiltinAttribInfo option + attrib_AutoSerializableAttribute : BuiltinAttribInfo + attrib_StructLayoutAttribute : BuiltinAttribInfo + attrib_TypeForwardedToAttribute : BuiltinAttribInfo + attrib_ComVisibleAttribute : BuiltinAttribInfo + attrib_ComImportAttribute : BuiltinAttribInfo option + attrib_FieldOffsetAttribute : BuiltinAttribInfo + attrib_MarshalAsAttribute : BuiltinAttribInfo option + attrib_InAttribute : BuiltinAttribInfo option + attrib_OutAttribute : BuiltinAttribInfo + attrib_OptionalAttribute : BuiltinAttribInfo option + attrib_ThreadStaticAttribute : BuiltinAttribInfo option + attrib_SpecialNameAttribute : BuiltinAttribInfo option + attrib_VolatileFieldAttribute : BuiltinAttribInfo + attrib_ContextStaticAttribute : BuiltinAttribInfo option + attrib_FlagsAttribute : BuiltinAttribInfo + attrib_DefaultMemberAttribute : BuiltinAttribInfo + attrib_DebuggerDisplayAttribute : BuiltinAttribInfo + attrib_DebuggerTypeProxyAttribute : BuiltinAttribInfo + attrib_PreserveSigAttribute : BuiltinAttribInfo option + attrib_MethodImplAttribute : BuiltinAttribInfo + attrib_ExtensionAttribute : BuiltinAttribInfo + tcref_System_Collections_Generic_IList : TyconRef + tcref_System_Collections_Generic_IReadOnlyList : TyconRef + tcref_System_Collections_Generic_ICollection : TyconRef + tcref_System_Collections_Generic_IReadOnlyCollection : TyconRef + tcref_System_Collections_Generic_IEnumerable : TyconRef + tcref_System_Collections_IEnumerable : TyconRef + tcref_System_Collections_Generic_IEnumerator : TyconRef + tcref_System_Attribute : TyconRef + + attrib_RequireQualifiedAccessAttribute : BuiltinAttribInfo + attrib_EntryPointAttribute : BuiltinAttribInfo + attrib_DefaultAugmentationAttribute : BuiltinAttribInfo + attrib_CompilerMessageAttribute : BuiltinAttribInfo + attrib_ExperimentalAttribute : BuiltinAttribInfo + attrib_UnverifiableAttribute : BuiltinAttribInfo + attrib_LiteralAttribute : BuiltinAttribInfo + attrib_ConditionalAttribute : BuiltinAttribInfo + attrib_OptionalArgumentAttribute : BuiltinAttribInfo + attrib_RequiresExplicitTypeArgumentsAttribute : BuiltinAttribInfo + attrib_DefaultValueAttribute : BuiltinAttribInfo + attrib_ClassAttribute : BuiltinAttribInfo + attrib_InterfaceAttribute : BuiltinAttribInfo + attrib_StructAttribute : BuiltinAttribInfo + attrib_ReflectedDefinitionAttribute : BuiltinAttribInfo + attrib_AutoOpenAttribute : BuiltinAttribInfo + attrib_InternalsVisibleToAttribute : BuiltinAttribInfo + attrib_CompilationRepresentationAttribute : BuiltinAttribInfo + attrib_CompilationArgumentCountsAttribute : BuiltinAttribInfo + attrib_CompilationMappingAttribute : BuiltinAttribInfo + + attrib_CLIEventAttribute : BuiltinAttribInfo + attrib_AllowNullLiteralAttribute : BuiltinAttribInfo + attrib_CLIMutableAttribute : BuiltinAttribInfo + attrib_NoComparisonAttribute : BuiltinAttribInfo + attrib_NoEqualityAttribute : BuiltinAttribInfo + attrib_CustomComparisonAttribute : BuiltinAttribInfo + attrib_CustomEqualityAttribute : BuiltinAttribInfo + attrib_EqualityConditionalOnAttribute : BuiltinAttribInfo + attrib_ComparisonConditionalOnAttribute : BuiltinAttribInfo + attrib_ReferenceEqualityAttribute : BuiltinAttribInfo + attrib_StructuralEqualityAttribute : BuiltinAttribInfo + attrib_StructuralComparisonAttribute : BuiltinAttribInfo + attrib_SealedAttribute : BuiltinAttribInfo + attrib_AbstractClassAttribute : BuiltinAttribInfo + attrib_GeneralizableValueAttribute : BuiltinAttribInfo + attrib_MeasureAttribute : BuiltinAttribInfo + attrib_MeasureableAttribute : BuiltinAttribInfo + attrib_NoDynamicInvocationAttribute : BuiltinAttribInfo - attrib_SecurityAttribute : BuiltinAttribInfo option; - attrib_SecurityCriticalAttribute : BuiltinAttribInfo; - attrib_SecuritySafeCriticalAttribute : BuiltinAttribInfo; + attrib_SecurityAttribute : BuiltinAttribInfo option + attrib_SecurityCriticalAttribute : BuiltinAttribInfo + attrib_SecuritySafeCriticalAttribute : BuiltinAttribInfo - cons_ucref : UnionCaseRef; - nil_ucref : UnionCaseRef; + cons_ucref : UnionCaseRef + nil_ucref : UnionCaseRef (* These are the library values the compiler needs to know about *) - seq_vref : ValRef; - and_vref : ValRef; - and2_vref : ValRef; - addrof_vref : ValRef; - addrof2_vref : ValRef; - or_vref : ValRef; - or2_vref : ValRef; + seq_vref : ValRef + and_vref : ValRef + and2_vref : ValRef + addrof_vref : ValRef + addrof2_vref : ValRef + or_vref : ValRef + or2_vref : ValRef // 'inner' refers to "after optimization boils away inlined functions" - generic_equality_er_inner_vref : ValRef; - generic_equality_per_inner_vref : ValRef; - generic_equality_withc_inner_vref : ValRef; - generic_comparison_inner_vref : ValRef; - generic_comparison_withc_inner_vref : ValRef; - generic_hash_inner_vref : ValRef; - generic_hash_withc_inner_vref : ValRef; - reference_equality_inner_vref : ValRef; - - compare_operator_vref : ValRef; - equals_operator_vref : ValRef; - equals_nullable_operator_vref : ValRef; - nullable_equals_nullable_operator_vref : ValRef; - nullable_equals_operator_vref : ValRef; - not_equals_operator_vref : ValRef; - less_than_operator_vref : ValRef; - less_than_or_equals_operator_vref : ValRef; - greater_than_operator_vref : ValRef; - greater_than_or_equals_operator_vref : ValRef; + generic_equality_er_inner_vref : ValRef + generic_equality_per_inner_vref : ValRef + generic_equality_withc_inner_vref : ValRef + generic_comparison_inner_vref : ValRef + generic_comparison_withc_inner_vref : ValRef + generic_hash_inner_vref : ValRef + generic_hash_withc_inner_vref : ValRef + reference_equality_inner_vref : ValRef + + compare_operator_vref : ValRef + equals_operator_vref : ValRef + equals_nullable_operator_vref : ValRef + nullable_equals_nullable_operator_vref : ValRef + nullable_equals_operator_vref : ValRef + not_equals_operator_vref : ValRef + less_than_operator_vref : ValRef + less_than_or_equals_operator_vref : ValRef + greater_than_operator_vref : ValRef + greater_than_or_equals_operator_vref : ValRef - bitwise_or_vref : ValRef; - bitwise_and_vref : ValRef; - bitwise_xor_vref : ValRef; - bitwise_unary_not_vref : ValRef; - bitwise_shift_left_vref : ValRef; - bitwise_shift_right_vref : ValRef; - unchecked_addition_vref : ValRef; - unchecked_unary_plus_vref : ValRef; - unchecked_unary_minus_vref : ValRef; - unchecked_unary_not_vref : ValRef; - unchecked_subtraction_vref : ValRef; - unchecked_multiply_vref : ValRef; - unchecked_defaultof_vref : ValRef; + bitwise_or_vref : ValRef + bitwise_and_vref : ValRef + bitwise_xor_vref : ValRef + bitwise_unary_not_vref : ValRef + bitwise_shift_left_vref : ValRef + bitwise_shift_right_vref : ValRef + unchecked_addition_vref : ValRef + unchecked_unary_plus_vref : ValRef + unchecked_unary_minus_vref : ValRef + unchecked_unary_not_vref : ValRef + unchecked_subtraction_vref : ValRef + unchecked_multiply_vref : ValRef + unchecked_defaultof_vref : ValRef unchecked_subtraction_info : IntrinsicValRef - seq_info : IntrinsicValRef; - reraise_info : IntrinsicValRef; - reraise_vref : ValRef; - typeof_info : IntrinsicValRef; - typeof_vref : ValRef; - methodhandleof_info : IntrinsicValRef; - methodhandleof_vref : ValRef; - sizeof_vref : ValRef; - typedefof_info : IntrinsicValRef; - typedefof_vref : ValRef; - enum_vref : ValRef; + seq_info : IntrinsicValRef + reraise_info : IntrinsicValRef + reraise_vref : ValRef + typeof_info : IntrinsicValRef + typeof_vref : ValRef + methodhandleof_info : IntrinsicValRef + methodhandleof_vref : ValRef + sizeof_vref : ValRef + typedefof_info : IntrinsicValRef + typedefof_vref : ValRef + enum_vref : ValRef enumOfValue_vref : ValRef - new_decimal_info : IntrinsicValRef; + new_decimal_info : IntrinsicValRef // 'outer' refers to 'before optimization has boiled away inlined functions' // Augmentation generation generates calls to these functions // Optimization generates calls to these functions - generic_comparison_withc_outer_info : IntrinsicValRef; - generic_equality_er_outer_info : IntrinsicValRef; - generic_equality_withc_outer_info : IntrinsicValRef; - generic_hash_withc_outer_info : IntrinsicValRef; + generic_comparison_withc_outer_info : IntrinsicValRef + generic_equality_er_outer_info : IntrinsicValRef + generic_equality_withc_outer_info : IntrinsicValRef + generic_hash_withc_outer_info : IntrinsicValRef // Augmentation generation and pattern match compilation generates calls to this function - equals_operator_info : IntrinsicValRef; + equals_operator_info : IntrinsicValRef + + query_source_vref : ValRef + query_value_vref : ValRef + query_run_value_vref : ValRef + query_run_enumerable_vref : ValRef + query_for_vref : ValRef + query_yield_vref : ValRef + query_yield_from_vref : ValRef + query_select_vref : ValRef + query_where_vref : ValRef + query_zero_vref : ValRef + query_builder_tcref : TyconRef + generic_hash_withc_tuple2_vref : ValRef + generic_hash_withc_tuple3_vref : ValRef + generic_hash_withc_tuple4_vref : ValRef + generic_hash_withc_tuple5_vref : ValRef + generic_equals_withc_tuple2_vref : ValRef + generic_equals_withc_tuple3_vref : ValRef + generic_equals_withc_tuple4_vref : ValRef + generic_equals_withc_tuple5_vref : ValRef + generic_compare_withc_tuple2_vref : ValRef + generic_compare_withc_tuple3_vref : ValRef + generic_compare_withc_tuple4_vref : ValRef + generic_compare_withc_tuple5_vref : ValRef + generic_equality_withc_outer_vref : ValRef + + create_instance_info : IntrinsicValRef + create_event_info : IntrinsicValRef + unbox_vref : ValRef + unbox_fast_vref : ValRef + istype_vref : ValRef + istype_fast_vref : ValRef + get_generic_comparer_info : IntrinsicValRef + get_generic_er_equality_comparer_info : IntrinsicValRef + get_generic_per_equality_comparer_info : IntrinsicValRef + unbox_info : IntrinsicValRef + unbox_fast_info : IntrinsicValRef + istype_info : IntrinsicValRef + istype_fast_info : IntrinsicValRef + + dispose_info : IntrinsicValRef - query_source_vref : ValRef; - query_value_vref : ValRef; - query_run_value_vref : ValRef; - query_run_enumerable_vref : ValRef; - query_for_vref : ValRef; - query_yield_vref : ValRef; - query_yield_from_vref : ValRef; - query_select_vref : ValRef; - query_where_vref : ValRef; - query_zero_vref : ValRef; - query_builder_tcref : TyconRef; - generic_hash_withc_tuple2_vref : ValRef; - generic_hash_withc_tuple3_vref : ValRef; - generic_hash_withc_tuple4_vref : ValRef; - generic_hash_withc_tuple5_vref : ValRef; - generic_equals_withc_tuple2_vref : ValRef; - generic_equals_withc_tuple3_vref : ValRef; - generic_equals_withc_tuple4_vref : ValRef; - generic_equals_withc_tuple5_vref : ValRef; - generic_compare_withc_tuple2_vref : ValRef; - generic_compare_withc_tuple3_vref : ValRef; - generic_compare_withc_tuple4_vref : ValRef; - generic_compare_withc_tuple5_vref : ValRef; - generic_equality_withc_outer_vref : ValRef; - - create_instance_info : IntrinsicValRef; - create_event_info : IntrinsicValRef; - unbox_vref : ValRef; - unbox_fast_vref : ValRef; - istype_vref : ValRef; - istype_fast_vref : ValRef; - get_generic_comparer_info : IntrinsicValRef; - get_generic_er_equality_comparer_info : IntrinsicValRef; - get_generic_per_equality_comparer_info : IntrinsicValRef; - unbox_info : IntrinsicValRef; - unbox_fast_info : IntrinsicValRef; - istype_info : IntrinsicValRef; - istype_fast_info : IntrinsicValRef; - - dispose_info : IntrinsicValRef; - - range_op_vref : ValRef; - range_int32_op_vref : ValRef; - //range_step_op_vref : ValRef; - array_get_vref : ValRef; - array2D_get_vref : ValRef; - array3D_get_vref : ValRef; - array4D_get_vref : ValRef; - seq_collect_vref : ValRef; - seq_collect_info : IntrinsicValRef; - seq_using_info : IntrinsicValRef; - seq_using_vref : ValRef; - seq_delay_info : IntrinsicValRef; - seq_delay_vref : ValRef; - seq_append_info : IntrinsicValRef; - seq_append_vref : ValRef; - seq_generated_info : IntrinsicValRef; - seq_generated_vref : ValRef; - seq_finally_info : IntrinsicValRef; - seq_finally_vref : ValRef; - seq_of_functions_info : IntrinsicValRef; - seq_of_functions_vref : ValRef; - seq_to_array_info : IntrinsicValRef; - seq_to_list_info : IntrinsicValRef; - seq_map_info : IntrinsicValRef; - seq_map_vref : ValRef; - seq_singleton_info : IntrinsicValRef; - seq_singleton_vref : ValRef; - seq_empty_info : IntrinsicValRef; - seq_empty_vref : ValRef; - new_format_info : IntrinsicValRef; - raise_info : IntrinsicValRef; - lazy_force_info : IntrinsicValRef; - lazy_create_info : IntrinsicValRef; - - array_get_info : IntrinsicValRef; - array_length_info : IntrinsicValRef; - array2D_get_info : IntrinsicValRef; - array3D_get_info : IntrinsicValRef; - array4D_get_info : IntrinsicValRef; - deserialize_quoted_FSharp_20_plus_info : IntrinsicValRef; - deserialize_quoted_FSharp_40_plus_info : IntrinsicValRef; - cast_quotation_info : IntrinsicValRef; - lift_value_info : IntrinsicValRef; - lift_value_with_name_info : IntrinsicValRef; - lift_value_with_defn_info : IntrinsicValRef; - query_source_as_enum_info : IntrinsicValRef; - new_query_source_info : IntrinsicValRef; - fail_init_info : IntrinsicValRef; - fail_static_init_info : IntrinsicValRef; - check_this_info : IntrinsicValRef; - quote_to_linq_lambda_info : IntrinsicValRef; - sprintf_vref : ValRef; - splice_expr_vref : ValRef; - splice_raw_expr_vref : ValRef; - new_format_vref : ValRef; - mkSysTyconRef : string list -> string -> TyconRef; + getstring_info : IntrinsicValRef + + range_op_vref : ValRef + range_step_op_vref : ValRef + range_int32_op_vref : ValRef + array_get_vref : ValRef + array2D_get_vref : ValRef + array3D_get_vref : ValRef + array4D_get_vref : ValRef + seq_collect_vref : ValRef + seq_collect_info : IntrinsicValRef + seq_using_info : IntrinsicValRef + seq_using_vref : ValRef + seq_delay_info : IntrinsicValRef + seq_delay_vref : ValRef + seq_append_info : IntrinsicValRef + seq_append_vref : ValRef + seq_generated_info : IntrinsicValRef + seq_generated_vref : ValRef + seq_finally_info : IntrinsicValRef + seq_finally_vref : ValRef + seq_of_functions_info : IntrinsicValRef + seq_of_functions_vref : ValRef + seq_to_array_info : IntrinsicValRef + seq_to_list_info : IntrinsicValRef + seq_map_info : IntrinsicValRef + seq_map_vref : ValRef + seq_singleton_info : IntrinsicValRef + seq_singleton_vref : ValRef + seq_empty_info : IntrinsicValRef + seq_empty_vref : ValRef + new_format_info : IntrinsicValRef + raise_info : IntrinsicValRef + raise_vref : ValRef + failwith_info : IntrinsicValRef + failwith_vref : ValRef + invalid_arg_info : IntrinsicValRef + invalid_arg_vref : ValRef + null_arg_info : IntrinsicValRef + null_arg_vref : ValRef + invalid_op_info : IntrinsicValRef + invalid_op_vref : ValRef + failwithf_info : IntrinsicValRef + failwithf_vref : ValRef + + lazy_force_info : IntrinsicValRef + lazy_create_info : IntrinsicValRef + + array_get_info : IntrinsicValRef + array_length_info : IntrinsicValRef + array2D_get_info : IntrinsicValRef + array3D_get_info : IntrinsicValRef + array4D_get_info : IntrinsicValRef + deserialize_quoted_FSharp_20_plus_info : IntrinsicValRef + deserialize_quoted_FSharp_40_plus_info : IntrinsicValRef + cast_quotation_info : IntrinsicValRef + lift_value_info : IntrinsicValRef + lift_value_with_name_info : IntrinsicValRef + lift_value_with_defn_info : IntrinsicValRef + query_source_as_enum_info : IntrinsicValRef + new_query_source_info : IntrinsicValRef + fail_init_info : IntrinsicValRef + fail_static_init_info : IntrinsicValRef + check_this_info : IntrinsicValRef + quote_to_linq_lambda_info : IntrinsicValRef + sprintf_vref : ValRef + splice_expr_vref : ValRef + splice_raw_expr_vref : ValRef + new_format_vref : ValRef + mkSysTyconRef : string list -> string -> TyconRef // A list of types that are explicitly suppressed from the F# intellisense // Note that the suppression checks for the precise name of the type // so the lowercase versions are visible - suppressed_types : TyconRef list; + suppressed_types : TyconRef list /// Memoization table to help minimize the number of ILSourceDocument objects we create - memoize_file : int -> IL.ILSourceDocument; + memoize_file : int -> IL.ILSourceDocument // Are we assuming all code gen is for F# interactive, with no static linking isInteractive : bool // A table of all intrinsics that the compiler cares about @@ -563,7 +561,20 @@ let global_g = ref (None : TcGlobals option) #endif let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePaths,mlCompatibility, - using40environment,indirectCallArrayMethods,isInteractive,getTypeCcu, emitDebugInfoInQuotations) = + using40environment,isInteractive,getTypeCcu, emitDebugInfoInQuotations) = + + let vara = NewRigidTypar "a" envRange + let varb = NewRigidTypar "b" envRange + let varc = NewRigidTypar "c" envRange + let vard = NewRigidTypar "d" envRange + let vare = NewRigidTypar "e" envRange + + let varaTy = mkTyparTy vara + let varbTy = mkTyparTy varb + let varcTy = mkTyparTy varc + let vardTy = mkTyparTy vard + let vareTy = mkTyparTy vare + let int_tcr = mk_MFCore_tcref fslibCcu "int" let nativeint_tcr = mk_MFCore_tcref fslibCcu "nativeint" let unativeint_tcr = mk_MFCore_tcref fslibCcu "unativeint" @@ -642,6 +653,7 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let bool_ty = mkNonGenericTy bool_tcr let int_ty = mkNonGenericTy int_tcr + let char_ty = mkNonGenericTy char_tcr let obj_ty = mkNonGenericTy obj_tcr let string_ty = mkNonGenericTy string_tcr let byte_ty = mkNonGenericTy byte_tcr @@ -682,13 +694,13 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let system_RuntimeMethodHandle_typ = mkSysNonGenericTy sys "RuntimeMethodHandle" - let mk_unop_ty ty = [[ty]], ty - let mk_binop_ty ty = [[ty]; [ty]], ty - let mk_shiftop_ty ty = [[ty]; [int_ty]], ty - let mk_binop_ty3 ty1 ty2 ty3 = [[ty1]; [ty2]], ty3 - let mk_rel_sig ty = [[ty];[ty]],bool_ty - let mk_compare_sig ty = [[ty];[ty]],int_ty - let mk_hash_sig ty = [[ty]], int_ty + let mk_unop_ty ty = [[ty]], ty + let mk_binop_ty ty = [[ty]; [ty]], ty + let mk_shiftop_ty ty = [[ty]; [int_ty]], ty + let mk_binop_ty3 ty1 ty2 ty3 = [[ty1]; [ty2]], ty3 + let mk_rel_sig ty = [[ty];[ty]],bool_ty + let mk_compare_sig ty = [[ty];[ty]],int_ty + let mk_hash_sig ty = [[ty]], int_ty let mk_compare_withc_sig ty = [[mk_IComparer_ty];[ty]; [ty]], int_ty let mk_equality_withc_sig ty = [[mk_IEqualityComparer_ty];[ty];[ty]], bool_ty let mk_hash_withc_sig ty = [[mk_IEqualityComparer_ty]; [ty]], int_ty @@ -791,7 +803,7 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa fslib_MFQueryRunExtensionsHighPriority_nleref fslib_MFSeqModule_nleref - fslib_MFListModule_nleref + fslib_MFListModule_nleref fslib_MFArrayModule_nleref fslib_MFArray2DModule_nleref fslib_MFArray3DModule_nleref @@ -893,6 +905,8 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let dispose_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "Dispose" ,None ,None ,[vara], ([[varaTy]],unit_ty)) + let getstring_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetString" ,None ,None ,[], ([[string_ty];[int_ty]],char_ty)) + let reference_equality_inner_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "PhysicalEqualityIntrinsic" ,None ,None ,[vara], mk_rel_sig varaTy) let bitwise_or_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_BitwiseOr" ,None ,None ,[vara], mk_binop_ty varaTy) @@ -908,7 +922,13 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let unchecked_unary_minus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_UnaryNegation" ,None ,None ,[vara], mk_unop_ty varaTy) let unchecked_unary_not_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "not" ,None ,Some "Not" ,[], mk_unop_ty bool_ty) - let raise_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "raise" ,None ,Some "Raise" ,[vara],([[mkSysNonGenericTy sys "Exception"]],varaTy)) + let raise_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "raise" ,None ,Some "Raise" ,[vara], ([[mkSysNonGenericTy sys "Exception"]],varaTy)) + let failwith_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "failwith" ,None ,Some "FailWith" ,[vara], ([[string_ty]],varaTy)) + let invalid_arg_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "invalidArg" ,None ,Some "InvalidArg" ,[vara], ([[string_ty]; [string_ty]],varaTy)) + let null_arg_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nullArg" ,None ,Some "NullArg" ,[vara], ([[string_ty]],varaTy)) + let invalid_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "invalidOp" ,None ,Some "InvalidOp" ,[vara], ([[string_ty]],varaTy)) + let failwithf_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "failwithf" ,None, Some "PrintFormatToStringThenFail" ,[vara;varb],([[mk_format4_ty varaTy unit_ty string_ty string_ty]], varaTy)) + let reraise_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "reraise" ,None ,Some "Reraise",[vara], ([[unit_ty]],varaTy)) let typeof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "typeof" ,None ,Some "TypeOf" ,[vara], ([],system_Type_typ)) let methodhandleof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "methodhandleof" ,None ,Some "MethodHandleOf",[vara;varb],([[varaTy --> varbTy]],system_RuntimeMethodHandle_typ)) @@ -917,6 +937,7 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let typedefof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "typedefof" ,None ,Some "TypeDefOf",[vara], ([],system_Type_typ)) let enum_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "enum" ,None ,Some "ToEnum" ,[vara], ([[int_ty]],varaTy)) let range_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Range" ,None ,None ,[vara], ([[varaTy];[varaTy]],mkSeqTy varaTy)) + let range_step_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_RangeStep" ,None ,None ,[vara;varb],([[varaTy];[varbTy];[varaTy]],mkSeqTy varaTy)) let range_int32_op_info = makeIntrinsicValRef(fslib_MFOperatorIntrinsics_nleref, "RangeInt32" ,None ,None ,[], ([[int_ty];[int_ty];[int_ty]],mkSeqTy int_ty)) let array2D_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray2D" ,None ,None ,[vara], ([[mkArrayType 2 varaTy];[int_ty]; [int_ty]],varaTy)) let array3D_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray3D" ,None ,None ,[vara], ([[mkArrayType 3 varaTy];[int_ty]; [int_ty]; [int_ty]],varaTy)) @@ -941,6 +962,7 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa // Lazy\Value for > 4.0 makeIntrinsicValRef(fslib_MFLazyExtensions_nleref, "Force" ,Some "Lazy`1" ,None ,[vara], ([[mkLazyTy varaTy]; []], varaTy)) let lazy_create_info = makeIntrinsicValRef(fslib_MFLazyExtensions_nleref, "Create" ,Some "Lazy`1" ,None ,[vara], ([[unit_ty --> varaTy]], mkLazyTy varaTy)) + let seq_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "seq" ,None ,Some "CreateSequence" ,[vara], ([[mkSeqTy varaTy]], mkSeqTy varaTy)) let splice_expr_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "op_Splice" ,None ,None ,[vara], ([[mkQuotedExprTy varaTy]], varaTy)) let splice_raw_expr_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "op_SpliceUntyped" ,None ,None ,[vara], ([[mkRawQuotedExprTy]], varaTy)) @@ -970,259 +992,260 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let check_this_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "CheckThis" ,None ,None ,[vara], ([[varaTy]], varaTy)) let quote_to_linq_lambda_info = makeIntrinsicValRef(fslib_MFLinqRuntimeHelpersQuotationConverter_nleref, "QuotationToLambdaExpression" ,None ,None ,[vara], ([[mkQuotedExprTy varaTy]], mkLinqExpressionTy varaTy)) - { ilg=ilg; + { ilg=ilg #if NO_COMPILER_BACKEND #else - ilxPubCloEnv=EraseIlxFuncs.new_cenv(ilg) + ilxPubCloEnv=EraseClosures.new_cenv(ilg) #endif knownIntrinsics = knownIntrinsics knownFSharpCoreModules = knownFSharpCoreModules - compilingFslib = compilingFslib; - mlCompatibility = mlCompatibility; + compilingFslib = compilingFslib + mlCompatibility = mlCompatibility emitDebugInfoInQuotations = emitDebugInfoInQuotations - directoryToResolveRelativePaths= directoryToResolveRelativePaths; - unionCaseRefEq = unionCaseRefEq; - valRefEq = valRefEq; - fslibCcu = fslibCcu; - using40environment = using40environment; - indirectCallArrayMethods = indirectCallArrayMethods; - sysCcu = sysCcu; - refcell_tcr_canon = mk_MFCore_tcref fslibCcu "Ref`1"; - option_tcr_canon = mk_MFCore_tcref fslibCcu "Option`1"; - list_tcr_canon = mk_MFCollections_tcref fslibCcu "List`1"; - set_tcr_canon = mk_MFCollections_tcref fslibCcu "Set`1"; - map_tcr_canon = mk_MFCollections_tcref fslibCcu "Map`2"; - lazy_tcr_canon = lazy_tcr; - refcell_tcr_nice = mk_MFCore_tcref fslibCcu "ref`1"; - array_tcr_nice = il_arr_tcr_map.[0]; - option_tcr_nice = option_tcr_nice; - list_tcr_nice = list_tcr_nice; - lazy_tcr_nice = lazy_tcr_nice; - format_tcr = format_tcr; - expr_tcr = expr_tcr; - raw_expr_tcr = raw_expr_tcr; - nativeint_tcr = nativeint_tcr; - int32_tcr = int32_tcr; - int16_tcr = int16_tcr; - int64_tcr = int64_tcr; - uint16_tcr = uint16_tcr; - uint32_tcr = uint32_tcr; - uint64_tcr = uint64_tcr; - sbyte_tcr = sbyte_tcr; - decimal_tcr = decimal_tcr; - date_tcr = date_tcr; - pdecimal_tcr = pdecimal_tcr; - byte_tcr = byte_tcr; - bool_tcr = bool_tcr; - unit_tcr_canon = unit_tcr_canon; - unit_tcr_nice = unit_tcr_nice; - exn_tcr = exn_tcr; - char_tcr = char_tcr; - float_tcr = float_tcr; - float32_tcr = float32_tcr; - pfloat_tcr = pfloat_tcr; - pfloat32_tcr = pfloat32_tcr; - pint_tcr = pint_tcr; - pint8_tcr = pint8_tcr; - pint16_tcr = pint16_tcr; - pint64_tcr = pint64_tcr; - byref_tcr = byref_tcr; - nativeptr_tcr = nativeptr_tcr; - ilsigptr_tcr = ilsigptr_tcr; - fastFunc_tcr = fastFunc_tcr; + directoryToResolveRelativePaths= directoryToResolveRelativePaths + unionCaseRefEq = unionCaseRefEq + valRefEq = valRefEq + fslibCcu = fslibCcu + using40environment = using40environment + sysCcu = sysCcu + refcell_tcr_canon = mk_MFCore_tcref fslibCcu "Ref`1" + option_tcr_canon = mk_MFCore_tcref fslibCcu "Option`1" + list_tcr_canon = mk_MFCollections_tcref fslibCcu "List`1" + set_tcr_canon = mk_MFCollections_tcref fslibCcu "Set`1" + map_tcr_canon = mk_MFCollections_tcref fslibCcu "Map`2" + lazy_tcr_canon = lazy_tcr + refcell_tcr_nice = mk_MFCore_tcref fslibCcu "ref`1" + array_tcr_nice = il_arr_tcr_map.[0] + option_tcr_nice = option_tcr_nice + list_tcr_nice = list_tcr_nice + lazy_tcr_nice = lazy_tcr_nice + format_tcr = format_tcr + expr_tcr = expr_tcr + raw_expr_tcr = raw_expr_tcr + nativeint_tcr = nativeint_tcr + int32_tcr = int32_tcr + int16_tcr = int16_tcr + int64_tcr = int64_tcr + uint16_tcr = uint16_tcr + uint32_tcr = uint32_tcr + uint64_tcr = uint64_tcr + sbyte_tcr = sbyte_tcr + decimal_tcr = decimal_tcr + date_tcr = date_tcr + pdecimal_tcr = pdecimal_tcr + byte_tcr = byte_tcr + bool_tcr = bool_tcr + unit_tcr_canon = unit_tcr_canon + unit_tcr_nice = unit_tcr_nice + exn_tcr = exn_tcr + char_tcr = char_tcr + float_tcr = float_tcr + float32_tcr = float32_tcr + pfloat_tcr = pfloat_tcr + pfloat32_tcr = pfloat32_tcr + pint_tcr = pint_tcr + pint8_tcr = pint8_tcr + pint16_tcr = pint16_tcr + pint64_tcr = pint64_tcr + byref_tcr = byref_tcr + nativeptr_tcr = nativeptr_tcr + ilsigptr_tcr = ilsigptr_tcr + fastFunc_tcr = fastFunc_tcr tcref_IQueryable = tcref_IQueryable - tcref_IObservable = tcref_IObservable; - tcref_IObserver = tcref_IObserver; - fslib_IEvent2_tcr = fslib_IEvent2_tcr; - fslib_IDelegateEvent_tcr = fslib_IDelegateEvent_tcr; - seq_tcr = seq_tcr; - seq_base_tcr = mk_MFCompilerServices_tcref fslibCcu "GeneratedSequenceBase`1"; - measureproduct_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureProduct`2"; - measureinverse_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureInverse`1"; - measureone_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureOne"; - il_arr_tcr_map = il_arr_tcr_map; - tuple1_tcr = tuple1_tcr; - tuple2_tcr = tuple2_tcr; - tuple3_tcr = tuple3_tcr; - tuple4_tcr = tuple4_tcr; - tuple5_tcr = tuple5_tcr; - tuple6_tcr = tuple6_tcr; - tuple7_tcr = tuple7_tcr; - tuple8_tcr = tuple8_tcr; - choice2_tcr = choice2_tcr; - choice3_tcr = choice3_tcr; - choice4_tcr = choice4_tcr; - choice5_tcr = choice5_tcr; - choice6_tcr = choice6_tcr; - choice7_tcr = choice7_tcr; - nativeint_ty = mkNonGenericTy nativeint_tcr; - unativeint_ty = mkNonGenericTy unativeint_tcr; - int32_ty = mkNonGenericTy int32_tcr; - int16_ty = mkNonGenericTy int16_tcr; - int64_ty = mkNonGenericTy int64_tcr; - uint16_ty = mkNonGenericTy uint16_tcr; - uint32_ty = mkNonGenericTy uint32_tcr; - uint64_ty = mkNonGenericTy uint64_tcr; - sbyte_ty = mkNonGenericTy sbyte_tcr; - byte_ty = byte_ty; - bool_ty = bool_ty; - int_ty = int_ty; - string_ty = string_ty; - obj_ty = mkNonGenericTy obj_tcr; - unit_ty = unit_ty; - exn_ty = mkNonGenericTy exn_tcr; - char_ty = mkNonGenericTy char_tcr; - decimal_ty = mkNonGenericTy decimal_tcr; - float_ty = mkNonGenericTy float_tcr; - float32_ty = mkNonGenericTy float32_tcr; - memoize_file = memoize_file.Apply; - - system_Array_typ = mkSysNonGenericTy sys "Array"; - system_Object_typ = mkSysNonGenericTy sys "Object"; - system_IDisposable_typ = mkSysNonGenericTy sys "IDisposable"; - system_Value_typ = mkSysNonGenericTy sys "ValueType"; - system_Delegate_typ = mkSysNonGenericTy sys "Delegate"; - system_MulticastDelegate_typ = mkSysNonGenericTy sys "MulticastDelegate"; - system_Enum_typ = mkSysNonGenericTy sys "Enum"; - system_Exception_typ = mkSysNonGenericTy sys "Exception"; - system_String_typ = mkSysNonGenericTy sys "String"; - system_Int32_typ = mkSysNonGenericTy sys "Int32"; - system_Type_typ = system_Type_typ; + tcref_IObservable = tcref_IObservable + tcref_IObserver = tcref_IObserver + fslib_IEvent2_tcr = fslib_IEvent2_tcr + fslib_IDelegateEvent_tcr = fslib_IDelegateEvent_tcr + seq_tcr = seq_tcr + seq_base_tcr = mk_MFCompilerServices_tcref fslibCcu "GeneratedSequenceBase`1" + measureproduct_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureProduct`2" + measureinverse_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureInverse`1" + measureone_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureOne" + il_arr_tcr_map = il_arr_tcr_map + tuple1_tcr = tuple1_tcr + tuple2_tcr = tuple2_tcr + tuple3_tcr = tuple3_tcr + tuple4_tcr = tuple4_tcr + tuple5_tcr = tuple5_tcr + tuple6_tcr = tuple6_tcr + tuple7_tcr = tuple7_tcr + tuple8_tcr = tuple8_tcr + choice2_tcr = choice2_tcr + choice3_tcr = choice3_tcr + choice4_tcr = choice4_tcr + choice5_tcr = choice5_tcr + choice6_tcr = choice6_tcr + choice7_tcr = choice7_tcr + nativeint_ty = mkNonGenericTy nativeint_tcr + unativeint_ty = mkNonGenericTy unativeint_tcr + int32_ty = mkNonGenericTy int32_tcr + int16_ty = mkNonGenericTy int16_tcr + int64_ty = mkNonGenericTy int64_tcr + uint16_ty = mkNonGenericTy uint16_tcr + uint32_ty = mkNonGenericTy uint32_tcr + uint64_ty = mkNonGenericTy uint64_tcr + sbyte_ty = mkNonGenericTy sbyte_tcr + byte_ty = byte_ty + bool_ty = bool_ty + int_ty = int_ty + string_ty = string_ty + obj_ty = mkNonGenericTy obj_tcr + unit_ty = unit_ty + exn_ty = mkNonGenericTy exn_tcr + char_ty = mkNonGenericTy char_tcr + decimal_ty = mkNonGenericTy decimal_tcr + float_ty = mkNonGenericTy float_tcr + float32_ty = mkNonGenericTy float32_tcr + memoize_file = memoize_file.Apply + + system_Array_typ = mkSysNonGenericTy sys "Array" + system_Object_typ = mkSysNonGenericTy sys "Object" + system_IDisposable_typ = mkSysNonGenericTy sys "IDisposable" + system_Value_typ = mkSysNonGenericTy sys "ValueType" + system_Delegate_typ = mkSysNonGenericTy sys "Delegate" + system_MulticastDelegate_typ = mkSysNonGenericTy sys "MulticastDelegate" + system_Enum_typ = mkSysNonGenericTy sys "Enum" + system_Exception_typ = mkSysNonGenericTy sys "Exception" + system_String_typ = mkSysNonGenericTy sys "String" + system_String_tcref = mkSysTyconRef sys "String" + system_Int32_typ = mkSysNonGenericTy sys "Int32" + system_Type_typ = system_Type_typ system_TypedReference_tcref = if ilg.traits.TypedReferenceTypeScopeRef.IsSome then Some(mkSysTyconRef sys "TypedReference") else None system_ArgIterator_tcref = if ilg.traits.ArgIteratorTypeScopeRef.IsSome then Some(mkSysTyconRef sys "ArgIterator") else None - system_RuntimeArgumentHandle_tcref = if ilg.traits.RuntimeArgumentHandleTypeScopeRef.IsSome then Some (mkSysTyconRef sys "RuntimeArgumentHandle") else None; - system_SByte_tcref = mkSysTyconRef sys "SByte"; - system_Decimal_tcref = mkSysTyconRef sys "Decimal"; - system_Int16_tcref = mkSysTyconRef sys "Int16"; - system_Int32_tcref = mkSysTyconRef sys "Int32"; - system_Int64_tcref = mkSysTyconRef sys "Int64"; - system_IntPtr_tcref = mkSysTyconRef sys "IntPtr"; - system_Bool_tcref = mkSysTyconRef sys "Boolean"; - system_Byte_tcref = mkSysTyconRef sys "Byte"; - system_UInt16_tcref = mkSysTyconRef sys "UInt16"; - system_Char_tcref = mkSysTyconRef sys "Char"; - system_UInt32_tcref = mkSysTyconRef sys "UInt32"; - system_UInt64_tcref = mkSysTyconRef sys "UInt64"; - system_UIntPtr_tcref = mkSysTyconRef sys "UIntPtr"; - system_Single_tcref = mkSysTyconRef sys "Single"; - system_Double_tcref = mkSysTyconRef sys "Double"; - system_RuntimeTypeHandle_typ = mkSysNonGenericTy sys "RuntimeTypeHandle"; - system_RuntimeMethodHandle_typ = system_RuntimeMethodHandle_typ; + system_RuntimeArgumentHandle_tcref = if ilg.traits.RuntimeArgumentHandleTypeScopeRef.IsSome then Some (mkSysTyconRef sys "RuntimeArgumentHandle") else None + system_SByte_tcref = mkSysTyconRef sys "SByte" + system_Decimal_tcref = mkSysTyconRef sys "Decimal" + system_Int16_tcref = mkSysTyconRef sys "Int16" + system_Int32_tcref = mkSysTyconRef sys "Int32" + system_Int64_tcref = mkSysTyconRef sys "Int64" + system_IntPtr_tcref = mkSysTyconRef sys "IntPtr" + system_Bool_tcref = mkSysTyconRef sys "Boolean" + system_Byte_tcref = mkSysTyconRef sys "Byte" + system_UInt16_tcref = mkSysTyconRef sys "UInt16" + system_Char_tcref = mkSysTyconRef sys "Char" + system_UInt32_tcref = mkSysTyconRef sys "UInt32" + system_UInt64_tcref = mkSysTyconRef sys "UInt64" + system_UIntPtr_tcref = mkSysTyconRef sys "UIntPtr" + system_Single_tcref = mkSysTyconRef sys "Single" + system_Double_tcref = mkSysTyconRef sys "Double" + system_RuntimeTypeHandle_typ = mkSysNonGenericTy sys "RuntimeTypeHandle" + system_RuntimeMethodHandle_typ = system_RuntimeMethodHandle_typ system_MarshalByRefObject_tcref = if ilg.traits.MarshalByRefObjectScopeRef.IsSome then Some(mkSysTyconRef sys "MarshalByRefObject") else None system_MarshalByRefObject_typ = if ilg.traits.MarshalByRefObjectScopeRef.IsSome then Some(mkSysNonGenericTy sys "MarshalByRefObject") else None - system_Reflection_MethodInfo_typ = system_Reflection_MethodInfo_typ; + system_Reflection_MethodInfo_typ = system_Reflection_MethodInfo_typ - system_Array_tcref = mkSysTyconRef sys "Array"; - system_Object_tcref = mkSysTyconRef sys "Object"; - system_Void_tcref = mkSysTyconRef sys "Void"; - system_IndexOutOfRangeException_tcref = mkSysTyconRef sys "IndexOutOfRangeException"; - system_Nullable_tcref = nullable_tcr; - system_GenericIComparable_tcref = mkSysTyconRef sys "IComparable`1"; - system_GenericIEquatable_tcref = mkSysTyconRef sys "IEquatable`1"; - mk_IComparable_ty = mkSysNonGenericTy sys "IComparable"; - system_LinqExpression_tcref = linqExpression_tcr; - - mk_IStructuralComparable_ty = mkSysNonGenericTy sysCollections "IStructuralComparable"; + system_Array_tcref = mkSysTyconRef sys "Array" + system_Object_tcref = mkSysTyconRef sys "Object" + system_Void_tcref = mkSysTyconRef sys "Void" + system_IndexOutOfRangeException_tcref = mkSysTyconRef sys "IndexOutOfRangeException" + system_Nullable_tcref = nullable_tcr + system_GenericIComparable_tcref = mkSysTyconRef sys "IComparable`1" + system_GenericIEquatable_tcref = mkSysTyconRef sys "IEquatable`1" + mk_IComparable_ty = mkSysNonGenericTy sys "IComparable" + system_LinqExpression_tcref = linqExpression_tcr + + mk_IStructuralComparable_ty = mkSysNonGenericTy sysCollections "IStructuralComparable" - mk_IStructuralEquatable_ty = mkSysNonGenericTy sysCollections "IStructuralEquatable"; - - mk_IComparer_ty = mk_IComparer_ty; - mk_IEqualityComparer_ty = mk_IEqualityComparer_ty; - tcref_System_Collections_IComparer = mkSysTyconRef sysCollections "IComparer"; - tcref_System_Collections_IEqualityComparer = mkSysTyconRef sysCollections "IEqualityComparer"; - tcref_System_Collections_Generic_IEqualityComparer = mkSysTyconRef sysGenerics "IEqualityComparer`1"; - tcref_System_Collections_Generic_Dictionary = mkSysTyconRef sysGenerics "Dictionary`2"; + mk_IStructuralEquatable_ty = mkSysNonGenericTy sysCollections "IStructuralEquatable" + + mk_IComparer_ty = mk_IComparer_ty + mk_IEqualityComparer_ty = mk_IEqualityComparer_ty + tcref_System_Collections_IComparer = mkSysTyconRef sysCollections "IComparer" + tcref_System_Collections_IEqualityComparer = mkSysTyconRef sysCollections "IEqualityComparer" + tcref_System_Collections_Generic_IEqualityComparer = mkSysTyconRef sysGenerics "IEqualityComparer`1" + tcref_System_Collections_Generic_Dictionary = mkSysTyconRef sysGenerics "Dictionary`2" tcref_System_IComparable = mkSysTyconRef sys "IComparable" tcref_System_IStructuralComparable = mkSysTyconRef sysCollections "IStructuralComparable" - tcref_System_IStructuralEquatable = mkSysTyconRef sysCollections "IStructuralEquatable"; + tcref_System_IStructuralEquatable = mkSysTyconRef sysCollections "IStructuralEquatable" - tcref_LanguagePrimitives = mk_MFCore_tcref fslibCcu "LanguagePrimitives"; + tcref_LanguagePrimitives = mk_MFCore_tcref fslibCcu "LanguagePrimitives" - tcref_System_Collections_Generic_IList = mkSysTyconRef sysGenerics "IList`1"; - tcref_System_Collections_Generic_IReadOnlyList = mkSysTyconRef sysGenerics "IReadOnlyList`1"; - tcref_System_Collections_Generic_ICollection = mkSysTyconRef sysGenerics "ICollection`1"; - tcref_System_Collections_Generic_IReadOnlyCollection = mkSysTyconRef sysGenerics "IReadOnlyCollection`1"; + tcref_System_Collections_Generic_IList = mkSysTyconRef sysGenerics "IList`1" + tcref_System_Collections_Generic_IReadOnlyList = mkSysTyconRef sysGenerics "IReadOnlyList`1" + tcref_System_Collections_Generic_ICollection = mkSysTyconRef sysGenerics "ICollection`1" + tcref_System_Collections_Generic_IReadOnlyCollection = mkSysTyconRef sysGenerics "IReadOnlyCollection`1" tcref_System_Collections_IEnumerable = tcref_System_Collections_IEnumerable - tcref_System_Collections_Generic_IEnumerable = IEnumerable_tcr; - tcref_System_Collections_Generic_IEnumerator = IEnumerator_tcr; + tcref_System_Collections_Generic_IEnumerable = IEnumerable_tcr + tcref_System_Collections_Generic_IEnumerator = IEnumerator_tcr - tcref_System_Attribute = System_Attribute_tcr; + tcref_System_Attribute = System_Attribute_tcr - attrib_AttributeUsageAttribute = mkSystemRuntimeAttrib "System.AttributeUsageAttribute"; - attrib_ParamArrayAttribute = mkSystemRuntimeAttrib "System.ParamArrayAttribute"; + attrib_AttributeUsageAttribute = mkSystemRuntimeAttrib "System.AttributeUsageAttribute" + attrib_ParamArrayAttribute = mkSystemRuntimeAttrib "System.ParamArrayAttribute" attrib_IDispatchConstantAttribute = if ilg.traits.IDispatchConstantAttributeScopeRef.IsSome then Some(mkSystemRuntimeAttrib "System.Runtime.CompilerServices.IDispatchConstantAttribute") else None attrib_IUnknownConstantAttribute = if ilg.traits.IUnknownConstantAttributeScopeRef.IsSome then Some (mkSystemRuntimeAttrib "System.Runtime.CompilerServices.IUnknownConstantAttribute") else None - attrib_SystemObsolete = mkSystemRuntimeAttrib "System.ObsoleteAttribute"; - attrib_DllImportAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.DllImportAttribute"; - attrib_StructLayoutAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.StructLayoutAttribute"; - attrib_TypeForwardedToAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.TypeForwardedToAttribute"; - attrib_ComVisibleAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.ComVisibleAttribute"; - attrib_ComImportAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.ComImportAttribute"; - attrib_FieldOffsetAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.FieldOffsetAttribute" ; - attrib_MarshalAsAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.MarshalAsAttribute"; - attrib_InAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.InAttribute" ; - attrib_OutAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.OutAttribute" ; - attrib_OptionalAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.OptionalAttribute" ; + attrib_SystemObsolete = mkSystemRuntimeAttrib "System.ObsoleteAttribute" + attrib_DllImportAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.DllImportAttribute" + attrib_StructLayoutAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.StructLayoutAttribute" + attrib_TypeForwardedToAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.TypeForwardedToAttribute" + attrib_ComVisibleAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.ComVisibleAttribute" + attrib_ComImportAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.ComImportAttribute" + attrib_FieldOffsetAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.FieldOffsetAttribute" + attrib_MarshalAsAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.MarshalAsAttribute" + attrib_InAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.InAttribute" + attrib_OutAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.OutAttribute" + attrib_OptionalAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.OptionalAttribute" attrib_ThreadStaticAttribute = if ilg.traits.ThreadStaticAttributeScopeRef.IsSome then Some(mkSystemRuntimeAttrib "System.ThreadStaticAttribute") else None attrib_SpecialNameAttribute = if ilg.traits.SpecialNameAttributeScopeRef.IsSome then Some(mkSystemRuntimeAttrib "System.Runtime.CompilerServices.SpecialNameAttribute") else None - attrib_VolatileFieldAttribute = mk_MFCore_attrib "VolatileFieldAttribute"; - attrib_ContextStaticAttribute = if ilg.traits.ContextStaticAttributeScopeRef.IsSome then Some (mkSystemRuntimeAttrib "System.ContextStaticAttribute") else None; - attrib_FlagsAttribute = mkSystemRuntimeAttrib "System.FlagsAttribute"; - attrib_DefaultMemberAttribute = mkSystemRuntimeAttrib "System.Reflection.DefaultMemberAttribute"; - attrib_DebuggerDisplayAttribute = mkSystemDiagnosticsDebugAttribute "System.Diagnostics.DebuggerDisplayAttribute"; - attrib_DebuggerTypeProxyAttribute = mkSystemDiagnosticsDebugAttribute "System.Diagnostics.DebuggerTypeProxyAttribute"; - attrib_PreserveSigAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.PreserveSigAttribute"; - attrib_MethodImplAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.MethodImplAttribute"; - attrib_ExtensionAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.ExtensionAttribute"; + attrib_VolatileFieldAttribute = mk_MFCore_attrib "VolatileFieldAttribute" + attrib_ContextStaticAttribute = if ilg.traits.ContextStaticAttributeScopeRef.IsSome then Some (mkSystemRuntimeAttrib "System.ContextStaticAttribute") else None + attrib_FlagsAttribute = mkSystemRuntimeAttrib "System.FlagsAttribute" + attrib_DefaultMemberAttribute = mkSystemRuntimeAttrib "System.Reflection.DefaultMemberAttribute" + attrib_DebuggerDisplayAttribute = mkSystemDiagnosticsDebugAttribute "System.Diagnostics.DebuggerDisplayAttribute" + attrib_DebuggerTypeProxyAttribute = mkSystemDiagnosticsDebugAttribute "System.Diagnostics.DebuggerTypeProxyAttribute" + attrib_PreserveSigAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.PreserveSigAttribute" + attrib_MethodImplAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.MethodImplAttribute" + attrib_ExtensionAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.ExtensionAttribute" - attrib_ProjectionParameterAttribute = mk_MFCore_attrib "ProjectionParameterAttribute"; - attrib_CustomOperationAttribute = mk_MFCore_attrib "CustomOperationAttribute"; - attrib_NonSerializedAttribute = if ilg.traits.NonSerializedAttributeScopeRef.IsSome then Some(mkSystemRuntimeAttrib "System.NonSerializedAttribute") else None; - attrib_AutoSerializableAttribute = mk_MFCore_attrib "AutoSerializableAttribute"; - attrib_RequireQualifiedAccessAttribute = mk_MFCore_attrib "RequireQualifiedAccessAttribute"; - attrib_EntryPointAttribute = mk_MFCore_attrib "EntryPointAttribute"; - attrib_DefaultAugmentationAttribute = mk_MFCore_attrib "DefaultAugmentationAttribute"; - attrib_CompilerMessageAttribute = mk_MFCore_attrib "CompilerMessageAttribute"; - attrib_ExperimentalAttribute = mk_MFCore_attrib "ExperimentalAttribute"; - attrib_UnverifiableAttribute = mk_MFCore_attrib "UnverifiableAttribute"; - attrib_LiteralAttribute = mk_MFCore_attrib "LiteralAttribute"; - attrib_ConditionalAttribute = mkSystemRuntimeAttrib "System.Diagnostics.ConditionalAttribute"; - attrib_OptionalArgumentAttribute = mk_MFCore_attrib "OptionalArgumentAttribute"; - attrib_RequiresExplicitTypeArgumentsAttribute = mk_MFCore_attrib "RequiresExplicitTypeArgumentsAttribute"; - attrib_DefaultValueAttribute = mk_MFCore_attrib "DefaultValueAttribute"; - attrib_ClassAttribute = mk_MFCore_attrib "ClassAttribute"; - attrib_InterfaceAttribute = mk_MFCore_attrib "InterfaceAttribute"; - attrib_StructAttribute = mk_MFCore_attrib "StructAttribute"; - attrib_ReflectedDefinitionAttribute = mk_MFCore_attrib "ReflectedDefinitionAttribute"; - attrib_CompiledNameAttribute = mk_MFCore_attrib "CompiledNameAttribute"; - attrib_AutoOpenAttribute = mk_MFCore_attrib "AutoOpenAttribute"; - attrib_CompilationRepresentationAttribute = mk_MFCore_attrib "CompilationRepresentationAttribute"; - attrib_CompilationArgumentCountsAttribute = mk_MFCore_attrib "CompilationArgumentCountsAttribute"; - attrib_CompilationMappingAttribute = mk_MFCore_attrib "CompilationMappingAttribute"; - attrib_CLIEventAttribute = mk_MFCore_attrib "CLIEventAttribute"; - attrib_CLIMutableAttribute = mk_MFCore_attrib "CLIMutableAttribute"; - attrib_AllowNullLiteralAttribute = mk_MFCore_attrib "AllowNullLiteralAttribute"; - attrib_NoEqualityAttribute = mk_MFCore_attrib "NoEqualityAttribute"; - attrib_NoComparisonAttribute = mk_MFCore_attrib "NoComparisonAttribute"; - attrib_CustomEqualityAttribute = mk_MFCore_attrib "CustomEqualityAttribute"; - attrib_CustomComparisonAttribute = mk_MFCore_attrib "CustomComparisonAttribute"; - attrib_EqualityConditionalOnAttribute = mk_MFCore_attrib "EqualityConditionalOnAttribute"; - attrib_ComparisonConditionalOnAttribute = mk_MFCore_attrib "ComparisonConditionalOnAttribute"; - attrib_ReferenceEqualityAttribute = mk_MFCore_attrib "ReferenceEqualityAttribute"; - attrib_StructuralEqualityAttribute = mk_MFCore_attrib "StructuralEqualityAttribute"; - attrib_StructuralComparisonAttribute = mk_MFCore_attrib "StructuralComparisonAttribute"; - attrib_SealedAttribute = mk_MFCore_attrib "SealedAttribute"; - attrib_AbstractClassAttribute = mk_MFCore_attrib "AbstractClassAttribute"; - attrib_GeneralizableValueAttribute = mk_MFCore_attrib "GeneralizableValueAttribute"; - attrib_MeasureAttribute = mk_MFCore_attrib "MeasureAttribute"; - attrib_MeasureableAttribute = mk_MFCore_attrib "MeasureAnnotatedAbbreviationAttribute"; - attrib_NoDynamicInvocationAttribute = mk_MFCore_attrib "NoDynamicInvocationAttribute"; + attrib_ProjectionParameterAttribute = mk_MFCore_attrib "ProjectionParameterAttribute" + attrib_CustomOperationAttribute = mk_MFCore_attrib "CustomOperationAttribute" + attrib_NonSerializedAttribute = if ilg.traits.NonSerializedAttributeScopeRef.IsSome then Some(mkSystemRuntimeAttrib "System.NonSerializedAttribute") else None + attrib_AutoSerializableAttribute = mk_MFCore_attrib "AutoSerializableAttribute" + attrib_RequireQualifiedAccessAttribute = mk_MFCore_attrib "RequireQualifiedAccessAttribute" + attrib_EntryPointAttribute = mk_MFCore_attrib "EntryPointAttribute" + attrib_DefaultAugmentationAttribute = mk_MFCore_attrib "DefaultAugmentationAttribute" + attrib_CompilerMessageAttribute = mk_MFCore_attrib "CompilerMessageAttribute" + attrib_ExperimentalAttribute = mk_MFCore_attrib "ExperimentalAttribute" + attrib_UnverifiableAttribute = mk_MFCore_attrib "UnverifiableAttribute" + attrib_LiteralAttribute = mk_MFCore_attrib "LiteralAttribute" + attrib_ConditionalAttribute = mkSystemRuntimeAttrib "System.Diagnostics.ConditionalAttribute" + attrib_OptionalArgumentAttribute = mk_MFCore_attrib "OptionalArgumentAttribute" + attrib_RequiresExplicitTypeArgumentsAttribute = mk_MFCore_attrib "RequiresExplicitTypeArgumentsAttribute" + attrib_DefaultValueAttribute = mk_MFCore_attrib "DefaultValueAttribute" + attrib_ClassAttribute = mk_MFCore_attrib "ClassAttribute" + attrib_InterfaceAttribute = mk_MFCore_attrib "InterfaceAttribute" + attrib_StructAttribute = mk_MFCore_attrib "StructAttribute" + attrib_ReflectedDefinitionAttribute = mk_MFCore_attrib "ReflectedDefinitionAttribute" + attrib_CompiledNameAttribute = mk_MFCore_attrib "CompiledNameAttribute" + attrib_AutoOpenAttribute = mk_MFCore_attrib "AutoOpenAttribute" + attrib_InternalsVisibleToAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.InternalsVisibleToAttribute" + attrib_CompilationRepresentationAttribute = mk_MFCore_attrib "CompilationRepresentationAttribute" + attrib_CompilationArgumentCountsAttribute = mk_MFCore_attrib "CompilationArgumentCountsAttribute" + attrib_CompilationMappingAttribute = mk_MFCore_attrib "CompilationMappingAttribute" + attrib_CLIEventAttribute = mk_MFCore_attrib "CLIEventAttribute" + attrib_CLIMutableAttribute = mk_MFCore_attrib "CLIMutableAttribute" + attrib_AllowNullLiteralAttribute = mk_MFCore_attrib "AllowNullLiteralAttribute" + attrib_NoEqualityAttribute = mk_MFCore_attrib "NoEqualityAttribute" + attrib_NoComparisonAttribute = mk_MFCore_attrib "NoComparisonAttribute" + attrib_CustomEqualityAttribute = mk_MFCore_attrib "CustomEqualityAttribute" + attrib_CustomComparisonAttribute = mk_MFCore_attrib "CustomComparisonAttribute" + attrib_EqualityConditionalOnAttribute = mk_MFCore_attrib "EqualityConditionalOnAttribute" + attrib_ComparisonConditionalOnAttribute = mk_MFCore_attrib "ComparisonConditionalOnAttribute" + attrib_ReferenceEqualityAttribute = mk_MFCore_attrib "ReferenceEqualityAttribute" + attrib_StructuralEqualityAttribute = mk_MFCore_attrib "StructuralEqualityAttribute" + attrib_StructuralComparisonAttribute = mk_MFCore_attrib "StructuralComparisonAttribute" + attrib_SealedAttribute = mk_MFCore_attrib "SealedAttribute" + attrib_AbstractClassAttribute = mk_MFCore_attrib "AbstractClassAttribute" + attrib_GeneralizableValueAttribute = mk_MFCore_attrib "GeneralizableValueAttribute" + attrib_MeasureAttribute = mk_MFCore_attrib "MeasureAttribute" + attrib_MeasureableAttribute = mk_MFCore_attrib "MeasureAnnotatedAbbreviationAttribute" + attrib_NoDynamicInvocationAttribute = mk_MFCore_attrib "NoDynamicInvocationAttribute" attrib_SecurityAttribute = if ilg.traits.SecurityPermissionAttributeTypeScopeRef.IsSome then Some(mkSystemRuntimeAttrib"System.Security.Permissions.SecurityAttribute") else None attrib_SecurityCriticalAttribute = mkSystemRuntimeAttrib "System.Security.SecurityCriticalAttribute" attrib_SecuritySafeCriticalAttribute = mkSystemRuntimeAttrib "System.Security.SecuritySafeCriticalAttribute" @@ -1234,41 +1257,41 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa better_tcref_map = begin let entries1 = - [ "Int32", int_tcr; - "IntPtr", nativeint_tcr; - "UIntPtr", unativeint_tcr; - "Int16",int16_tcr; - "Int64",int64_tcr; - "UInt16",uint16_tcr; - "UInt32",uint32_tcr; - "UInt64",uint64_tcr; - "SByte",sbyte_tcr; - "Decimal",decimal_tcr; - "Byte",byte_tcr; - "Boolean",bool_tcr; - "String",string_tcr; - "Object",obj_tcr; - "Exception",exn_tcr; - "Char",char_tcr; - "Double",float_tcr; - "Single",float32_tcr;] + [ "Int32", int_tcr + "IntPtr", nativeint_tcr + "UIntPtr", unativeint_tcr + "Int16",int16_tcr + "Int64",int64_tcr + "UInt16",uint16_tcr + "UInt32",uint32_tcr + "UInt64",uint64_tcr + "SByte",sbyte_tcr + "Decimal",decimal_tcr + "Byte",byte_tcr + "Boolean",bool_tcr + "String",string_tcr + "Object",obj_tcr + "Exception",exn_tcr + "Char",char_tcr + "Double",float_tcr + "Single",float32_tcr] |> List.map (fun (nm,tcr) -> let ty = mkNonGenericTy tcr nm, mkSysTyconRef sys nm, (fun _ -> ty)) let entries2 = - [ "FSharpFunc`2", fastFunc_tcr, (fun tinst -> mkFunTy (List.nth tinst 0) (List.nth tinst 1)); - "Tuple`2", tuple2_tcr, decodeTupleTy; - "Tuple`3", tuple3_tcr, decodeTupleTy; - "Tuple`4", tuple4_tcr, decodeTupleTy; - "Tuple`5", tuple5_tcr, decodeTupleTy; - "Tuple`6", tuple6_tcr, decodeTupleTy; - "Tuple`7", tuple7_tcr, decodeTupleTy; - "Tuple`8", tuple8_tcr, decodeTupleTy;] + [ "FSharpFunc`2", fastFunc_tcr, (fun tinst -> mkFunTy (List.nth tinst 0) (List.nth tinst 1)) + "Tuple`2", tuple2_tcr, decodeTupleTy + "Tuple`3", tuple3_tcr, decodeTupleTy + "Tuple`4", tuple4_tcr, decodeTupleTy + "Tuple`5", tuple5_tcr, decodeTupleTy + "Tuple`6", tuple6_tcr, decodeTupleTy + "Tuple`7", tuple7_tcr, decodeTupleTy + "Tuple`8", tuple8_tcr, decodeTupleTy] let entries = (entries1 @ entries2) if compilingFslib then // This map is for use when building FSharp.Core.dll. The backing Tycon's may not yet exist for - // the TyconRef's we have inour hands, hence we can't dereference them to find their stamps. + // the TyconRef's we have in our hands, hence we can't dereference them to find their stamps. // So this dictionary is indexed by names. let dict = @@ -1290,175 +1313,188 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa (fun tcref2 tinst -> if dict.ContainsKey tcref2.Stamp then Some(dict.[tcref2.Stamp] tinst) else None) - end; + end - new_decimal_info = new_decimal_info; - seq_info = seq_info; - seq_vref = (ValRefForIntrinsic seq_info) ; - and_vref = (ValRefForIntrinsic and_info) ; - and2_vref = (ValRefForIntrinsic and2_info); - addrof_vref = (ValRefForIntrinsic addrof_info); - addrof2_vref = (ValRefForIntrinsic addrof2_info); - or_vref = (ValRefForIntrinsic or_info); - //splice_vref = (ValRefForIntrinsic splice_info); - splice_expr_vref = (ValRefForIntrinsic splice_expr_info); - splice_raw_expr_vref = (ValRefForIntrinsic splice_raw_expr_info); - or2_vref = (ValRefForIntrinsic or2_info); - generic_equality_er_inner_vref = ValRefForIntrinsic generic_equality_er_inner_info; - generic_equality_per_inner_vref = ValRefForIntrinsic generic_equality_per_inner_info; - generic_equality_withc_inner_vref = ValRefForIntrinsic generic_equality_withc_inner_info; - generic_comparison_inner_vref = ValRefForIntrinsic generic_comparison_inner_info; - generic_comparison_withc_inner_vref = ValRefForIntrinsic generic_comparison_withc_inner_info; - generic_comparison_withc_outer_info = generic_comparison_withc_outer_info; - generic_equality_er_outer_info = generic_equality_er_outer_info; - generic_equality_withc_outer_info = generic_equality_withc_outer_info; - generic_hash_withc_outer_info = generic_hash_withc_outer_info; - generic_hash_inner_vref = ValRefForIntrinsic generic_hash_inner_info; - generic_hash_withc_inner_vref = ValRefForIntrinsic generic_hash_withc_inner_info; - - reference_equality_inner_vref = ValRefForIntrinsic reference_equality_inner_info; - - bitwise_or_vref = ValRefForIntrinsic bitwise_or_info; - bitwise_and_vref = ValRefForIntrinsic bitwise_and_info; - bitwise_xor_vref = ValRefForIntrinsic bitwise_xor_info; - bitwise_unary_not_vref = ValRefForIntrinsic bitwise_unary_not_info; - bitwise_shift_left_vref = ValRefForIntrinsic bitwise_shift_left_info; - bitwise_shift_right_vref = ValRefForIntrinsic bitwise_shift_right_info; - unchecked_addition_vref = ValRefForIntrinsic unchecked_addition_info; - unchecked_unary_plus_vref = ValRefForIntrinsic unchecked_unary_plus_info; - unchecked_unary_minus_vref = ValRefForIntrinsic unchecked_unary_minus_info; - unchecked_unary_not_vref = ValRefForIntrinsic unchecked_unary_not_info; - unchecked_subtraction_vref = ValRefForIntrinsic unchecked_subtraction_info; - unchecked_multiply_vref = ValRefForIntrinsic unchecked_multiply_info; - unchecked_defaultof_vref = ValRefForIntrinsic unchecked_defaultof_info; + new_decimal_info = new_decimal_info + seq_info = seq_info + seq_vref = (ValRefForIntrinsic seq_info) + and_vref = (ValRefForIntrinsic and_info) + and2_vref = (ValRefForIntrinsic and2_info) + addrof_vref = (ValRefForIntrinsic addrof_info) + addrof2_vref = (ValRefForIntrinsic addrof2_info) + or_vref = (ValRefForIntrinsic or_info) + //splice_vref = (ValRefForIntrinsic splice_info) + splice_expr_vref = (ValRefForIntrinsic splice_expr_info) + splice_raw_expr_vref = (ValRefForIntrinsic splice_raw_expr_info) + or2_vref = (ValRefForIntrinsic or2_info) + generic_equality_er_inner_vref = ValRefForIntrinsic generic_equality_er_inner_info + generic_equality_per_inner_vref = ValRefForIntrinsic generic_equality_per_inner_info + generic_equality_withc_inner_vref = ValRefForIntrinsic generic_equality_withc_inner_info + generic_comparison_inner_vref = ValRefForIntrinsic generic_comparison_inner_info + generic_comparison_withc_inner_vref = ValRefForIntrinsic generic_comparison_withc_inner_info + generic_comparison_withc_outer_info = generic_comparison_withc_outer_info + generic_equality_er_outer_info = generic_equality_er_outer_info + generic_equality_withc_outer_info = generic_equality_withc_outer_info + generic_hash_withc_outer_info = generic_hash_withc_outer_info + generic_hash_inner_vref = ValRefForIntrinsic generic_hash_inner_info + generic_hash_withc_inner_vref = ValRefForIntrinsic generic_hash_withc_inner_info + + reference_equality_inner_vref = ValRefForIntrinsic reference_equality_inner_info + + bitwise_or_vref = ValRefForIntrinsic bitwise_or_info + bitwise_and_vref = ValRefForIntrinsic bitwise_and_info + bitwise_xor_vref = ValRefForIntrinsic bitwise_xor_info + bitwise_unary_not_vref = ValRefForIntrinsic bitwise_unary_not_info + bitwise_shift_left_vref = ValRefForIntrinsic bitwise_shift_left_info + bitwise_shift_right_vref = ValRefForIntrinsic bitwise_shift_right_info + unchecked_addition_vref = ValRefForIntrinsic unchecked_addition_info + unchecked_unary_plus_vref = ValRefForIntrinsic unchecked_unary_plus_info + unchecked_unary_minus_vref = ValRefForIntrinsic unchecked_unary_minus_info + unchecked_unary_not_vref = ValRefForIntrinsic unchecked_unary_not_info + unchecked_subtraction_vref = ValRefForIntrinsic unchecked_subtraction_info + unchecked_multiply_vref = ValRefForIntrinsic unchecked_multiply_info + unchecked_defaultof_vref = ValRefForIntrinsic unchecked_defaultof_info unchecked_subtraction_info = unchecked_subtraction_info - compare_operator_vref = ValRefForIntrinsic compare_operator_info; - equals_operator_vref = ValRefForIntrinsic equals_operator_info; - equals_nullable_operator_vref = ValRefForIntrinsic equals_nullable_operator_info; - nullable_equals_nullable_operator_vref = ValRefForIntrinsic nullable_equals_nullable_operator_info; - nullable_equals_operator_vref = ValRefForIntrinsic nullable_equals_operator_info; - not_equals_operator_vref = ValRefForIntrinsic not_equals_operator_info; - less_than_operator_vref = ValRefForIntrinsic less_than_operator_info; - less_than_or_equals_operator_vref = ValRefForIntrinsic less_than_or_equals_operator_info; - greater_than_operator_vref = ValRefForIntrinsic greater_than_operator_info; - greater_than_or_equals_operator_vref = ValRefForIntrinsic greater_than_or_equals_operator_info; - - equals_operator_info = equals_operator_info; - - raise_info = raise_info; - reraise_info = reraise_info; - reraise_vref = ValRefForIntrinsic reraise_info; - methodhandleof_info = methodhandleof_info; - methodhandleof_vref = ValRefForIntrinsic methodhandleof_info; - typeof_info = typeof_info; - typeof_vref = ValRefForIntrinsic typeof_info; - sizeof_vref = ValRefForIntrinsic sizeof_info; - typedefof_info = typedefof_info; - typedefof_vref = ValRefForIntrinsic typedefof_info; - enum_vref = ValRefForIntrinsic enum_info; - enumOfValue_vref = ValRefForIntrinsic enumOfValue_info; - range_op_vref = ValRefForIntrinsic range_op_info; - range_int32_op_vref = ValRefForIntrinsic range_int32_op_info; - //range_step_op_vref = ValRefForIntrinsic range_step_op_info; + compare_operator_vref = ValRefForIntrinsic compare_operator_info + equals_operator_vref = ValRefForIntrinsic equals_operator_info + equals_nullable_operator_vref = ValRefForIntrinsic equals_nullable_operator_info + nullable_equals_nullable_operator_vref = ValRefForIntrinsic nullable_equals_nullable_operator_info + nullable_equals_operator_vref = ValRefForIntrinsic nullable_equals_operator_info + not_equals_operator_vref = ValRefForIntrinsic not_equals_operator_info + less_than_operator_vref = ValRefForIntrinsic less_than_operator_info + less_than_or_equals_operator_vref = ValRefForIntrinsic less_than_or_equals_operator_info + greater_than_operator_vref = ValRefForIntrinsic greater_than_operator_info + greater_than_or_equals_operator_vref = ValRefForIntrinsic greater_than_or_equals_operator_info + + equals_operator_info = equals_operator_info + + raise_info = raise_info + raise_vref = ValRefForIntrinsic raise_info + failwith_info = failwith_info + failwith_vref = ValRefForIntrinsic failwith_info + invalid_arg_info = invalid_arg_info + invalid_arg_vref = ValRefForIntrinsic invalid_arg_info + null_arg_info = null_arg_info + null_arg_vref = ValRefForIntrinsic null_arg_info + invalid_op_info = invalid_op_info + invalid_op_vref = ValRefForIntrinsic invalid_op_info + failwithf_info = failwithf_info + failwithf_vref = ValRefForIntrinsic failwithf_info + + reraise_info = reraise_info + reraise_vref = ValRefForIntrinsic reraise_info + methodhandleof_info = methodhandleof_info + methodhandleof_vref = ValRefForIntrinsic methodhandleof_info + typeof_info = typeof_info + typeof_vref = ValRefForIntrinsic typeof_info + sizeof_vref = ValRefForIntrinsic sizeof_info + typedefof_info = typedefof_info + typedefof_vref = ValRefForIntrinsic typedefof_info + enum_vref = ValRefForIntrinsic enum_info + enumOfValue_vref = ValRefForIntrinsic enumOfValue_info + range_op_vref = ValRefForIntrinsic range_op_info + range_step_op_vref = ValRefForIntrinsic range_step_op_info + range_int32_op_vref = ValRefForIntrinsic range_int32_op_info array_length_info = array_length_info - array_get_vref = ValRefForIntrinsic array_get_info; - array2D_get_vref = ValRefForIntrinsic array2D_get_info; - array3D_get_vref = ValRefForIntrinsic array3D_get_info; - array4D_get_vref = ValRefForIntrinsic array4D_get_info; - seq_singleton_vref = ValRefForIntrinsic seq_singleton_info; - seq_collect_vref = ValRefForIntrinsic seq_collect_info; - seq_collect_info = seq_collect_info; - seq_using_info = seq_using_info; - seq_using_vref = ValRefForIntrinsic seq_using_info; - seq_delay_info = seq_delay_info; - seq_delay_vref = ValRefForIntrinsic seq_delay_info; - seq_append_info = seq_append_info; - seq_append_vref = ValRefForIntrinsic seq_append_info; - seq_generated_info = seq_generated_info; - seq_generated_vref = ValRefForIntrinsic seq_generated_info; - seq_finally_info = seq_finally_info; - seq_finally_vref = ValRefForIntrinsic seq_finally_info; - seq_of_functions_info = seq_of_functions_info; - seq_of_functions_vref = ValRefForIntrinsic seq_of_functions_info; - seq_map_info = seq_map_info; - seq_map_vref = ValRefForIntrinsic seq_map_info; - seq_singleton_info = seq_singleton_info; - seq_empty_info = seq_empty_info; - seq_empty_vref = ValRefForIntrinsic seq_empty_info; - new_format_info = new_format_info; - new_format_vref = ValRefForIntrinsic new_format_info; - sprintf_vref = ValRefForIntrinsic sprintf_info; - unbox_vref = ValRefForIntrinsic unbox_info; - unbox_fast_vref = ValRefForIntrinsic unbox_fast_info; - istype_vref = ValRefForIntrinsic istype_info; - istype_fast_vref = ValRefForIntrinsic istype_fast_info; - unbox_info = unbox_info; - get_generic_comparer_info = get_generic_comparer_info; - get_generic_er_equality_comparer_info = get_generic_er_equality_comparer_info; - get_generic_per_equality_comparer_info = get_generic_per_equality_comparer_info; - dispose_info = dispose_info; - unbox_fast_info = unbox_fast_info; - istype_info = istype_info; - istype_fast_info = istype_fast_info; - lazy_force_info = lazy_force_info; - lazy_create_info = lazy_create_info; - create_instance_info = create_instance_info; - create_event_info = create_event_info; - seq_to_list_info = seq_to_list_info; - seq_to_array_info = seq_to_array_info; - array_get_info = array_get_info; - array2D_get_info = array2D_get_info; - array3D_get_info = array3D_get_info; - array4D_get_info = array4D_get_info; - deserialize_quoted_FSharp_20_plus_info = deserialize_quoted_FSharp_20_plus_info; - deserialize_quoted_FSharp_40_plus_info = deserialize_quoted_FSharp_40_plus_info; - cast_quotation_info = cast_quotation_info; - lift_value_info = lift_value_info; - lift_value_with_name_info = lift_value_with_name_info; - lift_value_with_defn_info = lift_value_with_defn_info; - query_source_as_enum_info = query_source_as_enum_info; - new_query_source_info = new_query_source_info; - query_source_vref = ValRefForIntrinsic query_source_info; - query_value_vref = ValRefForIntrinsic query_value_info; - query_run_value_vref = ValRefForIntrinsic query_run_value_info; - query_run_enumerable_vref = ValRefForIntrinsic query_run_enumerable_info; - query_for_vref = ValRefForIntrinsic query_for_value_info; - query_yield_vref = ValRefForIntrinsic query_yield_value_info; - query_yield_from_vref = ValRefForIntrinsic query_yield_from_value_info; - query_select_vref = ValRefForIntrinsic query_select_value_info; - query_where_vref = ValRefForIntrinsic query_where_value_info; - query_zero_vref = ValRefForIntrinsic query_zero_value_info; - query_builder_tcref = query_builder_tcref; - fail_init_info = fail_init_info; - fail_static_init_info = fail_static_init_info; - check_this_info = check_this_info; - quote_to_linq_lambda_info = quote_to_linq_lambda_info; - - - generic_hash_withc_tuple2_vref = ValRefForIntrinsic generic_hash_withc_tuple2_info; - generic_hash_withc_tuple3_vref = ValRefForIntrinsic generic_hash_withc_tuple3_info; - generic_hash_withc_tuple4_vref = ValRefForIntrinsic generic_hash_withc_tuple4_info; - generic_hash_withc_tuple5_vref = ValRefForIntrinsic generic_hash_withc_tuple5_info; - generic_equals_withc_tuple2_vref = ValRefForIntrinsic generic_equals_withc_tuple2_info; - generic_equals_withc_tuple3_vref = ValRefForIntrinsic generic_equals_withc_tuple3_info; - generic_equals_withc_tuple4_vref = ValRefForIntrinsic generic_equals_withc_tuple4_info; - generic_equals_withc_tuple5_vref = ValRefForIntrinsic generic_equals_withc_tuple5_info; - generic_compare_withc_tuple2_vref = ValRefForIntrinsic generic_compare_withc_tuple2_info; - generic_compare_withc_tuple3_vref = ValRefForIntrinsic generic_compare_withc_tuple3_info; - generic_compare_withc_tuple4_vref = ValRefForIntrinsic generic_compare_withc_tuple4_info; - generic_compare_withc_tuple5_vref = ValRefForIntrinsic generic_compare_withc_tuple5_info; - generic_equality_withc_outer_vref = ValRefForIntrinsic generic_equality_withc_outer_info; - - - cons_ucref = cons_ucref; - nil_ucref = nil_ucref; + array_get_vref = ValRefForIntrinsic array_get_info + array2D_get_vref = ValRefForIntrinsic array2D_get_info + array3D_get_vref = ValRefForIntrinsic array3D_get_info + array4D_get_vref = ValRefForIntrinsic array4D_get_info + seq_singleton_vref = ValRefForIntrinsic seq_singleton_info + seq_collect_vref = ValRefForIntrinsic seq_collect_info + seq_collect_info = seq_collect_info + seq_using_info = seq_using_info + seq_using_vref = ValRefForIntrinsic seq_using_info + seq_delay_info = seq_delay_info + seq_delay_vref = ValRefForIntrinsic seq_delay_info + seq_append_info = seq_append_info + seq_append_vref = ValRefForIntrinsic seq_append_info + seq_generated_info = seq_generated_info + seq_generated_vref = ValRefForIntrinsic seq_generated_info + seq_finally_info = seq_finally_info + seq_finally_vref = ValRefForIntrinsic seq_finally_info + seq_of_functions_info = seq_of_functions_info + seq_of_functions_vref = ValRefForIntrinsic seq_of_functions_info + seq_map_info = seq_map_info + seq_map_vref = ValRefForIntrinsic seq_map_info + seq_singleton_info = seq_singleton_info + seq_empty_info = seq_empty_info + seq_empty_vref = ValRefForIntrinsic seq_empty_info + new_format_info = new_format_info + new_format_vref = ValRefForIntrinsic new_format_info + sprintf_vref = ValRefForIntrinsic sprintf_info + unbox_vref = ValRefForIntrinsic unbox_info + unbox_fast_vref = ValRefForIntrinsic unbox_fast_info + istype_vref = ValRefForIntrinsic istype_info + istype_fast_vref = ValRefForIntrinsic istype_fast_info + unbox_info = unbox_info + get_generic_comparer_info = get_generic_comparer_info + get_generic_er_equality_comparer_info = get_generic_er_equality_comparer_info + get_generic_per_equality_comparer_info = get_generic_per_equality_comparer_info + dispose_info = dispose_info + getstring_info = getstring_info + unbox_fast_info = unbox_fast_info + istype_info = istype_info + istype_fast_info = istype_fast_info + lazy_force_info = lazy_force_info + lazy_create_info = lazy_create_info + create_instance_info = create_instance_info + create_event_info = create_event_info + seq_to_list_info = seq_to_list_info + seq_to_array_info = seq_to_array_info + array_get_info = array_get_info + array2D_get_info = array2D_get_info + array3D_get_info = array3D_get_info + array4D_get_info = array4D_get_info + deserialize_quoted_FSharp_20_plus_info = deserialize_quoted_FSharp_20_plus_info + deserialize_quoted_FSharp_40_plus_info = deserialize_quoted_FSharp_40_plus_info + cast_quotation_info = cast_quotation_info + lift_value_info = lift_value_info + lift_value_with_name_info = lift_value_with_name_info + lift_value_with_defn_info = lift_value_with_defn_info + query_source_as_enum_info = query_source_as_enum_info + new_query_source_info = new_query_source_info + query_source_vref = ValRefForIntrinsic query_source_info + query_value_vref = ValRefForIntrinsic query_value_info + query_run_value_vref = ValRefForIntrinsic query_run_value_info + query_run_enumerable_vref = ValRefForIntrinsic query_run_enumerable_info + query_for_vref = ValRefForIntrinsic query_for_value_info + query_yield_vref = ValRefForIntrinsic query_yield_value_info + query_yield_from_vref = ValRefForIntrinsic query_yield_from_value_info + query_select_vref = ValRefForIntrinsic query_select_value_info + query_where_vref = ValRefForIntrinsic query_where_value_info + query_zero_vref = ValRefForIntrinsic query_zero_value_info + query_builder_tcref = query_builder_tcref + fail_init_info = fail_init_info + fail_static_init_info = fail_static_init_info + check_this_info = check_this_info + quote_to_linq_lambda_info = quote_to_linq_lambda_info + + + generic_hash_withc_tuple2_vref = ValRefForIntrinsic generic_hash_withc_tuple2_info + generic_hash_withc_tuple3_vref = ValRefForIntrinsic generic_hash_withc_tuple3_info + generic_hash_withc_tuple4_vref = ValRefForIntrinsic generic_hash_withc_tuple4_info + generic_hash_withc_tuple5_vref = ValRefForIntrinsic generic_hash_withc_tuple5_info + generic_equals_withc_tuple2_vref = ValRefForIntrinsic generic_equals_withc_tuple2_info + generic_equals_withc_tuple3_vref = ValRefForIntrinsic generic_equals_withc_tuple3_info + generic_equals_withc_tuple4_vref = ValRefForIntrinsic generic_equals_withc_tuple4_info + generic_equals_withc_tuple5_vref = ValRefForIntrinsic generic_equals_withc_tuple5_info + generic_compare_withc_tuple2_vref = ValRefForIntrinsic generic_compare_withc_tuple2_info + generic_compare_withc_tuple3_vref = ValRefForIntrinsic generic_compare_withc_tuple3_info + generic_compare_withc_tuple4_vref = ValRefForIntrinsic generic_compare_withc_tuple4_info + generic_compare_withc_tuple5_vref = ValRefForIntrinsic generic_compare_withc_tuple5_info + generic_equality_withc_outer_vref = ValRefForIntrinsic generic_equality_withc_outer_info + + + cons_ucref = cons_ucref + nil_ucref = nil_ucref - suppressed_types = suppressed_types; + suppressed_types = suppressed_types isInteractive=isInteractive mkSysTyconRef=mkSysTyconRef } -let public mkMscorlibAttrib g nm : BuiltinAttribInfo = +let public mkMscorlibAttrib g nm = let path, typeName = splitILTypeName nm AttribInfo(mkILTyRef (g.ilg.traits.ScopeRef,nm), g.mkSysTyconRef path typeName) diff --git a/src/fsharp/TraceCall.fs b/src/fsharp/TraceCall.fs index c6395732b24..d2d7b7e4eba 100644 --- a/src/fsharp/TraceCall.fs +++ b/src/fsharp/TraceCall.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Internal.Utilities.Debug @@ -117,7 +117,7 @@ type internal Trace private() = threadInfo (Trace.ElapsedTime(start)))} #else - Trace.LogMessage(sprintf "Exitting %s\n" + Trace.LogMessage(sprintf "Exiting %s\n" functionName)} #endif else diff --git a/src/fsharp/TraceCall.fsi b/src/fsharp/TraceCall.fsi index 3cf90953d1c..609d1d1bb0e 100644 --- a/src/fsharp/TraceCall.fsi +++ b/src/fsharp/TraceCall.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Internal.Utilities.Debug module internal TraceInterop = diff --git a/src/fsharp/tc.fs b/src/fsharp/TypeChecker.fs old mode 100644 new mode 100755 similarity index 98% rename from src/fsharp/tc.fs rename to src/fsharp/TypeChecker.fs index e8a15980172..526f5a0ea06 --- a/src/fsharp/tc.fs +++ b/src/fsharp/TypeChecker.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// The typechecker. Left-to-right constrained type checking /// with generalization at appropriate points. @@ -12,6 +12,7 @@ open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library +open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler @@ -22,18 +23,17 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Patcompile -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.PatternMatchCompilation +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Layout -open Microsoft.FSharp.Compiler.Outcome open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic open Microsoft.FSharp.Compiler.Infos.AttributeChecking -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.ConstraintSolver -open Microsoft.FSharp.Compiler.Nameres +open Microsoft.FSharp.Compiler.NameResolution open Microsoft.FSharp.Compiler.PrettyNaming open System open System.Collections.Generic @@ -271,6 +271,7 @@ type TcEnv = } member tenv.DisplayEnv = tenv.eNameResEnv.DisplayEnv member tenv.NameEnv = tenv.eNameResEnv + member tenv.AccessRights = tenv.eAccessRights /// Compute the value of this computed, cached field let computeAccessRights eAccessPath eInternalsVisibleCompPaths eFamilyType = @@ -471,7 +472,7 @@ let AddDeclaredTypars check typars env = /// - the set of active fixups for "letrec" type inference [] type cenv = - { g: Env.TcGlobals + { g: TcGlobals /// Push an entry every time a recursive value binding is used, /// in order to be able to fix up recursive type applications as @@ -555,7 +556,7 @@ let MakeInnerEnv env nm modKind = let path = env.ePath @ [nm] (* Note: here we allocate a new module type accumulator *) let mtypeAcc = ref (NewEmptyModuleOrNamespaceType modKind) - let cpath = mkNestedCPath env.eCompPath nm.idText modKind + let cpath = env.eCompPath.NestedCompPath nm.idText modKind { env with ePath = path eCompPath = cpath eAccessPath = cpath @@ -572,7 +573,7 @@ let MakeInnerEnvForTyconRef _cenv env tcref isExtrinsicExtension = // Regular members get access to protected stuff let env = EnterFamilyRegion tcref env // Note: assumes no nesting - let eAccessPath = mkNestedCPath env.eCompPath tcref.LogicalName ModuleOrType + let eAccessPath = env.eCompPath.NestedCompPath tcref.LogicalName ModuleOrType { env with eAccessRights = computeAccessRights eAccessPath env.eInternalsVisibleCompPaths env.eFamilyType // update this computed field eAccessPath = eAccessPath } @@ -597,14 +598,14 @@ let LocateEnv ccu env enclosingNamespacePath = let env = List.fold (fun env id -> MakeInnerEnv env id Namespace |> fst) env enclosingNamespacePath env -let BuildRootModuleType enclosingNamespacePath cpath mtyp = +let BuildRootModuleType enclosingNamespacePath (cpath:CompilationPath) mtyp = (enclosingNamespacePath,(cpath, mtyp)) - ||> List.foldBack (fun id (cpath, mtyp) -> (parentCompPath cpath, wrapModuleOrNamespaceTypeInNamespace id (parentCompPath cpath) mtyp)) + ||> List.foldBack (fun id (cpath, mtyp) -> (cpath.ParentCompPath, wrapModuleOrNamespaceTypeInNamespace id cpath.ParentCompPath mtyp)) |> snd -let BuildRootModuleExpr enclosingNamespacePath cpath mexpr = +let BuildRootModuleExpr enclosingNamespacePath (cpath:CompilationPath) mexpr = (enclosingNamespacePath,(cpath, mexpr)) - ||> List.foldBack (fun id (cpath, mexpr) -> (parentCompPath cpath, wrapModuleOrNamespaceExprInNamespace id (parentCompPath cpath) mexpr)) + ||> List.foldBack (fun id (cpath, mexpr) -> (cpath.ParentCompPath, wrapModuleOrNamespaceExprInNamespace id cpath.ParentCompPath mexpr)) |> snd let TryStripPrefixPath (g:TcGlobals) (enclosingNamespacePath: Ident list) = @@ -940,7 +941,7 @@ type ValMemberInfoTransient = ValMemberInfoTransient of ValMemberInfo * string * let MakeMemberDataAndMangledNameForMemberVal(g,tcref,isExtrinsic,attrs,optImplSlotTys,memberFlags,valSynData,id,isCompGen) = let logicalName = ComputeLogicalName id memberFlags let optIntfSlotTys = if optImplSlotTys |> List.forall (isInterfaceTy g) then optImplSlotTys else [] - let memberInfo = + let memberInfo : ValMemberInfo = { ApparentParent=tcref MemberFlags=memberFlags IsImplemented=false @@ -1153,8 +1154,9 @@ type ValScheme = /// first phase. The input to the second phase is a List.map that gives the Val and type scheme /// for each value bound by the pattern. type TcPatPhase2Input = - TcPatPhase2Input of (Val * TypeScheme) NameMap - + | TcPatPhase2Input of (Val * TypeScheme) NameMap * bool + // Get an input indicating we are no longer on the left-most path through a disjunctive "or" pattern + member x.RightPath = (let (TcPatPhase2Input(a,_)) = x in TcPatPhase2Input(a,false)) /// The first phase of checking and elaborating a binding leaves a whole goop of information. /// This is a bit of a mess: much of this information is carried on a per-value basis by the @@ -1165,7 +1167,7 @@ type CheckedBindingInfo = bool * (* immutable? *) Tast.Attribs * XmlDoc * - (TcPatPhase2Input -> Patcompile.Pattern) * + (TcPatPhase2Input -> PatternMatchCompilation.Pattern) * ExplicitTyparInfo * NameMap * Expr * @@ -1717,8 +1719,8 @@ let MakeAndPublishSimpleVals cenv env m names mergeNamesInOneNameresEnv = else // reason: now during typecheck we create new name resolution environment for all components of tupled arguments in lambda. // When trying to find best environment for the given position first we pick the most deeply nested scope that contains given position - // (and that will be lambda body correct one), then we look for the better subtree on the left hand side - // (and that will be name resolution environment containing second parameter parameter without the first one). + // (and that will be lambda body - correct one), then we look for the better subtree on the left hand side + // (and that will be name resolution environment containing second parameter parameter - without the first one). // fix: I've tried to make fix as local as possible to reduce overall impact on the source code. // Idea of the fix: replace existing typecheck results sink and capture all reported name resolutions (this will be all parameters in lambda). // After that - we restore the sink back, generate new name resolution environment that contains all captured names and report generated environment @@ -1733,8 +1735,12 @@ let MakeAndPublishSimpleVals cenv env m names mergeNamesInOneNameresEnv = let sink = { new ITypecheckResultsSink with member this.NotifyEnvWithScope(_, _, _) = () // ignore EnvWithScope reports - member this.NotifyNameResolution(pos, a, b, occurence, denv, nenv, ad, m) = nameResolutions.Add(pos, a, b, occurence, denv, nenv, ad, m) - member this.NotifyExprHasType(_, _, _, _, _, _) = assert false } // no expr typings in MakeSimpleVals + member this.NotifyNameResolution(pos, a, b, occurence, denv, nenv, ad, m) = + if not m.IsSynthetic then + nameResolutions.Add(pos, a, b, occurence, denv, nenv, ad, m) + member this.NotifyExprHasType(_, _, _, _, _, _) = assert false // no expr typings in MakeSimpleVals + member this.NotifyFormatSpecifierLocation _ = () + member this.CurrentSource = None } use _h = WithNewTypecheckResultsSink(sink, cenv.tcSink) MakeSimpleVals cenv env names @@ -1830,7 +1836,7 @@ let BuildFieldMap cenv env isPartial ty flds m = let frefSets = flds |> List.map (fun (fld,fldExpr) -> - let frefSet = ResolveField cenv.nameResolver env.eNameResEnv ad ty fld + let frefSet = ResolveField cenv.tcSink cenv.nameResolver env.eNameResEnv ad ty fld fld,frefSet, fldExpr) let relevantTypeSets = frefSets |> List.map (fun (_,frefSet,_) -> frefSet |> List.choose (fun (FieldResolution(rfref,_)) -> Some rfref.TyconRef)) @@ -1882,7 +1888,7 @@ let rec ApplyUnionCaseOrExn (makerForUnionCase,makerForExnTag) m cenv env overal UnifyTypes cenv env m overallTy cenv.g.exn_ty CheckTyconAccessible cenv.amap m ad ecref |> ignore let mkf = makerForExnTag(ecref) - mkf,recdFieldTysOfExnDefRef ecref, [ for f in (recdFieldsOfExnDefRef ecref) -> f.Name ] + mkf,recdFieldTysOfExnDefRef ecref, [ for f in (recdFieldsOfExnDefRef ecref) -> f.Id ] | Item.UnionCase(ucinfo,showDeprecated) -> if showDeprecated then @@ -1895,7 +1901,7 @@ let rec ApplyUnionCaseOrExn (makerForUnionCase,makerForExnTag) m cenv env overal let inst = mkTyparInst ucref.TyconRef.TyparsNoRange ucinfo.TypeInst UnifyTypes cenv env m overallTy gtyp2 let mkf = makerForUnionCase(ucref,ucinfo.TypeInst) - mkf,actualTysOfUnionCaseFields inst ucref, ([ for f in ucref.AllFieldsAsList -> f.Name ]) + mkf,actualTysOfUnionCaseFields inst ucref, ([ for f in ucref.AllFieldsAsList -> f.Id ]) | _ -> invalidArg "item" "not a union case or exception reference" let ApplyUnionCaseOrExnTypes m cenv env overallTy c = @@ -2533,7 +2539,7 @@ let FreshenObjectArgType cenv m rigid tcref isExtrinsic declaredTyconTypars = // The early generalization rule of F# 2.0 can be unsound for members in generic types (Bug DevDiv2 10649). -// It gives rise to types like "Forall T. ?X -> ?Y" where ?X and ?Y are later discovered to invovled T. +// It gives rise to types like "Forall T. ?X -> ?Y" where ?X and ?Y are later discovered to involve T. // // For example: // type C<'T>() = @@ -2924,7 +2930,7 @@ let BuildILFieldGet g amap m objExpr (finfo:ILFieldInfo) = | _ -> #endif let wrap,objExpr = mkExprAddrOfExpr g isValueType false NeverMutates objExpr None m - // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in Ilxgen.GenAsm + // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm // This ensures we always get the type instantiation right when doing this from // polymorphic code, after inlining etc. * let fspec = mkILFieldSpec(fref,mkILNamedTy valu fref.EnclosingTypeRef []) @@ -2936,7 +2942,7 @@ let BuildILFieldSet g m objExpr (finfo:ILFieldInfo) argExpr = let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject let tinst = finfo.TypeInst - // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in Ilxgen.gen_asm + // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm // This ensures we always get the type instantiation right when doing this from // polymorphic code, after inlining etc. * let fspec = mkILFieldSpec(fref,mkILNamedTy valu fref.EnclosingTypeRef []) @@ -2949,7 +2955,7 @@ let BuildILStaticFieldSet m (finfo:ILFieldInfo) argExpr = let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject let tinst = finfo.TypeInst - // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in Ilxgen.gen_asm + // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm // This ensures we always get the type instantiation right when doing this from // polymorphic code, after inlining etc. let fspec = mkILFieldSpec(fref,mkILNamedTy valu fref.EnclosingTypeRef []) @@ -3945,6 +3951,10 @@ and TcPseudoMemberSpec cenv newOk env synTypars tpenv memSpfn m = let argtys = List.concat curriedArgInfos let argtys = List.map fst argtys let logicalCompiledName = ComputeLogicalName id memberFlags + + let item = Item.ArgName (id, memberConstraintTy, None) + CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,item,item,ItemOccurence.Use,env.DisplayEnv,env.eAccessRights) + TTrait(tys,logicalCompiledName,memberFlags,argtys,returnTy, ref None),tpenv | _ -> error(Error(FSComp.SR.tcInvalidConstraint(),m)) | _ -> error(Error(FSComp.SR.tcInvalidConstraint(),m)) @@ -4103,10 +4113,10 @@ and TcTyparOrMeasurePar optKind cenv (env:TcEnv) newOk tpenv (Typar(id,_,_) as t | Some TyparKind.Measure, TyparKind.Type -> error (Error(FSComp.SR.tcExpectedUnitOfMeasureMarkWithAttribute(), id.idRange)); res, tpenv | Some TyparKind.Type, TyparKind.Measure -> error (Error(FSComp.SR.tcExpectedTypeParameter(), id.idRange)); res, tpenv | _, _ -> - let item = Item.TypeVar(id.idText) + let item = Item.TypeVar(id.idText, res) CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,item,item,ItemOccurence.UseInType,env.DisplayEnv,env.eAccessRights) // record the ' as well for tokenization - CallNameResolutionSink cenv.tcSink (tp.Range.StartRange,env.NameEnv,item,item,ItemOccurence.UseInType,env.DisplayEnv,env.eAccessRights) + // CallNameResolutionSink cenv.tcSink (tp.Range.StartRange,env.NameEnv,item,item,ItemOccurence.UseInType,env.DisplayEnv,env.eAccessRights) res, tpenv let key = id.idText match env.eNameResEnv.eTypars.TryFind key with @@ -4119,23 +4129,27 @@ and TcTyparOrMeasurePar optKind cenv (env:TcEnv) newOk tpenv (Typar(id,_,_) as t // OK, this is an implicit declaration of a type parameter // The kind defaults to Type let tp' = NewTypar ((match optKind with None -> TyparKind.Type | Some kind -> kind), TyparRigidity.WarnIfNotRigid,tp,false,TyparDynamicReq.Yes,[],false,false) + let item = Item.TypeVar(id.idText, tp') + CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,item,item,ItemOccurence.UseInType,env.DisplayEnv,env.eAccessRights) tp',AddUnscopedTypar key tp' tpenv and TcTypar cenv env newOk tpenv tp = TcTyparOrMeasurePar (Some TyparKind.Type) cenv env newOk tpenv tp -and TcTyparDecl cenv env (TyparDecl(synAttrs,tp)) = +and TcTyparDecl cenv env (TyparDecl(synAttrs,(Typar(id,_,_) as stp))) = let attrs = TcAttributes cenv env AttributeTargets.GenericParameter synAttrs let hasMeasureAttr = HasFSharpAttribute cenv.g cenv.g.attrib_MeasureAttribute attrs let hasEqDepAttr = HasFSharpAttribute cenv.g cenv.g.attrib_EqualityConditionalOnAttribute attrs let hasCompDepAttr = HasFSharpAttribute cenv.g cenv.g.attrib_ComparisonConditionalOnAttribute attrs let attrs = attrs |> List.filter (IsMatchingFSharpAttribute cenv.g cenv.g.attrib_MeasureAttribute >> not) - let tp = NewTypar ((if hasMeasureAttr then TyparKind.Measure else TyparKind.Type), TyparRigidity.WarnIfNotRigid,tp,false,TyparDynamicReq.Yes,attrs,hasEqDepAttr,hasCompDepAttr) + let tp = NewTypar ((if hasMeasureAttr then TyparKind.Measure else TyparKind.Type), TyparRigidity.WarnIfNotRigid,stp,false,TyparDynamicReq.Yes,attrs,hasEqDepAttr,hasCompDepAttr) match TryFindFSharpStringAttribute cenv.g cenv.g.attrib_CompiledNameAttribute attrs with | Some compiledName -> tp.Data.typar_il_name <- Some compiledName | None -> () + let item = Item.TypeVar(id.idText, tp) + CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,item,item,ItemOccurence.UseInType,env.DisplayEnv,env.eAccessRights) tp @@ -4548,7 +4562,7 @@ and TcTypeApp cenv newOk checkCxs occ env tpenv m tcref pathTypeArgs (args: SynT let tps,_,tinst,_ = infoOfTyconRef m tcref // If we're not checking constraints, i.e. when we first assert the super/interfaces of a type definition, then just - // clear the constaint lists of the freshly generated type variables. A little ugly but fairly localized. + // clear the constraint lists of the freshly generated type variables. A little ugly but fairly localized. if checkCxs = NoCheckCxs then tps |> List.iter (fun tp -> tp.Data.typar_constraints <- []) if tinst.Length <> pathTypeArgs.Length + args.Length then error (TyconBadArgs(env.DisplayEnv,tcref,pathTypeArgs.Length + args.Length,m)) @@ -4691,17 +4705,32 @@ and TcSimplePatsOfUnknownType cenv optArgsOK checkCxs env tpenv spats = let argty = NewInferenceType () TcSimplePats cenv optArgsOK checkCxs argty env (tpenv,NameMap.empty,Set.empty) spats -and TcPatBindingName _cenv _env id ty isMemberThis vis1 topValData (inlineFlag,declaredTypars,argAttribs,isMutable,vis2,compgen) (names,takenNames:Set) = +and TcPatBindingName cenv env id ty isMemberThis vis1 topValData (inlineFlag,declaredTypars,argAttribs,isMutable,vis2,compgen) (names,takenNames:Set) = let vis = if isSome vis1 then vis1 else vis2 if takenNames.Contains id.idText then errorR (VarBoundTwice id) let baseOrThis = if isMemberThis then MemberThisVal else NormalVal let names = Map.add id.idText (PrelimValScheme1(id,declaredTypars,ty,topValData,None,isMutable,inlineFlag,baseOrThis,argAttribs,vis,compgen)) names let takenNames = Set.add id.idText takenNames - (fun (TcPatPhase2Input values) -> + (fun (TcPatPhase2Input (values, isLeftMost)) -> let (vspec,typeScheme) = match values.TryFind id.idText with - | Some x -> x + | Some value -> + let name = id.idText + if not (String.IsNullOrEmpty name) && Char.IsLower(name.[0]) then + match TryFindPatternByName name env.eNameResEnv with + | Some (Item.Value vref) when vref.LiteralValue.IsSome -> + warning(Error(FSComp.SR.checkLowercaseLiteralBindingInPattern(id.idText),id.idRange)) + | Some _ | None -> () + value | None -> error(Error(FSComp.SR.tcNameNotBoundInPattern(id.idText),id.idRange)) + + // isLeftMost indcates we are processing the left-most path through a disjunctive or pattern. + // For those binding locations, CallNameResolutionSink is called in MakeAndPublishValue, like all other bindings + // For non-left-most paths, we register the name resolutions here + if not isLeftMost && not vspec.IsCompilerGenerated && not (String.hasPrefix vspec.LogicalName "_") then + let item = Item.Value(mkLocalValRef vspec) + CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,item,item,ItemOccurence.Binding,env.DisplayEnv,env.eAccessRights) + PBind(vspec,typeScheme)), names,takenNames @@ -4784,7 +4813,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv,names,takenNames) ty pat | None -> () | Some (PrelimValScheme1(_,_,ty2,_,_,_,_,_,_,_,_)) -> UnifyTypes cenv env m ty1 ty2) - (fun values -> TPat_disjs ([pat1' values;pat2' values],m)), (tpenv,names1,takenNames1) + (fun values -> TPat_disjs ([pat1' values;pat2' values.RightPath],m)), (tpenv,names1,takenNames1) | SynPat.Ands (pats,m) -> let pats',acc = TcPatterns warnOnUpper cenv env vFlags (tpenv,names,takenNames) (List.map (fun _ -> ty) pats) pats @@ -4796,6 +4825,14 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv,names,takenNames) ty pat match args with | SynConstructorArgs.Pats [] -> warnOnUpper | _ -> AllIdsOK + + let checkNoArgsForLiteral() = + let nargs = + match args with + | SynConstructorArgs.Pats args -> args.Length + | SynConstructorArgs.NamePatPairs (pairs, _) -> pairs.Length + if nargs <> 0 then error(Error(FSComp.SR.tcLiteralDoesNotTakeArguments(),m)) + begin match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver warnOnUpperForId false m ad env.eNameResEnv TypeNameResolutionInfo.Default longId with | Item.NewDef id -> match args with @@ -4887,7 +4924,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv,names,takenNames) ty pat // | Case(_, v) let result = Array.zeroCreate nargtys for (id, pat) in pairs do - match List.tryFindIndex ((=)id.idText) argNames with + match argNames |> List.tryFindIndex (fun id2 -> id.idText = id2.idText) with | None -> let caseName = match item with @@ -4903,8 +4940,8 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv,names,takenNames) ty pat | Item.UnionCase(uci,_) -> Some(ArgumentContainer.UnionCase(uci)) | Item.ExnCase tref -> Some(ArgumentContainer.Type(tref)) | _ -> None - let argItem = Item.ArgName (id, (List.nth argtys idx), argContainerOpt) - CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,argItem,argItem,ItemOccurence.Use,env.DisplayEnv,ad) + let argItem = Item.ArgName (argNames.[idx], argtys.[idx], argContainerOpt) + CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,argItem,argItem,ItemOccurence.Pattern,env.DisplayEnv,ad) | _ -> error(Error(FSComp.SR.tcUnionCaseFieldCannotBeUsedMoreThanOnce(id.idText), id.idRange)) for i = 0 to nargtys - 1 do @@ -4943,6 +4980,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv,names,takenNames) ty pat match finfo.LiteralValue with | None -> error (Error(FSComp.SR.tcFieldNotLiteralCannotBeUsedInPattern(), m)) | Some lit -> + checkNoArgsForLiteral() UnifyTypes cenv env m ty (finfo.FieldType(cenv.amap,m)) let c' = TcFieldInit m lit (fun _ -> TPat_const (c',m)),(tpenv,names,takenNames) @@ -4955,7 +4993,10 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv,names,takenNames) ty pat match rfinfo.LiteralValue with | None -> error (Error(FSComp.SR.tcFieldNotLiteralCannotBeUsedInPattern(), m)) | Some lit -> + checkNoArgsForLiteral() UnifyTypes cenv env m ty rfinfo.FieldType + let item = Item.RecdField(rfinfo) + CallNameResolutionSink cenv.tcSink (m,env.NameEnv,item,item,ItemOccurence.Pattern,env.DisplayEnv,env.AccessRights) (fun _ -> TPat_const (lit,m)),(tpenv,names,takenNames) | Item.Value vref -> @@ -4965,6 +5006,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv,names,takenNames) ty pat let (_, _, vexpty, _, _) = TcVal true cenv env tpenv vref None m CheckValAccessible m env.eAccessRights vref CheckFSharpAttributes cenv.g vref.Attribs m |> CommitOperationResult + checkNoArgsForLiteral() UnifyTypes cenv env m ty vexpty (fun _ -> TPat_const (lit,m)),(tpenv,names,takenNames) @@ -5383,6 +5425,11 @@ and TcExprUndelayed cenv overallTy env tpenv (expr: SynExpr) = let finishExpr,tpenv = TcExpr cenv (cenv.g.int_ty) env tpenv finish let idv,_ = mkLocal id.idRange id.idText cenv.g.int_ty let envinner = AddLocalVal cenv.tcSink m idv env + + // notify name resolution sink about loop variable + let item = Item.Value(mkLocalValRef idv) + CallNameResolutionSink cenv.tcSink (idv.Range, env.NameEnv, item, item, ItemOccurence.Binding, env.DisplayEnv, env.eAccessRights) + let bodyExpr,tpenv = TcStmt cenv envinner tpenv body mkFastForLoop cenv.g (spBind,m,idv,startExpr,dir,finishExpr,bodyExpr), tpenv @@ -5881,7 +5928,7 @@ and TcRecordConstruction cenv overallTy env tpenv optOrigExpr objTy fldsList m = fspecs |> List.filter (fun rfld -> rfld.Name |> fieldNameUnbound) |> List.filter (fun f -> not f.IsZeroInit) - |> List.map (fun fspec ->fspec.Name, mkRecdFieldGet cenv.g (oldve',mkNestedRecdFieldRef tcref fspec,tinst,m)) + |> List.map (fun fspec ->fspec.Name, mkRecdFieldGet cenv.g (oldve',tcref.MakeNestedRecdFieldRef fspec,tinst,m)) let fldsList = fldsList @ oldFldsList @@ -6216,14 +6263,14 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy,argopt,binds,extraImpls,mNew DispatchSlotChecking.CheckOverridesAreAllUsedOnce (env.DisplayEnv, cenv.g, cenv.amap, true, implty, dispatchSlotsKeyed, availPriorOverrides, overrideSpecs) - DispatchSlotChecking.CheckDispatchSlotsAreImplemented (env.DisplayEnv, cenv.g, cenv.amap, m, false, implty, dispatchSlots, availPriorOverrides, overrideSpecs) |> ignore) + DispatchSlotChecking.CheckDispatchSlotsAreImplemented (env.DisplayEnv, cenv.g, cenv.amap, m, env.NameEnv, cenv.tcSink, false, implty, dispatchSlots, availPriorOverrides, overrideSpecs) |> ignore) // 6c. create the specs of overrides let allTypeImpls = overridesAndVirts |> List.map (fun (m,implty,_,dispatchSlotsKeyed,_,overrides) -> let overrides' = [ for overrideMeth in overrides do - let (Override(_,_, id,(mtps,_),_,_,isFakeEventProperty) as ovinfo),(_, thisVal, methodVars, bindingAttribs, bindingBody) = overrideMeth + let (Override(_,_, id,(mtps,_),_,_,isFakeEventProperty,_) as ovinfo),(_, thisVal, methodVars, bindingAttribs, bindingBody) = overrideMeth if not isFakeEventProperty then let searchForOverride = dispatchSlotsKeyed @@ -6270,7 +6317,17 @@ and TcConstStringExpr cenv overallTy env m tpenv s = let ty' = mkPrintfFormatTy cenv.g aty bty cty dty ety if (not (isObjTy cenv.g overallTy) && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy ty') then // Parse the format string to work out the phantom types - let aty',ety' = (try Formats.ParseFormatString m cenv.g s bty cty dty with Failure s -> error (Error(FSComp.SR.tcUnableToParseFormatString(s),m))) + let source = match cenv.tcSink.CurrentSink with None -> None | Some sink -> sink.CurrentSource + let normalizedString = (s.Replace("\r\n", "\n").Replace("\r", "\n")) + + let (aty',ety'), specifierLocations = (try CheckFormatStrings.ParseFormatString m cenv.g source normalizedString bty cty dty with Failure s -> error (Error(FSComp.SR.tcUnableToParseFormatString(s),m))) + + match cenv.tcSink.CurrentSink with + | None -> () + | Some sink -> + for specifierLocation in specifierLocations do + sink.NotifyFormatSpecifierLocation specifierLocation + UnifyTypes cenv env m aty aty' UnifyTypes cenv env m ety ety' mkCallNewFormat cenv.g m aty bty cty dty ety (mkString cenv.g m s),tpenv @@ -6504,7 +6561,7 @@ and TcForEachExpr cenv overallTy env tpenv (pat,enumSynExpr,body,m,spForLoop) = // Build iteration as a while loop with a try/finally disposal | Choice3Of3(enumerableVar,enumeratorVar, _,getEnumExpr,_,guardExpr,currentExpr) -> - // This compiled for must be matched EXACTLY by DetectFastIntegerForLoops in opt.fs and creflect.fs + // This compiled for must be matched EXACTLY by CompiledForEachExpr in opt.fs and creflect.fs mkCompGenLet enumExpr.Range enumerableVar enumExpr (let cleanupE = BuildDisposableCleanup cenv env m enumeratorVar let spBind = (match spForLoop with SequencePointAtForLoop(spStart) -> SequencePointAtBinding(spStart) | NoSequencePointAtForLoop -> NoSequencePointAtStickyBinding) @@ -6537,7 +6594,7 @@ and TcQuotationExpr cenv overallTy env tpenv (_oper,raw,ast,isFromQueryExpressio // Coerce it if needed let expr = if raw then mkCoerceExpr(expr,(mkRawQuotedExprTy cenv.g),m,(tyOfExpr cenv.g expr)) else expr - // We serialize the quoted expression to bytes in Ilxgen after type inference etc. is complete. + // We serialize the quoted expression to bytes in IlxGen after type inference etc. is complete. expr,tpenv //------------------------------------------------------------------------- @@ -7505,12 +7562,17 @@ and TcComputationExpression cenv env overallTy mWhole interpExpr builderTy tpenv | None -> // This only occurs in final position in a sequence match comp with - // "do! expr;" in final position is treated as { let! () = expr in return () } + // "do! expr;" in final position is treated as { let! () = expr in return () } when Return is provided or as { let! () = expr in zero } otherwise | SynExpr.DoBang(rhsExpr,m) -> let mUnit = rhsExpr.Range let rhsExpr = mkSourceExpr rhsExpr if isQuery then error(Error(FSComp.SR.tcBindMayNotBeUsedInQueries(),m)) - trans true q varSpace (SynExpr.LetOrUseBang(NoSequencePointAtDoBinding, false, false, SynPat.Const(SynConst.Unit, mUnit), rhsExpr, SynExpr.YieldOrReturn((false,true), SynExpr.Const(SynConst.Unit,m), m),m)) translatedCtxt + let bodyExpr = + if isNil (TryFindIntrinsicOrExtensionMethInfo cenv env m ad "Return" builderTy) then + SynExpr.ImplicitZero m + else + SynExpr.YieldOrReturn((false,true), SynExpr.Const(SynConst.Unit, m), m) + trans true q varSpace (SynExpr.LetOrUseBang(NoSequencePointAtDoBinding, false, false, SynPat.Const(SynConst.Unit, mUnit), rhsExpr, bodyExpr, m)) translatedCtxt // "expr;" in final position is treated as { expr; zero } // Suppress the sequence point on the "zero" | _ -> @@ -7901,7 +7963,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution match aparity with | 0 | 1 -> let mkConstrApp _mArgs = function [arg] -> arg | _ -> error(InternalError("ApplyUnionCaseOrExn",mItem)) - mkConstrApp, [ucaseAppTy], apinfo.Names + mkConstrApp, [ucaseAppTy], [ for (s,m) in apinfo.ActiveTagsWithRanges -> mkSynId m s ] | _ -> let ucref = mkChoiceCaseRef cenv.g mItem aparity n let _,_,tinst,_ = infoOfTyconRef mItem ucref.TyconRef @@ -7957,7 +8019,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution // so far we've used 1) so we cannot immediately switch to 2) since it will be a definite breaking change. for (_, id, arg) in namedCallerArgs do - match List.tryFindIndex ((=) id.idText) argNames with + match argNames |> List.tryFindIndex (fun id2 -> id.idText = id2.idText) with | Some i -> if box fittedArgs.[i] = null then fittedArgs.[i] <- arg @@ -7965,7 +8027,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution | Item.UnionCase(uci,_) -> Some(ArgumentContainer.UnionCase(uci)) | Item.ExnCase tref -> Some(ArgumentContainer.Type(tref)) | _ -> None - let argItem = Item.ArgName (id, (List.nth argtys i), argContainerOpt) + let argItem = Item.ArgName (argNames.[i], argtys.[i], argContainerOpt) CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,argItem,argItem,ItemOccurence.Use,env.DisplayEnv,ad) else error(Error(FSComp.SR.tcUnionCaseFieldCannotBeUsedMoreThanOnce(id.idText), id.idRange)) currentIndex <- SEEN_NAMED_ARGUMENT @@ -8293,7 +8355,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject - // The empty instantiation on the fspec is OK, since we make the correct fspec in Ilxgen.gen_asm + // The empty instantiation on the fspec is OK, since we make the correct fspec in IlxGen.GenAsm // This ensures we always get the type instantiation right when doing this from // polymorphic code, after inlining etc. let fspec = mkILFieldSpec(fref,mkILNamedTy valu fref.EnclosingTypeRef []) @@ -9211,7 +9273,7 @@ and TcMethodApplication match assignedArg.NamedArgIdOpt with | None -> () | Some id -> - let item = Item.ArgName (id, assignedArg.CalledArg.CalledArgumentType, Some(ArgumentContainer.Method(finalCalledMethInfo))) + let item = Item.ArgName (defaultArg assignedArg.CalledArg.NameOpt id, assignedArg.CalledArg.CalledArgumentType, Some(ArgumentContainer.Method(finalCalledMethInfo))) CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,item,item,ItemOccurence.Use,env.DisplayEnv,ad)) let allArgsCoerced = List.map coerce allArgs @@ -9464,7 +9526,7 @@ and TcMatchPattern cenv inputTy env tpenv (pat:SynPat,optWhenExpr) = let patf',(tpenv,names,_) = TcPat WarnOnUpperCase cenv env None (ValInline.Optional,permitInferTypars,noArgOrRetAttribs,false,None,false) (tpenv,Map.empty,Set.empty) inputTy pat let envinner,values,vspecMap = MakeAndPublishSimpleVals cenv env m names false let optWhenExpr',tpenv = Option.mapFold (TcExpr cenv cenv.g.bool_ty envinner) tpenv optWhenExpr - patf' (TcPatPhase2Input values),optWhenExpr',FlatList.ofList (NameMap.range vspecMap),envinner,tpenv + patf' (TcPatPhase2Input (values, true)),optWhenExpr',FlatList.ofList (NameMap.range vspecMap),envinner,tpenv and TcMatchClauses cenv inputTy resultTy env tpenv clauses = List.mapFold (TcMatchClause cenv inputTy resultTy env) tpenv clauses @@ -9571,7 +9633,7 @@ and TcNormalizedBinding declKind (cenv:cenv) env tpenv overallTy safeThisValOpt let apinfoOpt = match NameMap.range nameToPrelimValSchemeMap with | [PrelimValScheme1(id,_,ty,_,_,_,_,_,_,_,_) ] -> - match ActivePatternInfoOfValName id.idText with + match ActivePatternInfoOfValName id.idText id.idRange with | Some apinfo -> Some (apinfo,ty, id.idRange) | None -> None | _ -> None @@ -9583,6 +9645,10 @@ and TcNormalizedBinding declKind (cenv:cenv) env tpenv overallTy safeThisValOpt if isSome memberFlagsOpt || (not apinfo.IsTotal && apinfo.ActiveTags.Length > 1) then error(Error(FSComp.SR.tcInvalidActivePatternName(),mBinding)) + apinfo.ActiveTagsWithRanges |> List.iteri (fun i (_tag,tagRange) -> + let item = Item.ActivePatternResult(apinfo, cenv.g.unit_ty, i, tagRange) + CallNameResolutionSink cenv.tcSink (tagRange,env.NameEnv,item,item,ItemOccurence.Binding,env.DisplayEnv,env.eAccessRights)) + ModifyNameResEnv (fun nenv -> AddActivePatternResultTagsToNameEnv apinfo nenv ty m) envinner | None -> envinner @@ -9699,7 +9765,7 @@ and TcAttribute cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = match ResolveTypeLongIdent cenv.tcSink cenv.nameResolver ItemOccurence.UseInAttribute OpenQualified env.eNameResEnv ad tycon TypeNameResolutionStaticArgsInfo.DefiniteEmpty PermitDirectReferenceToGeneratedType.No with | Exception err -> raze(err) | _ -> success(TcTypeAndRecover cenv NoNewTypars CheckCxs ItemOccurence.UseInAttribute env tpenv (SynType.App(SynType.LongIdent(LongIdentWithDots(tycon,[])),None,[],[],None,false,mAttr)) ) - ForceRaise ((try1 (tyid.idText + "Attribute")) |> Outcome.otherwise (fun () -> (try1 tyid.idText))) + ForceRaise ((try1 (tyid.idText + "Attribute")) |> ResultOrException.otherwise (fun () -> (try1 tyid.idText))) let ad = env.eAccessRights @@ -9722,7 +9788,7 @@ and TcAttribute cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = let tdef = tcref.ILTyconRawMetadata let tref = cenv.g.attrib_AttributeUsageAttribute.TypeRef - match TryDecodeILAttribute cenv.g tref (Some(tref.Scope)) tdef.CustomAttrs with + match TryDecodeILAttribute cenv.g tref tdef.CustomAttrs with | Some ([ILAttribElem.Int32 validOn ],named) -> let inherited = match List.tryPick (function ("Inherited",_,_,ILAttribElem.Bool res) -> Some res | _ -> None) named with @@ -9906,7 +9972,7 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (binds,bindsm,scope let tpenv = HideUnscopedTypars generalizedTypars tpenv let valSchemes = NameMap.map (UseCombinedArity cenv.g declKind rhsExpr) prelimValSchemes2 let values = MakeAndPublishVals cenv env (altActualParent,false,declKind,ValNotInRecScope,valSchemes,attrs,doc,konst) - let pat' = tcPatPhase2 (TcPatPhase2Input values) + let pat' = tcPatPhase2 (TcPatPhase2Input (values, true)) let prelimRecValues = NameMap.map fst values // Now bind the r.h.s. to the l.h.s. @@ -9988,6 +10054,8 @@ and TcLetBindings cenv env containerInfo declKind tpenv (binds,bindsm,scopem) = and CheckMemberFlags _g optIntfSlotTy newslotsOK overridesOK memberFlags m = if newslotsOK = NoNewSlots && memberFlags.IsDispatchSlot then errorR(Error(FSComp.SR.tcAbstractMembersIllegalInAugmentation(),m)) + if overridesOK = ErrorOnOverrides && memberFlags.MemberKind = MemberKind.Constructor then + errorR(Error(FSComp.SR.tcConstructorsIllegalInAugmentation(),m)) if overridesOK = WarnOnOverrides && memberFlags.IsOverrideOrExplicitImpl && isNone optIntfSlotTy then warning(OverrideInIntrinsicAugmentation(m)) if overridesOK = ErrorOnOverrides && memberFlags.IsOverrideOrExplicitImpl then @@ -10245,11 +10313,11 @@ and AnalyzeRecursiveStaticMemberOrValDecl (cenv, envinner: TcEnv, tpenv, declKin let isExtrinsic = (declKind = ExtrinsicExtensionBinding) MakeMemberDataAndMangledNameForMemberVal(cenv.g,tcref,isExtrinsic,bindingAttribs,[],memberFlags,valSynInfo,id,false) - envinner,tpenv,id,Some(memberInfo),vis,vis2,safeThisValOpt,enclosingDeclaredTypars,baseValOpt,flex,bindingRhs,declaredTypars + envinner,tpenv,id,None,Some(memberInfo),vis,vis2,safeThisValOpt,enclosingDeclaredTypars,baseValOpt,flex,bindingRhs,declaredTypars // non-member bindings. How easy. | _ -> - envinner,tpenv,id,None,vis,vis2,None,[],None,flex,bindingRhs,declaredTypars + envinner,tpenv,id,None,None,vis,vis2,None,[],None,flex,bindingRhs,declaredTypars and AnalyzeRecursiveInstanceMemberDecl (cenv,envinner: TcEnv, tpenv, declKind, synTyparDecls, valSynInfo, flex:ExplicitTyparInfo, newslotsOK, overridesOK, vis1, thisId, memberId:Ident, toolId:Ident option, bindingAttribs, vis2, tcrefContainerInfo, memberFlagsOpt, ty, bindingRhs, mBinding) = @@ -10303,9 +10371,15 @@ and AnalyzeRecursiveInstanceMemberDecl (cenv,envinner: TcEnv, tpenv, declKind, s | None -> None let memberInfo = MakeMemberDataAndMangledNameForMemberVal(cenv.g,tcref,isExtrinsic,bindingAttribs,optInferredImplSlotTys,memberFlags,valSynInfo,memberId,false) - let memberId = match toolId with Some tid -> ident(memberId.idText, tid.idRange) | None -> memberId - - envinner, tpenv, memberId, Some memberInfo, vis, vis2, None, enclosingDeclaredTypars, baseValOpt, flex, bindingRhs, declaredTypars + // This line factored in the 'get' or 'set' as the identifier for a property declaration using "with get () = ... and set v = ..." + // It has been removed from FSharp.Compiler.Service because we want the property name to be the location of + // the definition of these symbols. + // + // See https://github.com/fsharp/FSharp.Compiler.Service/issues/79. + //let memberId = match toolId with Some tid -> ident(memberId.idText, tid.idRange) | None -> memberId + //ignore toolId + + envinner, tpenv, memberId, toolId, Some memberInfo, vis, vis2, None, enclosingDeclaredTypars, baseValOpt, flex, bindingRhs, declaredTypars | _ -> error(Error(FSComp.SR.tcRecursiveBindingsWithMembersMustBeDirectAugmentation(),mBinding)) @@ -10372,7 +10446,7 @@ and AnalyzeAndMakeRecursiveValue overridesOK isGeneratedEventVal cenv (env:TcEnv let envinner = AddDeclaredTypars CheckForDuplicateTypars declaredTypars env // OK, analyze the declaration and return lots of information about it - let envinner,tpenv,bindingId,memberInfoOpt,vis,vis2,safeThisValOpt,enclosingDeclaredTypars,baseValOpt,flex,bindingRhs,declaredTypars = + let envinner,tpenv,bindingId,toolIdOpt,memberInfoOpt,vis,vis2,safeThisValOpt,enclosingDeclaredTypars,baseValOpt,flex,bindingRhs,declaredTypars = AnalyzeRecursiveDecl (cenv, envinner, tpenv, declKind, synTyparDecls, declaredTypars, thisIdOpt, valSynInfo, flex, newslotsOK, overridesOK, vis1, declPattern, bindingAttribs, tcrefContainerInfo, @@ -10409,6 +10483,14 @@ and AnalyzeAndMakeRecursiveValue overridesOK isGeneratedEventVal cenv (env:TcEnv // Create the value let vspec = MakeAndPublishVal cenv envinner (altActualParent,false,declKind,ValInRecScope(isComplete),prelimValScheme,bindingAttribs,bindingXmlDoc,konst,isGeneratedEventVal) + + // Suppress hover tip for "get" and "set" at property definitions, where toolId <> bindingId + match toolIdOpt with + | Some tid when not tid.idRange.IsSynthetic && tid.idRange <> bindingId.idRange -> + let item = Item.Value (mkLocalValRef vspec) + CallNameResolutionSink cenv.tcSink (tid.idRange,env.NameEnv,item,item,ItemOccurence.RelatedText,env.DisplayEnv,env.eAccessRights) + | _ -> () + let mangledId = ident(vspec.LogicalName,vspec.Range) // Reconstitute the binding with the unique name @@ -11049,9 +11131,16 @@ module TcRecdUnionAndEnumDeclarations = begin rfspec - let TcAnonFieldDecl cenv env parent tpenv nm (Field(attribs,isStatic,id,ty,isMutable,xmldoc,vis,m)) = - let id = (match id with None -> mkSynId m nm | Some id -> id) - TcFieldDecl cenv env parent false tpenv (isStatic,attribs,id,ty,isMutable,xmldoc.ToXmlDoc(),vis,m) + let TcAnonFieldDecl cenv env parent tpenv nm (Field(attribs,isStatic,idOpt,ty,isMutable,xmldoc,vis,m)) = + let id = (match idOpt with None -> mkSynId m nm | Some id -> id) + let f = TcFieldDecl cenv env parent false tpenv (isStatic,attribs,id,ty,isMutable,xmldoc.ToXmlDoc(),vis,m) + match idOpt with + | None -> () + | Some id -> + let item = Item.ArgName(id, f.FormalType, None) + CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,item,item,ItemOccurence.Binding,env.DisplayEnv,env.AccessRights) + f + let TcNamedFieldDecl cenv env parent isIncrClass tpenv (Field(attribs,isStatic,id,ty,isMutable,xmldoc,vis,m)) = match id with @@ -11259,7 +11348,7 @@ module IncrClassChecking = begin /// should always be renormalized/canonicalized when used. InstanceCtorDeclaredTypars : Typars /// The value representing the static implicit constructor. - /// Lazy to ensure the static ctor value is ony published if needed. + /// Lazy to ensure the static ctor value is only published if needed. StaticCtorValInfo : Lazy<(Val list * Val * ValScheme)> /// The value representing the implicit constructor. InstanceCtorVal : Val @@ -12104,7 +12193,7 @@ module TyconBindingChecking = begin // The basic iteration over the declarations in a single type definition // State: // tpenv: floating type parameter environment - // recBindIdx: index of the recursive bniding + // recBindIdx: index of the recursive binding // prelimRecValuesRev: accumulation of prelim value entries // uncheckedBindsRev: accumulation of unchecked bindings let defnsAs, (tpenv,_,prelimRecValuesRev,uncheckedBindsRev) = @@ -12314,7 +12403,7 @@ module TyconBindingChecking = begin let (tpenv,envInstance,envStatic,envNonRec,generalizedRecBinds,preGeneralizationRecBinds,uncheckedRecBindsTable) = innerState match defnA with - // PassB for the definition of an implicit consructor. Enrich the instance environments + // PassB for the definition of an implicit constructor. Enrich the instance environments // with the implicit ctor args. | PassAIncrClassCtor incrClassCtorLhs -> @@ -12869,7 +12958,7 @@ module AddAugmentationDeclarations = begin let AddGenericCompareDeclarations cenv (env: TcEnv) (scSet:Set) (tycon:Tycon) = - if Augment.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && scSet.Contains tycon.Stamp then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && scSet.Contains tycon.Stamp then let tcref = mkLocalTyconRef tycon let tcaug = tycon.TypeContents let _,typ = if tcref.Deref.IsExceptionDecl then [],cenv.g.exn_ty else generalizeTyconRef tcref @@ -12890,8 +12979,8 @@ module AddAugmentationDeclarations = begin errorR(Error(FSComp.SR.tcImplementsIStructuralComparableExplicitly(tycon.DisplayName),m)) else let hasExplicitGenericIComparable = tycon.HasInterface cenv.g genericIComparableTy - let cvspec1,cvspec2 = Augment.MakeValsForCompareAugmentation cenv.g tcref - let cvspec3 = Augment.MakeValsForCompareWithComparerAugmentation cenv.g tcref + let cvspec1,cvspec2 = AugmentWithHashCompare.MakeValsForCompareAugmentation cenv.g tcref + let cvspec3 = AugmentWithHashCompare.MakeValsForCompareWithComparerAugmentation cenv.g tcref PublishInterface cenv env.DisplayEnv tcref m true cenv.g.mk_IStructuralComparable_ty PublishInterface cenv env.DisplayEnv tcref m true cenv.g.mk_IComparable_ty @@ -12906,7 +12995,7 @@ module AddAugmentationDeclarations = begin let AddGenericEqualityWithComparerDeclarations cenv (env: TcEnv) (seSet:Set) (tycon:Tycon) = - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && seSet.Contains tycon.Stamp then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && seSet.Contains tycon.Stamp then let tcref = mkLocalTyconRef tycon let tcaug = tycon.TypeContents let m = tycon.Range @@ -12916,7 +13005,7 @@ module AddAugmentationDeclarations = begin if hasExplicitIStructuralEquatable then errorR(Error(FSComp.SR.tcImplementsIStructuralEquatableExplicitly(tycon.DisplayName),m)) else - let evspec1,evspec2,evspec3 = Augment.MakeValsForEqualityWithComparerAugmentation cenv.g tcref + let evspec1,evspec2,evspec3 = AugmentWithHashCompare.MakeValsForEqualityWithComparerAugmentation cenv.g tcref PublishInterface cenv env.DisplayEnv tcref m true cenv.g.mk_IStructuralEquatable_ty tcaug.SetHashAndEqualsWith (mkLocalValRef evspec1, mkLocalValRef evspec2, mkLocalValRef evspec3) PublishValueDefn cenv env ModuleOrMemberBinding evspec1 @@ -12925,20 +13014,20 @@ module AddAugmentationDeclarations = begin let AddGenericCompareBindings cenv (tycon:Tycon) = - if (* Augment.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && *) isSome tycon.GeneratedCompareToValues then - Augment.MakeBindingsForCompareAugmentation cenv.g tycon + if (* AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && *) isSome tycon.GeneratedCompareToValues then + AugmentWithHashCompare.MakeBindingsForCompareAugmentation cenv.g tycon else [] let AddGenericCompareWithComparerBindings cenv (tycon:Tycon) = - if (* Augment.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && *) isSome tycon.GeneratedCompareToWithComparerValues then - (Augment.MakeBindingsForCompareWithComparerAugmentation cenv.g tycon) + if (* AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && *) isSome tycon.GeneratedCompareToWithComparerValues then + (AugmentWithHashCompare.MakeBindingsForCompareWithComparerAugmentation cenv.g tycon) else [] let AddGenericEqualityWithComparerBindings cenv (tycon:Tycon) = - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && isSome tycon.GeneratedHashAndEqualsWithComparerValues then - (Augment.MakeBindingsForEqualityWithComparerAugmentation cenv.g tycon) + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && isSome tycon.GeneratedHashAndEqualsWithComparerValues then + (AugmentWithHashCompare.MakeBindingsForEqualityWithComparerAugmentation cenv.g tycon) else [] @@ -12954,7 +13043,7 @@ module AddAugmentationDeclarations = begin // We can only add the Equals override after we've done the augmentation becuase we have to wait until // tycon.HasOverride can give correct results let AddGenericEqualityBindings cenv (env: TcEnv) tycon = - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then let tcref = mkLocalTyconRef tycon let tcaug = tycon.TypeContents let _,typ = if tcref.Deref.IsExceptionDecl then [],cenv.g.exn_ty else generalizeTyconRef tcref @@ -12972,13 +13061,13 @@ module AddAugmentationDeclarations = begin if not hasExplicitObjectEqualsOverride && isSome tycon.GeneratedHashAndEqualsWithComparerValues then - let vspec1,vspec2 = Augment.MakeValsForEqualsAugmentation cenv.g tcref + let vspec1,vspec2 = AugmentWithHashCompare.MakeValsForEqualsAugmentation cenv.g tcref tcaug.SetEquals (mkLocalValRef vspec1, mkLocalValRef vspec2) if not tycon.IsExceptionDecl then PublishInterface cenv env.DisplayEnv tcref m true (mkAppTy cenv.g.system_GenericIEquatable_tcref [typ]) PublishValueDefn cenv env ModuleOrMemberBinding vspec1 PublishValueDefn cenv env ModuleOrMemberBinding vspec2 - Augment.MakeBindingsForEqualsAugmentation cenv.g tycon + AugmentWithHashCompare.MakeBindingsForEqualsAugmentation cenv.g tycon else [] else [] @@ -12994,7 +13083,7 @@ module TyconConstraintInference = begin // Initially, assume the equality relation is available for all structural type definitions let initialAssumedTycons = set [ for tycon in tycons do - if Augment.TyconIsCandidateForAugmentationWithCompare cenv.g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare cenv.g tycon then yield tycon.Stamp ] // Initially, don't assume that the equality relation is dependent on any type varaibles @@ -13059,7 +13148,7 @@ module TyconConstraintInference = begin let newSet = assumedTycons |> Set.filter (fun tyconStamp -> let (tycon,structuralTypes) = tab.[tyconStamp] - if cenv.g.compilingFslib && Augment.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && not (HasFSharpAttribute g g.attrib_StructuralComparisonAttribute tycon.Attribs) && not (HasFSharpAttribute g g.attrib_NoComparisonAttribute tycon.Attribs) then + if cenv.g.compilingFslib && AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && not (HasFSharpAttribute g g.attrib_StructuralComparisonAttribute tycon.Attribs) && not (HasFSharpAttribute g g.attrib_NoComparisonAttribute tycon.Attribs) then errorR(Error(FSComp.SR.tcFSharpCoreRequiresExplicit(),tycon.Range)) let res = (structuralTypes |> List.forall (fst >> checkIfFieldTypeSupportsComparison tycon)) @@ -13122,7 +13211,7 @@ module TyconConstraintInference = begin // Initially, assume the equality relation is available for all structural type definitions let initialAssumedTycons = set [ for tycon in tycons do - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then yield tycon.Stamp ] // Initially, don't assume that the equality relation is dependent on any type varaibles @@ -13163,7 +13252,7 @@ module TyconConstraintInference = begin let tcref,tinst = destAppTy g ty (if initialAssumedTycons.Contains tcref.Stamp then assumedTycons.Contains tcref.Stamp - elif Augment.TyconIsCandidateForAugmentationWithEquals g tcref.Deref then + elif AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals g tcref.Deref then isSome tcref.GeneratedHashAndEqualsWithComparerValues else true) @@ -13183,7 +13272,7 @@ module TyconConstraintInference = begin let newSet = assumedTycons |> Set.filter (fun tyconStamp -> let (tycon,structuralTypes) = tab.[tyconStamp] - if cenv.g.compilingFslib && Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && not (HasFSharpAttribute g g.attrib_StructuralEqualityAttribute tycon.Attribs) && not (HasFSharpAttribute g g.attrib_NoEqualityAttribute tycon.Attribs) then + if cenv.g.compilingFslib && AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && not (HasFSharpAttribute g g.attrib_StructuralEqualityAttribute tycon.Attribs) && not (HasFSharpAttribute g g.attrib_NoEqualityAttribute tycon.Attribs) then errorR(Error(FSComp.SR.tcFSharpCoreRequiresExplicit(),tycon.Range)) // Remove structural types with incomparable elements from the assumedTycons @@ -13193,7 +13282,7 @@ module TyconConstraintInference = begin if not res then match TryFindFSharpBoolAttribute g g.attrib_StructuralEqualityAttribute tycon.Attribs with | Some(true) -> - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then match structuralTypes |> List.tryFind (fst >> checkIfFieldTypeSupportsEquality tycon >> not) with | None -> assert false @@ -13208,7 +13297,7 @@ module TyconConstraintInference = begin | Some(false) -> () | None -> - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then match structuralTypes |> List.tryFind (fst >> checkIfFieldTypeSupportsEquality tycon >> not) with | None -> assert false @@ -13329,6 +13418,10 @@ module TcExceptionDeclarations = begin | TExnFresh _ -> AddAugmentationDeclarations.AddGenericHashAndComparisonDeclarations cenv env scSet seSet exnc AddAugmentationDeclarations.AddGenericHashAndComparisonBindings cenv exnc + + let item = Item.ExnCase(mkLocalTyconRef exnc) + CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,item,item,ItemOccurence.Binding,env.DisplayEnv,env.eAccessRights) + binds, exnc, AddLocalExnDefn cenv.tcSink scopem exnc (AddLocalTycons cenv.g cenv.amap scopem [exnc] env) @@ -13435,7 +13528,7 @@ module EstablishTypeDefinitionCores = begin /// Get the component types that make a record, union or struct type. /// - /// Used when determining if a structural type supports structual comparison. + /// Used when determining if a structural type supports structural comparison. let private GetStructuralElementsOfTyconDefn cenv env tpenv (TyconDefnCoreIndexed(_,synTyconRepr,_,_,_,_)) tycon = let thisTyconRef = mkLocalTyconRef tycon let m = tycon.Range @@ -13640,7 +13733,7 @@ module EstablishTypeDefinitionCores = begin | _ -> failwith "unreachable" if ExtensionTyping.IsGeneratedTypeDirectReference (typeBeforeArguments, m) then - let optGeneratedTypePath = Some (mangledPathOfCompPath tcref.CompilationPath @ [ tcref.LogicalName ]) + let optGeneratedTypePath = Some (tcref.CompilationPath.MangledPath @ [ tcref.LogicalName ]) let _hasNoArgs,providedTypeAfterStaticArguments,checkTypeName = TcProvidedTypeAppToStaticConstantArgs cenv envinner optGeneratedTypePath tpenv tcrefBeforeStaticArguments args m let isGenerated = providedTypeAfterStaticArguments.PUntaint((fun st -> not st.IsErased),m) if isGenerated then @@ -13731,7 +13824,7 @@ module EstablishTypeDefinitionCores = begin error(Error(FSComp.SR.etErasedTypeUsedInGeneration(desig,nm),m)) // Embed the type into the module we're compiling - let cpath = mkNestedCPath eref.CompilationPath eref.LogicalName ModuleOrNamespaceKind.ModuleOrType + let cpath = eref.CompilationPath.NestedCompPath eref.LogicalName ModuleOrNamespaceKind.ModuleOrType let access = combineAccess tycon.Accessibility (if st.PUntaint((fun st -> st.IsPublic || st.IsNestedPublic), m) then taccessPublic else taccessPrivate cpath) let nestedTycon = Construct.NewProvidedTycon(resolutionEnvironment, st, @@ -13740,7 +13833,7 @@ module EstablishTypeDefinitionCores = begin m=m, cpath=cpath, access = access) eref.ModuleOrNamespaceType.AddProvidedTypeEntity(nestedTycon) - let nestedTyRef = eref.MkNestedTyconRef nestedTycon + let nestedTyRef = eref.NestedTyconRef nestedTycon let ilOrigTypeRef = GetOriginalILTypeRefOfProvidedType (st, m) // Record the details so we can map System.Type --> TyconRef @@ -14050,10 +14143,10 @@ module EstablishTypeDefinitionCores = begin let nenv = envinner.NameEnv // Record fields should be visible from IntelliSense, so add fake names for them (similarly to "let a = ..") for fspec in (fields |> List.filter (fun fspec -> not fspec.IsCompilerGenerated)) do - let info = RecdFieldInfo(thisTyInst, mkNestedRecdFieldRef thisTyconRef fspec) + let info = RecdFieldInfo(thisTyInst, thisTyconRef.MakeNestedRecdFieldRef fspec) let nenv' = AddFakeNameToNameEnv fspec.Name nenv (Item.RecdField info) // Name resolution gives better info for tooltips - let item = FreshenRecdFieldRef cenv.nameResolver m (mkNestedRecdFieldRef thisTyconRef fspec) + let item = FreshenRecdFieldRef cenv.nameResolver m (thisTyconRef.MakeNestedRecdFieldRef fspec) CallNameResolutionSink cenv.tcSink (fspec.Range,nenv,item,item,ItemOccurence.Binding,envinner.DisplayEnv,ad) // Environment is needed for completions CallEnvSink cenv.tcSink (fspec.Range, nenv', ad) @@ -14094,6 +14187,7 @@ module EstablishTypeDefinitionCores = begin noAllowNullLiteralAttributeCheck() TcRecdUnionAndEnumDeclarations.CheckUnionCaseName cenv unionCaseName.idText unionCaseName.idRange let unionCase = NewUnionCase unionCaseName unionCaseName.idText [] thisTy [] XmlDoc.Empty tycon.Accessibility + writeFakeUnionCtorsToSink [ unionCase ] MakeUnionRepr [ unionCase ], None, NoSafeInitInfo | SynTypeDefnSimpleRepr.TypeAbbrev(ParserDetail.ThereWereSignificantParseErrorsSoDoNotTypecheckThisNode, _rhsType,_) -> @@ -15100,7 +15194,7 @@ let rec TcSignatureElement cenv parent endm (env: TcEnv) e : Eventually = | None -> env // Publish the combined module type - env.eModuleOrNamespaceTypeAccumulator := combineModuleOrNamespaceTypeList [] m [!(env.eModuleOrNamespaceTypeAccumulator); modulTypeRoot] + env.eModuleOrNamespaceTypeAccumulator := CombineCcuContentFragments m [!(env.eModuleOrNamespaceTypeAccumulator); modulTypeRoot] env return env @@ -15334,7 +15428,7 @@ let rec TcModuleOrNamespaceElement (cenv:cenv) parent scopem env e = // : ((Modu | None -> env // Publish the combined module type - env.eModuleOrNamespaceTypeAccumulator := combineModuleOrNamespaceTypeList [] m [!(env.eModuleOrNamespaceTypeAccumulator); modulTypeRoot] + env.eModuleOrNamespaceTypeAccumulator := CombineCcuContentFragments m [!(env.eModuleOrNamespaceTypeAccumulator); modulTypeRoot] env let mexprRoot = BuildRootModuleExpr enclosingNamespacePath envinner.eCompPath mexpr @@ -15408,7 +15502,7 @@ and TcModuleOrNamespace cenv env (id,isModule,defs,xml,modAttrs,vis,m:range) = //-------------------------------------------------------------------------- -// TypecheckOneImplFile - Typecheck all the namespace fragments in a file. +// TypeCheckOneImplFile - Typecheck all the namespace fragments in a file. //-------------------------------------------------------------------------- @@ -15574,7 +15668,7 @@ let CheckModuleSignature g cenv m denvAtEnd rootSigOpt implFileTypePriorToSig im /// Check an entire implementation file /// Typecheck, then close the inference scope and then check the file meets its signature (if any) -let TypecheckOneImplFile +let TypeCheckOneImplFile // checkForErrors: A function to help us stop reporting cascading errors (g, niceNameGen, amap, topCcu, checkForErrors, conditionalDefines, tcSink) env @@ -15614,7 +15708,7 @@ let TypecheckOneImplFile // NOTE: this is not a great technique if inner signatures are permitted to hide // virtual dispatch slots. conditionallySuppressErrorReporting (checkForErrors()) (fun () -> - try implFileTypePriorToSig |> IterTyconsOfModuleOrNamespaceType (FinalTypeDefinitionChecksAtEndOfInferenceScope cenv.infoReader true denvAtEnd) + try implFileTypePriorToSig |> IterTyconsOfModuleOrNamespaceType (FinalTypeDefinitionChecksAtEndOfInferenceScope (cenv.infoReader, envAtEnd.NameEnv, cenv.tcSink, true, denvAtEnd)) with e -> errorRecovery e m) // Check the value restriction. Only checked if there is no signature. @@ -15639,14 +15733,14 @@ let TypecheckOneImplFile with e -> errorRecovery e m) - // We ALWAYS run the PostTypecheckSemanticChecks phase, though we if we have already encountered some + // We ALWAYS run the PostTypeCheckSemanticChecks phase, though we if we have already encountered some // errors we turn off error reporting. THis is because it performs various fixups over the TAST, e.g. // assigning nice names for inference variables. let hasExplicitEntryPoint = conditionallySuppressErrorReporting (checkForErrors()) (fun () -> try let reportErrors = not (checkForErrors()) - Microsoft.FSharp.Compiler.PostTypecheckSemanticChecks.CheckTopImpl (g,cenv.amap,reportErrors,cenv.infoReader,env.eInternalsVisibleCompPaths,cenv.topCcu,envAtEnd.DisplayEnv, implFileExprAfterSig,extraAttribs,isLastCompiland) + Microsoft.FSharp.Compiler.PostTypeCheckSemanticChecks.CheckTopImpl (g,cenv.amap,reportErrors,cenv.infoReader,env.eInternalsVisibleCompPaths,cenv.topCcu,envAtEnd.DisplayEnv, implFileExprAfterSig,extraAttribs,isLastCompiland) with e -> errorRecovery e m false) @@ -15658,8 +15752,8 @@ let TypecheckOneImplFile -/// Check an entire sginature file -let TypecheckOneSigFile +/// Check an entire signature file +let TypeCheckOneSigFile (g,niceNameGen,amap,topCcu,checkForErrors,conditionalDefines,tcSink) tcEnv (ParsedSigFileInput(_,qualNameOfFile,_, _,sigFileFrags)) = @@ -15673,7 +15767,7 @@ let TypecheckOneSigFile let sigFileType = !mtypeAcc if not (checkForErrors()) then - try sigFileType |> IterTyconsOfModuleOrNamespaceType (FinalTypeDefinitionChecksAtEndOfInferenceScope cenv.infoReader false tcEnv.DisplayEnv) + try sigFileType |> IterTyconsOfModuleOrNamespaceType (FinalTypeDefinitionChecksAtEndOfInferenceScope(cenv.infoReader, tcEnv.NameEnv, cenv.tcSink, false, tcEnv.DisplayEnv)) with e -> errorRecovery e qualNameOfFile.Range return (tcEnv,tcEnv,sigFileType) diff --git a/src/fsharp/TypeChecker.fsi b/src/fsharp/TypeChecker.fsi new file mode 100644 index 00000000000..d4b038f7378 --- /dev/null +++ b/src/fsharp/TypeChecker.fsi @@ -0,0 +1,111 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module internal Microsoft.FSharp.Compiler.TypeChecker + +open Internal.Utilities +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.AbstractIL +open Microsoft.FSharp.Compiler.AbstractIL.IL +open Microsoft.FSharp.Compiler.AbstractIL.Internal +open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library +open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.Ast +open Microsoft.FSharp.Compiler.ErrorLogger +open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.Tastops +open Microsoft.FSharp.Compiler.Lib +open Microsoft.FSharp.Compiler.Infos +open Microsoft.FSharp.Compiler.Import +open Microsoft.FSharp.Compiler.TcGlobals + +open System.Collections.Generic + +[] +type TcEnv = + member DisplayEnv : DisplayEnv + member NameEnv : NameResolution.NameResolutionEnv + member AccessRights : AccessorDomain + +val CreateInitialTcEnv : TcGlobals * ImportMap * range * (CcuThunk * string list * bool) list -> TcEnv +val AddCcuToTcEnv : TcGlobals * ImportMap * range * TcEnv * CcuThunk * autoOpens: string list * bool -> TcEnv +val AddLocalRootModuleOrNamespace : NameResolution.TcResultsSink -> TcGlobals -> ImportMap -> range -> TcEnv -> ModuleOrNamespaceType -> TcEnv +val TcOpenDecl : NameResolution.TcResultsSink -> TcGlobals -> ImportMap -> range -> range -> TcEnv -> Ast.LongIdent -> TcEnv + +type TopAttribs = + { mainMethodAttrs : Attribs; + netModuleAttrs : Attribs; + assemblyAttrs : Attribs } + +type ConditionalDefines = + string list + +val EmptyTopAttrs : TopAttribs +val CombineTopAttrs : TopAttribs -> TopAttribs -> TopAttribs + +val TypeCheckOneImplFile : + TcGlobals * NiceNameGenerator * ImportMap * CcuThunk * (unit -> bool) * ConditionalDefines * NameResolution.TcResultsSink + -> TcEnv + -> Tast.ModuleOrNamespaceType option + -> ParsedImplFileInput + -> Eventually + +val TypeCheckOneSigFile : + TcGlobals * NiceNameGenerator * ImportMap * CcuThunk * (unit -> bool) * ConditionalDefines * NameResolution.TcResultsSink + -> TcEnv + -> ParsedSigFileInput + -> Eventually + +//------------------------------------------------------------------------- +// Some of the exceptions arising from type checking. These should be moved to +// use ErrorLogger. +//------------------------------------------------------------------------- + +exception BakedInMemberConstraintName of string * range +exception FunctionExpected of DisplayEnv * TType * range +exception NotAFunction of DisplayEnv * TType * range * range +exception Recursion of DisplayEnv * Ast.Ident * TType * TType * range +exception RecursiveUseCheckedAtRuntime of DisplayEnv * ValRef * range +exception LetRecEvaluatedOutOfOrder of DisplayEnv * ValRef * ValRef * range +exception LetRecCheckedAtRuntime of range +exception LetRecUnsound of DisplayEnv * ValRef list * range +exception TyconBadArgs of DisplayEnv * TyconRef * int * range +exception UnionCaseWrongArguments of DisplayEnv * int * int * range +exception UnionCaseWrongNumberOfArgs of DisplayEnv * int * int * range +exception FieldsFromDifferentTypes of DisplayEnv * RecdFieldRef * RecdFieldRef * range +exception FieldGivenTwice of DisplayEnv * RecdFieldRef * range +exception MissingFields of string list * range +exception UnitTypeExpected of DisplayEnv * TType * bool * range +exception FunctionValueUnexpected of DisplayEnv * TType * range +exception UnionPatternsBindDifferentNames of range +exception VarBoundTwice of Ast.Ident +exception ValueRestriction of DisplayEnv * bool * Val * Typar * range +exception FieldNotMutable of DisplayEnv * RecdFieldRef * range +exception ValNotMutable of DisplayEnv * ValRef * range +exception ValNotLocal of DisplayEnv * ValRef * range +exception InvalidRuntimeCoercion of DisplayEnv * TType * TType * range +exception IndeterminateRuntimeCoercion of DisplayEnv * TType * TType * range +exception IndeterminateStaticCoercion of DisplayEnv * TType * TType * range +exception StaticCoercionShouldUseBox of DisplayEnv * TType * TType * range +exception RuntimeCoercionSourceSealed of DisplayEnv * TType * range +exception CoercionTargetSealed of DisplayEnv * TType * range +exception UpcastUnnecessary of range +exception TypeTestUnnecessary of range +exception SelfRefObjCtor of bool * range +exception VirtualAugmentationOnNullValuedType of range +exception NonVirtualAugmentationOnNullValuedType of range +exception UseOfAddressOfOperator of range +exception DeprecatedThreadStaticBindingWarning of range +exception NotUpperCaseConstructor of range +exception IntfImplInIntrinsicAugmentation of range +exception IntfImplInExtrinsicAugmentation of range +exception OverrideInIntrinsicAugmentation of range +exception OverrideInExtrinsicAugmentation of range +exception NonUniqueInferredAbstractSlot of TcGlobals * DisplayEnv * string * MethInfo * MethInfo * range +exception StandardOperatorRedefinitionWarning of string * range +exception ParameterlessStructCtor of range + +val TcFieldInit : range -> ILFieldInit -> Tast.Const + +val IsSecurityAttribute : TcGlobals -> ImportMap -> Dictionary -> Attrib -> range -> bool +val IsSecurityCriticalAttribute : TcGlobals -> Attrib -> bool +val LightweightTcValForUsingInBuildMethodCall : g : TcGlobals -> vref:ValRef -> vrefFlags : ValUseFlag -> vrefTypeInst : TTypes -> m : range -> Expr * TType \ No newline at end of file diff --git a/src/fsharp/typrelns.fs b/src/fsharp/TypeRelations.fs old mode 100644 new mode 100755 similarity index 96% rename from src/fsharp/typrelns.fs rename to src/fsharp/TypeRelations.fs index ed85703e3cb..443ae5812c6 --- a/src/fsharp/typrelns.fs +++ b/src/fsharp/TypeRelations.fs @@ -1,8 +1,8 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Primary relations on types and signatures, with the exception of /// constraint solving and method overload resolution. -module internal Microsoft.FSharp.Compiler.Typrelns +module internal Microsoft.FSharp.Compiler.TypeRelations open Internal.Utilities open System.Text @@ -19,13 +19,13 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.PrettyNaming open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic -open Microsoft.FSharp.Compiler.Nameres +open Microsoft.FSharp.Compiler.NameResolution #if EXTENSIONTYPING open Microsoft.FSharp.Compiler.ExtensionTyping @@ -42,7 +42,7 @@ open Microsoft.FSharp.Compiler.ExtensionTyping // patcompile.fs: IsDiscrimSubsumedBy (approximate warning for redundancy of 'isinst' patterns) // tc.fs: TcRuntimeTypeTest (approximate warning for redundant runtime type tests) // tc.fs: TcExnDefnCore (error for bad exception abbreviation) -// ilxgen.fs: GenCoerce (omit unecessary castclass or isinst instruction) +// ilxgen.fs: GenCoerce (omit unnecessary castclass or isinst instruction) // let rec TypeDefinitelySubsumesTypeNoCoercion ndeep g amap m ty1 ty2 = if ndeep > 100 then error(InternalError("recursive class hierarchy (detected in TypeDefinitelySubsumesTypeNoCoercion), ty1 = "^(DebugPrint.showType ty1),m)) @@ -237,7 +237,7 @@ let ChooseTyparSolutionsForFreeChoiceTypars g amap e = /// Break apart lambdas. Needs ChooseTyparSolutionsForFreeChoiceTypars because it's used in -/// PostTypecheckSemanticChecks before we've eliminated these nodes. +/// PostTypeCheckSemanticChecks before we've eliminated these nodes. let tryDestTopLambda g amap (ValReprInfo (tpNames,_,_) as tvd) (e,ty) = let rec stripLambdaUpto n (e,ty) = match e with @@ -350,7 +350,7 @@ module SignatureConformance = begin let (Attrib(signTcref,_,_,_,_,_,_)) = attrib2 tyconRefEq g signTcref implTcref - // For each implementation attribute, only keep if it it is not mentioned in the signature. + // For each implementation attribute, only keep if it is not mentioned in the signature. // Emit a warning if it is mentioned in the signature and the arguments to the attributes are // not identical. let rec check keptImplAttribsRev implAttribs sigAttribs = @@ -390,7 +390,7 @@ module SignatureConformance = begin if implTypar.StaticReq <> sigTypar.StaticReq then errorR (Error(FSComp.SR.typrelSigImplNotCompatibleCompileTimeRequirementsDiffer(), m)) - // Adjust the actual type parameter name to look look like the signature + // Adjust the actual type parameter name to look like the signature implTypar.SetIdent (mkSynId implTypar.Range sigTypar.Id.idText) // Mark it as "not compiler generated", now that we've got a good name for it @@ -423,6 +423,9 @@ module SignatureConformance = begin and checkTypeDef (aenv: TypeEquivEnv) (implTycon:Tycon) (sigTycon:Tycon) = let m = implTycon.Range + // Propagate defn location information from implementation to signature . + sigTycon.SetOtherRange (implTycon.Range, true) + implTycon.SetOtherRange (sigTycon.Range, false) let err f = Error(f(implTycon.TypeOrMeasureKind.ToString()), m) if implTycon.LogicalName <> sigTycon.LogicalName then (errorR (err (FSComp.SR.DefinitionsInSigAndImplNotCompatibleNamesDiffer)); false) else if implTycon.CompiledName <> sigTycon.CompiledName then (errorR (err (FSComp.SR.DefinitionsInSigAndImplNotCompatibleNamesDiffer)); false) else @@ -513,7 +516,7 @@ module SignatureConformance = begin // Propagate some information signature to implementation. // Check the attributes on each argument, and update the ValReprInfo for - // the value to reflect the information in the the signature. + // the value to reflect the information in the signature. // This ensures that the compiled form of the value matches the signature rather than // the implementation. This also propagates argument names from signature to implementation let res = @@ -532,7 +535,8 @@ module SignatureConformance = begin and checkVal implModRef (aenv:TypeEquivEnv) (implVal:Val) (sigVal:Val) = // Propagate defn location information from implementation to signature . - sigVal.SetDefnRange implVal.DefinitionRange + sigVal.SetOtherRange (implVal.Range, true) + implVal.SetOtherRange (sigVal.Range, false) let mk_err denv f = ValueNotContained(denv,implModRef,implVal,sigVal,f) let err denv f = errorR(mk_err denv f); false @@ -577,6 +581,8 @@ module SignatureConformance = begin and checkUnionCase aenv implUnionCase sigUnionCase = let err f = errorR(ConstrNotContained(denv,implUnionCase,sigUnionCase,f));false + sigUnionCase.OtherRangeOpt <- Some (implUnionCase.Range, true) + implUnionCase.OtherRangeOpt <- Some (sigUnionCase.Range, false) if implUnionCase.Id.idText <> sigUnionCase.Id.idText then err FSComp.SR.ModuleContainsConstructorButNamesDiffer elif implUnionCase.RecdFields.Length <> sigUnionCase.RecdFields.Length then err FSComp.SR.ModuleContainsConstructorButDataFieldsDiffer elif not (List.forall2 (checkField aenv) implUnionCase.RecdFields sigUnionCase.RecdFields) then err FSComp.SR.ModuleContainsConstructorButTypesOfFieldsDiffer @@ -585,6 +591,8 @@ module SignatureConformance = begin and checkField aenv implField sigField = let err f = errorR(FieldNotContained(denv,implField,sigField,f)); false + sigField.rfield_other_range <- Some (implField.Range, true) + implField.rfield_other_range <- Some (sigField.Range, false) if implField.rfield_id.idText <> sigField.rfield_id.idText then err FSComp.SR.FieldNotContainedNamesDiffer elif isLessAccessible implField.Accessibility sigField.Accessibility then err FSComp.SR.FieldNotContainedAccessibilitiesDiffer elif implField.IsStatic <> sigField.IsStatic then err FSComp.SR.FieldNotContainedStaticsDiffer @@ -612,7 +620,7 @@ module SignatureConformance = begin // abstract have non-final CompareTo/Hash methods // records have final CompareTo/Hash methods // unions have final CompareTo/Hash methods - // This is an example where it is OK for the signaure to say 'non-final' when the implementation says 'final' + // This is an example where it is OK for the signature to say 'non-final' when the implementation says 'final' elif not implMembInfo.MemberFlags.IsFinal && sigMembInfo.MemberFlags.IsFinal then err(FSComp.SR.ValueNotContainedMutabilityFinalsDiffer) elif not (implMembInfo.MemberFlags.IsOverrideOrExplicitImpl = sigMembInfo.MemberFlags.IsOverrideOrExplicitImpl) then @@ -716,7 +724,7 @@ module SignatureConformance = begin let ucases1 = r1.UnionCasesAsList let ucases2 = r2.UnionCasesAsList if ucases1.Length <> ucases2.Length then - let names l = List.map (fun c -> c.Id.idText) l + let names (l: UnionCase list) = l |> List.map (fun c -> c.Id.idText) reportNiceError "union case" (names ucases1) (names ucases2) else List.forall2 (checkUnionCase aenv) ucases1 ucases2 | (TRecdRepr implFields), (TRecdRepr sigFields) -> @@ -845,6 +853,9 @@ module SignatureConformance = begin and checkModuleOrNamespace aenv implModRef sigModRef = + // Propagate defn location information from implementation to signature . + sigModRef.SetOtherRange (implModRef.Range, true) + implModRef.Deref.SetOtherRange (sigModRef.Range, false) checkModuleOrNamespaceContents implModRef.Range aenv implModRef sigModRef.ModuleOrNamespaceType && checkAttribs aenv implModRef.Attribs sigModRef.Attribs implModRef.Deref.SetAttribs @@ -900,14 +911,15 @@ type OverrideCanImplement = /// The overall information about a method implementation in a class or object expression type OverrideInfo = - | Override of OverrideCanImplement * TyconRef * Ident * (Typars * TyparInst) * TType list list * TType option * bool - member x.CanImplement = let (Override(a,_,_,_,_,_,_)) = x in a - member x.BoundingTyconRef = let (Override(_,ty,_,_,_,_,_)) = x in ty - member x.LogicalName = let (Override(_,_,id,_,_,_,_)) = x in id.idText - member x.Range = let (Override(_,_,id,_,_,_,_)) = x in id.idRange - member x.IsFakeEventProperty = let (Override(_,_,_,_,_,_,b)) = x in b - member x.ArgTypes = let (Override(_,_,_,_,b,_,_)) = x in b - member x.ReturnType = let (Override(_,_,_,_,_,b,_)) = x in b + | Override of OverrideCanImplement * TyconRef * Ident * (Typars * TyparInst) * TType list list * TType option * bool * bool + member x.CanImplement = let (Override(a,_,_,_,_,_,_,_)) = x in a + member x.BoundingTyconRef = let (Override(_,ty,_,_,_,_,_,_)) = x in ty + member x.LogicalName = let (Override(_,_,id,_,_,_,_,_)) = x in id.idText + member x.Range = let (Override(_,_,id,_,_,_,_,_)) = x in id.idRange + member x.IsFakeEventProperty = let (Override(_,_,_,_,_,_,b,_)) = x in b + member x.ArgTypes = let (Override(_,_,_,_,b,_,_,_)) = x in b + member x.ReturnType = let (Override(_,_,_,_,_,b,_,_)) = x in b + member x.IsCompilerGenerated = let (Override(_,_,_,_,_,_,_,b)) = x in b // If the bool is true then the slot is optional, i.e. is an interface slot // which does not _have_ to be implemented, because an inherited implementation @@ -922,7 +934,7 @@ exception OverrideDoesntOverride of DisplayEnv * OverrideInfo * MethInfo option module DispatchSlotChecking = /// Print the signature of an override to a buffer as part of an error message - let PrintOverrideToBuffer denv os (Override(_,_,id,(mtps,memberToParentInst),argTys,retTy,_)) = + let PrintOverrideToBuffer denv os (Override(_,_,id,(mtps,memberToParentInst),argTys,retTy,_,_)) = let denv = { denv with showTyparBinding = true } let retTy = (retTy |> GetFSharpViewOfReturnType denv.g) let argInfos = @@ -952,7 +964,7 @@ module DispatchSlotChecking = let (CompiledSig (argTys,retTy,fmtps,ttpinst)) = CompiledSigOfMeth g amap m minfo let isFakeEventProperty = minfo.IsFSharpEventPropertyMethod - Override(parentType,tcrefOfAppTy g minfo.EnclosingType,mkSynId m nm, (fmtps,ttpinst),argTys,retTy,isFakeEventProperty) + Override(parentType,tcrefOfAppTy g minfo.EnclosingType,mkSynId m nm, (fmtps,ttpinst),argTys,retTy,isFakeEventProperty,false) /// Get the override info for a value being used to implement a dispatch slot. let GetTypeMemberOverrideInfo g reqdTy (overrideBy:ValRef) = @@ -990,7 +1002,7 @@ module DispatchSlotChecking = //CanImplementAnySlot <<----- Change to this to enable implicit interface implementation let isFakeEventProperty = overrideBy.IsFSharpEventProperty(g) - Override(implKind,overrideBy.MemberApparentParent, mkSynId overrideBy.Range nm, (memberMethodTypars,memberToParentInst),argTys,retTy,isFakeEventProperty) + Override(implKind,overrideBy.MemberApparentParent, mkSynId overrideBy.Range nm, (memberMethodTypars,memberToParentInst),argTys,retTy,isFakeEventProperty, overrideBy.IsCompilerGenerated) /// Get the override information for an object expression method being used to implement dispatch slots let GetObjectExprOverrideInfo g amap (implty, id:Ident, memberFlags, ty, arityInfo, bindingAttribs, rhsExpr) = @@ -1013,7 +1025,7 @@ module DispatchSlotChecking = CanImplementAnyClassHierarchySlot //CanImplementAnySlot <<----- Change to this to enable implicit interface implementation let isFakeEventProperty = CompileAsEvent g bindingAttribs - let overrideByInfo = Override(implKind, tcrefOfAppTy g implty, id, (tps,[]), argTys, retTy, isFakeEventProperty) + let overrideByInfo = Override(implKind, tcrefOfAppTy g implty, id, (tps,[]), argTys, retTy, isFakeEventProperty, false) overrideByInfo, (baseValOpt, thisv, vs, bindingAttribs, rhsExpr) | _ -> error(InternalError("Unexpected shape for object expression override",id.idRange)) @@ -1034,12 +1046,12 @@ module DispatchSlotChecking = | CanImplementAnyInterfaceSlot -> isInterfaceTy g dispatchSlot.EnclosingType) /// Check if the kinds of type parameters match between a dispatch slot and an override. - let IsTyparKindMatch g amap m (dispatchSlot:MethInfo) (Override(_,_,_,(mtps,_),_,_,_)) = + let IsTyparKindMatch g amap m (dispatchSlot:MethInfo) (Override(_,_,_,(mtps,_),_,_,_,_)) = let (CompiledSig(_,_,fvmtps,_)) = CompiledSigOfMeth g amap m dispatchSlot List.lengthsEqAndForall2 (fun (tp1:Typar) (tp2:Typar) -> tp1.Kind = tp2.Kind) mtps fvmtps /// Check if an override is a partial match for the requirements for a dispatch slot - let IsPartialMatch g amap m (dispatchSlot:MethInfo) (Override(_,_,_,(mtps,_),argTys,_retTy,_) as overrideBy) = + let IsPartialMatch g amap m (dispatchSlot:MethInfo) (Override(_,_,_,(mtps,_),argTys,_retTy,_,_) as overrideBy) = IsNameMatch dispatchSlot overrideBy && let (CompiledSig (vargtys,_,fvmtps,_)) = CompiledSigOfMeth g amap m dispatchSlot mtps.Length = fvmtps.Length && @@ -1056,7 +1068,7 @@ module DispatchSlotChecking = inst1 |> List.map (map2Of2 (instType inst2)) /// Check if an override exactly matches the requirements for a dispatch slot - let IsExactMatch g amap m dispatchSlot (Override(_,_,_,(mtps,mtpinst),argTys,retTy,_) as overrideBy) = + let IsExactMatch g amap m dispatchSlot (Override(_,_,_,(mtps,mtpinst),argTys,retTy,_,_) as overrideBy) = IsPartialMatch g amap m dispatchSlot overrideBy && let (CompiledSig (vargtys,vrty,fvmtps,ttpinst)) = CompiledSigOfMeth g amap m dispatchSlot @@ -1087,7 +1099,7 @@ module DispatchSlotChecking = // fvtmps[ctps] @ ttpinst -- gives fvtmps[dtps] // fvtmps[dtps] @ rev(mtpinst) -- gives fvtmps[ttps] // - // Now fvtmps[ttps] and mtpinst[ttps] are comparable, i.e. have contraints w.r.t. the same set of type variables + // Now fvtmps[ttps] and mtpinst[ttps] are comparable, i.e. have constraints w.r.t. the same set of type variables // // i.e. Compose the substitutions ttpinst and rev(mtpinst) @@ -1116,6 +1128,7 @@ module DispatchSlotChecking = /// Check all dispatch slots are implemented by some override. let CheckDispatchSlotsAreImplemented (denv,g,amap,m, + nenv,sink:TcResultsSink, isOverallTyAbstract, reqdTy, dispatchSlots:RequiredSlot list, @@ -1135,7 +1148,11 @@ module DispatchSlotChecking = match NameMultiMap.find dispatchSlot.LogicalName overridesKeyed |> List.filter (OverrideImplementsDispatchSlot g amap m dispatchSlot) with - | [_] -> + | [ovd] -> + if not ovd.IsCompilerGenerated then + let item = Item.MethodGroup(ovd.LogicalName,[dispatchSlot]) + CallNameResolutionSink sink (ovd.Range,nenv,item,item,ItemOccurence.Implemented,denv,AccessorDomain.AccessibleFromSomewhere) + sink |> ignore () | [] -> if not isOptional && @@ -1151,7 +1168,7 @@ module DispatchSlotChecking = IsImplMatch g dispatchSlot overrideBy) with | [] -> noimpl() - | [ Override(_,_,_,(mtps,_),argTys,_,_) as overrideBy ] -> + | [ Override(_,_,_,(mtps,_),argTys,_,_,_) as overrideBy ] -> let error_msg = if argTys.Length <> vargtys.Length then FSComp.SR.typrelMemberDoesNotHaveCorrectNumberOfArguments(FormatOverride denv overrideBy, FormatMethInfoSig g amap m denv dispatchSlot) elif mtps.Length <> fvmtps.Length then FSComp.SR.typrelMemberDoesNotHaveCorrectNumberOfTypeParameters(FormatOverride denv overrideBy, FormatMethInfoSig g amap m denv dispatchSlot) @@ -1356,7 +1373,7 @@ module DispatchSlotChecking = /// Check that a type definition implements all its required interfaces after processing all declarations /// within a file. - let CheckImplementationRelationAtEndOfInferenceScope (infoReader:InfoReader,denv,tycon:Tycon,isImplementation) = + let CheckImplementationRelationAtEndOfInferenceScope (infoReader :InfoReader,denv,nenv,sink,tycon:Tycon,isImplementation) = let g = infoReader.g let amap = infoReader.amap @@ -1418,7 +1435,7 @@ module DispatchSlotChecking = if isImplementation && not (isInterfaceTy g overallTy) then let overrides = allImmediateMembersThatMightImplementDispatchSlots |> List.map snd - let allCorrect = CheckDispatchSlotsAreImplemented (denv,g,amap,m,tcaug.tcaug_abstract,reqdTy,dispatchSlots,availPriorOverrides,overrides) + let allCorrect = CheckDispatchSlotsAreImplemented (denv,g,amap,m,nenv,sink,tcaug.tcaug_abstract,reqdTy,dispatchSlots,availPriorOverrides,overrides) // Tell the user to mark the thing abstract if it was missing implementations if not allCorrect && not tcaug.tcaug_abstract && not (isInterfaceTy g reqdTy) then @@ -1438,9 +1455,11 @@ module DispatchSlotChecking = allImmediateMembersThatMightImplementDispatchSlots |> List.iter (fun overrideBy -> let isFakeEventProperty = overrideBy.IsFSharpEventProperty(g) - if not isFakeEventProperty then - - let overriden = + let overriden = + if isFakeEventProperty then + let slotsigs = overrideBy.MemberInfo.Value.ImplementedSlotSigs + slotsigs |> List.map (ReparentSlotSigToUseMethodTypars g overrideBy.Range overrideBy) + else [ for ((reqdTy,m),(SlotImplSet(_dispatchSlots,dispatchSlotsKeyed,_,_))) in allImpls do let overrideByInfo = GetTypeMemberOverrideInfo g reqdTy overrideBy let overridenForThisSlotImplSet = @@ -1453,10 +1472,10 @@ module DispatchSlotChecking = virtMember.MemberInfo.Value.IsImplemented <- true | None -> () // not an F# slot - // Get the slotsig of the overriden method + // Get the slotsig of the overridden method let slotsig = dispatchSlot.GetSlotSig(amap, m) - // The slotsig from the overriden method is in terms of the type parameters on the parent type of the overriding method, + // The slotsig from the overridden method is in terms of the type parameters on the parent type of the overriding method, // Modify map the slotsig so it is in terms of the type parameters for the overriding method let slotsig = ReparentSlotSigToUseMethodTypars g m overrideBy slotsig @@ -1466,7 +1485,7 @@ module DispatchSlotChecking = // assert nonNil overridenForThisSlotImplSet yield! overridenForThisSlotImplSet ] - overrideBy.MemberInfo.Value.ImplementedSlotSigs <- overriden) + overrideBy.MemberInfo.Value.ImplementedSlotSigs <- overriden) //------------------------------------------------------------------------- @@ -1500,7 +1519,7 @@ type CalledArg = OptArgInfo : OptionalArgInfo IsOutArg: bool ReflArgInfo: ReflectedArgInfo - NameOpt: string option + NameOpt: Ident option CalledArgumentType : TType } let CalledArg(pos,isParamArray,optArgInfo,isOutArg,nameOpt,reflArgInfo,calledArgTy) = @@ -1649,7 +1668,7 @@ let MakeCalledArgs amap m (minfo:MethInfo) minst = /// and returns a CalledMeth object for further analysis. type CalledMeth<'T> (infoReader:InfoReader, - nameEnv: Microsoft.FSharp.Compiler.Nameres.NameResolutionEnv option, + nameEnv: NameResolutionEnv option, isCheckingAttributeCall, freshenMethInfo,// a function to help generate fresh type variables the property setters methods in generic classes m, @@ -1676,7 +1695,7 @@ type CalledMeth<'T> let unnamedCalledArgs = fullCalledArgs |> List.filter (fun calledArg -> match calledArg.NameOpt with - | Some nm -> namedCallerArgs |> List.forall (fun (CallerNamedArg(nm2,_e)) -> nm <> nm2.idText) + | Some nm -> namedCallerArgs |> List.forall (fun (CallerNamedArg(nm2,_e)) -> nm.idText <> nm2.idText) | None -> true) // See if any of them are 'out' arguments being returned as part of a return tuple @@ -1715,7 +1734,7 @@ type CalledMeth<'T> match calledArg.NameOpt with | Some nm -> namedCallerArgs |> List.tryPick (fun (CallerNamedArg(nm2,callerArg)) -> - if nm = nm2.idText then Some { NamedArgIdOpt = Some nm2; CallerArg=callerArg; CalledArg=calledArg } + if nm.idText = nm2.idText then Some { NamedArgIdOpt = Some nm2; CallerArg=callerArg; CalledArg=calledArg } else None) | _ -> None) @@ -1723,7 +1742,7 @@ type CalledMeth<'T> namedCallerArgs |> List.filter (fun (CallerNamedArg(nm,_e)) -> fullCalledArgs |> List.forall (fun calledArg -> match calledArg.NameOpt with - | Some nm2 -> nm.idText <> nm2 + | Some nm2 -> nm.idText <> nm2.idText | None -> true)) let attributeAssignedNamedItems,unassignedNamedItem = @@ -1810,7 +1829,7 @@ type CalledMeth<'T> member x.AssociatedPropertyInfo=pinfoOpt /// unassigned args member x.UnassignedNamedArgs=unassignedNamedItems - /// args assigned to specifiy values for attribute fields and properties (these are not necessarily "property sets") + /// args assigned to specify values for attribute fields and properties (these are not necessarily "property sets") member x.AttributeAssignedNamedArgs=attributeAssignedNamedItems /// unnamed called optional args: pass defaults for these member x.UnnamedCalledOptArgs=unnamedCalledOptArgs @@ -1926,7 +1945,7 @@ let ExamineMethodForLambdaPropagation(x:CalledMeth) = /// "Type Completion" inference and a few other checks at the end of the inference scope -let FinalTypeDefinitionChecksAtEndOfInferenceScope (infoReader:InfoReader) isImplementation denv (tycon:Tycon) = +let FinalTypeDefinitionChecksAtEndOfInferenceScope (infoReader:InfoReader, nenv, sink, isImplementation, denv) (tycon:Tycon) = let g = infoReader.g let amap = infoReader.amap @@ -1945,12 +1964,12 @@ let FinalTypeDefinitionChecksAtEndOfInferenceScope (infoReader:InfoReader) isImp not tycon.IsFSharpInterfaceTycon then (* Warn when we're doing this for class types *) - if Augment.TyconIsCandidateForAugmentationWithEquals g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals g tycon then warning(Error(FSComp.SR.typrelTypeImplementsIComparableShouldOverrideObjectEquals(tycon.DisplayName),tycon.Range)) else warning(Error(FSComp.SR.typrelTypeImplementsIComparableDefaultObjectEqualsProvided(tycon.DisplayName),tycon.Range)) - Augment.CheckAugmentationAttribs isImplementation g amap tycon + AugmentWithHashCompare.CheckAugmentationAttribs isImplementation g amap tycon // Check some conditions about generic comparison and hashing. We can only check this condition after we've done the augmentation if isImplementation #if EXTENSIONTYPING @@ -1983,7 +2002,7 @@ let FinalTypeDefinitionChecksAtEndOfInferenceScope (infoReader:InfoReader) isImp && not tycon.IsFSharpInterfaceTycon && not tycon.IsFSharpDelegateTycon then - DispatchSlotChecking.CheckImplementationRelationAtEndOfInferenceScope (infoReader,denv,tycon,isImplementation) + DispatchSlotChecking.CheckImplementationRelationAtEndOfInferenceScope (infoReader,denv,nenv,sink,tycon,isImplementation) //------------------------------------------------------------------------- // Additional helpers for type checking and constraint solving @@ -1998,7 +2017,7 @@ let FindUniqueFeasibleSupertype g amap m ty1 ty2 = -/// Get the methods relevant to deterimining if a uniquely-identified-override exists based on the syntactic information +/// Get the methods relevant to determining if a uniquely-identified-override exists based on the syntactic information /// at the member signature prior to type inference. This is used to pre-assign type information if it does let GetAbstractMethInfosForSynMethodDecl(infoReader:InfoReader,ad,memberName:Ident,bindm,typToSearchForAbstractMembers,valSynData) = let minfos = @@ -2013,7 +2032,7 @@ let GetAbstractMethInfosForSynMethodDecl(infoReader:InfoReader,ad,memberName:Ide let dispatchSlotsArityMatch = dispatchSlots |> List.filter (fun minfo -> minfo.NumArgs = topValSynArities) dispatchSlots,dispatchSlotsArityMatch -/// Get the proeprties relevant to deterimining if a uniquely-identified-override exists based on the syntactic information +/// Get the properties relevant to determining if a uniquely-identified-override exists based on the syntactic information /// at the member signature prior to type inference. This is used to pre-assign type information if it does let GetAbstractPropInfosForSynPropertyDecl(infoReader:InfoReader,ad,memberName:Ident,bindm,typToSearchForAbstractMembers,_k,_valSynData) = let pinfos = @@ -2197,7 +2216,7 @@ let BuildMethodCall tcVal g amap isMutable m isProp minfo valUseFlags minst objA | FSMeth(_, _, vref, _) -> // Go see if this is a use of a recursive definition... Note we know the value instantiation - // we want to use so we pass that in in order not to create a new one. + // we want to use so we pass that in order not to create a new one. let vexp, vexpty = tcVal vref valUseFlags (minfo.DeclaringTypeInst @ minst) m BuildFSharpMethodApp g m vref vexp vexpty allArgs diff --git a/src/fsharp/unilex.fs b/src/fsharp/UnicodeLexing.fs similarity index 94% rename from src/fsharp/unilex.fs rename to src/fsharp/UnicodeLexing.fs index 34b75ac0dc6..08a4c152e13 100644 --- a/src/fsharp/unilex.fs +++ b/src/fsharp/UnicodeLexing.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.UnicodeLexing diff --git a/src/fsharp/unilex.fsi b/src/fsharp/UnicodeLexing.fsi similarity index 65% rename from src/fsharp/unilex.fsi rename to src/fsharp/UnicodeLexing.fsi index 7d9048c3cea..fd775860e01 100644 --- a/src/fsharp/unilex.fsi +++ b/src/fsharp/UnicodeLexing.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.UnicodeLexing diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs index d554332850f..8af77f96dcd 100644 --- a/src/fsharp/ast.fs +++ b/src/fsharp/ast.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.Ast @@ -233,10 +233,10 @@ type | String of string * range /// F# syntax: verbatim or regular byte string, e.g. "abc"B. /// - /// Also used internally in the typechecker once an array of unit16 contants + /// Also used internally in the typechecker once an array of unit16 constants /// is detected, to allow more efficient processing of large arrays of uint16 constants. | Bytes of byte[] * range - /// Used internally in the typechecker once an array of unit16 contants + /// Used internally in the typechecker once an array of unit16 constants /// is detected, to allow more efficient processing of large arrays of uint16 constants. | UInt16s of uint16[] /// Old comment: "we never iterate, so the const here is not another SynConst.Measure" @@ -248,8 +248,8 @@ type and [] - /// The unchecked abstract syntax tree of F# unit of measure annotaitons. - /// This should probably be merged with the represenation of SynType. + /// The unchecked abstract syntax tree of F# unit of measure annotations. + /// This should probably be merged with the representation of SynType. SynMeasure = | Named of LongIdent * range | Product of SynMeasure * SynMeasure * range @@ -315,11 +315,11 @@ type SequencePointInfoForWhileLoop = type SequencePointInfoForBinding = | SequencePointAtBinding of range - // Indicates the ommission of a sequence point for a binding for a 'do expr' + // Indicates the omission of a sequence point for a binding for a 'do expr' | NoSequencePointAtDoBinding - // Indicates the ommission of a sequence point for a binding for a 'let e = expr' where 'expr' has immediate control flow + // Indicates the omission of a sequence point for a binding for a 'let e = expr' where 'expr' has immediate control flow | NoSequencePointAtLetBinding - // Indicates the ommission of a sequence point for a compiler generated binding + // Indicates the omission of a sequence point for a compiler generated binding // where we've done a local expansion of some construct into something that involves // a 'let'. e.g. we've inlined a function and bound its arguments using 'let' // The let bindings are 'sticky' in that the inversion of the inlining would involve @@ -350,7 +350,7 @@ type RecordFieldName = LongIdentWithDots * bool type ExprAtomicFlag = /// Says that the expression is an atomic expression, i.e. is of a form that has no whitespace unless - /// enclosed in parantheses, e.g. 1, "3", ident, ident.[expr] and (expr). If an atomic expression has + /// enclosed in parentheses, e.g. 1, "3", ident, ident.[expr] and (expr). If an atomic expression has /// type T, then the largest expression ending at the same range as the atomic expression also has type T. | Atomic = 0 | NonAtomic = 1 @@ -534,7 +534,7 @@ and | Assert of SynExpr * range /// App(exprAtomicFlag, isInfix, funcExpr, argExpr, m) - /// - exprAtomicFlag: indicates if the applciation is syntactically atomic, e.g. f.[1] is atomic, but 'f x' is not + /// - exprAtomicFlag: indicates if the application is syntactically atomic, e.g. f.[1] is atomic, but 'f x' is not /// - isInfix is true for the first app of an infix operator, e.g. 1+2 becomes App(App(+,1),2), where the inner node is marked isInfix /// (or more generally, for higher operator fixities, if App(x,y) is such that y comes before x in the source code, then the node is marked isInfix=true) /// @@ -948,7 +948,7 @@ and | OptionalVal of Ident * range /// ':? type ' | IsInst of SynType * range - /// <@ expr @>, used for active pattern arguments + /// <@ expr @>, used for active pattern arguments | QuoteExpr of SynExpr * range /// Deprecated character ranges @@ -2072,7 +2072,7 @@ and LexCont = LexerWhitespaceContinuation /// The error raised by the parse_error_rich function, which is called by the parser engine /// when a syntax error occurs. The first object is the ParseErrorContext which contains a dump of /// information about the grammar at the point where the error occured, e.g. what tokens -/// are valid to shift next at that point in the grammar. This information is processed in build.fs. +/// are valid to shift next at that point in the grammar. This information is processed in CompileOps.fs. [] exception SyntaxError of obj (* ParseErrorContext<_> *) * range diff --git a/src/fsharp/autobox.fs b/src/fsharp/autobox.fs index d665133dd15..7d4398fea80 100644 --- a/src/fsharp/autobox.fs +++ b/src/fsharp/autobox.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.AutoBox @@ -10,8 +10,8 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Env -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.TypeRelations //---------------------------------------------------------------------------- // Decide the set of mutable locals to promote to heap-allocated reference cells diff --git a/src/fsharp/ccuthunk.fs b/src/fsharp/ccuthunk.fs index 8d9cfb737dd..68ca529fffb 100644 --- a/src/fsharp/ccuthunk.fs +++ b/src/fsharp/ccuthunk.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Compiler diff --git a/src/fsharp/check.fsi b/src/fsharp/check.fsi deleted file mode 100644 index b0c3ac8cf0d..00000000000 --- a/src/fsharp/check.fsi +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -module internal Microsoft.FSharp.Compiler.PostTypecheckSemanticChecks - -open Internal.Utilities -open Microsoft.FSharp.Compiler - -val testFlagMemberBody : bool ref -val CheckTopImpl : Env.TcGlobals * Import.ImportMap * bool * Infos.InfoReader * Tast.CompilationPath list * Tast.CcuThunk * Tastops.DisplayEnv * Tast.ModuleOrNamespaceExprWithSig * Tast.Attribs * bool -> bool diff --git a/src/fsharp/formats.fsi b/src/fsharp/formats.fsi deleted file mode 100644 index 1016ef34cc4..00000000000 --- a/src/fsharp/formats.fsi +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -/// Parse "printf-style" format specifiers at compile time, producing -/// a list of items that specify the types of the things that follow. -/// -/// Must be updated if the Printf runtime component is updated. - -module internal Microsoft.FSharp.Compiler.Formats - -open Internal.Utilities -open Microsoft.FSharp.Compiler -open Microsoft.FSharp.Compiler.Tast -open Microsoft.FSharp.Compiler.AbstractIL.Internal - -val ParseFormatString : Range.range -> Env.TcGlobals -> string -> TType -> TType -> TType -> TType * TType diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs old mode 100644 new mode 100755 index 35eee0580e8..d7f27e64223 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Driver for F# compiler. // @@ -12,7 +12,11 @@ module internal Microsoft.FSharp.Compiler.Driver +open System +open System.Diagnostics +open System.Globalization open System.IO +open System.Threading open System.Reflection open System.Collections.Generic open System.Runtime.CompilerServices @@ -29,13 +33,10 @@ open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.AbstractIL.IL #if NO_COMPILER_BACKEND #else -open Microsoft.FSharp.Compiler.Ilxgen +open Microsoft.FSharp.Compiler.IlxGen #endif open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger -#if SQM_SUPPORT -open Microsoft.FSharp.Compiler.SqmLogger -#endif open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.TypeChecker open Microsoft.FSharp.Compiler.Infos @@ -43,143 +44,80 @@ open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic open Microsoft.FSharp.Compiler.Infos.AttributeChecking open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Opt -open Microsoft.FSharp.Compiler.Env -open Microsoft.FSharp.Compiler.Build +open Microsoft.FSharp.Compiler.Optimizer +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.CompileOps open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Fscopts +open Microsoft.FSharp.Compiler.CompileOptions open Microsoft.FSharp.Compiler.DiagnosticMessage #if EXTENSIONTYPING open Microsoft.FSharp.Compiler.ExtensionTyping #endif -#nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method +//---------------------------------------------------------------------------- +// No SQM logging support +//---------------------------------------------------------------------------- -/////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// This code has logic for a prefix of the compile that is also used by the project system to do the front-end -// logic that starts at command-line arguments and gets as far as importing all references (used for deciding -// to pop up the type provider security dialog). -/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#if SQM_SUPPORT +open Microsoft.FSharp.Compiler.SqmLogger +#else +let SqmLoggerWithConfigBuilder _tcConfigB _errorNumbers _warningNumbers = () +let SqmLoggerWithConfig _tcConfig _errorNumbers _warningNumbers = () +#endif + +#nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method //---------------------------------------------------------------------------- // Reporting - warnings, errors //---------------------------------------------------------------------------- -type ErrorLoggerThatAccumulatesErrors private (implicitIncludeDir, showFullPaths, flatErrors, errorStyle, globalWarnLevel, specificWarnOn, specificWarnOff, specificWarnAsError, specificWarnAsWarn, globalWarnAsError) = - inherit ErrorLogger("ErrorLoggerThatAccumulatesErrors") - let messages = ResizeArray() - let mutable errorsCount = 0 - new(tcConfigB : TcConfigBuilder) = - ErrorLoggerThatAccumulatesErrors( - tcConfigB.implicitIncludeDir, - tcConfigB.showFullPaths, - tcConfigB.flatErrors, - tcConfigB.errorStyle, - tcConfigB.globalWarnLevel, - tcConfigB.specificWarnOn, - tcConfigB.specificWarnOff, - tcConfigB.specificWarnAsError, - tcConfigB.specificWarnAsWarn, - tcConfigB.globalWarnAsError - ) - new(tcConfig : TcConfig) = - ErrorLoggerThatAccumulatesErrors( - tcConfig.implicitIncludeDir, - tcConfig.showFullPaths, - tcConfig.flatErrors, - tcConfig.errorStyle, - tcConfig.globalWarnLevel, - tcConfig.specificWarnOn, - tcConfig.specificWarnOff, - tcConfig.specificWarnAsError, - tcConfig.specificWarnAsWarn, - tcConfig.globalWarnAsError - ) - member this.ProcessMessage(err, isError) = - let writer = new System.IO.StringWriter() - - let writeError err = - writeViaBufferWithEnvironmentNewLines writer (OutputErrorOrWarning (implicitIncludeDir, showFullPaths, flatErrors, errorStyle, false)) err - - let isError = - if isError then - writeError err - true - else - if (ReportWarningAsError globalWarnLevel specificWarnOff specificWarnOn specificWarnAsError specificWarnAsWarn globalWarnAsError err) then - writeError err - true - elif ReportWarning globalWarnLevel specificWarnOff specificWarnOn err then - writeViaBufferWithEnvironmentNewLines writer (OutputErrorOrWarning (implicitIncludeDir, showFullPaths, flatErrors, errorStyle, true)) err - false - else - false // will not be used - let text = writer.ToString() - if text.Length <> 0 then Some (isError, text) else None - - member this.GetMessages() = List.ofSeq messages - override this.ErrorSinkImpl(err) = - errorsCount <- errorsCount + 1 - messages.Add(this.ProcessMessage(err, true).Value) - override this.WarnSinkImpl(warn) = - match this.ProcessMessage (warn, false) with - | Some ((isError, _) as res) -> - if isError then errorsCount <- errorsCount + 1 - messages.Add(res) - | _ -> () - - override this.ErrorCount = errorsCount - [] -type ErrorLoggerThatQuitsAfterMaxErrors(tcConfigB:TcConfigBuilder, exiter : Exiter, caption) = +type ErrorLoggerThatQuitsAfterMaxErrors(tcConfigB: TcConfigBuilder, exiter: Exiter, caption) = inherit ErrorLogger(caption) - let errors = ref 0 - let errorNumbers = ref [] - let warningNumbers = ref [] + let mutable errors = 0 + let mutable errorNumbers = [] + let mutable warningNumbers = [] abstract HandleIssue : tcConfigB : TcConfigBuilder * error : PhasedError * isWarning : bool -> unit abstract HandleTooManyErrors : text : string -> unit - override x.ErrorCount = !errors + override x.ErrorCount = errors override x.ErrorSinkImpl(err) = - if !errors >= tcConfigB.maxErrors then - x.HandleTooManyErrors(FSComp.SR.fscTooManyErrors()) -#if SQM_SUPPORT - SqmLoggerWithConfigBuilder tcConfigB !errorNumbers !warningNumbers -#endif - exiter.Exit 1 + if errors >= tcConfigB.maxErrors then + x.HandleTooManyErrors(FSComp.SR.fscTooManyErrors()) + SqmLoggerWithConfigBuilder tcConfigB errorNumbers warningNumbers + exiter.Exit 1 - x.HandleIssue(tcConfigB, err, false) + x.HandleIssue(tcConfigB, err, false) - incr errors - errorNumbers := (GetErrorNumber err) :: !errorNumbers + errors <- errors + 1 + errorNumbers <- (GetErrorNumber err) :: errorNumbers - match err.Exception with - | InternalError _ - | Failure _ - | :? KeyNotFoundException -> - match tcConfigB.simulateException with - | Some _ -> () // Don't show an assert for simulateException case so that unittests can run without an assert dialog. - | None -> System.Diagnostics.Debug.Assert(false,sprintf "Bug seen in compiler: %s" (err.ToString())) - | _ -> - () + match err.Exception with + | InternalError _ + | Failure _ + | :? KeyNotFoundException -> + match tcConfigB.simulateException with + | Some _ -> () // Don't show an assert for simulateException case so that unittests can run without an assert dialog. + | None -> Debug.Assert(false,sprintf "Bug seen in compiler: %s" (err.ToString())) + | _ -> + () override x.WarnSinkImpl(err) = - if (ReportWarningAsError tcConfigB.globalWarnLevel tcConfigB.specificWarnOff tcConfigB.specificWarnOn tcConfigB.specificWarnAsError tcConfigB.specificWarnAsWarn tcConfigB.globalWarnAsError err) then + if ReportWarningAsError (tcConfigB.globalWarnLevel, tcConfigB.specificWarnOff, tcConfigB.specificWarnOn, tcConfigB.specificWarnAsError, tcConfigB.specificWarnAsWarn, tcConfigB.globalWarnAsError) err then x.ErrorSink(err) - elif ReportWarning tcConfigB.globalWarnLevel tcConfigB.specificWarnOff tcConfigB.specificWarnOn err then + elif ReportWarning (tcConfigB.globalWarnLevel, tcConfigB.specificWarnOff, tcConfigB.specificWarnOn) err then x.HandleIssue(tcConfigB, err, true) - warningNumbers := (GetErrorNumber err) :: !warningNumbers + warningNumbers <- (GetErrorNumber err) :: warningNumbers - override x.WarningNumbers = !warningNumbers - override x.ErrorNumbers = !errorNumbers + override x.WarningNumbers = warningNumbers + override x.ErrorNumbers = errorNumbers /// Create an error logger that counts and prints errors let ConsoleErrorLoggerThatQuitsAfterMaxErrors (tcConfigB:TcConfigBuilder, exiter : Exiter) : ErrorLogger = - upcast { - new ErrorLoggerThatQuitsAfterMaxErrors(tcConfigB, exiter, "ConsoleErrorLoggerThatQuitsAfterMaxErrors") with + { new ErrorLoggerThatQuitsAfterMaxErrors(tcConfigB, exiter, "ConsoleErrorLoggerThatQuitsAfterMaxErrors") with member this.HandleTooManyErrors(text : string) = DoWithErrorColor true (fun () -> Printf.eprintfn "%s" text) @@ -188,37 +126,25 @@ let ConsoleErrorLoggerThatQuitsAfterMaxErrors (tcConfigB:TcConfigBuilder, exiter DoWithErrorColor isWarning (fun () -> (writeViaBufferWithEnvironmentNewLines stderr (OutputErrorOrWarning (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,isWarning)) err; stderr.WriteLine()) - ); - } - -// val TypeCheck : TcConfig * TcImports * TcGlobals * ErrorLogger * string * NiceNameGenerator * TypeChecker.TcEnv * Input list * Exiter -> -// TcState * TypeChecker.TopAttribs * Tast.TypedAssembly * TypeChecker.TcEnv -let TypeCheck (tcConfig,tcImports,tcGlobals,errorLogger:ErrorLogger,assemblyName,niceNameGen,tcEnv0,inputs, exiter : Exiter) = - try - if isNil inputs then error(Error(FSComp.SR.fscNoImplementationFiles(),Range.rangeStartup)) - let ccuName = assemblyName - let tcInitialState = TypecheckInitialState (rangeStartup,ccuName,tcConfig,tcGlobals,tcImports,niceNameGen,tcEnv0) - TypecheckClosedInputSet ((fun () -> errorLogger.ErrorCount > 0),tcConfig,tcImports,tcGlobals,None,tcInitialState,inputs) - with e -> - errorRecovery e rangeStartup -#if SQM_SUPPORT - SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers -#endif - exiter.Exit 1 + ) + } :> _ -/// This error logger delays the messages it recieves. At the end, call ForwardDelayedErrorsAndWarnings +/// This error logger delays the messages it receives. At the end, call ForwardDelayedErrorsAndWarnings /// to send the held messages. -type DelayAndForwardErrorLogger(exiter : Exiter, errorLoggerProvider : ErrorLoggerProvider) = +type DelayAndForwardErrorLogger(exiter: Exiter, errorLoggerProvider: ErrorLoggerProvider) = inherit ErrorLogger("DelayAndForwardErrorLogger") - let mapToErrorNumber items = - items |> Seq.map (fun (err,_) -> GetErrorNumber err) |> Seq.toList + let delayed = new ResizeArray<_>() - let errors = ref 0 + let mutable errors = 0 + override x.ErrorSinkImpl(e) = - errors := !errors + 1 + errors <- errors + 1 delayed.Add (e,true) + override x.ErrorCount = delayed |> Seq.filter snd |> Seq.length + override x.WarnSinkImpl(e) = delayed.Add(e,false) + member x.ForwardDelayedErrorsAndWarnings(errorLogger:ErrorLogger) = // Eagerly grab all the errors and warnings from the mutable collection let errors = delayed |> Seq.toList @@ -227,18 +153,60 @@ type DelayAndForwardErrorLogger(exiter : Exiter, errorLoggerProvider : ErrorLogg if isError then errorLogger.ErrorSink(e) else errorLogger.WarnSink(e) // Clear errors just reported. Keep errors count. delayed.Clear() + member x.ForwardDelayedErrorsAndWarnings(tcConfigB:TcConfigBuilder) = let errorLogger = errorLoggerProvider.CreateErrorLoggerThatQuitsAfterMaxErrors(tcConfigB, exiter) x.ForwardDelayedErrorsAndWarnings(errorLogger) - member x.FullErrorCount = !errors - override x.WarningNumbers = delayed |> Seq.filter(fun (_, flag) -> flag = false) |> mapToErrorNumber - override x.ErrorNumbers = delayed |> Seq.filter(fun (_, flag) -> flag = true) |> mapToErrorNumber + + member x.FullErrorCount = errors + + override x.WarningNumbers = delayed |> Seq.filter (snd >> not) |> Seq.map (fst >> GetErrorNumber) |> Seq.toList + override x.ErrorNumbers = delayed |> Seq.filter snd |> Seq.map (fst >> GetErrorNumber) |> Seq.toList and [] ErrorLoggerProvider() = member this.CreateDelayAndForwardLogger(exiter) = DelayAndForwardErrorLogger(exiter, this) abstract CreateErrorLoggerThatQuitsAfterMaxErrors : tcConfigBuilder : TcConfigBuilder * exiter : Exiter -> ErrorLogger +let AbortOnError (errorLogger:ErrorLogger, _tcConfig:TcConfig, exiter : Exiter) = + if errorLogger.ErrorCount > 0 then + SqmLoggerWithConfig _tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers + exiter.Exit 1 + +type DefaultLoggerProvider() = + inherit ErrorLoggerProvider() + override this.CreateErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter) = ConsoleErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter) + +//---------------------------------------------------------------------------- +// Cleaning up + +/// Track a set of resources to cleanup +type DisposablesTracker() = + let items = Stack() + member this.Register(i) = items.Push i + interface IDisposable with + member this.Dispose() = + let l = List.ofSeq items + items.Clear() + for i in l do + try i.Dispose() with _ -> () + + +//---------------------------------------------------------------------------- + +/// Type checking a set of inputs +let TypeCheck (tcConfig, tcImports, tcGlobals, errorLogger:ErrorLogger, assemblyName, niceNameGen, tcEnv0, inputs, exiter: Exiter) = + try + if isNil inputs then error(Error(FSComp.SR.fscNoImplementationFiles(),Range.rangeStartup)) + let ccuName = assemblyName + let tcInitialState = GetInitialTcState (rangeStartup,ccuName,tcConfig,tcGlobals,tcImports,niceNameGen,tcEnv0) + TypeCheckClosedInputSet ((fun () -> errorLogger.ErrorCount > 0),tcConfig,tcImports,tcGlobals,None,tcInitialState,inputs) + with e -> + errorRecovery e rangeStartup + SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers + exiter.Exit 1 + + /// Check for .fsx and, if present, compute the load closure for of #loaded files. let AdjustForScriptCompile(tcConfigB:TcConfigBuilder,commandLineSourceFiles,lexResourceManager) = @@ -264,8 +232,10 @@ let AdjustForScriptCompile(tcConfigB:TcConfigBuilder,commandLineSourceFiles,lexR let AppendClosureInformation(filename) = if IsScript filename then let closure = LoadClosure.ComputeClosureOfSourceFiles(tcConfig,[filename,rangeStartup],CodeContext.Compilation,lexResourceManager=lexResourceManager,useDefaultScriptingReferences=false) - let references = closure.References |> List.map snd |> List.concat |> List.map (fun r->r.originalReference) |> List.filter (fun r->r.Range<>range0) - references |> List.iter (fun r-> tcConfigB.AddReferencedAssemblyByPath(r.Range,r.Text)) + // Record the references from the analysis of the script. The full resolutions are recorded as the corresponding #I paths used to resolve them + // are local to the scripts and not added to the tcConfigB (they are added to localized clones of the tcConfigB). + let references = closure.References |> List.map snd |> List.concat |> List.filter (fun r->r.originalReference.Range<>range0 && r.originalReference.Range<>rangeStartup) + references |> List.iter (fun r-> tcConfigB.AddReferencedAssemblyByPath(r.originalReference.Range,r.resolvedPath)) closure.NoWarns |> List.map(fun (n,ms)->ms|>List.map(fun m->m,n)) |> List.concat |> List.iter tcConfigB.TurnWarningOff closure.SourceFiles |> List.map fst |> List.iter AddIfNotPresent closure.RootWarnings |> List.iter warnSink @@ -278,54 +248,67 @@ let AdjustForScriptCompile(tcConfigB:TcConfigBuilder,commandLineSourceFiles,lexR List.rev !allSources -let abortOnError (errorLogger:ErrorLogger, _tcConfig:TcConfig, exiter : Exiter) = - if errorLogger.ErrorCount > 0 then -#if SQM_SUPPORT - SqmLoggerWithConfig _tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers -#endif - exiter.Exit 1 +let ProcessCommandLineFlags (tcConfigB: TcConfigBuilder, setProcessThreadLocals, lcidFromCodePage, argv) = + let inputFilesRef = ref ([] : string list) + let collect name = + let lower = String.lowercase name + if List.exists (Filename.checkSuffix lower) [".resx"] then + warning(Error(FSComp.SR.fscResxSourceFileDeprecated name,rangeStartup)) + tcConfigB.AddEmbeddedResource name + else + inputFilesRef := name :: !inputFilesRef + let abbrevArgs = GetAbbrevFlagSet tcConfigB true + + // This is where flags are interpreted by the command line fsc.exe. + ParseCompilerOptions (collect, GetCoreFscCompilerOptions tcConfigB, List.tail (PostProcessCompilerArgs abbrevArgs argv)) + let inputFiles = List.rev !inputFilesRef -type DelayedDisposables() = - let items = Stack() - member this.Register(i) = items.Push i - interface System.IDisposable with - member this.Dispose() = - let l = List.ofSeq items - items.Clear() - for i in l do - try i.Dispose() with _ -> () + // Check if we have a codepage from the console + match tcConfigB.lcid with + | Some _ -> () + | None -> tcConfigB.lcid <- lcidFromCodePage -type DefaultLoggerProvider() = - inherit ErrorLoggerProvider() - override this.CreateErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter) = ConsoleErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter) + setProcessThreadLocals(tcConfigB) + + (* step - get dll references *) + let dllFiles,sourceFiles = List.partition Filename.isDll inputFiles + match dllFiles with + | [] -> () + | h::_ -> errorR (Error(FSComp.SR.fscReferenceOnCommandLine(h),rangeStartup)) + dllFiles |> List.iter (fun f->tcConfigB.AddReferencedAssemblyByPath(rangeStartup,f)) + sourceFiles + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// This code has logic for a prefix of the compile that is also used by the project system to do the front-end +// logic that starts at command-line arguments and gets as far as importing all references (used for deciding +// to pop up the type provider security dialog). +// // The project system needs to be able to somehow crack open assemblies to look for type providers in order to pop up the security dialog when necessary when a user does 'Build'. // Rather than have the PS re-code that logic, it re-uses the existing code in the very front end of the compiler that parses the command-line and imports the referenced assemblies. // This code used to be in fsc.exe. The PS only references FSharp.LanguageService.Compiler, so this code moved from fsc.exe to FS.C.S.dll so that the PS can re-use it. // A great deal of the logic of this function is repeated in fsi.fs, so maybe should refactor fsi.fs to call into this as well. -let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : (string->unit) option, - argv : string[], - defaultFSharpBinariesDir : string, - directoryBuildingFrom : string, - lcidFromCodePage : int option, - setProcessThreadLocals : TcConfigBuilder -> unit, - displayBannerIfNeeded : TcConfigBuilder -> unit, - optimizeForMemory : bool, - exiter : Exiter, - errorLoggerProvider : ErrorLoggerProvider, - disposables : DelayedDisposables) - : TcGlobals * TcImports * TcImports * Tast.CcuThunk * Tast.TypedAssembly * TypeChecker.TopAttribs * TcConfig * string * string option * string * ErrorLogger - = - - - let tcConfigB = Build.TcConfigBuilder.CreateNew(defaultFSharpBinariesDir, optimizeForMemory, directoryBuildingFrom, isInteractive=false, isInvalidationSupported=false) +let GetTcImportsFromCommandLine + (argv : string[], + defaultFSharpBinariesDir : string, + directoryBuildingFrom : string, + lcidFromCodePage : int option, + setProcessThreadLocals : TcConfigBuilder -> unit, + displayBannerIfNeeded : TcConfigBuilder -> unit, + optimizeForMemory : bool, + exiter : Exiter, + errorLoggerProvider : ErrorLoggerProvider, + disposables : DisposablesTracker) = + + let tcConfigB = TcConfigBuilder.CreateNew(defaultFSharpBinariesDir, optimizeForMemory, directoryBuildingFrom, isInteractive=false, isInvalidationSupported=false) // Preset: --optimize+ -g --tailcalls+ (see 4505) - SetOptimizeSwitch tcConfigB On - SetDebugSwitch tcConfigB None Off - SetTailcallSwitch tcConfigB On + SetOptimizeSwitch tcConfigB OptionSwitch.On + SetDebugSwitch tcConfigB None OptionSwitch.Off + SetTailcallSwitch tcConfigB OptionSwitch.On // Now install a delayed logger to hold all errors from flags until after all flags have been parsed (for example, --vserrors) - let delayForFlagsLogger = errorLoggerProvider.CreateDelayAndForwardLogger(exiter)// DelayAndForwardErrorLogger(exiter) + let delayForFlagsLogger = errorLoggerProvider.CreateDelayAndForwardLogger(exiter) let _unwindEL_1 = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayForFlagsLogger) // Share intern'd strings across all lexing/parsing @@ -337,44 +320,15 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : // The ParseCompilerOptions function calls imperative function to process "real" args // Rather than start processing, just collect names, then process them. try - let inputFilesRef = ref ([] : string list) - let collect name = - let lower = String.lowercase name - if List.exists (Filename.checkSuffix lower) [".resx"] then - warning(Error(FSComp.SR.fscResxSourceFileDeprecated name,rangeStartup)) - tcConfigB.AddEmbeddedResource name - else - inputFilesRef := name :: !inputFilesRef - let abbrevArgs = abbrevFlagSet tcConfigB true - - // This is where flags are interpreted by the command line fsc.exe. - ParseCompilerOptions collect (GetCoreFscCompilerOptions tcConfigB) (List.tail (PostProcessCompilerArgs abbrevArgs argv)) - let inputFiles = List.rev !inputFilesRef - - // Check if we have a codepage from the console - match tcConfigB.lcid with - | Some _ -> () - | None -> tcConfigB.lcid <- lcidFromCodePage - - setProcessThreadLocals(tcConfigB) + let sourceFiles = ProcessCommandLineFlags (tcConfigB, setProcessThreadLocals, lcidFromCodePage, argv) - (* step - get dll references *) - let dllFiles,sourceFiles = List.partition Filename.isDll inputFiles - match dllFiles with - | [] -> () - | h::_ -> errorR (Error(FSComp.SR.fscReferenceOnCommandLine(h),rangeStartup)) - - dllFiles |> List.iter (fun f->tcConfigB.AddReferencedAssemblyByPath(rangeStartup,f)) - let sourceFiles = AdjustForScriptCompile(tcConfigB,sourceFiles,lexResourceManager) + sourceFiles - with - e -> + with e -> errorRecovery e rangeStartup -#if SQM_SUPPORT SqmLoggerWithConfigBuilder tcConfigB delayForFlagsLogger.ErrorNumbers delayForFlagsLogger.WarningNumbers -#endif delayForFlagsLogger.ForwardDelayedErrorsAndWarnings(tcConfigB) exiter.Exit 1 @@ -388,17 +342,13 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : tcConfigB.DecideNames sourceFiles with e -> errorRecovery e rangeStartup -#if SQM_SUPPORT SqmLoggerWithConfigBuilder tcConfigB delayForFlagsLogger.ErrorNumbers delayForFlagsLogger.WarningNumbers -#endif delayForFlagsLogger.ForwardDelayedErrorsAndWarnings(tcConfigB) exiter.Exit 1 // DecideNames may give "no inputs" error. Abort on error at this point. bug://3911 if not tcConfigB.continueAfterParseFailure && delayForFlagsLogger.FullErrorCount > 0 then -#if SQM_SUPPORT SqmLoggerWithConfigBuilder tcConfigB delayForFlagsLogger.ErrorNumbers delayForFlagsLogger.WarningNumbers -#endif delayForFlagsLogger.ForwardDelayedErrorsAndWarnings(tcConfigB) exiter.Exit 1 @@ -407,9 +357,7 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : try TcConfig.Create(tcConfigB,validate=false) with e -> -#if SQM_SUPPORT SqmLoggerWithConfigBuilder tcConfigB delayForFlagsLogger.ErrorNumbers delayForFlagsLogger.WarningNumbers -#endif delayForFlagsLogger.ForwardDelayedErrorsAndWarnings(tcConfigB) exiter.Exit 1 @@ -423,124 +371,74 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : // step - decideNames if not tcConfigB.continueAfterParseFailure then - abortOnError(errorLogger, tcConfig, exiter) - - let tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig = - - ReportTime tcConfig "Import mscorlib" - - if tcConfig.useIncrementalBuilder then - ReportTime tcConfig "Incremental Parse and Typecheck" - let builder = - new IncrementalFSharpBuild.IncrementalBuilder(tcConfig, directoryBuildingFrom, assemblyName, NiceNameGenerator(), lexResourceManager, sourceFiles, - ensureReactive=false, - errorLogger=errorLogger, - keepGeneratedTypedAssembly=true) - let tcState,topAttribs,typedAssembly,_tcEnv,tcImports,tcGlobals,tcConfig = builder.TypeCheck() - tcGlobals,tcImports,tcImports,tcState.Ccu,typedAssembly,topAttribs,tcConfig - else - - ReportTime tcConfig "Import mscorlib and FSharp.Core.dll" - ReportTime tcConfig "Import system references" - let foundationalTcConfigP = TcConfigProvider.Constant(tcConfig) - let sysRes,otherRes,knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) - let tcGlobals,frameworkTcImports = TcImports.BuildFrameworkTcImports (foundationalTcConfigP, sysRes, otherRes) - - // register framework tcImports to be disposed in future - disposables.Register frameworkTcImports - - // step - parse sourceFiles - ReportTime tcConfig "Parse inputs" - use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) - let inputs : (ParsedInput * string) list = - try - sourceFiles - |> tcConfig.ComputeCanContainEntryPoint - |> List.zip sourceFiles - // PERF: consider making this parallel, once uses of global state relevant to parsing are cleaned up - |> List.choose (fun (filename:string,isLastCompiland:bool) -> - let pathOfMetaCommandSource = Path.GetDirectoryName(filename) - match ParseOneInputFile(tcConfig,lexResourceManager,["COMPILED"],filename,isLastCompiland,errorLogger,(*retryLocked*)false) with - | Some(input)->Some(input,pathOfMetaCommandSource) - | None -> None - ) - with e -> - errorRecoveryNoRange e -#if SQM_SUPPORT - SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers -#endif - exiter.Exit 1 + AbortOnError(errorLogger, tcConfig, exiter) + + ReportTime tcConfig "Import mscorlib and FSharp.Core.dll" + let foundationalTcConfigP = TcConfigProvider.Constant(tcConfig) + let sysRes,otherRes,knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) + let tcGlobals,frameworkTcImports = TcImports.BuildFrameworkTcImports (foundationalTcConfigP, sysRes, otherRes) + + // register framework tcImports to be disposed in future + disposables.Register frameworkTcImports + + // step - parse sourceFiles + ReportTime tcConfig "Parse inputs" + use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) + let inputs = + try + sourceFiles + |> tcConfig.ComputeCanContainEntryPoint + |> List.zip sourceFiles + // PERF: consider making this parallel, once uses of global state relevant to parsing are cleaned up + |> List.choose (fun (filename:string,isLastCompiland:bool) -> + let pathOfMetaCommandSource = Path.GetDirectoryName(filename) + match ParseOneInputFile(tcConfig,lexResourceManager,["COMPILED"],filename,isLastCompiland,errorLogger,(*retryLocked*)false) with + | Some(input)->Some(input,pathOfMetaCommandSource) + | None -> None + ) + with e -> + errorRecoveryNoRange e + SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers + exiter.Exit 1 - if tcConfig.parseOnly then exiter.Exit 0 - if not tcConfig.continueAfterParseFailure then - abortOnError(errorLogger, tcConfig, exiter) + if tcConfig.parseOnly then exiter.Exit 0 + if not tcConfig.continueAfterParseFailure then + AbortOnError(errorLogger, tcConfig, exiter) - if tcConfig.printAst then - inputs |> List.iter (fun (input,_filename) -> printf "AST:\n"; printfn "%+A" input; printf "\n") + if tcConfig.printAst then + inputs |> List.iter (fun (input,_filename) -> printf "AST:\n"; printfn "%+A" input; printf "\n") - let tcConfig = (tcConfig,inputs) ||> List.fold ApplyMetaCommandsFromInputToTcConfig - let tcConfigP = TcConfigProvider.Constant(tcConfig) + let tcConfig = (tcConfig,inputs) ||> List.fold ApplyMetaCommandsFromInputToTcConfig + let tcConfigP = TcConfigProvider.Constant(tcConfig) - ReportTime tcConfig "Import non-system references" - let tcGlobals,tcImports = - let tcImports = TcImports.BuildNonFrameworkTcImports(displayPSTypeProviderSecurityDialogBlockingUI,tcConfigP,tcGlobals,frameworkTcImports,otherRes,knownUnresolved) - tcGlobals,tcImports + ReportTime tcConfig "Import non-system references" + let tcGlobals,tcImports = + let tcImports = TcImports.BuildNonFrameworkTcImports(tcConfigP,tcGlobals,frameworkTcImports,otherRes,knownUnresolved) + tcGlobals,tcImports - // register tcImports to be disposed in future - disposables.Register tcImports + // register tcImports to be disposed in future + disposables.Register tcImports - if not tcConfig.continueAfterParseFailure then - abortOnError(errorLogger, tcConfig, exiter) + if not tcConfig.continueAfterParseFailure then + AbortOnError(errorLogger, tcConfig, exiter) - if tcConfig.importAllReferencesOnly then exiter.Exit 0 + if tcConfig.importAllReferencesOnly then exiter.Exit 0 - ReportTime tcConfig "Typecheck" - use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.TypeCheck) - let tcEnv0 = GetInitialTypecheckerEnv (Some assemblyName) rangeStartup tcConfig tcImports tcGlobals + ReportTime tcConfig "Typecheck" + use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.TypeCheck) + let tcEnv0 = GetInitialTcEnv (Some assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals) - // typecheck - let inputs : ParsedInput list = inputs |> List.map fst - let tcState,topAttrs,typedAssembly,_tcEnvAtEnd = - TypeCheck(tcConfig,tcImports,tcGlobals,errorLogger,assemblyName,NiceNameGenerator(),tcEnv0,inputs,exiter) + // typecheck + let inputs = inputs |> List.map fst + let tcState,topAttrs,typedAssembly,_tcEnvAtEnd = + TypeCheck(tcConfig,tcImports,tcGlobals,errorLogger,assemblyName,NiceNameGenerator(),tcEnv0,inputs,exiter) - let generatedCcu = tcState.Ccu - abortOnError(errorLogger, tcConfig, exiter) - ReportTime tcConfig "Typechecked" + let generatedCcu = tcState.Ccu + AbortOnError(errorLogger, tcConfig, exiter) + ReportTime tcConfig "Typechecked" - (tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig) - tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger -// only called from the project system, as a way to run the front end of the compiler far enough to determine if we need to pop up the dialog (and do so if necessary) -let runFromCommandLineToImportingAssemblies(displayPSTypeProviderSecurityDialogBlockingUI : (string -> unit), - argv : string[], - defaultFSharpBinariesDir : string, - directoryBuildingFrom : string, - exiter : Exiter) = - - use d = new DelayedDisposables() // ensure that any resources that can be allocated in getTcImportsFromCommandLine will be correctly disposed - - let tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger = - getTcImportsFromCommandLine(Some displayPSTypeProviderSecurityDialogBlockingUI, argv, defaultFSharpBinariesDir, directoryBuildingFrom, None, (fun _ -> ()), - (fun tcConfigB -> - // (kind of abusing this lambda for an unintended purpose, but this is a convenient and correctly-timed place to poke the tcConfigB) - tcConfigB.importAllReferencesOnly <- true // stop after importing assemblies (do not typecheck, we don't need typechecking) - // for flags below, see IncrementalBuilder.fs:CreateBackgroundBuilderForProjectOptions, as there are many similarities, as these are the two places that we create this from VS code-paths - tcConfigB.openBinariesInMemory <- true // uses more memory but means we don't take read-exclusions on the DLLs we reference (important for VS code path) - tcConfigB.openDebugInformationForLaterStaticLinking <- false // Never open PDB files for the PS, even if --standalone is specified - if tcConfigB.framework then - System.Diagnostics.Debug.Assert(false, "Project system requires --noframework flag") - tcConfigB.framework<-false - ), - true, // optimizeForMemory - want small memory footprint in VS - exiter, - DefaultLoggerProvider(), // this function always use default set of loggers - d) - - // we don't care about the result, we just called 'getTcImportsFromCommandLine' to have the effect of popping up the dialog if the TP is unknown - ignore(tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger) - - #if NO_COMPILER_BACKEND #else @@ -548,33 +446,33 @@ let runFromCommandLineToImportingAssemblies(displayPSTypeProviderSecurityDialogB // Code from here on down is just used by fsc.exe /////////////////////////////////////////////////////////////////////////////////////////////////////////////// -let BuildInitialDisplayEnvForSigFileGeneration tcGlobals = - let denv = DisplayEnv.Empty tcGlobals - let denv = - { denv with - showImperativeTyparAnnotations=true; - showHiddenMembers=true; - showObsoleteMembers=true; - showAttributes=true; } - denv.SetOpenPaths - [ FSharpLib.RootPath - FSharpLib.CorePath - FSharpLib.CollectionsPath - FSharpLib.ControlPath - (IL.splitNamespace FSharpLib.ExtraTopLevelOperatorsName); ] +module InterfaceFileWriter = + let BuildInitialDisplayEnvForSigFileGeneration tcGlobals = + let denv = DisplayEnv.Empty tcGlobals + let denv = + { denv with + showImperativeTyparAnnotations=true + showHiddenMembers=true + showObsoleteMembers=true + showAttributes=true } + denv.SetOpenPaths + [ FSharpLib.RootPath + FSharpLib.CorePath + FSharpLib.CollectionsPath + FSharpLib.ControlPath + (IL.splitNamespace FSharpLib.ExtraTopLevelOperatorsName) ] -module InterfaceFileWriter = let WriteInterfaceFile (tcGlobals, tcConfig:TcConfig, infoReader, typedAssembly) = let (TAssembly declaredImpls) = typedAssembly /// Use a UTF-8 Encoding with no Byte Order Mark let os = - if tcConfig.printSignatureFile="" then System.Console.Out + if tcConfig.printSignatureFile="" then Console.Out else (File.CreateText tcConfig.printSignatureFile :> TextWriter) - if tcConfig.printSignatureFile <> "" && not (List.exists (Filename.checkSuffix tcConfig.printSignatureFile) lightSyntaxDefaultExtensions) then + if tcConfig.printSignatureFile <> "" && not (List.exists (Filename.checkSuffix tcConfig.printSignatureFile) FSharpLightSyntaxFileSuffixes) then fprintfn os "#light" fprintfn os "" @@ -591,7 +489,7 @@ module XmlDocWriter = let getDoc xmlDoc = match XmlDoc.Process xmlDoc with | XmlDoc [| |] -> "" - | XmlDoc strs -> strs |> Array.toList |> String.concat System.Environment.NewLine + | XmlDoc strs -> strs |> Array.toList |> String.concat Environment.NewLine let hasDoc xmlDoc = // No need to process the xml doc - just need to know if there's anything there @@ -699,18 +597,13 @@ module XmlDocWriter = // cmd line - option state //---------------------------------------------------------------------------- -let getModuleFileName() = - Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, - System.AppDomain.CurrentDomain.FriendlyName) - -let defaultFSharpBinariesDir = Filename.directoryName (getModuleFileName()) - +let defaultFSharpBinariesDir = + let exeName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.FriendlyName) + Filename.directoryName exeName let outpath outfile extn = String.concat "." (["out"; Filename.chopExtension (Filename.fileNameOfPath outfile); extn]) - - let GenerateInterfaceData(tcConfig:TcConfig) = (* (tcConfig.target = Dll || tcConfig.target = Module) && *) not tcConfig.standalone && not tcConfig.noSignatureData @@ -722,8 +615,7 @@ type ILResource with | ILResourceLocation.Local b -> b() | _-> error(InternalError("Bytes",rangeStartup)) -let EncodeInterfaceData(tcConfig:TcConfig,tcGlobals,exportRemapping,_errorLogger:ErrorLogger,generatedCcu,outfile,exiter:Exiter) = - try +let EncodeInterfaceData(tcConfig:TcConfig,tcGlobals,exportRemapping,generatedCcu,outfile,isIncrementalBuild) = if GenerateInterfaceData(tcConfig) then if verbose then dprintfn "Generating interface data attribute..."; let resource = WriteSignatureData (tcConfig,tcGlobals,exportRemapping,generatedCcu,outfile) @@ -731,7 +623,7 @@ let EncodeInterfaceData(tcConfig:TcConfig,tcGlobals,exportRemapping,_errorLogger // REVIEW: need a better test for this let outFileNoExtension = Filename.chopExtension outfile let isCompilerServiceDll = outFileNoExtension.Contains("FSharp.LanguageService.Compiler") - if tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib || isCompilerServiceDll then + if (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib || isCompilerServiceDll) && not isIncrementalBuild then let sigDataFileName = (Filename.chopExtension outfile)+".sigdata" File.WriteAllBytes(sigDataFileName,resource.Bytes); let sigAttr = mkSignatureDataVersionAttr tcGlobals (IL.parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision) @@ -742,12 +634,6 @@ let EncodeInterfaceData(tcConfig:TcConfig,tcGlobals,exportRemapping,_errorLogger [sigAttr], resources else [],[] - with e -> - errorRecoveryNoRange e -#if SQM_SUPPORT - SqmLoggerWithConfig tcConfig _errorLogger.ErrorNumbers _errorLogger.WarningNumbers -#endif - exiter.Exit 1 //---------------------------------------------------------------------------- @@ -760,14 +646,14 @@ let GenerateOptimizationData(tcConfig) = let EncodeOptimizationData(tcGlobals,tcConfig,outfile,exportRemapping,data) = if GenerateOptimizationData tcConfig then - let data = map2Of2 (Opt.RemapLazyModulInfo tcGlobals exportRemapping) data + let data = map2Of2 (Optimizer.RemapOptimizationInfo tcGlobals exportRemapping) data if verbose then dprintn "Generating optimization data attribute..."; // REVIEW: need a better test for this let outFileNoExtension = Filename.chopExtension outfile let isCompilerServiceDll = outFileNoExtension.Contains("FSharp.LanguageService.Compiler") if tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib || isCompilerServiceDll then let ccu,modulInfo = data - let bytes = Pickle.pickleObjWithDanglingCcus outfile tcGlobals ccu Opt.p_LazyModuleInfo modulInfo + let bytes = TastPickle.pickleObjWithDanglingCcus outfile tcGlobals ccu Optimizer.p_CcuOptimizationInfo modulInfo let optDataFileName = (Filename.chopExtension outfile)+".optdata" File.WriteAllBytes(optDataFileName,bytes); // As with the sigdata file, the optdata gets written to a file for FSharp.Core, FSharp.Compiler.Silverlight and FSharp.LanguageService.Compiler @@ -776,7 +662,7 @@ let EncodeOptimizationData(tcGlobals,tcConfig,outfile,exportRemapping,data) = else let (ccu, optData) = if tcConfig.onlyEssentialOptimizationData || tcConfig.useOptimizationDataFile - then map2Of2 Opt.AbstractLazyModulInfoToEssentials data + then map2Of2 Optimizer.AbstractOptimizationInfoToEssentials data else data [ WriteOptimizationData (tcGlobals, outfile, ccu, optData) ] else @@ -996,6 +882,11 @@ module AttributeHelpers = | Some (Attrib(_,_,[ AttribBoolArg(p) ],_,_,_,_)) -> Some (p) | _ -> None + let (|ILVersion|_|) (versionString: string) = + try Some(IL.parseILVersion versionString) + with e -> + None + // Try to find an AssemblyVersion attribute let TryFindVersionAttribute tcGlobals attrib attribName attribs = match TryFindStringAttribute tcGlobals attrib attribs with @@ -1007,23 +898,19 @@ module AttributeHelpers = | _ -> None -let injectedCompatTypes = set [ "System.Tuple`1"; - "System.Tuple`2" ; - "System.Tuple`3" ; - "System.Tuple`4"; - "System.Tuple`5"; - "System.Tuple`6"; - "System.Tuple`7"; - "System.Tuple`8"; - "System.ITuple"; - "System.Tuple"; - //"System.System_LazyDebugView`1"; - //"System.Threading.LazyExecutionMode"; - //"System.Threading.LazyInternalExceptionHolder"; - //"System.Threading.LazyBlock`1"; - "System.Collections.IStructuralComparable"; - "System.Collections.IStructuralEquatable"; - ] +let injectedCompatTypes = + set [ "System.Tuple`1" + "System.Tuple`2" + "System.Tuple`3" + "System.Tuple`4" + "System.Tuple`5" + "System.Tuple`6" + "System.Tuple`7" + "System.Tuple`8" + "System.ITuple" + "System.Tuple" + "System.Collections.IStructuralComparable" + "System.Collections.IStructuralEquatable" ] let typesForwardedToMscorlib = set [ "System.AggregateException"; @@ -1064,6 +951,39 @@ let createSystemNumericsExportList tcGlobals = Seq.toList module MainModuleBuilder = + + let fileVersion warn findStringAttr (assemblyVersion: ILVersionInfo) = + let attrName = "System.Reflection.AssemblyFileVersionAttribute" + match findStringAttr attrName with + | None -> assemblyVersion + | Some (AttributeHelpers.ILVersion(v)) -> v + | Some v -> + warn(Error(FSComp.SR.fscBadAssemblyVersion(attrName, v),Range.rangeStartup)) + //TODO compile error like c# compiler? + assemblyVersion + + let productVersion warn findStringAttr (fileVersion: ILVersionInfo) = + let attrName = "System.Reflection.AssemblyInformationalVersionAttribute" + let toDotted (v1,v2,v3,v4) = sprintf "%d.%d.%d.%d" v1 v2 v3 v4 + match findStringAttr attrName with + | None | Some "" -> fileVersion |> toDotted + | Some (AttributeHelpers.ILVersion(v)) -> v |> toDotted + | Some v -> + warn(Error(FSComp.SR.fscBadAssemblyVersion(attrName, v),Range.rangeStartup)) + v + + let productVersionToILVersionInfo (version: string) : ILVersionInfo = + let parseOrZero v = match System.UInt16.TryParse v with (true, i) -> i | (false, _) -> 0us + let validParts = + version.Split('.') + |> Seq.map parseOrZero + |> Seq.takeWhile ((<>) 0us) + |> Seq.toList + match validParts @ [0us; 0us; 0us; 0us] with + | major :: minor :: build :: rev :: _ -> (major, minor, build, rev) + | x -> failwithf "error converting product version '%s' to binary, tried '%A' " version x + + let CreateMainModule (tcConfig:TcConfig,tcGlobals, pdbfile,assemblyName,outfile,topAttrs, @@ -1075,8 +995,6 @@ module MainModuleBuilder = let ilTypeDefs = //let topTypeDef = mkILTypeDefForGlobalFunctions tcGlobals.ilg (mkILMethods [], emptyILFields) mkILTypeDefs codegenResults.ilTypeDefs - - let mainModule = let hashAlg = AttributeHelpers.TryFindIntAttribute tcGlobals "System.Reflection.AssemblyAlgorithmIdAttribute" topAttrs.assemblyAttrs @@ -1090,7 +1008,7 @@ module MainModuleBuilder = // Add the type forwarders to any .NET DLL post-.NET-2.0, to give binary compatibility let exportedTypesList = if (tcConfig.compilingFslib && tcConfig.compilingFslib40) then (List.append (createMscorlibExportList tcGlobals) (createSystemNumericsExportList tcGlobals)) else [] - mkILSimpleModule assemblyName (fsharpModuleName tcConfig.target assemblyName) (tcConfig.target = Dll || tcConfig.target = Module) tcConfig.subsystemVersion tcConfig.useHighEntropyVA ilTypeDefs hashAlg locale flags (mkILExportedTypes exportedTypesList) metadataVersion + mkILSimpleModule assemblyName (GetGeneratedILModuleName tcConfig.target assemblyName) (tcConfig.target = Dll || tcConfig.target = Module) tcConfig.subsystemVersion tcConfig.useHighEntropyVA ilTypeDefs hashAlg locale flags (mkILExportedTypes exportedTypesList) metadataVersion let disableJitOptimizations = not (tcConfig.optSettings.jitOpt()) @@ -1100,14 +1018,20 @@ module MainModuleBuilder = codegenResults.quotationResourceInfo |> List.map (fun (referencedTypeDefs, reflectedDefinitionBytes) -> let reflectedDefinitionResourceName = QuotationPickler.SerializedReflectedDefinitionsResourceNameBase+"-"+assemblyName+"-"+string(newUnique())+"-"+string(hash reflectedDefinitionBytes) - let reflectedDefinitionAttr = mkCompilationMappingAttrForQuotationResource tcGlobals (reflectedDefinitionResourceName, referencedTypeDefs) + let reflectedDefinitionAttrs = + match QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat tcGlobals with + | QuotationTranslator.QuotationSerializationFormat.FSharp_40_Plus -> + [ mkCompilationMappingAttrForQuotationResource tcGlobals (reflectedDefinitionResourceName, referencedTypeDefs) ] + | QuotationTranslator.QuotationSerializationFormat.FSharp_20_Plus -> + [ ] let reflectedDefinitionResource = { Name=reflectedDefinitionResourceName; Location = ILResourceLocation.Local (fun () -> reflectedDefinitionBytes); Access= ILResourceAccess.Public; CustomAttrs = emptyILCustomAttrs } - reflectedDefinitionAttr, reflectedDefinitionResource) + reflectedDefinitionAttrs, reflectedDefinitionResource) |> List.unzip + |> (fun (attrs, resource) -> List.concat attrs, resource) let manifestAttrs = mkILCustomAttrs @@ -1180,30 +1104,29 @@ module MainModuleBuilder = Access=pub; CustomAttrs=emptyILCustomAttrs } ] + let assemblyVersion = + match tcConfig.version with + | VersionNone -> assemVerFromAttrib + | _ -> Some(tcVersion) + + let findAttribute name = + AttributeHelpers.TryFindStringAttribute tcGlobals name topAttrs.assemblyAttrs + + //NOTE: the culture string can be turned into a number using this: - // sprintf "%04x" (System.Globalization.CultureInfo.GetCultureInfo("en").KeyboardLayoutId ) - let assemblyVersionResources = - let assemblyVersion = - match tcConfig.version with - | VersionNone ->assemVerFromAttrib - | _ -> Some(tcVersion) + // sprintf "%04x" (CultureInfo.GetCultureInfo("en").KeyboardLayoutId ) + let assemblyVersionResources findAttr assemblyVersion = match assemblyVersion with | None -> [] | Some(assemblyVersion) -> let FindAttribute key attrib = - match AttributeHelpers.TryFindStringAttribute tcGlobals attrib topAttrs.assemblyAttrs with + match findAttr attrib with | Some text -> [(key,text)] | _ -> [] - let fileVersion = - match AttributeHelpers.TryFindVersionAttribute tcGlobals "System.Reflection.AssemblyFileVersionAttribute" "AssemblyFileVersionAttribute" topAttrs.assemblyAttrs with - | Some v -> v - | None -> assemblyVersion + let fileVersionInfo = fileVersion warning findAttr assemblyVersion - let productVersion = - match AttributeHelpers.TryFindVersionAttribute tcGlobals "System.Reflection.AssemblyInformationalVersionAttribute" "AssemblyInformationalVersionAttribute" topAttrs.assemblyAttrs with - | Some v -> v - | None -> assemblyVersion + let productVersionString = productVersion warning findAttr fileVersionInfo let stringFileInfo = // 000004b0: @@ -1211,8 +1134,8 @@ module MainModuleBuilder = // Each Microsoft Standard Language identifier contains two parts: the low-order 10 bits specify the major language, and the high-order 6 bits specify the sublanguage. For a table of valid identifiers see Language Identifiers. // // see e.g. http://msdn.microsoft.com/en-us/library/aa912040.aspx 0000 is neutral and 04b0(hex)=1252(dec) is the code page. [ ("000004b0", [ yield ("Assembly Version", (let v1,v2,v3,v4 = assemblyVersion in sprintf "%d.%d.%d.%d" v1 v2 v3 v4)) - yield ("FileVersion", (let v1,v2,v3,v4 = fileVersion in sprintf "%d.%d.%d.%d" v1 v2 v3 v4)) - yield ("ProductVersion", (let v1,v2,v3,v4 = productVersion in sprintf "%d.%d.%d.%d" v1 v2 v3 v4)) + yield ("FileVersion", (let v1,v2,v3,v4 = fileVersionInfo in sprintf "%d.%d.%d.%d" v1 v2 v3 v4)) + yield ("ProductVersion", productVersionString) yield! FindAttribute "Comments" "System.Reflection.AssemblyDescriptionAttribute" yield! FindAttribute "FileDescription" "System.Reflection.AssemblyTitleAttribute" yield! FindAttribute "ProductName" "System.Reflection.AssemblyProductAttribute" @@ -1248,7 +1171,7 @@ module MainModuleBuilder = let dwFileType = 0x01 // REVIEW: HARDWIRED let dwFileSubtype = 0x00 // REVIEW: HARDWIRED let lwFileDate = 0x00L // REVIEW: HARDWIRED - (fileVersion,productVersion,dwFileFlagsMask,dwFileFlags,dwFileOS,dwFileType,dwFileSubtype,lwFileDate) + (fileVersionInfo,productVersionString |> productVersionToILVersionInfo,dwFileFlagsMask,dwFileFlags,dwFileOS,dwFileType,dwFileSubtype,lwFileDate) let vsVersionInfoResource = VersionResourceFormat.VS_VERSION_INFO_RESOURCE(fixedFileInfo,stringFileInfo,varFileInfo) @@ -1285,7 +1208,7 @@ module MainModuleBuilder = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() + @"default.win32manifest" let nativeResources = - [ for av in assemblyVersionResources do + [ for av in assemblyVersionResources findAttribute assemblyVersion do yield Lazy.CreateFromValue av if not(tcConfig.win32res = "") then yield Lazy.CreateFromValue (FileSystem.ReadAllBytesShim tcConfig.win32res) @@ -1421,16 +1344,12 @@ module StaticLinker = ilxMainModule, rewriteExternalRefsToLocalRefs - #if DEBUG - let PrintModule outfile x = - use os = File.CreateText(outfile) :> TextWriter - ILAsciiWriter.output_module os x - #endif - - + // LEGACY: This is only used when compiling an FSharp.Core for .NET 2.0 (FSharp.Core 2.3.0.0). We no longer + // build new FSharp.Core for that configuration. + // // Find all IL modules that are to be statically linked given the static linking roots. - let FindAndAddMscorlibTypesForStaticLinkingIntoFSharpCoreLibrary (tcConfig:TcConfig, ilGlobals:ILGlobals, ilxMainModule) = - let mscorlib40 = tcConfig.compilingFslib20.Value // + @"\..\.NET Framework 4.0 Pre Beta\mscorlib.dll" + let LegacyFindAndAddMscorlibTypesForStaticLinkingIntoFSharpCoreLibraryForNet20 (tcConfig:TcConfig, ilGlobals:ILGlobals, ilxMainModule) = + let mscorlib40 = tcConfig.compilingFslib20.Value let ilBinaryReader = let ilGlobals = mkILGlobals (IL.mkMscorlibBasedTraits ILScopeRef.Local) (Some ilGlobals.primaryAssemblyName) tcConfig.noDebugData @@ -1463,14 +1382,14 @@ module StaticLinker = TypeDefs = mkILTypeDefs ([ for td in fakeModule.TypeDefs do - yield {td with + yield {td with Methods = - mkILMethods (List.map (fun (md:ILMethodDef) -> - {md with - CustomAttrs = - mkILCustomAttrs (td.CustomAttrs.AsList |> List.filter (fun ilattr -> - ilattr.Method.EnclosingType.TypeRef.FullName <> "System.Runtime.TargetedPatchingOptOutAttribute") )}) - (td.Methods.AsList))}])} + td.Methods.AsList + |> List.map (fun md -> + {md with CustomAttrs = + mkILCustomAttrs (td.CustomAttrs.AsList |> List.filter (fun ilattr -> + ilattr.Method.EnclosingType.TypeRef.FullName <> "System.Runtime.TargetedPatchingOptOutAttribute") )}) + |> mkILMethods } ])} //ILAsciiWriter.output_module stdout fakeModule fakeModule.TypeDefs.AsList @@ -1520,7 +1439,7 @@ module StaticLinker = | ResolvedCcu ccu -> Some ccu | UnresolvedCcu(_ccuName) -> None - let modul = dllInfo.RawMetadata + let modul = dllInfo.RawMetadata.TryGetRawILModule().Value let refs = if ilAssemRef.Name = GetFSharpCoreLibraryName() then @@ -1589,7 +1508,7 @@ module StaticLinker = | ResolvedCcu ccu -> Some ccu | UnresolvedCcu(_ccuName) -> None - let modul = dllInfo.RawMetadata + let modul = dllInfo.RawMetadata.TryGetRawILModule().Value yield (ccu, dllInfo.ILScopeRef, modul), (ilAssemRef.Name, provAssemStaticLinkInfo) | None -> () ] @@ -1609,16 +1528,16 @@ module StaticLinker = | Some provAssemStaticLinkInfo -> yield (importedBinary,provAssemStaticLinkInfo) ] #endif if tcConfig.compilingFslib && tcConfig.compilingFslib20.IsSome then - (fun (ilxMainModule,_) -> FindAndAddMscorlibTypesForStaticLinkingIntoFSharpCoreLibrary (tcConfig, ilGlobals, ilxMainModule)) + (fun ilxMainModule -> LegacyFindAndAddMscorlibTypesForStaticLinkingIntoFSharpCoreLibraryForNet20 (tcConfig, ilGlobals, ilxMainModule)) elif not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty #if EXTENSIONTYPING && providerGeneratedAssemblies.IsEmpty #endif then - (fun (ilxMainModule,_outfile) -> ilxMainModule) + (fun ilxMainModule -> ilxMainModule) else - (fun (ilxMainModule,outfile) -> + (fun ilxMainModule -> ReportTime tcConfig "Find assembly references"; let dependentILModules = FindDependentILModulesForStaticLinking (tcConfig, tcImports,ilxMainModule) @@ -1739,8 +1658,8 @@ module StaticLinker = let rec rw enc (tdefs: ILTypeDefs) = mkILTypeDefs [ for tdef in tdefs do - let ilOrigTyRef = mkILNestedTyRef (ilOrigScopeRef, enc, tdef.Name) - if not (ilOrigTyRefsForProviderGeneratedTypesToRelocate.ContainsKey ilOrigTyRef) then + let ilOrigTyRef = mkILNestedTyRef (ilOrigScopeRef, enc, tdef.Name) + if not (ilOrigTyRefsForProviderGeneratedTypesToRelocate.ContainsKey ilOrigTyRef) then if debugStaticLinking then printfn "Keep provided type %s in place because it wasn't relocated" ilOrigTyRef.QualifiedName yield { tdef with NestedTypes = rw (enc@[tdef.Name]) tdef.NestedTypes } ] rw [] ilModule.TypeDefs @@ -1768,13 +1687,6 @@ module StaticLinker = let rewriteAssemblyRefsToMatchLibraries = NormalizeAssemblyRefs tcImports Morphs.morphILTypeRefsInILModuleMemoized ilGlobals (Morphs.morphILScopeRefsInILTypeRef (validateTargetPlatform >> rewriteExternalRefsToLocalRefs >> rewriteAssemblyRefsToMatchLibraries)) ilxMainModule - #if DEBUG - // Print it out if requested - if tcConfig.writeGeneratedILFiles then (let _ = PrintModule (outpath outfile "ilx.main") ilxMainModule in ()); - #else - ignore outfile - #endif - ilxMainModule) //---------------------------------------------------------------------------- @@ -1783,66 +1695,49 @@ module StaticLinker = type SigningInfo = SigningInfo of (* delaysign:*) bool * (*signer:*) string option * (*container:*) string option -module FileWriter = - let EmitIL (tcConfig:TcConfig,ilGlobals,_errorLogger:ErrorLogger,outfile,pdbfile,ilxMainModule,signingInfo:SigningInfo,exiter:Exiter) = +let GetSigner(signingInfo) = let (SigningInfo(delaysign,signer,container)) = signingInfo + // REVIEW: favor the container over the key file - C# appears to do this + if isSome container then + Some(ILBinaryWriter.ILStrongNameSigner.OpenKeyContainer container.Value) + else + match signer with + | None -> None + | Some(s) -> + try + if delaysign then + Some (ILBinaryWriter.ILStrongNameSigner.OpenPublicKeyFile s) + else + Some (ILBinaryWriter.ILStrongNameSigner.OpenKeyPairFile s) + with e -> + // Note:: don't use errorR here since we really want to fail and not produce a binary + error(Error(FSComp.SR.fscKeyFileCouldNotBeOpened(s),rangeCmdArgs)) + +module FileWriter = + let EmitIL (tcConfig:TcConfig, ilGlobals, errorLogger:ErrorLogger, outfile, pdbfile, ilxMainModule, signingInfo:SigningInfo, exiter:Exiter) = try - #if DEBUG - if tcConfig.writeGeneratedILFiles then dprintn "Printing module..."; - if tcConfig.writeGeneratedILFiles then StaticLinker.PrintModule (outpath outfile "il.txt") ilxMainModule; - #endif if !progress then dprintn "Writing assembly..."; try ILBinaryWriter.WriteILBinary - outfile + (outfile, { ilg = ilGlobals - pdbfile=pdbfile; - emitTailcalls= tcConfig.emitTailcalls; - showTimes=tcConfig.showTimes; - - signer = - begin - // REVIEW: favor the container over the key file - C# appears to do this - if isSome container then - Some(ILBinaryWriter.ILStrongNameSigner.OpenKeyContainer container.Value) - else - match signer with - | None -> None - | Some(s) -> - try - if delaysign then - Some (ILBinaryWriter.ILStrongNameSigner.OpenPublicKeyFile s) - else - Some (ILBinaryWriter.ILStrongNameSigner.OpenKeyPairFile s) - with e -> - // Note:: don't use errorR here since we really want to fail and not produce a binary - error(Error(FSComp.SR.fscKeyFileCouldNotBeOpened(s),rangeCmdArgs)) - end; - fixupOverlappingSequencePoints = false; - dumpDebugInfo =tcConfig.dumpDebugInfo } - ilxMainModule - tcConfig.noDebugData + pdbfile=pdbfile + emitTailcalls= tcConfig.emitTailcalls + showTimes=tcConfig.showTimes + signer = GetSigner signingInfo + fixupOverlappingSequencePoints = false + dumpDebugInfo =tcConfig.dumpDebugInfo }, + ilxMainModule, + tcConfig.noDebugData) with Failure msg -> error(Error(FSComp.SR.fscProblemWritingBinary(outfile,msg), rangeCmdArgs)) with e -> errorRecoveryNoRange e -#if SQM_SUPPORT - SqmLoggerWithConfig tcConfig _errorLogger.ErrorNumbers _errorLogger.WarningNumbers -#endif + SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers exiter.Exit 1 - let WriteStatsFile (tcConfig:TcConfig,outfile) = - if tcConfig.stats then - try - use oc = new StreamWriter((outpath outfile "stats.txt"),append=false,encoding=Encoding.UTF8) :> TextWriter -#if STATISTICS - Ilread.report oc; -#endif - Ilxgen.ReportStatistics oc; - with _ -> () - -let ValidateKeySigningAttributes (tcConfig : TcConfig) tcGlobals topAttrs = +let ValidateKeySigningAttributes (tcConfig : TcConfig, tcGlobals, topAttrs) = let delaySignAttrib = AttributeHelpers.TryFindBoolAttribute tcGlobals "System.Reflection.AssemblyDelaySignAttribute" topAttrs.assemblyAttrs let signerAttrib = AttributeHelpers.TryFindStringAttribute tcGlobals "System.Reflection.AssemblyKeyFileAttribute" topAttrs.assemblyAttrs let containerAttrib = AttributeHelpers.TryFindStringAttribute tcGlobals "System.Reflection.AssemblyKeyNameAttribute" topAttrs.assemblyAttrs @@ -1886,13 +1781,27 @@ let ValidateKeySigningAttributes (tcConfig : TcConfig) tcGlobals topAttrs = | None -> tcConfig.container SigningInfo (delaysign,signer,container) - -/// Checks if specified file name is absolute path. If yes - returns the name as is, otherwise makes full path using tcConfig.implicitIncludeDir as base. -let expandFileNameIfNeeded (tcConfig : TcConfig) name = - if System.IO.Path.IsPathRooted name then name - else - System.IO.Path.Combine(tcConfig.implicitIncludeDir, name) - + +// If the --nocopyfsharpcore switch is not specified, this will: +// 1) Look into the referenced assemblies, if FSharp.Core.dll is specified, it will copy it to output directory. +// 2) If not, but FSharp.Core.dll exists beside the compiler binaries, it will copy it to output directory. +// 3) If not, it will produce an error. +let copyFSharpCore(outFile: string, referencedDlls: AssemblyReference list) = + let outDir = Path.GetDirectoryName(outFile) + let fsharpCoreAssemblyName = GetFSharpCoreLibraryName() + ".dll" + let fsharpCoreDestinationPath = Path.Combine(outDir, fsharpCoreAssemblyName) + + if not (File.Exists(fsharpCoreDestinationPath)) then + match referencedDlls |> Seq.tryFind (fun dll -> String.Equals(Path.GetFileName(dll.Text), fsharpCoreAssemblyName, StringComparison.CurrentCultureIgnoreCase)) with + | Some referencedFsharpCoreDll -> File.Copy(referencedFsharpCoreDll.Text, fsharpCoreDestinationPath) + | None -> + let compilerLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + let compilerFsharpCoreDllPath = Path.Combine(compilerLocation, fsharpCoreAssemblyName) + if File.Exists(compilerFsharpCoreDllPath) then + File.Copy(compilerFsharpCoreDllPath, fsharpCoreDestinationPath) + else + errorR(Error(FSComp.SR.fsharpCoreNotFoundToBeCopied(), rangeCmdArgs)) + //---------------------------------------------------------------------------- // main - split up to make sure that we can GC the // dead data at the end of each phase. We explicitly communicate arguments @@ -1900,54 +1809,53 @@ let expandFileNameIfNeeded (tcConfig : TcConfig) name = //----------------------------------------------------------------------------- [] -type Args<'a> = Args of 'a +type Args<'T> = Args of 'T -let main0(argv,bannerAlreadyPrinted,exiter:Exiter, errorLoggerProvider : ErrorLoggerProvider, disposables : DelayedDisposables) = +let main0(argv,bannerAlreadyPrinted,exiter:Exiter, errorLoggerProvider : ErrorLoggerProvider, disposables : DisposablesTracker) = // See Bug 735819 let lcidFromCodePage = - if (System.Console.OutputEncoding.CodePage <> 65001) && - (System.Console.OutputEncoding.CodePage <> System.Threading.Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage) && - (System.Console.OutputEncoding.CodePage <> System.Threading.Thread.CurrentThread.CurrentUICulture.TextInfo.ANSICodePage) then - System.Threading.Thread.CurrentThread.CurrentUICulture <- new System.Globalization.CultureInfo("en-US") + if (Console.OutputEncoding.CodePage <> 65001) && + (Console.OutputEncoding.CodePage <> Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage) && + (Console.OutputEncoding.CodePage <> Thread.CurrentThread.CurrentUICulture.TextInfo.ANSICodePage) then + Thread.CurrentThread.CurrentUICulture <- new CultureInfo("en-US") Some(1033) else None let tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger = - getTcImportsFromCommandLine(None, argv, defaultFSharpBinariesDir, Directory.GetCurrentDirectory(), lcidFromCodePage, (fun tcConfigB -> - match tcConfigB.lcid with - | Some(n) -> System.Threading.Thread.CurrentThread.CurrentUICulture <- new System.Globalization.CultureInfo(n) - | None -> () + GetTcImportsFromCommandLine + (argv, defaultFSharpBinariesDir, Directory.GetCurrentDirectory(), + lcidFromCodePage, + // setProcessThreadLocals + (fun tcConfigB -> + match tcConfigB.lcid with + | Some(n) -> Thread.CurrentThread.CurrentUICulture <- new CultureInfo(n) + | None -> () - if tcConfigB.utf8output then - let prev = System.Console.OutputEncoding - System.Console.OutputEncoding <- Encoding.UTF8 - System.AppDomain.CurrentDomain.ProcessExit.Add(fun _ -> System.Console.OutputEncoding <- prev) - ), (fun tcConfigB -> - // display the banner text, if necessary - if not bannerAlreadyPrinted then - Microsoft.FSharp.Compiler.Fscopts.DisplayBannerText tcConfigB - ), - false, // optimizeForMemory - fsc.exe can use as much memory as it likes to try to compile as fast as possible - exiter, - errorLoggerProvider, - disposables - - ) - - tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger, exiter - -// TcGlobals * TcImports * TcImports * CcuThunk * TypedAssembly * TopAttribs * TcConfig * string * string * string* ErrorLogger* Exiter -let main1(tcGlobals,tcImports : TcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig : TcConfig, outfile,pdbfile,assemblyName,errorLogger, exiter : Exiter) = - + if tcConfigB.utf8output then + let prev = Console.OutputEncoding + Console.OutputEncoding <- Encoding.UTF8 + System.AppDomain.CurrentDomain.ProcessExit.Add(fun _ -> Console.OutputEncoding <- prev)), + (fun tcConfigB -> + // display the banner text, if necessary + if not bannerAlreadyPrinted then + DisplayBannerText tcConfigB), + false, // optimizeForMemory - fsc.exe can use as much memory as it likes to try to compile as fast as possible + exiter, + errorLoggerProvider, + disposables) + + tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger,exiter + +let main1(tcGlobals, tcImports: TcImports, frameworkTcImports, generatedCcu, typedAssembly, topAttrs, tcConfig: TcConfig, outfile, pdbfile, assemblyName, errorLogger, exiter: Exiter) = if tcConfig.typeCheckOnly then exiter.Exit 0 use unwindPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.CodeGen) - let signingInfo = ValidateKeySigningAttributes tcConfig tcGlobals topAttrs + let signingInfo = ValidateKeySigningAttributes (tcConfig, tcGlobals, topAttrs) - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger,tcConfig,exiter) // Build an updated errorLogger that filters according to the scopedPragmas. Then install // it as the updated global error logger and never remove it @@ -1979,50 +1887,47 @@ let main1(tcGlobals,tcImports : TcImports,frameworkTcImports,generatedCcu,typedA XmlDocWriter.computeXmlDocSigs (tcGlobals,generatedCcu) ReportTime tcConfig ("Write XML docs"); tcConfig.xmlDocOutputFile |> Option.iter ( fun xmlFile -> - let xmlFile = expandFileNameIfNeeded tcConfig xmlFile + let xmlFile = tcConfig.MakePathAbsolute xmlFile XmlDocWriter.writeXmlDoc (assemblyName,generatedCcu,xmlFile) ) ReportTime tcConfig ("Write HTML docs"); end; - // Pass on only the minimimum information required for the next phase to ensure GC kicks in. + // Pass on only the minimum information required for the next phase to ensure GC kicks in. // In principle the JIT should be able to do good liveness analysis to clean things up, but the // data structures involved here are so large we can't take the risk. - Args(tcConfig,tcImports,frameworkTcImports,tcGlobals,errorLogger,generatedCcu,outfile,typedAssembly,topAttrs,pdbfile,assemblyName,assemVerFromAttrib,signingInfo,exiter) + Args(tcConfig, tcImports, frameworkTcImports, tcGlobals, errorLogger, generatedCcu, outfile, typedAssembly, topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter) -let main2(Args(tcConfig,tcImports,frameworkTcImports : TcImports,tcGlobals,errorLogger,generatedCcu:CcuThunk,outfile,typedAssembly,topAttrs,pdbfile,assemblyName,assemVerFromAttrib,signingInfo,exiter:Exiter)) = +let main2(Args(tcConfig, tcImports, frameworkTcImports: TcImports, tcGlobals, errorLogger: ErrorLogger, generatedCcu: CcuThunk, outfile, typedAssembly, topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter: Exiter)) = ReportTime tcConfig ("Encode Interface Data"); -#if DEBUG - if !verboseStamps then - dprintf "---------------------- START MAKE EXPORT REMAPPING ------------\n"; -#endif let exportRemapping = MakeExportRemapping generatedCcu generatedCcu.Contents -#if DEBUG - if !verboseStamps then - dprintf "---------------------- END MAKE EXPORT REMAPPING ------------\n"; -#endif let sigDataAttributes,sigDataResources = - EncodeInterfaceData(tcConfig,tcGlobals,exportRemapping,errorLogger,generatedCcu,outfile,exiter) + try + EncodeInterfaceData(tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, false) + with e -> + errorRecoveryNoRange e + SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers + exiter.Exit 1 if !progress && tcConfig.optSettings.jitOptUser = Some false then dprintf "Note, optimizations are off.\n"; (* optimize *) use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Optimize) - let optEnv0 = InitialOptimizationEnv tcImports tcGlobals + let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) let importMap = tcImports.GetImportMap() let metadataVersion = match tcConfig.metadataVersion with | Some(v) -> v - | _ -> match (frameworkTcImports.DllTable.TryFind tcConfig.primaryAssembly.Name) with | Some(ib) -> ib.RawMetadata.MetadataVersion | _ -> "" + | _ -> match (frameworkTcImports.DllTable.TryFind tcConfig.primaryAssembly.Name) with | Some(ib) -> ib.RawMetadata.TryGetRawILModule().Value.MetadataVersion | _ -> "" let optimizedImpls,optimizationData,_ = ApplyAllOptimizations (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, false, optEnv0, generatedCcu, typedAssembly) - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger,tcConfig,exiter) ReportTime tcConfig ("Encoding OptData"); let optDataResources = EncodeOptimizationData(tcGlobals,tcConfig,outfile,exportRemapping,(generatedCcu,optimizationData)) @@ -2045,12 +1950,12 @@ let main2(Args(tcConfig,tcImports,frameworkTcImports : TcImports,tcGlobals,error else sigDataResources, optDataResources - // Pass on only the minimimum information required for the next phase to ensure GC kicks in. + // Pass on only the minimum information required for the next phase to ensure GC kicks in. // In principle the JIT should be able to do good liveness analysis to clean things up, but the // data structures involved here are so large we can't take the risk. Args(tcConfig,tcImports,tcGlobals,errorLogger,generatedCcu,outfile,optimizedImpls,topAttrs,pdbfile,assemblyName, (sigDataAttributes, sigDataResources), optDataResources,assemVerFromAttrib,signingInfo,metadataVersion,exiter) -let main2b(Args(tcConfig:TcConfig,tcImports,tcGlobals,errorLogger,generatedCcu:CcuThunk,outfile,optimizedImpls,topAttrs,pdbfile,assemblyName,idata,optDataResources,assemVerFromAttrib,signingInfo,metadataVersion,exiter:Exiter)) = +let main2b(Args(tcConfig: TcConfig, tcImports, tcGlobals, errorLogger, generatedCcu: CcuThunk, outfile, optimizedImpls, topAttrs, pdbfile, assemblyName, idata, optDataResources, assemVerFromAttrib, signingInfo, metadataVersion, exiter: Exiter)) = // Compute a static linker. let ilGlobals = tcGlobals.ilg @@ -2076,71 +1981,61 @@ let main2b(Args(tcConfig:TcConfig,tcImports,tcGlobals,errorLogger,generatedCcu:C let ilxMainModule = MainModuleBuilder.CreateMainModule (tcConfig,tcGlobals,pdbfile,assemblyName,outfile,topAttrs,idata,optDataResources,codegenResults,assemVerFromAttrib,metadataVersion,secDecls) -#if DEBUG - // Print code before bailing out from the compiler due to errors - // in the backend of the compiler. The partially-generated - // ILX code often contains useful information. - if tcConfig.writeGeneratedILFiles then StaticLinker.PrintModule (outpath outfile "ilx.txt") ilxMainModule; -#endif - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger,tcConfig,exiter) Args (tcConfig,errorLogger,staticLinker,ilGlobals,outfile,pdbfile,ilxMainModule,signingInfo,exiter) -let main2c(Args(tcConfig,errorLogger,staticLinker,ilGlobals,outfile,pdbfile,ilxMainModule,signingInfo,exiter:Exiter)) = +let main2c(Args(tcConfig, errorLogger, staticLinker, ilGlobals, outfile, pdbfile, ilxMainModule, signingInfo, exiter: Exiter)) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.IlGen) ReportTime tcConfig "ILX -> IL (Unions)"; - let ilxMainModule = EraseIlxUnions.ConvModule ilGlobals ilxMainModule + let ilxMainModule = EraseUnions.ConvModule ilGlobals ilxMainModule ReportTime tcConfig "ILX -> IL (Funcs)"; - let ilxMainModule = EraseIlxFuncs.ConvModule ilGlobals ilxMainModule + let ilxMainModule = EraseClosures.ConvModule ilGlobals ilxMainModule - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger,tcConfig,exiter) Args(tcConfig,errorLogger,staticLinker,ilGlobals,ilxMainModule,outfile,pdbfile,signingInfo,exiter) -let main3(Args(tcConfig,errorLogger:ErrorLogger,staticLinker,ilGlobals,ilxMainModule,outfile,pdbfile,signingInfo,exiter:Exiter)) = +let main3(Args(tcConfig, errorLogger: ErrorLogger, staticLinker, ilGlobals, ilxMainModule, outfile, pdbfile, signingInfo, exiter:Exiter)) = let ilxMainModule = - try staticLinker (ilxMainModule,outfile) + try staticLinker ilxMainModule with e -> errorRecoveryNoRange e -#if SQM_SUPPORT SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers -#endif exiter.Exit 1 - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger,tcConfig,exiter) Args (tcConfig,errorLogger,ilGlobals,ilxMainModule,outfile,pdbfile,signingInfo,exiter) -let main4(Args(tcConfig,errorLogger:ErrorLogger,ilGlobals,ilxMainModule,outfile,pdbfile,signingInfo,exiter)) = +let main4 (Args (tcConfig, errorLogger: ErrorLogger, ilGlobals, ilxMainModule, outfile, pdbfile, signingInfo, exiter)) = ReportTime tcConfig "Write .NET Binary" use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Output) - let outfile = expandFileNameIfNeeded tcConfig outfile + let outfile = tcConfig.MakePathAbsolute outfile - let pdbfile = pdbfile |> Option.map ((expandFileNameIfNeeded tcConfig) >> Path.GetFullPath) - FileWriter.EmitIL (tcConfig,ilGlobals,errorLogger,outfile,pdbfile,ilxMainModule,signingInfo,exiter) + let pdbfile = pdbfile |> Option.map (tcConfig.MakePathAbsolute >> Path.GetFullPath) + FileWriter.EmitIL (tcConfig, ilGlobals, errorLogger, outfile, pdbfile, ilxMainModule, signingInfo, exiter) - ReportTime tcConfig "Write Stats File" - FileWriter.WriteStatsFile (tcConfig,outfile) + AbortOnError(errorLogger, tcConfig, exiter) - abortOnError(errorLogger,tcConfig,exiter) if tcConfig.showLoadedAssemblies then for a in System.AppDomain.CurrentDomain.GetAssemblies() do dprintfn "%s" a.FullName -#if SQM_SUPPORT + if tcConfig.copyFSharpCore then + copyFSharpCore(outfile, tcConfig.referencedDLLs) + SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers -#endif ReportTime tcConfig "Exiting" let typecheckAndCompile(argv,bannerAlreadyPrinted,exiter:Exiter, errorLoggerProvider) = - // Don's note: "GC of intermediate data is really, really important here" - use d = new DelayedDisposables() - main0(argv,bannerAlreadyPrinted,exiter, errorLoggerProvider, d) + use disposables = new DisposablesTracker() + main0(argv,bannerAlreadyPrinted,exiter, errorLoggerProvider, disposables) |> main1 |> main2 |> main2b @@ -2148,17 +2043,13 @@ let typecheckAndCompile(argv,bannerAlreadyPrinted,exiter:Exiter, errorLoggerProv |> main3 |> main4 -let mainCompile (argv,bannerAlreadyPrinted,exiter:Exiter) = - // Enabling batch latency mode currently overrides app config . - // If batch mode is ever removed or changed, revisit use of . - System.Runtime.GCSettings.LatencyMode <- System.Runtime.GCLatencyMode.Batch +let mainCompile (argv, bannerAlreadyPrinted, exiter:Exiter) = typecheckAndCompile(argv, bannerAlreadyPrinted, exiter, DefaultLoggerProvider()) +[] type CompilationOutput = - { - Errors : seq - Warnings : seq - } + { Errors : ErrorOrWarning[] + Warnings : ErrorOrWarning[] } type InProcCompiler() = member this.Compile(argv) = @@ -2166,23 +2057,21 @@ type InProcCompiler() = let errors = ResizeArray() let warnings = ResizeArray() - let rec loggerProvider = { - new ErrorLoggerProvider() with + let loggerProvider = + { new ErrorLoggerProvider() with member log.CreateErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter) = - upcast { - new ErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter, "InProcCompilerErrorLoggerThatQuitsAfterMaxErrors") with + { new ErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter, "InProcCompilerErrorLoggerThatQuitsAfterMaxErrors") with member this.HandleTooManyErrors(text) = warnings.Add(ErrorOrWarning.Short(false, text)) member this.HandleIssue(tcConfigBuilder, err, isWarning) = let errs = CollectErrorOrWarning(tcConfigBuilder.implicitIncludeDir, tcConfigBuilder.showFullPaths, tcConfigBuilder.flatErrors, tcConfigBuilder.errorStyle, isWarning, err) let container = if isWarning then warnings else errors - container.AddRange(errs) - } - } - let exitCode = ref 0 - let exiter = { - new Exiter with - member this.Exit n = exitCode := n; raise StopProcessing + container.AddRange(errs) } + :> ErrorLogger } + let exitCode = ref 0 + let exiter = + { new Exiter with + member this.Exit n = exitCode := n; raise StopProcessing } try typecheckAndCompile(argv, false, exiter, loggerProvider) with @@ -2191,267 +2080,8 @@ type InProcCompiler() = exitCode := 1 () - let output = { Warnings = warnings; Errors = errors} + let output : CompilationOutput = { Warnings = warnings.ToArray(); Errors = errors.ToArray()} !exitCode = 0, output -/// Collect the output from the stdout and stderr streams, character by character, -/// recording the console color used along the way. -type private OutputCollector() = - let output = ResizeArray() - let outWriter isOut = - { new TextWriter() with - member x.Write(c:char) = lock output (fun () -> output.Add (isOut, (try Some System.Console.ForegroundColor with _ -> None) ,c)) - member x.Encoding = Encoding.UTF8 } - do System.Console.SetOut (outWriter true) - do System.Console.SetError (outWriter false) - member x.GetTextAndClear() = lock output (fun () -> let res = output.ToArray() in output.Clear(); res) - -/// Implement the optional resident compilation service -module FSharpResidentCompiler = - - open System - open System.Diagnostics - open System.Runtime.Remoting.Channels - open System.Runtime.Remoting - open System.Runtime.Remoting.Lifetime - - /// The compilation server, which runs in the server process. Accessed by clients using .NET remoting. - type FSharpCompilationServer(exiter:Exiter) = - inherit MarshalByRefObject() - - static let onWindows = - match System.Environment.OSVersion.Platform with - | PlatformID.Win32NT | PlatformID.Win32S | PlatformID.Win32Windows | PlatformID.WinCE -> true - | _ -> false - - // The channel/socket name is qualified by the user name (and domain on windows) - static let domainName = if onWindows then Environment.GetEnvironmentVariable "USERDOMAIN" else "" - static let userName = Environment.GetEnvironmentVariable (if onWindows then "USERNAME" else "USER") - // Use different base channel names on mono and CLR as a CLR remoting process can't talk - // to a mono server - static let baseChannelName = if runningOnMono then "FSCChannelMono" else "FSCChannel" - static let channelName = baseChannelName + "_" + domainName + "_" + userName - static let serverName = if runningOnMono then "FSCServerMono" else "FSCSever" - static let mutable serverExists = true - - let outputCollector = new OutputCollector() - - // This background agent ensures all compilation requests sent to the server are serialized - let agent = MailboxProcessor<_>.Start(fun inbox -> - async { - while true do - let! (pwd,argv, reply: AsyncReplyChannel<_>) = inbox.Receive() - if !progress then printfn "server agent: got compilation request, argv = %A" argv - let exitCode = - try - Environment.CurrentDirectory <- pwd - mainCompile (argv, true, exiter); - if !progress then printfn "server: finished compilation request, argv = %A" argv - 0 - with e -> - if !progress then printfn "server: finished compilation request with errors, argv = %A" argv - errorRecoveryNoRange e - 1 - let output = outputCollector.GetTextAndClear() - reply.Reply(output, exitCode) - GC.Collect(3) - // Exit the server if there are no outstanding requests and the - // current memory usage after collection is over 200MB - if inbox.CurrentQueueLength = 0 && GC.GetTotalMemory(true) > 200L * 1024L * 1024L then - Environment.Exit 0 - }) - - member x.Run() = - while serverExists do - if !progress then printfn "server: startup thread sleeping..." - System.Threading.Thread.Sleep 1000 - - abstract Ping : unit -> string - abstract Compile : string * string[] -> (bool * System.ConsoleColor option * char) [] * int - default x.Ping() = "ping" - default x.Compile (pwd,argv) = - if !progress then printfn "server: got compilation request, (pwd, argv) = %A" (pwd, argv) - agent.PostAndReply(fun reply -> (pwd,argv,reply)) - - override x.Finalize() = - serverExists <- false - - // This is called on the server object by .NET remoting to initialize the lifetime characteristics - // of the server object. - override x.InitializeLifetimeService() = - let lease = (base.InitializeLifetimeService() :?> ILease) - if (lease.CurrentState = LeaseState.Initial) then - lease.InitialLeaseTime <- TimeSpan.FromDays(1.0); - lease.SponsorshipTimeout <- TimeSpan.FromMinutes(2.0); - lease.RenewOnCallTime <- TimeSpan.FromDays(1.0); - box lease - - static member RunServer(exiter:Exiter) = - progress := condition "FSHARP_SERVER_PROGRESS" - if !progress then printfn "server: initializing server object" - let server = new FSharpCompilationServer(exiter) - let chan = new Ipc.IpcChannel(channelName) - ChannelServices.RegisterChannel(chan,false); - RemotingServices.Marshal(server,serverName) |> ignore - - // On Unix, the file permissions of the implicit socket need to be set correctly to make this - // private to the user. - if runningOnMono then - try - let monoPosix = System.Reflection.Assembly.Load("Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756") - let monoUnixFileInfo = monoPosix.GetType("Mono.Unix.UnixFileSystemInfo") - let socketName = Path.Combine(FileSystem.GetTempPathShim(), channelName) - let fileEntry = monoUnixFileInfo.InvokeMember("GetFileSystemEntry", (BindingFlags.InvokeMethod ||| BindingFlags.Static ||| BindingFlags.Public), null, null, [| box socketName |],System.Globalization.CultureInfo.InvariantCulture) - // Add 0x00000180 (UserReadWriteExecute) to the access permissions on Unix - monoUnixFileInfo.InvokeMember("set_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| box 0x00000180 |],System.Globalization.CultureInfo.InvariantCulture) |> ignore -#if DEBUG - printfn "server: good, set permissions on socket name '%s'" socketName - let fileEntry = monoUnixFileInfo.InvokeMember("GetFileSystemEntry", (BindingFlags.InvokeMethod ||| BindingFlags.Static ||| BindingFlags.Public), null, null, [| box socketName |],System.Globalization.CultureInfo.InvariantCulture) - let currPermissions = monoUnixFileInfo.InvokeMember("get_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| |],System.Globalization.CultureInfo.InvariantCulture) |> unbox - if !progress then printfn "server: currPermissions = '%o' (octal)" currPermissions -#endif - with e -> -#if DEBUG - printfn "server: failed to set permissions on socket, perhaps on windows? Is is not needed there." -#endif - () - // Fail silently - server.Run() - - static member private ConnectToServer() = - Activator.GetObject(typeof,"ipc://" + channelName + "/" + serverName) - :?> FSharpCompilationServer - - static member TryCompileUsingServer(argv) = - let pwd = System.Environment.CurrentDirectory - let clientOpt = - // Detect the absence of the channel via the exception. Probably not the best way. - // Different exceptions get thrown here on Mono and Windows. - let client = FSharpCompilationServer.ConnectToServer() - try - if !progress then printfn "client: attempting to connect to existing service (1)" - client.Ping() |> ignore - if !progress then printfn "client: connected to existing service" - Some client - with _ -> - let procInfo = - if runningOnMono then - let shellName, useShellExecute = - match System.Environment.GetEnvironmentVariable("FSC_MONO") with - | null -> - if onWindows then - Path.Combine(Path.GetDirectoryName (typeof.Assembly.Location), @"..\..\..\bin\mono.exe"), false - else - "mono", true - | path -> path, false - - // e.g. "C:\Program Files\Mono-2.6.1\lib\mono\2.0\mscorlib.dll" --> "C:\Program Files\Mono-2.6.1\bin\mono.exe" - ProcessStartInfo(FileName = shellName, - Arguments = typeof.Assembly.Location + " /server", - CreateNoWindow = true, - UseShellExecute = useShellExecute) - else - ProcessStartInfo(FileName=typeof.Assembly.Location, - Arguments = "/server", - CreateNoWindow = true, - UseShellExecute = false) - - let cmdProcess = new Process(StartInfo=procInfo) - - //let exitE = cmdProcess.Exited |> Observable.map (fun x -> x) - - cmdProcess.Start() |> ignore - //exitE.Add(fun _ -> if !progress then eprintfn "client: the server has exited") - cmdProcess.EnableRaisingEvents <- true; - - // Create the client proxy and attempt to connect to the server - let rec tryAcccesServer nRemaining = - if nRemaining = 0 then - // Failed to connect to server, give up - None - else - try - if !progress then printfn "client: attempting to connect to existing service (2)" - client.Ping() |> ignore - if !progress then printfn "client: connected to existing service" - Some client - // Detect the absence of the channel via the exception. Probably not the best way. - // Different exceptions get thrown here on Mono and Windows. - with _ (* System.Runtime.Remoting.RemotingException *) -> - // Sleep a bit - System.Threading.Thread.Sleep 50 - tryAcccesServer (nRemaining - 1) - - tryAcccesServer 20 - - match clientOpt with - | Some client -> - if !progress then printfn "client: calling client.Compile(%A)" argv - // Install the global error logger and never remove it. This logger does have all command-line flags considered. - try - let (output, exitCode) = - try client.Compile (pwd, argv) - with e -> - printfn "server error: %s" (e.ToString()) - raise (Error (FSComp.SR.fscRemotingError(), rangeStartup)) - - if !progress then printfn "client: returned from client.Compile(%A), res = %d" argv exitCode - use holder = - try let originalConsoleColor = Console.ForegroundColor - { new System.IDisposable with member x.Dispose() = Console.ForegroundColor <- originalConsoleColor } - with _ -> null - let mutable prevConsoleColor = try Console.ForegroundColor with _ -> ConsoleColor.Black - for (isOut, consoleColorOpt, c:char) in output do - try match consoleColorOpt with - | Some consoleColor -> - if prevConsoleColor <> consoleColor then - Console.ForegroundColor <- consoleColor; - | None -> () - with _ -> () - c |> (if isOut then System.Console.Out.Write else System.Console.Error.Write) - Some exitCode - with err -> - let sb = System.Text.StringBuilder() - OutputErrorOrWarning (pwd,true,false,ErrorStyle.DefaultErrors,true) sb (PhasedError.Create(err,BuildPhase.Compile)) - eprintfn "%s" (sb.ToString()) - // We continue on and compile in-process - the server appears to have died half way through. - None - | None -> - None - -let main argv = - let inline hasArgument name args = - args |> Array.exists (fun x -> x = ("--" + name) || x = ("/" + name)) - let inline stripArgument name args = - args |> Array.filter (fun x -> x <> ("--" + name) && x <> ("/" + name)) - - // Check for --pause as the very first step so that a compiler can be attached here. - if hasArgument "pause" argv then - System.Console.WriteLine("Press any key to continue...") - System.Console.ReadKey() |> ignore - - if runningOnMono && hasArgument "resident" argv then - let argv = stripArgument "resident" argv - - if not (hasArgument "nologo" argv) then - printfn "%s" (FSComp.SR.buildProductName(FSharpEnvironment.FSharpTeamVersionNumber)) - printfn "%s" (FSComp.SR.optsCopyright()) - - let exitCodeOpt = FSharpResidentCompiler.FSharpCompilationServer.TryCompileUsingServer argv - match exitCodeOpt with - | Some exitCode -> exitCode - | None -> - mainCompile (argv, true, QuitProcessExiter) - 0 - - elif runningOnMono && hasArgument "server" argv then - // Install the right exiter so we can catch "StopProcessing" without exiting the server - let exiter = { new Exiter with member x.Exit n = raise StopProcessing } - FSharpResidentCompiler.FSharpCompilationServer.RunServer(exiter) - 0 - - else - mainCompile (argv, false, QuitProcessExiter) - 0 -#endif +#endif // NO_COMPILER_BACKEND diff --git a/src/fsharp/fsc.fsi b/src/fsharp/fsc.fsi old mode 100644 new mode 100755 index 7529828a05c..fab41ac541f --- a/src/fsharp/fsc.fsi +++ b/src/fsharp/fsc.fsi @@ -1,39 +1,58 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.Driver +open Microsoft.FSharp.Compiler.Ast +open Microsoft.FSharp.Compiler.AbstractIL.IL +open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.ErrorLogger -open Microsoft.FSharp.Compiler.Build -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.CompileOps +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.TypeChecker -/// the F# project system calls this to pop up type provider security dialog if needed -val internal runFromCommandLineToImportingAssemblies : (string -> unit) * string[] * string * string * Exiter -> unit +[] +type ErrorLoggerProvider = + new : unit -> ErrorLoggerProvider + abstract CreateErrorLoggerThatQuitsAfterMaxErrors : tcConfigBuilder : TcConfigBuilder * exiter : Exiter -> ErrorLogger #if NO_COMPILER_BACKEND #else -[] -type ErrorLoggerThatAccumulatesErrors = - inherit ErrorLogger - new : TcConfigBuilder -> ErrorLoggerThatAccumulatesErrors - new : TcConfig -> ErrorLoggerThatAccumulatesErrors - member GetMessages : unit -> (bool * string) list - member ProcessMessage : PhasedError * bool -> (bool * string) option +type SigningInfo = SigningInfo of (* delaysign:*) bool * (*signer:*) string option * (*container:*) string option +val EncodeInterfaceData: tcConfig:TcConfig * tcGlobals:TcGlobals * exportRemapping:Tastops.Remap * generatedCcu: Tast.CcuThunk * outfile: string * isIncrementalBuild: bool -> ILAttribute list * ILResource list +val ValidateKeySigningAttributes : tcConfig:TcConfig * tcGlobals:TcGlobals * TypeChecker.TopAttribs -> SigningInfo +val GetSigner : SigningInfo -> ILBinaryWriter.ILStrongNameSigner option + +type ILResource with + /// Read the bytes from a resource local to an assembly + member internal Bytes : byte[] + +/// Proccess the given set of command line arguments +val internal ProcessCommandLineFlags : TcConfigBuilder * setProcessThreadLocals:(TcConfigBuilder -> unit) * lcidFromCodePage : int option * argv:string[] -> string list + +//--------------------------------------------------------------------------- +// The entry point used by fsc.exe -/// fsc.exe calls this val mainCompile : argv : string[] * bannerAlreadyPrinted : bool * exiter : Exiter -> unit +//--------------------------------------------------------------------------- +// The micro API into the compiler used by the visualfsharp test infrastructure + +[] type CompilationOutput = - { - Errors : seq - Warnings : seq - } + { Errors : ErrorOrWarning[] + Warnings : ErrorOrWarning[] } type InProcCompiler = new : unit -> InProcCompiler member Compile : args : string[] -> bool * CompilationOutput + +module internal MainModuleBuilder = + + val fileVersion: warn: (exn -> unit) -> findStringAttr: (string -> string option) -> assemblyVersion: AbstractIL.IL.ILVersionInfo -> AbstractIL.IL.ILVersionInfo + val productVersion: warn: (exn -> unit) -> findStringAttr: (string -> string option) -> fileVersion: AbstractIL.IL.ILVersionInfo -> string + val productVersionToILVersionInfo: string -> AbstractIL.IL.ILVersionInfo #endif diff --git a/src/fsharp/fscmain.fs b/src/fsharp/fscmain.fs index 4f047b9db27..10356d555b3 100644 --- a/src/fsharp/fscmain.fs +++ b/src/fsharp/fscmain.fs @@ -1,7 +1,12 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.CommandLineMain +open System +open System.Diagnostics +open System.IO +open System.Reflection +open System.Runtime.CompilerServices open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL.IL // runningOnMono open Microsoft.FSharp.Compiler.ErrorLogger @@ -9,16 +14,11 @@ open Microsoft.FSharp.Compiler.Driver open Internal.Utilities open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Range -open Microsoft.FSharp.Compiler.Build -open System.Runtime.CompilerServices +open Microsoft.FSharp.Compiler.CompileOps /// Implement the optional resident compilation service module FSharpResidentCompiler = - open System - open System.Diagnostics - open System.IO - open System.Reflection open System.Runtime.Remoting.Channels open System.Runtime.Remoting open System.Runtime.Remoting.Lifetime @@ -30,10 +30,10 @@ module FSharpResidentCompiler = let output = ResizeArray() let outWriter isOut = { new TextWriter() with - member x.Write(c:char) = lock output (fun () -> output.Add (isOut, (try Some System.Console.ForegroundColor with _ -> None) ,c)) + member x.Write(c:char) = lock output (fun () -> output.Add (isOut, (try Some Console.ForegroundColor with _ -> None) ,c)) member x.Encoding = Encoding.UTF8 } - do System.Console.SetOut (outWriter true) - do System.Console.SetError (outWriter false) + do Console.SetOut (outWriter true) + do Console.SetError (outWriter false) member x.GetTextAndClear() = lock output (fun () -> let res = output.ToArray() in output.Clear(); res) /// The compilation server, which runs in the server process. Accessed by clients using .NET remoting. @@ -229,7 +229,7 @@ module FSharpResidentCompiler = Console.ForegroundColor <- consoleColor; | None -> () with _ -> () - c |> (if isOut then System.Console.Out.Write else System.Console.Error.Write) + c |> (if isOut then Console.Out.Write else Console.Error.Write) Some exitCode with err -> let sb = System.Text.StringBuilder() @@ -244,8 +244,8 @@ module Driver = let main argv = // Check for --pause as the very first step so that a compiler can be attached here. if argv |> Array.exists (fun x -> x = "/pause" || x = "--pause") then - System.Console.WriteLine("Press any key to continue...") - System.Console.ReadKey() |> ignore + Console.WriteLine("Press any key to continue...") + Console.ReadKey() |> ignore if runningOnMono && argv |> Array.exists (fun x -> x = "/resident" || x = "--resident") then let argv = argv |> Array.filter (fun x -> x <> "/resident" && x <> "--resident") @@ -278,6 +278,7 @@ do () [] let main(argv) = + System.Runtime.GCSettings.LatencyMode <- System.Runtime.GCLatencyMode.Batch use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) if not runningOnMono then Lib.UnmanagedProcessExecutionOptions.EnableHeapTerminationOnCorruption() (* SDL recommendation *) diff --git a/src/fsharp/fscopts.fsi b/src/fsharp/fscopts.fsi deleted file mode 100644 index 676a129756f..00000000000 --- a/src/fsharp/fscopts.fsi +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -module internal Microsoft.FSharp.Compiler.Fscopts - -open Internal.Utilities -open Microsoft.FSharp.Compiler.AbstractIL -open Microsoft.FSharp.Compiler.AbstractIL.IL -open Microsoft.FSharp.Compiler.AbstractIL.Internal -open Microsoft.FSharp.Compiler -open Microsoft.FSharp.Compiler.Build -open Microsoft.FSharp.Compiler.ErrorLogger -open Microsoft.FSharp.Compiler.Ast -open Microsoft.FSharp.Compiler.Tast -#if NO_COMPILER_BACKEND -#else -open Microsoft.FSharp.Compiler.Ilxgen -#endif -open Microsoft.FSharp.Compiler.Import -open Microsoft.FSharp.Compiler.Opt -open Microsoft.FSharp.Compiler.Env - -val DisplayBannerText : TcConfigBuilder -> unit - -//val GetCompilerOptions : TcConfigBuilder -> CompilerOption list -> CompilerOption list -val GetCoreFscCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list -val GetCoreFsiCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list -val GetCoreServiceCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list - -// Expose the "setters" for some user switches, to enable setting of defaults -val SetOptimizeSwitch : TcConfigBuilder -> OptionSwitch -> unit -val SetTailcallSwitch : TcConfigBuilder -> OptionSwitch -> unit -val SetDebugSwitch : TcConfigBuilder -> string option -> OptionSwitch -> unit -val PrintOptionInfo : TcConfigBuilder -> unit - -val fsharpModuleName : CompilerTarget -> string -> string - -#if NO_COMPILER_BACKEND -#else -val InitialOptimizationEnv : TcImports -> TcGlobals -> IncrementalOptimizationEnv -val AddExternalCcuToOpimizationEnv : TcGlobals -> IncrementalOptimizationEnv -> ImportedAssembly -> IncrementalOptimizationEnv -val ApplyAllOptimizations : TcConfig * TcGlobals * ConstraintSolver.TcValF * string * ImportMap * bool * IncrementalOptimizationEnv * CcuThunk * TypedAssembly -> TypedAssembly * Opt.LazyModuleInfo * IncrementalOptimizationEnv - -val CreateIlxAssemblyGenerator : TcConfig * TcImports * TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxAssemblyGenerator - -val GenerateIlxCode : IlxGenBackend * bool * bool * TcConfig * TypeChecker.TopAttribs * TypedAssembly * string * bool * IlxAssemblyGenerator -> IlxGenResults -#endif - -// Used during static linking -val NormalizeAssemblyRefs : TcImports -> (AbstractIL.IL.ILScopeRef -> AbstractIL.IL.ILScopeRef) - -// Miscellany -val ignoreFailureOnMono1_1_16 : (unit -> unit) -> unit -val mutable enableConsoleColoring : bool -val DoWithErrorColor : bool -> (unit -> 'a) -> 'a -val ReportTime : TcConfig -> string -> unit -val abbrevFlagSet : TcConfigBuilder -> bool -> Set -val PostProcessCompilerArgs : string Set -> string [] -> string list diff --git a/src/fsharp/fsi/Fsi.fsproj b/src/fsharp/fsi/Fsi.fsproj index f274f221182..d0f1b1edc61 100644 --- a/src/fsharp/fsi/Fsi.fsproj +++ b/src/fsharp/fsi/Fsi.fsproj @@ -1,5 +1,5 @@ - + ..\.. diff --git a/src/fsharp/fsi/console.fs b/src/fsharp/fsi/console.fs index 378249c855d..6b14a269b4d 100644 --- a/src/fsharp/fsi/console.fs +++ b/src/fsharp/fsi/console.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Compiler.Interactive diff --git a/src/fsharp/fsi/fsi.exe.config b/src/fsharp/fsi/fsi.exe.config index e058547d32d..48447cdd2ee 100644 --- a/src/fsharp/fsi/fsi.exe.config +++ b/src/fsharp/fsi/fsi.exe.config @@ -9,8 +9,8 @@ publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> + oldVersion="2.0.0.0-4.4.1.0" + newVersion="4.4.1.9055"/> diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index bb6535305fa..ddcaa360308 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.Interactive.Shell @@ -34,10 +34,10 @@ open Microsoft.FSharp.Compiler.AbstractIL.ILRuntimeWriter open Microsoft.FSharp.Compiler.Interactive.Settings open Microsoft.FSharp.Compiler.Interactive.RuntimeHelpers open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Fscopts +open Microsoft.FSharp.Compiler.CompileOptions open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.AbstractIL.IL -open Microsoft.FSharp.Compiler.Ilxgen +open Microsoft.FSharp.Compiler.IlxGen open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger @@ -45,16 +45,15 @@ open Microsoft.FSharp.Compiler.TypeChecker open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Opt -open Microsoft.FSharp.Compiler.Env -open Microsoft.FSharp.Compiler.Build +open Microsoft.FSharp.Compiler.Optimizer +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.CompileOps open Microsoft.FSharp.Compiler.Lexhelp open Microsoft.FSharp.Compiler.Layout -open Microsoft.FSharp.Compiler.PostTypecheckSemanticChecks +open Microsoft.FSharp.Compiler.PostTypeCheckSemanticChecks open Internal.Utilities.Collections open Internal.Utilities.StructuredFormat -open Internal.Utilities.FileSystem //---------------------------------------------------------------------------- // Hardbinding dependencies should we NGEN fsi.exe @@ -229,13 +228,13 @@ type internal FsiValuePrinter(ilGlobals, generateDebugInfo, resolvePath, outWrit Layout.wordL "" /// Display the signature of an F# value declaration, along with its actual value. - member valuePrinter.InvokeDeclLayout (emEnv, ilxGenerator: Ilxgen.IlxAssemblyGenerator, v:Val) = + member valuePrinter.InvokeDeclLayout (emEnv, ilxGenerator: IlxAssemblyGenerator, v:Val) = // Implemented via a lookup from v to a concrete (System.Object,System.Type). // This (obj,objTy) pair can then be fed to the fsi value printer. // Note: The value may be (null:Object). // Note: A System.Type allows the value printer guide printing of nulls, e.g. as None or []. //------- - // Ilxgen knows what the v:Val was converted to w.r.t. AbsIL datastructures. + // IlxGen knows what the v:Val was converted to w.r.t. AbsIL datastructures. // Ilreflect knows what the AbsIL was generated to. // Combining these allows for obtaining the (obj,objTy) by reflection where possible. // This assumes the v:Val was given appropriate storage, e.g. StaticField. @@ -365,9 +364,9 @@ type internal ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStd override x.WarnSinkImpl(err) = DoWithErrorColor true (fun () -> - if ReportWarningAsError tcConfigB.globalWarnLevel tcConfigB.specificWarnOff tcConfigB.specificWarnOn tcConfigB.specificWarnAsError tcConfigB.specificWarnAsWarn tcConfigB.globalWarnAsError err then + if ReportWarningAsError (tcConfigB.globalWarnLevel, tcConfigB.specificWarnOff, tcConfigB.specificWarnOn, tcConfigB.specificWarnAsError, tcConfigB.specificWarnAsWarn, tcConfigB.globalWarnAsError) err then x.ErrorSinkHelper err - elif ReportWarning tcConfigB.globalWarnLevel tcConfigB.specificWarnOff tcConfigB.specificWarnOn err then + elif ReportWarning (tcConfigB.globalWarnLevel, tcConfigB.specificWarnOff, tcConfigB.specificWarnOn) err then fsiConsoleOutput.Error.WriteLine() writeViaBufferWithEnvironmentNewLines fsiConsoleOutput.Error (OutputErrorOrWarningContext " " fsiStdinSyphon.GetLine) err writeViaBufferWithEnvironmentNewLines fsiConsoleOutput.Error (OutputErrorOrWarning (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,true)) err @@ -427,6 +426,9 @@ type internal FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: let executableFileName = lazy + match tcConfigB.exename with + | Some s -> s + | None -> let currentProcess = System.Diagnostics.Process.GetCurrentProcess() Path.GetFileName(currentProcess.MainModule.FileName) @@ -438,7 +440,7 @@ type internal FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: DisplayBannerText tcConfigB; fprintfn fsiConsoleOutput.Out "" fprintfn fsiConsoleOutput.Out "%s" (FSIstrings.SR.fsiUsage(executableFileName.Value)) - printCompilerOptionBlocks blocks + PrintCompilerOptionBlocks blocks exit 0 // option tags @@ -482,8 +484,8 @@ type internal FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: PrivateOptions( [ // Private options, related to diagnostics around console probing - CompilerOption("probeconsole","", OptionSwitch (fun flag -> probeToSeeIfConsoleWorks <- flag=On), None, None); // "Probe to see if Console looks functional"); - CompilerOption("peekahead","", OptionSwitch (fun flag -> peekAheadOnConsoleToPermitTyping <- flag=On), None, None); // "Probe to see if Console looks functional"); + CompilerOption("probeconsole","", OptionSwitch (fun flag -> probeToSeeIfConsoleWorks <- flag=OptionSwitch.On), None, None); // "Probe to see if Console looks functional"); + CompilerOption("peekahead","", OptionSwitch (fun flag -> peekAheadOnConsoleToPermitTyping <- flag=OptionSwitch.On), None, None); // "Probe to see if Console looks functional"); ]) ] @@ -505,12 +507,12 @@ type internal FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: ]); PublicOptions(FSComp.SR.optsHelpBannerAdvanced(), [CompilerOption("exec", "", OptionUnit (fun () -> interact <- false), None, Some (FSIstrings.SR.fsiExec())); - CompilerOption("gui", tagNone, OptionSwitch(fun flag -> gui <- (flag = On)),None,Some (FSIstrings.SR.fsiGui())); + CompilerOption("gui", tagNone, OptionSwitch(fun flag -> gui <- (flag = OptionSwitch.On)),None,Some (FSIstrings.SR.fsiGui())); CompilerOption("quiet", "", OptionUnit (fun () -> tcConfigB.noFeedback <- true), None,Some (FSIstrings.SR.fsiQuiet())); (* Renamed --readline and --no-readline to --tabcompletion:+|- *) - CompilerOption("readline", tagNone, OptionSwitch(fun flag -> enableConsoleKeyProcessing <- (flag = On)), None, Some(FSIstrings.SR.fsiReadline())); - CompilerOption("quotations-debug", tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = On),None, Some(FSIstrings.SR.fsiEmitDebugInfoInQuotations())); - CompilerOption("shadowcopyreferences", tagNone, OptionSwitch(fun flag -> tcConfigB.shadowCopyReferences <- flag = On), None, Some(FSIstrings.SR.shadowCopyReferences())); + CompilerOption("readline", tagNone, OptionSwitch(fun flag -> enableConsoleKeyProcessing <- (flag = OptionSwitch.On)), None, Some(FSIstrings.SR.fsiReadline())); + CompilerOption("quotations-debug", tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = OptionSwitch.On),None, Some(FSIstrings.SR.fsiEmitDebugInfoInQuotations())); + CompilerOption("shadowcopyreferences", tagNone, OptionSwitch(fun flag -> tcConfigB.shadowCopyReferences <- flag = OptionSwitch.On), None, Some(FSIstrings.SR.shadowCopyReferences())); ]); ] @@ -520,12 +522,12 @@ type internal FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: /// Rather than start processing, just collect names, then process them. let sourceFiles = let collect name = - let fsx = Build.IsScript name + let fsx = CompileOps.IsScript name inputFilesAcc <- inputFilesAcc @ [(name,fsx)] // O(n^2), but n small... try let fsiCompilerOptions = fsiUsagePrefix tcConfigB @ GetCoreFsiCompilerOptions tcConfigB @ fsiUsageSuffix tcConfigB - let abbrevArgs = abbrevFlagSet tcConfigB false - ParseCompilerOptions collect fsiCompilerOptions (List.tail (PostProcessCompilerArgs abbrevArgs argv)) + let abbrevArgs = GetAbbrevFlagSet tcConfigB false + ParseCompilerOptions (collect, fsiCompilerOptions, List.tail (PostProcessCompilerArgs abbrevArgs argv)) with e -> stopProcessingRecovery e range0; exit 1; inputFilesAcc @@ -727,11 +729,11 @@ type internal FsiConsoleInput(fsiOptions: FsiCommandLineOptions, inReader: TextR [] [] type internal FsiDynamicCompilerState = - { optEnv : Opt.IncrementalOptimizationEnv + { optEnv : Optimizer.IncrementalOptimizationEnv emEnv : ILRuntimeWriter.emEnv - tcGlobals : Env.TcGlobals - tcState : Build.TcState - ilxGenerator : Ilxgen.IlxAssemblyGenerator + tcGlobals : TcGlobals + tcState : TcState + ilxGenerator : IlxGen.IlxAssemblyGenerator // Why is this not in FsiOptions? timing : bool debugBreak : bool } @@ -772,7 +774,7 @@ type internal FsiDynamicCompiler let valuePrinter = FsiValuePrinter(ilGlobals, generateDebugInfo, resolvePath, outWriter) - let assemblyBuilder,moduleBuilder = ILRuntimeWriter.mkDynamicAssemblyAndModule (assemblyName, tcConfigB.optSettings.localOpt(), generateDebugInfo) + let assemblyBuilder,moduleBuilder = ILRuntimeWriter.mkDynamicAssemblyAndModule (assemblyName, tcConfigB.optSettings.localOpt(), generateDebugInfo, false) let rangeStdin = rangeN Lexhelp.stdinMockFilename 0 @@ -783,7 +785,7 @@ type internal FsiDynamicCompiler /// Add attributes let CreateModuleFragment (tcConfigB, assemblyName, codegenResults) = if !progress then fprintfn fsiConsoleOutput.Out "Creating main module..."; - let mainModule = mkILSimpleModule assemblyName (fsharpModuleName tcConfigB.target assemblyName) (tcConfigB.target = Dll) tcConfigB.subsystemVersion tcConfigB.useHighEntropyVA (mkILTypeDefs codegenResults.ilTypeDefs) None None 0x0 (mkILExportedTypes []) "" + let mainModule = mkILSimpleModule assemblyName (GetGeneratedILModuleName tcConfigB.target assemblyName) (tcConfigB.target = Dll) tcConfigB.subsystemVersion tcConfigB.useHighEntropyVA (mkILTypeDefs codegenResults.ilTypeDefs) None None 0x0 (mkILExportedTypes []) "" { mainModule with Manifest = (let man = mainModule.ManifestOfAssembly @@ -799,7 +801,7 @@ type internal FsiDynamicCompiler // Typecheck. The lock stops the type checker running at the same time as the // server intellisense implementation (which is currently incomplete and #if disabled) let (tcState:TcState),topCustomAttrs,declaredImpls,tcEnvAtEndOfLastInput = - lock tcLockObject (fun _ -> TypecheckClosedInputSet(errorLogger.CheckForErrors,tcConfig,tcImports,tcGlobals, Some prefixPath,tcState,inputs)) + lock tcLockObject (fun _ -> TypeCheckClosedInputSet(errorLogger.CheckForErrors,tcConfig,tcImports,tcGlobals, Some prefixPath,tcState,inputs)) #if DEBUG // Logging/debugging @@ -837,9 +839,9 @@ type internal FsiDynamicCompiler errorLogger.AbortOnError(); ReportTime tcConfig "ILX -> IL (Unions)"; - let ilxMainModule = EraseIlxUnions.ConvModule ilGlobals ilxMainModule + let ilxMainModule = EraseUnions.ConvModule ilGlobals ilxMainModule ReportTime tcConfig "ILX -> IL (Funcs)"; - let ilxMainModule = EraseIlxFuncs.ConvModule ilGlobals ilxMainModule + let ilxMainModule = EraseClosures.ConvModule ilGlobals ilxMainModule errorLogger.AbortOnError(); @@ -944,7 +946,7 @@ type internal FsiDynamicCompiler let prefix = mkFragmentPath i let prefixPath = pathOfLid prefix let impl = SynModuleOrNamespace(prefix,(* isModule: *) true,defs,PreXmlDoc.Empty,[],None,rangeStdin) - let input = ParsedInput.ImplFile(ParsedImplFileInput(filename,true, QualFileNameOfUniquePath (rangeStdin,prefixPath),[],[],[impl],true (* isLastCompiland *) )) + let input = ParsedInput.ImplFile(ParsedImplFileInput(filename,true, ComputeQualifiedNameOfFileFromUniquePath (rangeStdin,prefixPath),[],[],[impl],true (* isLastCompiland *) )) let istate,tcEnvAtEndOfLastInput = ProcessInputs (istate, [input], showTypes, true, isInteractiveItExpr, prefix) let tcState = istate.tcState { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) } @@ -962,7 +964,7 @@ type internal FsiDynamicCompiler let istate = fsiDynamicCompiler.EvalParsedDefinitions (istate, false, true, defs) // Snarf the type for 'it' via the binding match istate.tcState.TcEnvFromImpls.NameEnv.FindUnqualifiedItem itName with - | Nameres.Item.Value vref -> + | NameResolution.Item.Value vref -> if not tcConfig.noFeedback then valuePrinter.InvokeExprPrinter (istate.tcState.TcEnvFromImpls.DisplayEnv, vref.Deref) @@ -1004,10 +1006,10 @@ type internal FsiDynamicCompiler SynModuleDecl.DoExpr(SequencePointInfoForBinding.NoSequencePointAtDoBinding, breakStatement, m) member __.EvalRequireReference istate m path = - if Path.IsInvalidPath(path) then + if FileSystem.IsInvalidPathShim(path) then error(Error(FSIstrings.SR.fsiInvalidAssembly(path),m)) // Check the file can be resolved before calling requireDLLReference - let resolutions = tcImports.ResolveAssemblyReference(AssemblyReference(m,path),ResolveAssemblyReferenceMode.ReportErrors) + let resolutions = tcImports.ResolveAssemblyReference(AssemblyReference(m,path,None),ResolveAssemblyReferenceMode.ReportErrors) tcConfigB.AddReferencedAssemblyByPath(m,path) let tcState = istate.tcState let tcEnv,(_dllinfos,ccuinfos) = @@ -1076,21 +1078,21 @@ type internal FsiDynamicCompiler member __.GetInitialInteractiveState () = let tcConfig = TcConfig.Create(tcConfigB,validate=false) - let optEnv0 = InitialOptimizationEnv tcImports tcGlobals + let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) let emEnv = ILRuntimeWriter.emEnv0 - let tcEnv = GetInitialTypecheckerEnv None rangeStdin tcConfig tcImports tcGlobals + let tcEnv = GetInitialTcEnv (None, rangeStdin, tcConfig, tcImports, tcGlobals) let ccuName = assemblyName - let tcState = TypecheckInitialState (rangeStdin,ccuName,tcConfig,tcGlobals,tcImports,niceNameGen,tcEnv) + let tcState = GetInitialTcState (rangeStdin, ccuName, tcConfig, tcGlobals, tcImports, niceNameGen, tcEnv) let ilxGenerator = CreateIlxAssemblyGenerator(tcConfig,tcImports,tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), tcState.Ccu ) - {optEnv = optEnv0; - emEnv = emEnv; - tcGlobals = tcGlobals; - tcState = tcState; - ilxGenerator = ilxGenerator; - timing = false; - debugBreak = false; + {optEnv = optEnv0 + emEnv = emEnv + tcGlobals = tcGlobals + tcState = tcState + ilxGenerator = ilxGenerator + timing = false + debugBreak = false } @@ -1114,11 +1116,11 @@ type internal FsiIntellisenseProvider(tcGlobals, tcImports: TcImports) = let amap = tcImports.GetImportMap() let infoReader = new Infos.InfoReader(tcGlobals,amap) - let ncenv = new Nameres.NameResolver(tcGlobals,amap,infoReader,Nameres.FakeInstantiationGenerator) + let ncenv = new NameResolution.NameResolver(tcGlobals,amap,infoReader,NameResolution.FakeInstantiationGenerator) // Note: for the accessor domain we should use (AccessRightsOfEnv tcState.TcEnvFromImpls) let ad = Infos.AccessibleFromSomeFSharpCode - let nItems = Nameres.ResolvePartialLongIdent ncenv tcState.TcEnvFromImpls.NameEnv (ConstraintSolver.IsApplicableMethApprox tcGlobals amap rangeStdin) rangeStdin ad lid false - let names = nItems |> List.map (fun d -> d.DisplayName tcGlobals) + let nItems = NameResolution.ResolvePartialLongIdent ncenv tcState.TcEnvFromImpls.NameEnv (ConstraintSolver.IsApplicableMethApprox tcGlobals amap rangeStdin) rangeStdin ad lid false + let names = nItems |> List.map (fun d -> d.DisplayName) let names = names |> List.filter (fun (name:string) -> name.StartsWith(stem,StringComparison.Ordinal)) names @@ -1139,7 +1141,7 @@ type internal FsiIntellisenseProvider(tcGlobals, tcImports: TcImports) = names with e -> - System.Windows.Forms.MessageBox.Show("FsiGetDeclarations: throws:\n" ^ e.ToString()) |> ignore; + System.Windows.Forms.MessageBox.Show("FsiGetDeclarations: throws:\n" ^ e.ToString()) |> ignore [| |] #endif @@ -1197,33 +1199,33 @@ type internal FsiInterruptController(fsiOptions : FsiCommandLineOptions, // REVIEW: streamline all this code to use the same code on Windows and Posix. member controller.InstallKillThread(threadToKill:Thread, pauseMilliseconds:int) = - if !progress then fprintfn fsiConsoleOutput.Out "installing CtrlC handler"; + if !progress then fprintfn fsiConsoleOutput.Out "installing CtrlC handler" // WINDOWS TECHNIQUE: .NET has more safe points, and you can do more when a safe point. // Hence we actually start up the killer thread within the handler. try let raiseCtrlC() = SetCurrentUICultureForThread fsiOptions.FsiLCID - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); - stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed; + fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()) + stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed if (interruptAllowed = InterruptCanRaiseException) then - killThreadRequest <- ThreadAbortRequest; + killThreadRequest <- ThreadAbortRequest let killerThread = new Thread(new ThreadStart(fun () -> SetCurrentUICultureForThread fsiOptions.FsiLCID // sleep long enough to allow ControlEventHandler handler on main thread to return // Also sleep to give computations a bit of time to terminate - Thread.Sleep(pauseMilliseconds); + Thread.Sleep(pauseMilliseconds) if (killThreadRequest = ThreadAbortRequest) then - if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()); - killThreadRequest <- NoRequest; - threadToKill.Abort(); + if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) + killThreadRequest <- NoRequest + threadToKill.Abort() ()),Name="ControlCAbortThread") - killerThread.IsBackground <- true; + killerThread.IsBackground <- true killerThread.Start() let ctrlEventHandler = new NativeMethods.ControlEventHandler(fun i -> if i = CTRL_C then (raiseCtrlC(); true) else false ) - ctrlEventHandlers <- ctrlEventHandler :: ctrlEventHandlers; - ctrlEventActions <- raiseCtrlC :: ctrlEventActions; + ctrlEventHandlers <- ctrlEventHandler :: ctrlEventHandlers + ctrlEventActions <- raiseCtrlC :: ctrlEventActions let _resultOK = NativeMethods.SetConsoleCtrlHandler(ctrlEventHandler,true) false // don't exit via kill thread with e -> @@ -1235,32 +1237,32 @@ type internal FsiInterruptController(fsiOptions : FsiCommandLineOptions, match (try Choice1Of2(Assembly.Load("Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756")) with e -> Choice2Of2 e) with | Choice1Of2(monoPosix) -> try - if !progress then fprintfn fsiConsoleOutput.Error "loading type Mono.Unix.Native.Stdlib..."; + if !progress then fprintfn fsiConsoleOutput.Error "loading type Mono.Unix.Native.Stdlib..." let monoUnixStdlib = monoPosix.GetType("Mono.Unix.Native.Stdlib") - if !progress then fprintfn fsiConsoleOutput.Error "loading type Mono.Unix.Native.SignalHandler..."; + if !progress then fprintfn fsiConsoleOutput.Error "loading type Mono.Unix.Native.SignalHandler..." let monoUnixSignalHandler = monoPosix.GetType("Mono.Unix.Native.SignalHandler") - if !progress then fprintfn fsiConsoleOutput.Error "creating delegate..."; - controller.PosixInvoke(-1); + if !progress then fprintfn fsiConsoleOutput.Error "creating delegate..." + controller.PosixInvoke(-1) let monoHandler = System.Delegate.CreateDelegate(monoUnixSignalHandler,controller,"PosixInvoke") - if !progress then fprintfn fsiConsoleOutput.Error "registering signal handler..."; + if !progress then fprintfn fsiConsoleOutput.Error "registering signal handler..." let monoSignalNumber = System.Enum.Parse(monoPosix.GetType("Mono.Unix.Native.Signum"),"SIGINT") let register () = Utilities.callStaticMethod monoUnixStdlib "signal" [ monoSignalNumber; box monoHandler ] |> ignore - posixReinstate <- register; - register(); + posixReinstate <- register + register() let killerThread = new Thread(new ThreadStart(fun () -> SetCurrentUICultureForThread fsiOptions.FsiLCID while true do //fprintf fsiConsoleOutput.Error "\n- kill thread loop...\n"; errorWriter.Flush(); - Thread.Sleep(pauseMilliseconds*2); + Thread.Sleep(pauseMilliseconds*2) match killThreadRequest with | PrintInterruptRequest -> - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); fsiConsoleOutput.Error.Flush(); - killThreadRequest <- NoRequest; + fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); fsiConsoleOutput.Error.Flush() + killThreadRequest <- NoRequest | ThreadAbortRequest -> - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); fsiConsoleOutput.Error.Flush(); - if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()); - killThreadRequest <- NoRequest; + fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); fsiConsoleOutput.Error.Flush() + if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) + killThreadRequest <- NoRequest threadToKill.Abort() | ExitRequest -> // Mono has some wierd behaviour where it blocks on exit @@ -1271,12 +1273,12 @@ type internal FsiInterruptController(fsiOptions : FsiCommandLineOptions, // // Anyway, we make "#q" work this case by setting ExitRequest and brutally calling // the process-wide 'exit' - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiExit()); fsiConsoleOutput.Error.Flush(); + fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiExit()); fsiConsoleOutput.Error.Flush() Utilities.callStaticMethod monoUnixStdlib "exit" [ box 0 ] |> ignore | _ -> () done),Name="ControlCAbortAlternativeThread") - killerThread.IsBackground <- true; - killerThread.Start(); + killerThread.IsBackground <- true + killerThread.Start() true // exit via kill thread to workaround block-on-exit bugs with Mono once a CtrlC has been pressed with e -> fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiCouldNotInstallCtrlCHandler(e.Message)) @@ -1291,8 +1293,8 @@ type internal FsiInterruptController(fsiOptions : FsiCommandLineOptions, // since we are not allowed to JIT a signal handler. THis also ensures the "PosixInvoke" // method is not eliminated by dead-code elimination if n >= 0 then - posixReinstate(); - stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed; + posixReinstate() + stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed killThreadRequest <- if (interruptAllowed = InterruptCanRaiseException) then ThreadAbortRequest else PrintInterruptRequest @@ -1362,7 +1364,7 @@ module internal MagicAssemblyResolution = let tcConfig = TcConfig.Create(tcConfigB,validate=false) let fullAssemName = args.Name let simpleAssemName = fullAssemName.Split([| ',' |]).[0] - if !progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON ASSEMBLY, simpleAssemName = %s" simpleAssemName; // "Attempting to load a dynamically required assembly in response to an AssemblyResolve event by using known static assembly references..." + if !progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON ASSEMBLY, simpleAssemName = %s" simpleAssemName // "Attempting to load a dynamically required assembly in response to an AssemblyResolve event by using known static assembly references..." // Special case: Mono Windows Forms attempts to load an assembly called something like "Windows.Forms.resources" // We can't resolve this, so don't try. @@ -1381,25 +1383,25 @@ module internal MagicAssemblyResolution = let assemblyReferenceTextExe = (simpleAssemName + ".exe") let overallSearchResult = // OK, try to resolve as a .dll - let searchResult = tcImports.TryResolveAssemblyReference (AssemblyReference(rangeStdin,assemblyReferenceTextDll),ResolveAssemblyReferenceMode.Speculative) + let searchResult = tcImports.TryResolveAssemblyReference (AssemblyReference(rangeStdin,assemblyReferenceTextDll,None),ResolveAssemblyReferenceMode.Speculative) match searchResult with | OkResult (warns,[r]) -> OkResult (warns, Choice1Of2 r.resolvedPath) | _ -> // OK, try to resolve as a .exe - let searchResult = tcImports.TryResolveAssemblyReference (AssemblyReference(rangeStdin,assemblyReferenceTextExe),ResolveAssemblyReferenceMode.Speculative) + let searchResult = tcImports.TryResolveAssemblyReference (AssemblyReference(rangeStdin,assemblyReferenceTextExe,None),ResolveAssemblyReferenceMode.Speculative) match searchResult with | OkResult (warns, [r]) -> OkResult (warns, Choice1Of2 r.resolvedPath) | _ -> - if !progress then fsiConsoleOutput.uprintfn "ATTEMPT LOAD, assemblyReferenceTextDll = %s" assemblyReferenceTextDll; + if !progress then fsiConsoleOutput.uprintfn "ATTEMPT LOAD, assemblyReferenceTextDll = %s" assemblyReferenceTextDll /// Take a look through the files quoted, perhaps with explicit paths let searchResult = (tcConfig.referencedDLLs |> List.tryPick (fun assemblyReference -> - if !progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON FILE, referencedDLL = %s" assemblyReference.Text; + if !progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON FILE, referencedDLL = %s" assemblyReference.Text if System.String.Compare(Filename.fileNameOfPath assemblyReference.Text, assemblyReferenceTextDll,StringComparison.OrdinalIgnoreCase) = 0 || System.String.Compare(Filename.fileNameOfPath assemblyReference.Text, assemblyReferenceTextExe,StringComparison.OrdinalIgnoreCase) = 0 then Some(tcImports.TryResolveAssemblyReference(assemblyReference,ResolveAssemblyReferenceMode.Speculative)) @@ -1427,14 +1429,14 @@ module internal MagicAssemblyResolution = let res = CommitOperationResult overallSearchResult match res with | Choice1Of2 assemblyName -> - if simpleAssemName <> "Mono.Posix" then fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiBindingSessionTo(assemblyName)); + if simpleAssemName <> "Mono.Posix" then fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiBindingSessionTo(assemblyName)) assemblyLoadFrom assemblyName | Choice2Of2 assembly -> assembly with e -> - stopProcessingRecovery e range0; - null)); + stopProcessingRecovery e range0 + null)) //---------------------------------------------------------------------------- // Reading stdin @@ -1456,17 +1458,17 @@ type internal FsiStdinLexerProvider let LexbufFromLineReader (fsiStdinSyphon: FsiStdinSyphon) readf = UnicodeLexing.FunctionAsLexbuf (fun (buf: char[], start, len) -> - //fprintf fsiConsoleOutput.Out "Calling ReadLine\n"; + //fprintf fsiConsoleOutput.Out "Calling ReadLine\n" let inputOption = try Some(readf()) with :? EndOfStreamException -> None - inputOption |> Option.iter (fun t -> fsiStdinSyphon.Add (t + "\n")); + inputOption |> Option.iter (fun t -> fsiStdinSyphon.Add (t + "\n")) match inputOption with | Some(null) | None -> - if !progress then fprintfn fsiConsoleOutput.Out "End of file from TextReader.ReadLine"; + if !progress then fprintfn fsiConsoleOutput.Out "End of file from TextReader.ReadLine" 0 | Some (input:string) -> let input = input + "\n" let ninput = input.Length - if ninput > len then fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiLineTooLong()); + if ninput > len then fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiLineTooLong()) let ntrimmed = min len ninput for i = 0 to ntrimmed-1 do buf.[i+start] <- input.[i] @@ -1485,11 +1487,11 @@ type internal FsiStdinLexerProvider let CreateLexerForLexBuffer (sourceFileName, lexbuf) = - Lexhelp.resetLexbufPos sourceFileName lexbuf; + Lexhelp.resetLexbufPos sourceFileName lexbuf let skip = true // don't report whitespace from lexer let defines = "INTERACTIVE"::tcConfigB.conditionalCompilationDefines let lexargs = mkLexargs (sourceFileName,defines, interactiveInputLightSyntaxStatus, lexResourceManager, ref [], errorLogger) - let tokenizer = Lexfilter.LexFilter(interactiveInputLightSyntaxStatus, tcConfigB.compilingFslib, Lexer.token lexargs skip, lexbuf) + let tokenizer = LexFilter.LexFilter(interactiveInputLightSyntaxStatus, tcConfigB.compilingFslib, Lexer.token lexargs skip, lexbuf) tokenizer @@ -1505,7 +1507,7 @@ type internal FsiStdinLexerProvider | _ -> LexbufFromLineReader fsiStdinSyphon (fun () -> fsiConsoleInput.In.ReadLine() |> removeZeroCharsFromString) - fsiStdinSyphon.Reset(); + fsiStdinSyphon.Reset() CreateLexerForLexBuffer (Lexhelp.stdinMockFilename, lexbuf) // Create a new lexer to read an "included" script file @@ -1539,10 +1541,10 @@ type internal FsiInteractionProcessor let InteractiveCatch f istate = try // reset error count - errorLogger.ResetErrorCount(); + errorLogger.ResetErrorCount() f istate with e -> - stopProcessingRecovery e range0; + stopProcessingRecovery e range0 istate,CompletedWithReportedError @@ -1558,10 +1560,10 @@ type internal FsiInteractionProcessor /// Parse one interaction. Called on the parser thread. - let ParseInteraction (tokenizer:Lexfilter.LexFilter) = + let ParseInteraction (tokenizer:LexFilter.LexFilter) = let lastToken = ref Parser.ELSE // Any token besides SEMICOLON_SEMICOLON will do for initial value try - if !progress then fprintfn fsiConsoleOutput.Out "In ParseInteraction..."; + if !progress then fprintfn fsiConsoleOutput.Out "In ParseInteraction..." let input = Lexhelp.reusingLexbufForParsing tokenizer.LexBuffer (fun () -> @@ -1581,7 +1583,7 @@ type internal FsiInteractionProcessor && not tokenizer.LexBuffer.IsPastEndOfStream do tok <- tokenizer.Lexer tokenizer.LexBuffer - stopProcessingRecovery e range0; + stopProcessingRecovery e range0 None /// Execute a single parsed interaction. Called on the GUI/execute/main thread. @@ -1620,16 +1622,16 @@ type internal FsiInteractionProcessor | IHash (ParsedHashDirective("I",[path],m),_) -> tcConfigB.AddIncludePath (m,path, tcConfig.implicitIncludeDir) - fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiDidAHashI(tcConfig.MakePathAbsolute path)); + fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiDidAHashI(tcConfig.MakePathAbsolute path)) istate,Completed | IHash (ParsedHashDirective("cd",[path],m),_) -> - ChangeDirectory path m; + ChangeDirectory path m istate,Completed | IHash (ParsedHashDirective("silentCd",[path],m),_) -> - ChangeDirectory path m; - fsiConsolePrompt.SkipNext(); (* "silent" directive *) + ChangeDirectory path m + fsiConsolePrompt.SkipNext() (* "silent" directive *) istate,Completed | IHash (ParsedHashDirective("dbgbreak",[],_),_) -> @@ -1650,20 +1652,20 @@ type internal FsiInteractionProcessor {istate with timing = (v = "on")},Completed | IHash (ParsedHashDirective("nowarn",numbers,m),_) -> - List.iter (fun (d:string) -> tcConfigB.TurnWarningOff(m,d)) numbers; + List.iter (fun (d:string) -> tcConfigB.TurnWarningOff(m,d)) numbers istate,Completed | IHash (ParsedHashDirective("terms",[],_),_) -> - tcConfigB.showTerms <- not tcConfig.showTerms; + tcConfigB.showTerms <- not tcConfig.showTerms istate,Completed | IHash (ParsedHashDirective("types",[],_),_) -> - fsiOptions.ShowTypes <- not fsiOptions.ShowTypes; + fsiOptions.ShowTypes <- not fsiOptions.ShowTypes istate,Completed #if DEBUG | IHash (ParsedHashDirective("ilcode",[],_m),_) -> - fsiOptions.ShowILCode <- not fsiOptions.ShowILCode; + fsiOptions.ShowILCode <- not fsiOptions.ShowILCode istate,Completed | IHash (ParsedHashDirective("info",[],_m),_) -> @@ -1673,16 +1675,16 @@ type internal FsiInteractionProcessor | IHash (ParsedHashDirective(("q" | "quit"),[],_),_) -> if exitViaKillThread then - fsiInterruptController.InterruptRequest <- ExitRequest; + fsiInterruptController.InterruptRequest <- ExitRequest Thread.Sleep(1000) - exit 0; + exit 0 | IHash (ParsedHashDirective("help",[],_),_) -> - fsiOptions.ShowHelp(); + fsiOptions.ShowHelp() istate,Completed | IHash (ParsedHashDirective(c,arg,_),_) -> - fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiInvalidDirective(c, String.concat " " arg)); // REVIEW: uprintnfnn - like other directives above + fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiInvalidDirective(c, String.concat " " arg)) // REVIEW: uprintnfnn - like other directives above istate,Completed (* REVIEW: cont = CompletedWithReportedError *) ) @@ -1774,7 +1776,7 @@ type internal FsiInteractionProcessor /// /// During processing of startup scripts, this runs on the main thread. - member __.ParseAndProcessAndEvalOneInteractionFromLexbuf (exitViaKillThread, runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:Lexfilter.LexFilter) = + member __.ParseAndProcessAndEvalOneInteractionFromLexbuf (exitViaKillThread, runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:LexFilter.LexFilter) = if tokenizer.LexBuffer.IsPastEndOfStream then let stepStatus = @@ -2136,18 +2138,19 @@ type internal FsiEvaluationSession (argv:string[], inReader:TextReader, outWrite let defaultFSharpBinariesDir = System.AppDomain.CurrentDomain.BaseDirectory - let tcConfigB = Build.TcConfigBuilder.CreateNew(defaultFSharpBinariesDir, - true, // long running: optimizeForMemory - Directory.GetCurrentDirectory(),isInteractive=true, - isInvalidationSupported=false) + let tcConfigB = + TcConfigBuilder.CreateNew(defaultFSharpBinariesDir, + true, // long running: optimizeForMemory + Directory.GetCurrentDirectory(),isInteractive=true, + isInvalidationSupported=false) let tcConfigP = TcConfigProvider.BasedOnMutableBuilder(tcConfigB) do tcConfigB.resolutionEnvironment <- MSBuildResolver.RuntimeLike // See Bug 3608 do tcConfigB.useFsiAuxLib <- true // Preset: --optimize+ -g --tailcalls+ (see 4505) - do SetOptimizeSwitch tcConfigB On - do SetDebugSwitch tcConfigB (Some "pdbonly") On - do SetTailcallSwitch tcConfigB On + do SetOptimizeSwitch tcConfigB OptionSwitch.On + do SetDebugSwitch tcConfigB (Some "pdbonly") OptionSwitch.On + do SetTailcallSwitch tcConfigB OptionSwitch.On // set platform depending on whether the current process is a 64-bit process. // BUG 429882 : FsiAnyCPU.exe issues warnings (x64 v MSIL) when referencing 64-bit assemblies diff --git a/src/fsharp/fsi/fsiAnyCPU.exe.config b/src/fsharp/fsi/fsiAnyCPU.exe.config index e058547d32d..48447cdd2ee 100644 --- a/src/fsharp/fsi/fsiAnyCPU.exe.config +++ b/src/fsharp/fsi/fsiAnyCPU.exe.config @@ -9,8 +9,8 @@ publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> + oldVersion="2.0.0.0-4.4.1.0" + newVersion="4.4.1.9055"/> diff --git a/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj b/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj index 20717e5716a..3d1c3f0f234 100644 --- a/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj +++ b/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj @@ -1,5 +1,5 @@ - + ..\.. diff --git a/src/fsharp/fsiattrs.fs b/src/fsharp/fsiattrs.fs index 97fa7c072da..9d417c6894f 100644 --- a/src/fsharp/fsiattrs.fs +++ b/src/fsharp/fsiattrs.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module Microsoft.FSharp.Compiler.Interactive.Attributes [] diff --git a/src/fsharp/fsiaux.fs b/src/fsharp/fsiaux.fs index aba730bf4cb..2497fa2bd4d 100644 --- a/src/fsharp/fsiaux.fs +++ b/src/fsharp/fsiaux.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Compiler.Interactive diff --git a/src/fsharp/fsiaux.fsi b/src/fsharp/fsiaux.fsi index d8f45084a68..382daf70977 100644 --- a/src/fsharp/fsiaux.fsi +++ b/src/fsharp/fsiaux.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Compiler.Interactive diff --git a/src/fsharp/fsiserver/fsiserver.fs b/src/fsharp/fsiserver/fsiserver.fs index 37e43b24371..035053ead79 100644 --- a/src/fsharp/fsiserver/fsiserver.fs +++ b/src/fsharp/fsiserver/fsiserver.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. //[] // avoid calling the type "Shared" which is keyword in some languages namespace Microsoft.FSharp.Compiler.Server.Shared diff --git a/src/fsharp/import.fs b/src/fsharp/import.fs index 0b133438825..35b282c9f4a 100644 --- a/src/fsharp/import.fs +++ b/src/fsharp/import.fs @@ -1,5 +1,6 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +/// Functions to import .NET binary metadata as TAST objects module internal Microsoft.FSharp.Compiler.Import #nowarn "44" // This construct is deprecated. please use List.item @@ -7,15 +8,15 @@ module internal Microsoft.FSharp.Compiler.Import open System.Reflection open System.Collections.Generic open Internal.Utilities + open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler - open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.AbstractIL.IL -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger #if EXTENSIONTYPING @@ -52,7 +53,7 @@ type AssemblyLoader = /// /// There is normally only one ImportMap for any assembly compilation, though additional instances can be created /// using tcImports.GetImportMap() if needed, and it is not harmful if multiple instances are used. The object -/// serves as an interface through to the tables stored in the primary TcImports structures defined in build.fs. +/// serves as an interface through to the tables stored in the primary TcImports structures defined in CompileOps.fs. [] type ImportMap(g:TcGlobals,assemblyLoader:AssemblyLoader) = let typeRefToTyconRefCache = new System.Collections.Generic.Dictionary() @@ -101,7 +102,7 @@ let ImportTypeRefData (env:ImportMap) m (scoref,path,typeName) = () #endif match tryRescopeEntity ccu tycon with - | None -> error (Error(FSComp.SR.impImportedAssemblyUsesNotPublicType(String.concat "." (Array.toList path@[typeName])),m)); + | None -> error (Error(FSComp.SR.impImportedAssemblyUsesNotPublicType(String.concat "." (Array.toList path@[typeName])),m)) | Some tcref -> tcref @@ -325,7 +326,7 @@ let ImportProvidedMethodBaseAsILMethodRef (env:ImportMap) (m:range) (mbase: Tain | Some cinfo when cinfo.PUntaint((fun x -> x.DeclaringType.IsGenericType),m) -> let declaringType = cinfo.PApply((fun x -> x.DeclaringType),m) let declaringGenericTypeDefn = declaringType.PApply((fun x -> x.GetGenericTypeDefinition()),m) - // We have to find the uninstantiated formal signature corresponing to this instantiated constructor. + // We have to find the uninstantiated formal signature corresponding to this instantiated constructor. // Annoyingly System.Reflection doesn't give us a MetadataToken to compare on, so we have to look by doing // the instantiation and comparing.. let found = @@ -376,7 +377,7 @@ let ImportProvidedMethodBaseAsILMethodRef (env:ImportMap) (m:range) (mbase: Tain /// Import a set of Abstract IL generic parameter specifications as a list of new /// F# generic parameters. /// -/// Fixup the constrants so that any references to the generic parameters +/// Fixup the constraints so that any references to the generic parameters /// in the constraints now refer to the new generic parameters. let ImportILGenericParameters amap m scoref tinst (gps: ILGenericParameterDefs) = match gps with @@ -392,7 +393,7 @@ let ImportILGenericParameters amap m scoref tinst (gps: ILGenericParameterDefs) let constraints = if gp.HasReferenceTypeConstraint then (TyparConstraint.IsReferenceType(m)::constraints) else constraints let constraints = if gp.HasNotNullableValueTypeConstraint then (TyparConstraint.IsNonNullableStruct(m)::constraints) else constraints let constraints = if gp.HasDefaultConstructorConstraint then (TyparConstraint.RequiresDefaultConstructor(m)::constraints) else constraints - tp.FixupConstraints constraints); + tp.FixupConstraints constraints) tps @@ -416,7 +417,7 @@ let multisetDiscriminateAndMap nodef tipf (items: ('Key list * 'Value) list) = match keylist with | [] -> () | key::rest -> - buckets.[key] <- (rest,v) :: (if buckets.ContainsKey key then buckets.[key] else []); + buckets.[key] <- (rest,v) :: (if buckets.ContainsKey key then buckets.[key] else []) [ for (KeyValue(key,items)) in buckets -> nodef key items ] @@ -424,10 +425,10 @@ let multisetDiscriminateAndMap nodef tipf (items: ('Key list * 'Value) list) = /// Import an IL type definition as a new F# TAST Entity node. -let rec ImportILTypeDef amap m scoref cpath enc nm (tdef:ILTypeDef) = +let rec ImportILTypeDef amap m scoref (cpath:CompilationPath) enc nm (tdef:ILTypeDef) = let lazyModuleOrNamespaceTypeForNestedTypes = lazy - let cpath = mkNestedCPath cpath nm ModuleOrType + let cpath = cpath.NestedCompPath nm ModuleOrType ImportILTypeDefs amap m scoref cpath (enc@[tdef]) tdef.NestedTypes // Add the type itself. NewILTycon @@ -442,7 +443,7 @@ let rec ImportILTypeDef amap m scoref cpath enc nm (tdef:ILTypeDef) = /// Import a list of (possibly nested) IL types as a new ModuleOrNamespaceType node /// containing new entities, bucketing by namespace along the way. -and ImportILTypeDefList amap m cpath enc items = +and ImportILTypeDefList amap m (cpath:CompilationPath) enc items = // Split into the ones with namespaces and without. Add the ones with namespaces in buckets. // That is, discriminate based in the first element of the namespace list (e.g. "System") // and, for each bag, fold-in a lazy computation to add the types under that bag . @@ -455,7 +456,7 @@ and ImportILTypeDefList amap m cpath enc items = items |> multisetDiscriminateAndMap (fun n tgs -> - let modty = lazy (ImportILTypeDefList amap m (mkNestedCPath cpath n Namespace) enc tgs) + let modty = lazy (ImportILTypeDefList amap m (cpath.NestedCompPath n Namespace) enc tgs) NewModuleOrNamespace (Some cpath) taccessPublic (mkSynId m n) XmlDoc.Empty [] modty) (fun (n,info:Lazy<_>) -> let (scoref2,_,lazyTypeDef:Lazy) = info.Force() @@ -468,8 +469,9 @@ and ImportILTypeDefList amap m cpath enc items = /// and ImportILTypeDefs amap m scoref cpath enc (tdefs: ILTypeDefs) = // We be very careful not to force a read of the type defs here - tdefs.AsListOfLazyTypeDefs - |> List.map (fun (ns,n,attrs,lazyTypeDef) -> (ns,(n,notlazy(scoref,attrs,lazyTypeDef)))) + tdefs.AsArrayOfLazyTypeDefs + |> Array.map (fun (ns,n,attrs,lazyTypeDef) -> (ns,(n,notlazy(scoref,attrs,lazyTypeDef)))) + |> Array.toList |> ImportILTypeDefList amap m cpath enc /// Import the main type definitions in an IL assembly. @@ -512,7 +514,7 @@ let ImportILAssemblyTypeDefs (amap, m, auxModLoader, aref, mainmod:ILModuleDef) let scoref = ILScopeRef.Assembly aref let mtypsForExportedTypes = ImportILAssemblyExportedTypes amap m auxModLoader scoref mainmod.ManifestOfAssembly.ExportedTypes let mainmod = ImportILAssemblyMainTypeDefs amap m scoref mainmod - combineModuleOrNamespaceTypeList [] m (mainmod :: mtypsForExportedTypes) + CombineCcuContentFragments m (mainmod :: mtypsForExportedTypes) /// Import the type forwarder table for an IL assembly let ImportILAssemblyTypeForwarders (amap, m, exportedTypes:ILExportedTypesAndForwarders) = @@ -544,19 +546,19 @@ let ImportILAssembly(amap:(unit -> ImportMap),m,auxModuleLoader,sref,sourceDir,f | _ -> error(InternalError("ImportILAssembly: cannot reference .NET netmodules directly, reference the containing assembly instead",m)) let nm = aref.Name let mty = ImportILAssemblyTypeDefs(amap,m,auxModuleLoader,aref,ilModule) - let ccuData = - { IsFSharp=false; - UsesFSharp20PlusQuotations=false; + let ccuData : CcuData = + { IsFSharp=false + UsesFSharp20PlusQuotations=false #if EXTENSIONTYPING - InvalidateEvent=invalidateCcu; - IsProviderGenerated = false; + InvalidateEvent=invalidateCcu + IsProviderGenerated = false ImportProvidedType = (fun ty -> ImportProvidedType (amap()) m ty) #endif - QualifiedName= Some sref.QualifiedName; - Contents = NewCcuContents sref m nm mty ; - ILScopeRef = sref; - Stamp = newStamp(); - SourceCodeDirectory = sourceDir; // note: not an accurate value, but IL assemblies don't give us this information in any attributes. + QualifiedName= Some sref.QualifiedName + Contents = NewCcuContents sref m nm mty + ILScopeRef = sref + Stamp = newStamp() + SourceCodeDirectory = sourceDir // note: not an accurate value, but IL assemblies don't give us this information in any attributes. FileName = filename MemberSignatureEquality= (fun ty1 ty2 -> Tastops.typeEquivAux EraseAll (amap()).g ty1 ty2) TypeForwarders = diff --git a/src/fsharp/import.fsi b/src/fsharp/import.fsi index 042c309c096..a7826fa4117 100644 --- a/src/fsharp/import.fsi +++ b/src/fsharp/import.fsi @@ -1,8 +1,10 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +/// Functions to import .NET binary metadata as TAST objects module internal Microsoft.FSharp.Compiler.Import open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.AbstractIL.IL #if EXTENSIONTYPING @@ -34,16 +36,16 @@ type AssemblyLoader = /// /// There is normally only one ImportMap for any assembly compilation, though additional instances can be created /// using tcImports.GetImportMap() if needed, and it is not harmful if multiple instances are used. The object -/// serves as an interface through to the tables stored in the primary TcImports structures defined in build.fs. +/// serves as an interface through to the tables stored in the primary TcImports structures defined in CompileOps.fs. [] type ImportMap = - new : g:Env.TcGlobals * assemblyLoader:AssemblyLoader -> ImportMap + new : g:TcGlobals * assemblyLoader:AssemblyLoader -> ImportMap /// The AssemblyLoader for the import context member assemblyLoader : AssemblyLoader /// The TcGlobals for the import context - member g : Env.TcGlobals + member g : TcGlobals /// Import a reference to a type definition, given an AbstractIL ILTypeRef, with caching val internal ImportILTypeRef : ImportMap -> range -> ILTypeRef -> TyconRef diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs old mode 100644 new mode 100755 index 01038d705cc..58baa613bd8 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// tinfos, minfos, finfos, pinfos - summaries of information for references /// to .NET and F# constructs. @@ -19,7 +19,7 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Core.Printf @@ -365,6 +365,21 @@ type ValRef with let flags = membInfo.MemberFlags not flags.IsDispatchSlot && (flags.IsOverrideOrExplicitImpl || nonNil membInfo.ImplementedSlotSigs) + /// Check if an F#-declared member value is an explicit interface member implementation + member vref.IsFSharpExplicitInterfaceImplementation g = + match vref.MemberInfo with + | None -> false + | Some membInfo -> + not membInfo.MemberFlags.IsDispatchSlot && + (match membInfo.ImplementedSlotSigs with + | TSlotSig(_,oty,_,_,_,_) :: _ -> isInterfaceTy g oty + | [] -> false) + + member vref.ImplementedSlotSignatures = + match vref.MemberInfo with + | None -> [] + | Some membInfo -> membInfo.ImplementedSlotSigs + //------------------------------------------------------------------------- // Helper methods associated with using TAST metadata (F# members, values etc.) // as backing data for MethInfo, PropInfo etc. @@ -472,7 +487,7 @@ type OptionalArgInfo = /// Compute the OptionalArgInfo for an IL parameter /// - /// This includes the Visual Basic rules for IDispatchConstant and IUnknownConstant and optinal arguments. + /// This includes the Visual Basic rules for IDispatchConstant and IUnknownConstant and optional arguments. static member FromILParameter g amap m ilScope ilTypeInst (ilParam: ILParameter) = if ilParam.IsOptional then match ilParam.Default with @@ -507,9 +522,9 @@ type ReflectedArgInfo = [] /// Partial information about a parameter returned for use by the Language Service type ParamNameAndType = - | ParamNameAndType of string option * TType + | ParamNameAndType of Ident option * TType - static member FromArgInfo (ty,argInfo : ArgReprInfo) = ParamNameAndType(Option.map textOfId argInfo.Name, ty) + static member FromArgInfo (ty,argInfo : ArgReprInfo) = ParamNameAndType(argInfo.Name, ty) static member FromMember isCSharpExtMem g vref = GetArgInfosOfMember isCSharpExtMem g vref |> List.mapSquared ParamNameAndType.FromArgInfo static member Instantiate inst p = let (ParamNameAndType(nm,ty)) = p in ParamNameAndType(nm, instType inst ty) static member InstantiateCurried inst paramTypes = paramTypes |> List.mapSquared (ParamNameAndType.Instantiate inst) @@ -518,7 +533,7 @@ type ParamNameAndType = /// Full information about a parameter returned for use by the type checker and language service. type ParamData = /// ParamData(isParamArray, isOut, optArgInfo, nameOpt, reflArgInfo, ttype) - ParamData of bool * bool * OptionalArgInfo * string option * ReflectedArgInfo * TType + ParamData of bool * bool * OptionalArgInfo * Ident option * ReflectedArgInfo * TType //------------------------------------------------------------------------- @@ -741,7 +756,7 @@ type ILMethInfo = /// Get info about the arguments of the IL method. If this is an C#-style extension method then /// drop the object argument. member x.GetParamNamesAndTypes(amap,m,minst) = - x.ParamMetadata |> List.map (fun p -> ParamNameAndType(p.Name, ImportTypeFromMetadata amap m x.MetadataScope x.DeclaringTypeInst minst p.Type) ) + x.ParamMetadata |> List.map (fun p -> ParamNameAndType(Option.map (mkSynId m) p.Name, ImportTypeFromMetadata amap m x.MetadataScope x.DeclaringTypeInst minst p.Type) ) /// Get a reference to the method (dropping all generic instantiations), as an Abstract IL ILMethodRef. member x.ILMethodRef = @@ -753,7 +768,7 @@ type ILMethInfo = member x.IsDllImport g = match g.attrib_DllImportAttribute with | None -> false - | Some (AttribInfo(tref,_)) ->x.RawMetadata.CustomAttrs |> TryDecodeILAttribute g tref (Some tref.Scope) |> isSome + | Some (AttribInfo(tref,_)) ->x.RawMetadata.CustomAttrs |> TryDecodeILAttribute g tref |> isSome /// Get the (zero or one) 'self'/'this'/'object' arguments associated with an IL method. /// An instance extension method returns one object argument. @@ -835,7 +850,7 @@ type MethInfo = #if EXTENSIONTYPING | ProvidedMeth (_, mb, _, m) -> let staticParams = mb.PApplyWithProvider((fun (mb,provider) -> mb.GetStaticParametersForMethod(provider)), range=m) - let staticParams = staticParams.PApplyArray(id, "GetStaticParameters", m) + let staticParams = staticParams.PApplyArray(id, "GetStaticParametersForMethod", m) match staticParams with | [| |] -> None | _ -> Some (mb,staticParams) @@ -1060,6 +1075,15 @@ type MethInfo = #endif | DefaultStructCtor _ -> false)) + /// Check if this method is an explicit implementation of an interface member + member x.IsFSharpExplicitInterfaceImplementation = + match x with + | ILMeth _ -> false + | FSMeth(g,_,vref,_) -> vref.IsFSharpExplicitInterfaceImplementation g + | DefaultStructCtor _ -> false +#if EXTENSIONTYPING + | ProvidedMeth _ -> false +#endif /// Check if this method is marked 'override' and thus definitely overrides another method. member x.IsDefiniteFSharpOverride = @@ -1071,6 +1095,11 @@ type MethInfo = | ProvidedMeth _ -> false #endif + member x.ImplementedSlotSignatures = + match x with + | FSMeth(_,_,vref,_) -> vref.ImplementedSlotSignatures + | _ -> failwith "not supported" + /// Indicates if this is an extension member. member x.IsExtensionMember = x.IsCSharpStyleExtensionMember || x.IsFSharpStyleExtensionMember @@ -1233,7 +1262,7 @@ type MethInfo = [ [ for p in ilMethInfo.ParamMetadata do let isParamArrayArg = TryFindILAttribute g.attrib_ParamArrayAttribute p.CustomAttrs let reflArgInfo = - match TryDecodeILAttribute g g.attrib_ReflectedDefinitionAttribute.TypeRef (Some(g.attrib_ReflectedDefinitionAttribute.TypeRef.Scope)) p.CustomAttrs with + match TryDecodeILAttribute g g.attrib_ReflectedDefinitionAttribute.TypeRef p.CustomAttrs with | Some ([ILAttribElem.Bool b ],_) -> ReflectedArgInfo.Quote b | Some _ -> ReflectedArgInfo.Quote false | _ -> ReflectedArgInfo.None @@ -1359,7 +1388,7 @@ type MethInfo = let pname = match p.PUntaint((fun p -> p.Name), m) with | null -> None - | name -> Some name + | name -> Some (mkSynId m name) let ptyp = match p.PApply((fun p -> p.ParameterType), m) with | Tainted.Null -> amap.g.unit_ty @@ -1502,6 +1531,14 @@ type ILFieldInfo = | ProvidedField(amap,fi,m) -> Import.ImportProvidedType amap m (fi.PApply((fun fi -> fi.FieldType),m)) #endif + static member ILFieldInfosUseIdenticalDefinitions x1 x2 = + match x1,x2 with + | ILFieldInfo(_, x1), ILFieldInfo(_, x2) -> (x1 === x2) +#if EXTENSIONTYPING + | ProvidedField(_,fi1,_), ProvidedField(_,fi2,_)-> ProvidedFieldInfo.TaintedEquals (fi1, fi2) + | _ -> false +#endif + /// Get an (uninstantiated) reference to the field as an Abstract IL ILFieldRef member x.ILFieldRef = rescopeILFieldRef x.ScopeRef (mkILFieldRef(x.ILTypeRef,x.FieldName,x.ILFieldType)) override x.ToString() = x.FieldName @@ -1614,12 +1651,12 @@ type ILPropInfo = (x.HasGetter && x.GetterMethod(g).IsNewSlot) || (x.HasSetter && x.SetterMethod(g).IsNewSlot) - /// Get the names and types of the indexer arguments associated wih the IL property. + /// Get the names and types of the indexer arguments associated with the IL property. member x.GetParamNamesAndTypes(amap,m) = let (ILPropInfo (tinfo,pdef)) = x pdef.Args |> ILList.toList |> List.map (fun ty -> ParamNameAndType(None, ImportTypeFromMetadata amap m tinfo.ILScopeRef tinfo.TypeInst [] ty) ) - /// Get the types of the indexer arguments associated wih the IL property. + /// Get the types of the indexer arguments associated with the IL property. member x.GetParamTypes(amap,m) = let (ILPropInfo (tinfo,pdef)) = x pdef.Args |> ILList.toList |> List.map (fun ty -> ImportTypeFromMetadata amap m tinfo.ILScopeRef tinfo.TypeInst [] ty) @@ -1769,6 +1806,15 @@ type PropInfo = | Some vref -> vref.IsDefiniteFSharpOverrideMember | None -> false + member x.ImplementedSlotSignatures = + x.ArbitraryValRef.Value.ImplementedSlotSignatures + + member x.IsFSharpExplicitInterfaceImplementation = + match x.ArbitraryValRef with + | Some vref -> vref.IsFSharpExplicitInterfaceImplementation x.TcGlobals + | None -> false + + /// Indicates if this property is an indexer property, i.e. a property with arguments. member x.IsIndexer = match x with @@ -1870,7 +1916,7 @@ type PropInfo = #if EXTENSIONTYPING | ProvidedProp (_,pi,m) -> [ for p in pi.PApplyArray((fun pi -> pi.GetIndexParameters()), "GetIndexParameters", m) do - let paramName = p.PUntaint((fun p -> match p.Name with null -> None | s -> Some s), m) + let paramName = p.PUntaint((fun p -> match p.Name with null -> None | s -> Some (mkSynId m s)), m) let paramType = Import.ImportProvidedType amap m (p.PApply((fun p -> p.ParameterType), m)) yield ParamNameAndType(paramName, paramType) ] #endif @@ -1981,7 +2027,7 @@ type ILEventInfo = /// Error text: "A definition to be compiled as a .NET event does not have the expected form. Only property members can be compiled as .NET events." exception BadEventTransformation of range -/// Properties compatible with type IDelegateEvent and atributed with CLIEvent are special: +/// Properties compatible with type IDelegateEvent and attributed with CLIEvent are special: /// we generate metadata and add/remove methods /// to make them into a .NET event, and mangle the name of a property. /// We don't handle static, indexer or abstract properties correctly. @@ -2165,7 +2211,7 @@ let CompiledSigOfMeth g amap m (minfo:MethInfo) = // The formal method typars returned are completely formal - they don't take into account the instantiation // of the enclosing type. For example, they may have constraints involving the _formal_ type parameters - // of the enclosing type. This instaniations can be used to interpret those type parameters + // of the enclosing type. This instantiations can be used to interpret those type parameters let fmtpinst = let parentTyArgs = argsOfAppTy g minfo.EnclosingType let memberParentTypars = minfo.GetFormalTyparsOfDeclaringType m @@ -2400,7 +2446,7 @@ module AccessibilityLogic = let tcrefOfViewedItem,_ = destAppTy g ty IsILMemberAccessible g amap m tcrefOfViewedItem ad access - /// Compute the accessiblity of a provided member + /// Compute the accessibility of a provided member let ComputeILAccess isPublic isFamily isFamilyOrAssembly isFamilyAndAssembly = if isPublic then ILMemberAccess.Public elif isFamily then ILMemberAccess.Family @@ -2408,7 +2454,7 @@ module AccessibilityLogic = elif isFamilyAndAssembly then ILMemberAccess.FamilyAndAssembly else ILMemberAccess.Private - /// IndiCompute the accessiblity of a provided member + /// IndiCompute the accessibility of a provided member let IsILFieldInfoAccessible g amap m ad x = match x with | ILFieldInfo (tinfo,fd) -> IsILTypeAndMemberAccessible g amap m ad ad tinfo fd.Access @@ -2418,26 +2464,32 @@ module AccessibilityLogic = IsProvidedMemberAccessible amap m ad pfi.EnclosingType access #endif - let IsILEventInfoAccessible g amap m ad (ILEventInfo (tinfo,edef)) = - let access = (resolveILMethodRef tinfo.RawMetadata edef.AddMethod).Access - IsILTypeAndMemberAccessible g amap m ad ad tinfo access + let GetILAccessOfILEventInfo (ILEventInfo (tinfo,edef)) = + (resolveILMethodRef tinfo.RawMetadata edef.AddMethod).Access + + let IsILEventInfoAccessible g amap m ad einfo = + let access = GetILAccessOfILEventInfo einfo + IsILTypeAndMemberAccessible g amap m ad ad einfo.ILTypeInfo access let private IsILMethInfoAccessible g amap m adType ad ilminfo = match ilminfo with | ILMethInfo (_,typ,None,mdef,_) -> IsILTypeAndMemberAccessible g amap m adType ad (ILTypeInfo.FromType g typ) mdef.Access | ILMethInfo (_,_,Some declaringTyconRef,mdef,_) -> IsILMemberAccessible g amap m declaringTyconRef ad mdef.Access - let IsILPropInfoAccessible g amap m ad (ILPropInfo(tinfo,pdef)) = + let GetILAccessOfILPropInfo (ILPropInfo(tinfo,pdef)) = let tdef = tinfo.RawMetadata - let ilAccess = + let ilAccess = match pdef.GetMethod with | Some mref -> (resolveILMethodRef tdef mref).Access | None -> match pdef.SetMethod with | None -> ILMemberAccess.Public | Some mref -> (resolveILMethodRef tdef mref).Access + ilAccess - IsILTypeAndMemberAccessible g amap m ad ad tinfo ilAccess + let IsILPropInfoAccessible g amap m ad pinfo = + let ilAccess = GetILAccessOfILPropInfo pinfo + IsILTypeAndMemberAccessible g amap m ad ad pinfo.ILTypeInfo ilAccess let IsValAccessible ad (vref:ValRef) = vref.Accessibility |> IsAccessible ad @@ -2533,10 +2585,180 @@ open AccessibilityLogic exception ObsoleteWarning of string * range exception ObsoleteError of string * range +let fail() = failwith "This custom attribute has an argument that can not yet be converted using this API" + +let rec evalILAttribElem e = + match e with + | ILAttribElem.String (Some x) -> box x + | ILAttribElem.String None -> null + | ILAttribElem.Bool x -> box x + | ILAttribElem.Char x -> box x + | ILAttribElem.SByte x -> box x + | ILAttribElem.Int16 x -> box x + | ILAttribElem.Int32 x -> box x + | ILAttribElem.Int64 x -> box x + | ILAttribElem.Byte x -> box x + | ILAttribElem.UInt16 x -> box x + | ILAttribElem.UInt32 x -> box x + | ILAttribElem.UInt64 x -> box x + | ILAttribElem.Single x -> box x + | ILAttribElem.Double x -> box x + | ILAttribElem.Null -> null + | ILAttribElem.Array (_, a) -> box [| for i in a -> evalILAttribElem i |] + // TODO: typeof<..> in attribute values + | ILAttribElem.Type (Some _t) -> fail() + | ILAttribElem.Type None -> null + | ILAttribElem.TypeRef (Some _t) -> fail() + | ILAttribElem.TypeRef None -> null + +let rec evalFSharpAttribArg g e = + match e with + | Expr.Const(c,_,_) -> + match c with + | Const.Bool b -> box b + | Const.SByte i -> box i + | Const.Int16 i -> box i + | Const.Int32 i -> box i + | Const.Int64 i -> box i + | Const.Byte i -> box i + | Const.UInt16 i -> box i + | Const.UInt32 i -> box i + | Const.UInt64 i -> box i + | Const.Single i -> box i + | Const.Double i -> box i + | Const.Char i -> box i + | Const.Zero -> null + | Const.String s -> box s + | _ -> fail() + | Expr.Op (TOp.Array,_,a,_) -> box [| for i in a -> evalFSharpAttribArg g i |] + | TypeOfExpr g ty -> box ty + // TODO: | TypeDefOfExpr g ty + | _ -> fail() + +type AttribInfo = + | FSAttribInfo of TcGlobals * Attrib + | ILAttribInfo of TcGlobals * Import.ImportMap * ILScopeRef * ILAttribute * range + + member x.TyconRef = + match x with + | FSAttribInfo(_g,Attrib(tcref,_,_,_,_,_,_)) -> tcref + | ILAttribInfo (g, amap, scoref, a, m) -> + let ty = ImportType scoref amap m [] a.Method.EnclosingType + tcrefOfAppTy g ty + + member x.ConstructorArguments = + match x with + | FSAttribInfo(g,Attrib(_,_,unnamedArgs,_,_,_,_)) -> + unnamedArgs + |> List.map (fun (AttribExpr(origExpr,evaluatedExpr)) -> + let ty = tyOfExpr g origExpr + let obj = evalFSharpAttribArg g evaluatedExpr + ty,obj) + | ILAttribInfo (g, amap, scoref, cattr, m) -> + let parms, _args = decodeILAttribData g.ilg cattr + [ for (argty,argval) in Seq.zip cattr.Method.FormalArgTypes parms -> + let ty = ImportType scoref amap m [] argty + let obj = evalILAttribElem argval + ty,obj ] + + member x.NamedArguments = + match x with + | FSAttribInfo(g,Attrib(_,_,_,namedArgs,_,_,_)) -> + namedArgs + |> List.map (fun (AttribNamedArg(nm,_,isField,AttribExpr(origExpr,evaluatedExpr))) -> + let ty = tyOfExpr g origExpr + let obj = evalFSharpAttribArg g evaluatedExpr + ty, nm, isField, obj) + | ILAttribInfo (g, amap, scoref, cattr, m) -> + let _parms, namedArgs = decodeILAttribData g.ilg cattr + [ for (nm, argty, isProp, argval) in namedArgs -> + let ty = ImportType scoref amap m [] argty + let obj = evalILAttribElem argval + let isField = not isProp + ty, nm, isField, obj ] + + /// Check custom attributes. This is particularly messy because custom attributes come in in three different /// formats. module AttributeChecking = + let AttribInfosOfIL g amap scoref m (attribs: ILAttributes) = + attribs.AsList |> List.map (fun a -> ILAttribInfo (g, amap, scoref, a, m)) + + let AttribInfosOfFS g attribs = + attribs |> List.map (fun a -> FSAttribInfo (g, a)) + + let GetAttribInfosOfEntity g amap m (tcref:TyconRef) = + match metadataOfTycon tcref.Deref with +#if EXTENSIONTYPING + // TODO: provided attributes + | ProvidedTypeMetadata _info -> [] + //let provAttribs = info.ProvidedType.PApply((fun a -> (a :> IProvidedCustomAttributeProvider)),m) + //match provAttribs.PUntaint((fun a -> a. .GetAttributeConstructorArgs(provAttribs.TypeProvider.PUntaintNoFailure(id), atref.FullName)),m) with + //| Some args -> f3 args + //| None -> None +#endif + | ILTypeMetadata (scoref,tdef) -> + tdef.CustomAttrs |> AttribInfosOfIL g amap scoref m + | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> + tcref.Attribs |> List.map (fun a -> FSAttribInfo (g, a)) + + + let GetAttribInfosOfMethod amap m minfo = + match minfo with + | ILMeth (g,ilminfo,_) -> ilminfo.RawMetadata.CustomAttrs |> AttribInfosOfIL g amap ilminfo.MetadataScope m + | FSMeth (g,_,vref,_) -> vref.Attribs |> AttribInfosOfFS g + | DefaultStructCtor _ -> [] +#if EXTENSIONTYPING + // TODO: provided attributes + | ProvidedMeth (_,_mi,_,_m) -> + [] + +#endif + + let GetAttribInfosOfProp amap m pinfo = + match pinfo with + | ILProp(g,ilpinfo) -> ilpinfo.RawMetadata.CustomAttrs |> AttribInfosOfIL g amap ilpinfo.ILTypeInfo.ILScopeRef m + | FSProp(g,_,Some vref,_) + | FSProp(g,_,_,Some vref) -> vref.Attribs |> AttribInfosOfFS g + | FSProp _ -> failwith "GetAttribInfosOfProp: unreachable" +#if EXTENSIONTYPING + // TODO: provided attributes + | ProvidedProp _ -> [] +#endif + + let GetAttribInfosOfEvent amap m einfo = + match einfo with + | ILEvent(g, x) -> x.RawMetadata.CustomAttrs |> AttribInfosOfIL g amap x.ILTypeInfo.ILScopeRef m + | FSEvent(_, pi, _vref1, _vref2) -> GetAttribInfosOfProp amap m pi +#if EXTENSIONTYPING + // TODO: provided attributes + | ProvidedEvent _ -> [] +#endif + + /// Analyze three cases for attributes declared on type definitions: IL-declared attributes, F#-declared attributes and + /// provided attributes. + // + // This is used for AttributeUsageAttribute, DefaultMemberAttribute and ConditionalAttribute (on attribute types) + let TryBindTyconRefAttribute g m (AttribInfo (atref,_) as args) (tcref:TyconRef) f1 f2 f3 = + ignore m; ignore f3 + match metadataOfTycon tcref.Deref with +#if EXTENSIONTYPING + | ProvidedTypeMetadata info -> + let provAttribs = info.ProvidedType.PApply((fun a -> (a :> IProvidedCustomAttributeProvider)),m) + match provAttribs.PUntaint((fun a -> a.GetAttributeConstructorArgs(provAttribs.TypeProvider.PUntaintNoFailure(id), atref.FullName)),m) with + | Some args -> f3 args + | None -> None +#endif + | ILTypeMetadata (_,tdef) -> + match TryDecodeILAttribute g atref tdef.CustomAttrs with + | Some attr -> f1 attr + | _ -> None + | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> + match TryFindFSharpAttribute g args tcref.Attribs with + | Some attr -> f2 attr + | _ -> None + /// Analyze three cases for attributes declared on methods: IL-declared attributes, F#-declared attributes and /// provided attributes. let BindMethInfoAttributes m minfo f1 f2 f3 = @@ -2558,7 +2780,7 @@ module AttributeChecking = ignore f3 #endif BindMethInfoAttributes m minfo - (fun ilAttribs -> TryDecodeILAttribute g atref (Some(atref.Scope)) ilAttribs |> Option.bind f1) + (fun ilAttribs -> TryDecodeILAttribute g atref ilAttribs |> Option.bind f1) (fun fsAttribs -> TryFindFSharpAttribute g attribSpec fsAttribs |> Option.bind f2) #if EXTENSIONTYPING (fun provAttribs -> @@ -2591,7 +2813,7 @@ module AttributeChecking = /// Check IL attributes for 'ObsoleteAttribute', returning errors and warnings as data let private CheckILAttributes g cattrs m = let (AttribInfo(tref,_)) = g.attrib_SystemObsolete - match TryDecodeILAttribute g tref (Some(tref.Scope)) cattrs with + match TryDecodeILAttribute g tref cattrs with | Some ([ILAttribElem.String (Some msg) ],_) -> WarnD(ObsoleteWarning(msg,m)) | Some ([ILAttribElem.String (Some msg); ILAttribElem.Bool isError ],_) -> @@ -2676,7 +2898,7 @@ module AttributeChecking = /// Indicate if a list of IL attributes contains 'ObsoleteAttribute'. Used to suppress the item in intellisense. let CheckILAttributesForUnseen g cattrs _m = let (AttribInfo(tref,_)) = g.attrib_SystemObsolete - isSome (TryDecodeILAttribute g tref (Some(tref.Scope)) cattrs) + isSome (TryDecodeILAttribute g tref cattrs) /// Checks the attributes for CompilerMessageAttribute, which has an IsHidden argument that allows /// items to be suppressed from intellisense. @@ -3017,7 +3239,7 @@ type PropertyCollector(g,amap,m,typ,optFilter,ad) = else props.[pinfo] <- pinfo - member x.Collect(membInfo,vref:ValRef) = + member x.Collect(membInfo:ValMemberInfo,vref:ValRef) = match membInfo.MemberFlags.MemberKind with | MemberKind.PropertyGet -> let pinfo = FSProp(g,typ,Some vref,None) @@ -3118,7 +3340,7 @@ type InfoReader(g:TcGlobals, amap:Import.ImportMap) = infos /// Get the declared events of a type, not including inherited events - let GetImmediateIntrinsicEventsOfType (optFilter,ad) m typ = + let ComputeImmediateIntrinsicEventsOfType (optFilter,ad) m typ = let infos = match metadataOfTy g typ with #if EXTENSIONTYPING @@ -3145,8 +3367,8 @@ type InfoReader(g:TcGlobals, amap:Import.ImportMap) = infos /// Make a reference to a record or class field - let MakeRecdFieldInfo g typ tcref fspec = - RecdFieldInfo(argsOfAppTy g typ,mkNestedRecdFieldRef tcref fspec) + let MakeRecdFieldInfo g typ (tcref:TyconRef) fspec = + RecdFieldInfo(argsOfAppTy g typ,tcref.MakeNestedRecdFieldRef fspec) /// Get the F#-declared record fields or class 'val' fields of a type let GetImmediateIntrinsicRecdOrClassFieldsOfType (optFilter,_ad) _m typ = @@ -3178,7 +3400,7 @@ type InfoReader(g:TcGlobals, amap:Import.ImportMap) = FoldPrimaryHierarchyOfType (fun typ acc -> GetImmediateIntrinsicILFieldsOfType (optFilter,ad) m typ @ acc) g amap m AllowMultiIntfInstantiations.Yes typ [] let GetIntrinsicEventInfosUncached ((optFilter,ad),m,typ) = - FoldPrimaryHierarchyOfType (fun typ acc -> GetImmediateIntrinsicEventsOfType (optFilter,ad) m typ @ acc) g amap m AllowMultiIntfInstantiations.Yes typ [] + FoldPrimaryHierarchyOfType (fun typ acc -> ComputeImmediateIntrinsicEventsOfType (optFilter,ad) m typ @ acc) g amap m AllowMultiIntfInstantiations.Yes typ [] let GetIntrinsicRecdOrClassFieldInfosUncached ((optFilter,ad),m,typ) = FoldPrimaryHierarchyOfType (fun typ acc -> GetImmediateIntrinsicRecdOrClassFieldsOfType (optFilter,ad) m typ @ acc) g amap m AllowMultiIntfInstantiations.Yes typ [] @@ -3197,7 +3419,7 @@ type InfoReader(g:TcGlobals, amap:Import.ImportMap) = let minfos = GetImmediateIntrinsicMethInfosOfType (optFilter,ad) g amap m typ let pinfos = GetImmediateIntrinsicPropInfosOfType (optFilter,ad) g amap m typ let finfos = GetImmediateIntrinsicILFieldsOfType (optFilter,ad) m typ - let einfos = GetImmediateIntrinsicEventsOfType (optFilter,ad) m typ + let einfos = ComputeImmediateIntrinsicEventsOfType (optFilter,ad) m typ let rfinfos = GetImmediateIntrinsicRecdOrClassFieldsOfType (optFilter,ad) m typ match acc with | Some(MethodItem(inheritedMethSets)) when nonNil minfos -> Some(MethodItem (minfos::inheritedMethSets)) @@ -3291,6 +3513,8 @@ type InfoReader(g:TcGlobals, amap:Import.ImportMap) = member x.GetILFieldInfosOfType (optFilter,ad,m,typ) = ilFieldInfoCache.Apply(((optFilter,ad),m,typ)) + member x.GetImmediateIntrinsicEventsOfType (optFilter,ad,m,typ) = ComputeImmediateIntrinsicEventsOfType (optFilter,ad) m typ + /// Read the events of a type, including inherited ones. Cache the result for monomorphic types. member x.GetEventInfosOfType (optFilter,ad,m,typ) = eventInfoCache.Apply(((optFilter,ad),m,typ)) @@ -3395,7 +3619,7 @@ type private IndexedList<'T>(itemLists: 'T list list, itemsByName: NameMultiMap< // none the elements of 'itemsToAdd' are equivalent. itemsToAdd |> List.filter (fun item -> List.forall (keepTest item) (x.ItemsWithName(nmf item))) -/// Add all the items to the IndexedList, prefering the ones in the super-types. This is used to hide methods +/// Add all the items to the IndexedList, preferring the ones in the super-types. This is used to hide methods /// in super classes and/or hide overrides of methods in subclasses. /// /// Assume no items in 'items' are equivalent according to 'equivTest'. This is valid because each step in a @@ -3416,7 +3640,7 @@ let private FilterItemsInSubTypesBasedOnItemsInSuperTypes nmf keepTest itemLists ilist.AddItems(itemsToAdd,nmf) (loop itemLists).Items -/// Add all the items to the IndexedList, prefering the ones in the sub-types. +/// Add all the items to the IndexedList, preferring the ones in the sub-types. let private FilterItemsInSuperTypesBasedOnItemsInSubTypes nmf keepTest itemLists = let rec loop itemLists (indexedItemsInSubTypes:IndexedList<_>) = match itemLists with @@ -3481,7 +3705,7 @@ let private FilterOverrides findFlag (isVirt:'a->bool,isNewSlot,isDefiniteOverri // [] // type PC() = // inherit PB() - // // Here, PA.M amd PB.M have the same signature, so PA.M is unimplementable. + // // Here, PA.M and PB.M have the same signature, so PA.M is unimplementable. // // REVIEW: in future we may give a friendly error at this point // // type PD() = diff --git a/src/fsharp/layout.fs b/src/fsharp/layout.fs index 48ee99d9c2d..f20e600f2ac 100644 --- a/src/fsharp/layout.fs +++ b/src/fsharp/layout.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.Layout @@ -18,28 +18,25 @@ let spaces n = new String(' ',n) //-------------------------------------------------------------------------- let rec juxtLeft = function - Leaf (jl,_text,_jr) -> jl + | Leaf (jl,_text,_jr) -> jl | Node (jl,_l,_jm,_r,_jr,_joint) -> jl | Attr (_tag,_attrs,l) -> juxtLeft l let rec juxtRight = function - Leaf (_jl,_text,jr) -> jr + | Leaf (_jl,_text,jr) -> jr | Node (_jl,_l,_jm,_r,jr,_joint) -> jr | Attr (_tag,_attrs,l) -> juxtRight l -(* NOTE: - * emptyL might be better represented as a constructor, - * so then (Sep"") would have true meaning - *) +// NOTE: emptyL might be better represented as a constructor, so then (Sep"") would have true meaning let emptyL = Leaf (true,box "",true) let isEmptyL = function Leaf(true,tag,true) when unbox tag = "" -> true | _ -> false let mkNode l r joint = if isEmptyL l then r else if isEmptyL r then l else - let jl = juxtLeft l in - let jm = juxtRight l || juxtLeft r in - let jr = juxtRight r in + let jl = juxtLeft l + let jm = juxtRight l || juxtLeft r + let jr = juxtRight r Node(jl,l,jm,r,jr,joint) @@ -53,14 +50,8 @@ let rightL (str:string) = Leaf (true ,box str,false) let leftL (str:string) = Leaf (false,box str,true) let aboveL l r = mkNode l r (Broken 0) -let joinN i l r = mkNode l r (Breakable i) -let join = joinN 0 -let join1 = joinN 1 -let join2 = joinN 2 -let join3 = joinN 3 let tagAttrL str attrs ly = Attr (str,attrs,ly) -let linkL str ly = tagAttrL "html:a" [("href",str)] ly //-------------------------------------------------------------------------- //INDEX: constructors derived @@ -96,12 +87,12 @@ let sepListL x y = tagListL (fun prefixL -> prefixL ^^ x) y let bracketL l = leftL "(" ^^ l ^^ rightL ")" let tupleL xs = bracketL (sepListL (sepL ",") xs) let aboveListL = function - [] -> emptyL + | [] -> emptyL | [x] -> x | x::ys -> List.fold (fun pre y -> pre @@ y) x ys let optionL xL = function - None -> wordL "None" + | None -> wordL "None" | Some x -> wordL "Some" -- (xL x) let listL xL xs = leftL "[" ^^ sepListL (sepL ";") (List.map xL xs) ^^ rightL "]" @@ -219,20 +210,17 @@ let squashTo maxWidth layout = layout //-------------------------------------------------------------------------- -//INDEX: render +//INDEX: LayoutRenderer //-------------------------------------------------------------------------- -type render<'a,'b> = - (* exists 'b. - -- could use object type to get "exists 'b" on private state, - *) - abstract Start : unit -> 'b; - abstract AddText : 'b -> string -> 'b; - abstract AddBreak : 'b -> int -> 'b; - abstract AddTag : 'b -> string * (string * string) list * bool -> 'b; +type LayoutRenderer<'a,'b> = + abstract Start : unit -> 'b + abstract AddText : 'b -> string -> 'b + abstract AddBreak : 'b -> int -> 'b + abstract AddTag : 'b -> string * (string * string) list * bool -> 'b abstract Finish : 'b -> 'a -let renderL (rr: render<_,_>) layout = +let renderL (rr: LayoutRenderer<_,_>) layout = let rec addL z pos i layout k = match layout with (* pos is tab level *) @@ -262,7 +250,7 @@ let renderL (rr: render<_,_>) layout = /// string render let stringR = - { new render with + { new LayoutRenderer with member x.Start () = [] member x.AddText rstrs text = text::rstrs member x.AddBreak rstrs n = (spaces n) :: "\n" :: rstrs @@ -272,9 +260,9 @@ let stringR = type NoState = NoState type NoResult = NoResult -/// channel render +/// channel LayoutRenderer let channelR (chan:TextWriter) = - { new render with + { new LayoutRenderer with member r.Start () = NoState member r.AddText z s = chan.Write s; z member r.AddBreak z n = chan.WriteLine(); chan.Write (spaces n); z @@ -283,40 +271,13 @@ let channelR (chan:TextWriter) = /// buffer render let bufferR os = - { new render with + { new LayoutRenderer with member r.Start () = NoState member r.AddText z s = bprintf os "%s" s; z member r.AddBreak z n = bprintf os "\n"; bprintf os "%s" (spaces n); z member r.AddTag z (tag,attrs,start) = z member r.Finish z = NoResult } -/// html render - wraps HTML encoding (REVIEW) and hyperlinks -let htmlR (baseR : render<'Res,'State>) = - { new render<'Res,'State> with - member r.Start () = baseR.Start() - member r.AddText z s = baseR.AddText z s; (* REVIEW: escape HTML chars *) - member r.AddBreak z n = baseR.AddBreak z n - member r.AddTag z (tag,attrs,start) = - match tag,attrs with - | "html:a",[("href",link)] -> - if start - then baseR.AddText z (sprintf "" link) - else baseR.AddText z (sprintf "") - | _ -> z - member r.Finish z = baseR.Finish z } - -/// indent render - wraps fixed indentation -let indentR indent (baseR : render<'Res,'State>) = - { new render<'Res,'State> with - member r.Start () = - let z = baseR.Start() - let z = baseR.AddText z (spaces indent) - z - member r.AddText z s = baseR.AddText z s; (* REVIEW: escape HTML chars *) - member r.AddBreak z n = baseR.AddBreak z (n+indent); - member r.AddTag z (tag,attrs,start) = baseR.AddTag z (tag,attrs,start) - member r.Finish z = baseR.Finish z } - //-------------------------------------------------------------------------- //INDEX: showL, outL are most common //-------------------------------------------------------------------------- diff --git a/src/fsharp/layout.fsi b/src/fsharp/layout.fsi index e5070926a99..8d8ec6c589b 100644 --- a/src/fsharp/layout.fsi +++ b/src/fsharp/layout.fsi @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. module internal Microsoft.FSharp.Compiler.Layout @@ -39,32 +39,28 @@ val aboveListL : Layout list -> Layout val optionL : ('a -> Layout) -> 'a option -> Layout val listL : ('a -> Layout) -> 'a list -> Layout -val linkL : string -> Layout -> Layout - val squashTo : int -> Layout -> Layout val showL : Layout -> string val outL : TextWriter -> Layout -> unit val bufferL : StringBuilder -> Layout -> unit -(* render a Layout yielding an 'a using a 'b (hidden state) type *) -type ('a,'b) render = - abstract Start : unit -> 'b; - abstract AddText : 'b -> string -> 'b; - abstract AddBreak : 'b -> int -> 'b; - abstract AddTag : 'b -> string * (string * string) list * bool -> 'b; +/// render a Layout yielding an 'a using a 'b (hidden state) type +type LayoutRenderer<'a,'b> = + abstract Start : unit -> 'b + abstract AddText : 'b -> string -> 'b + abstract AddBreak : 'b -> int -> 'b + abstract AddTag : 'b -> string * (string * string) list * bool -> 'b abstract Finish : 'b -> 'a -(* Run a render on a Layout *) -val renderL : ('b,'a) render -> Layout -> 'b - -(* Primitive renders *) -val stringR : (string,string list) render type NoState = NoState type NoResult = NoResult -val channelR : TextWriter -> (NoResult,NoState) render -val bufferR : StringBuilder -> (NoResult,NoState) render -(* Combinator renders *) -val htmlR : ('a,'b) render -> ('a,'b) render (* assumes in
 context *)
-val indentR  : int -> ('a,'b) render -> ('a,'b) render
+/// Run a render on a Layout       
+val renderL  : LayoutRenderer<'b,'a> -> Layout -> 'b
+
+/// Primitive renders 
+val stringR  : LayoutRenderer
+val channelR : TextWriter -> LayoutRenderer
+val bufferR  : StringBuilder -> LayoutRenderer
+
diff --git a/src/fsharp/lex.fsl b/src/fsharp/lex.fsl
index de4dfc84c25..131b0ad7013 100644
--- a/src/fsharp/lex.fsl
+++ b/src/fsharp/lex.fsl
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 {
 
diff --git a/src/fsharp/lexhelp.fs b/src/fsharp/lexhelp.fs
index 08db08e8e7d..6aa2c1f18d7 100644
--- a/src/fsharp/lexhelp.fs
+++ b/src/fsharp/lexhelp.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 module internal Microsoft.FSharp.Compiler.Lexhelp
 
@@ -338,7 +338,7 @@ module Keywords =
                 let dirname  = if filename = stdinMockFilename then
                                    System.IO.Directory.GetCurrentDirectory()
                                else
-                                   filename |> FileSystem.SafeGetFullPath (* asserts that path is already absolute *)
+                                   filename |> FileSystem.GetFullPathShim (* asserts that path is already absolute *)
                                             |> System.IO.Path.GetDirectoryName
                 KEYWORD_STRING dirname
             | "__SOURCE_FILE__" -> 
diff --git a/src/fsharp/lexhelp.fsi b/src/fsharp/lexhelp.fsi
index 8202c3da675..4ef4e5edfbb 100644
--- a/src/fsharp/lexhelp.fsi
+++ b/src/fsharp/lexhelp.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 module internal Microsoft.FSharp.Compiler.Lexhelp
 
@@ -12,7 +12,7 @@ open Microsoft.FSharp.Compiler
 
 
 
-val internal stdinMockFilename : string
+val stdinMockFilename : string
 
 []
 type LightSyntaxStatus =
@@ -42,30 +42,30 @@ val resetLexbufPos : string -> UnicodeLexing.Lexbuf -> unit
 val mkLexargs : 'a * string list * LightSyntaxStatus * LexResourceManager * LexerIfdefStack * ErrorLogger -> lexargs
 val reusingLexbufForParsing : UnicodeLexing.Lexbuf -> (unit -> 'a) -> 'a 
 
-val internal usingLexbufForParsing : UnicodeLexing.Lexbuf * string -> (UnicodeLexing.Lexbuf -> 'a) -> 'a
-val internal defaultStringFinisher : 'a -> 'b -> byte[] -> Parser.token
-val internal callStringFinisher : ('a -> 'b -> byte[] -> 'c) -> AbstractIL.Internal.ByteBuffer -> 'a -> 'b -> 'c
-val internal addUnicodeString : AbstractIL.Internal.ByteBuffer -> string -> unit
-val internal addUnicodeChar : AbstractIL.Internal.ByteBuffer -> int -> unit
-val internal addByteChar : AbstractIL.Internal.ByteBuffer -> char -> unit
-val internal stringBufferAsString : byte[] -> string
-val internal stringBufferAsBytes : AbstractIL.Internal.ByteBuffer -> byte[]
-val internal stringBufferIsBytes : AbstractIL.Internal.ByteBuffer -> bool
-val internal newline : Lexing.LexBuffer<'a> -> unit
-val internal trigraph : char -> char -> char -> char
-val internal digit : char -> int32
-val internal hexdigit : char -> int32
-val internal unicodeGraphShort : string -> uint16
-val internal hexGraphShort : string -> uint16
-val internal unicodeGraphLong : string -> LongUnicodeLexResult
-val internal escape : char -> char
+val usingLexbufForParsing : UnicodeLexing.Lexbuf * string -> (UnicodeLexing.Lexbuf -> 'a) -> 'a
+val defaultStringFinisher : 'a -> 'b -> byte[] -> Parser.token
+val callStringFinisher : ('a -> 'b -> byte[] -> 'c) -> AbstractIL.Internal.ByteBuffer -> 'a -> 'b -> 'c
+val addUnicodeString : AbstractIL.Internal.ByteBuffer -> string -> unit
+val addUnicodeChar : AbstractIL.Internal.ByteBuffer -> int -> unit
+val addByteChar : AbstractIL.Internal.ByteBuffer -> char -> unit
+val stringBufferAsString : byte[] -> string
+val stringBufferAsBytes : AbstractIL.Internal.ByteBuffer -> byte[]
+val stringBufferIsBytes : AbstractIL.Internal.ByteBuffer -> bool
+val newline : Lexing.LexBuffer<'a> -> unit
+val trigraph : char -> char -> char -> char
+val digit : char -> int32
+val hexdigit : char -> int32
+val unicodeGraphShort : string -> uint16
+val hexGraphShort : string -> uint16
+val unicodeGraphLong : string -> LongUnicodeLexResult
+val escape : char -> char
 
-exception internal ReservedKeyword of string * Range.range
-exception internal IndentationProblem of string * Range.range
+exception ReservedKeyword of string * Range.range
+exception IndentationProblem of string * Range.range
 
 module Keywords = 
-    val internal KeywordOrIdentifierToken : lexargs -> UnicodeLexing.Lexbuf -> string -> Parser.token
-    val internal IdentifierToken : lexargs -> UnicodeLexing.Lexbuf -> string -> Parser.token
-    val internal QuoteIdentifierIfNeeded : string -> string
-    val mutable internal permitFsharpKeywords : bool 
+    val KeywordOrIdentifierToken : lexargs -> UnicodeLexing.Lexbuf -> string -> Parser.token
+    val IdentifierToken : lexargs -> UnicodeLexing.Lexbuf -> string -> Parser.token
+    val QuoteIdentifierIfNeeded : string -> string
+    val mutable permitFsharpKeywords : bool 
     val keywordNames : string list
diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs
old mode 100644
new mode 100755
index ee5d2818c69..424ffbfbdb0
--- a/src/fsharp/lib.fs
+++ b/src/fsharp/lib.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 module internal Microsoft.FSharp.Compiler.Lib
 
@@ -19,6 +19,8 @@ let tracking = ref false // intended to be a general hook to control diagnostic
 let condition _s = 
     try (System.Environment.GetEnvironmentVariable(_s) <> null) with _ -> false
 
+let GetEnvInteger e dflt = match System.Environment.GetEnvironmentVariable(e) with null -> dflt | t -> try int t with _ -> dflt
+
 let dispose (x:System.IDisposable) = match x with null -> () | x -> x.Dispose()
 
 //-------------------------------------------------------------------------
@@ -88,48 +90,6 @@ module NameMap =
     let domainL m = Zset.elements (domain m)
 
 
-(*
-
-//-------------------------------------------------------------------------
-// Library: Atoms
-//------------------------------------------------------------------------
-
-type AtomTable = 
-    { LookupTable : Dictionary
-      EncodeTable : Dictionary }
-    member at.Encode(name:string) = 
-        let mutable res = 0 
-        let idx = 
-            if at.EncodeTable.TryGetValue(name, &res) then 
-                res
-            else
-                let idx = at.EncodeTable.Count
-                at.LookupTable.[idx] <- name
-                at.EncodeTable.[name] <- idx
-                idx
-        Atom(res
-#if DEBUG
-             ,at
-#endif
-            )
-
-
-and Atom internal (idx:int32
-#if DEBUG
-                   ,_provider:AtomTable
-#endif
-                   ) =
-    member __.Index = idx
-    member __.Deref(provider: AtomTable) = 
-       
-#if DEBUG
-        assert (provider = _provider)
-        assert (provider.LookupTable.ContainsKey idx)
-#endif
-        provider.LookupTable.[idx]
-*)            
-
-    
 
 //---------------------------------------------------------------------------
 // Library: Pre\Post checks
@@ -383,53 +343,6 @@ type Graph<'Data, 'Id when 'Id : comparison and 'Id : equality>
             else List.iter (trace (node.nodeData::path)) node.nodeNeighbours
         List.iter (fun node -> trace [] node) nodes 
 
-#if OLDCODE
-
-    member g.DepthFirstSearch() = 
-        let grey = ref Set.empty 
-        let time = ref 0
-        let forest = ref []
-        let backEdges = ref []
-        let discoveryTimes = ref Map.empty 
-        let finishingTimes = ref Map.empty 
-        nodes |> List.iter (fun n ->  
-            // build a dfsTree for each node in turn 
-            let treeEdges = ref []
-            let rec visit n1 = 
-                incr time;
-                grey := Set.add n1.nodeId !grey;
-                discoveryTimes := Map.add n1.nodeId !time !discoveryTimes;
-                for n2 in n1.nodeNeighbours do
-                    if not ((!grey).Contains n2.nodeId) then 
-                        treeEdges := (n1.nodeId,n2.nodeId) :: !treeEdges;
-                        visit(n2)
-                    else 
-                        backEdges := (n1.nodeId,n2.nodeId) :: !backEdges
-                incr time;
-                finishingTimes := Map.add n1.nodeId !time !finishingTimes;
-                ()
-            if not ((!grey).Contains n.nodeId) then 
-                visit(n);
-                forest := (n.nodeId,!treeEdges) :: !forest);
-
-        !forest, !backEdges,  (fun n -> (!discoveryTimes).[n]), (fun n -> (!finishingTimes).[n])
- 
-
-    // Present strongly connected components, in dependency order 
-    // Each node is assumed to have a self-edge 
-    member g.GetTopologicalSortStronglyConnectedComponents() = 
-        let forest, backEdges, discoveryTimes, finishingTimes = g.DepthFirstSearch()
-        let nodeIds = List.map (fun n -> n.nodeId) nodes
-        let nodesInDecreasingFinishingOrder = 
-          List.sortWith (fun n1 n2 -> -(compare (finishingTimes n1) (finishingTimes n2))) nodeIds
-        let gT = Graph (nodeIdentity, List.map g.GetNodeData nodesInDecreasingFinishingOrder, List.map (fun (x,y) -> (g.GetNodeData y, g.GetNodeData x)) edges)
-        let forest, backEdges, discoveryTimes, finishingTimes = gT.DepthFirstSearch()
-        let scc (root,tree) = Set.add root (List.foldBack (fun (n1,n2) acc -> Set.add n1 (Set.add n2 acc)) tree Set.empty)
-        let sccs = List.rev (List.map scc forest)
-        List.map (Set.toList >> List.map g.GetNodeData) sccs
-#endif
-
-
 //---------------------------------------------------------------------------
 // In some cases we play games where we use 'null' as a more efficient representation
 // in F#. The functions below are used to give initial values to mutable fields.
@@ -481,7 +394,7 @@ let inline cacheOptRef cache f =
 // and goes depending on whether components are NGEN'd or not, e.g. 'ngen install FSharp.COmpiler.dll'
 // One workaround for the bug is to break NGEN loading and fixups into smaller fragments. Roughly speaking, the NGEN
 // loading process works by doing delayed fixups of references in NGEN code. This happens on a per-method
-// basis. For example, one manifestation is that a "print" before calling a method like Lexfilter.create gets
+// basis. For example, one manifestation is that a "print" before calling a method like LexFilter.create gets
 // displayed but the corresponding "print" in the body of that function doesn't get displayed. In between, the NGEN
 // image loader is performing a whole bunch of fixups of the NGEN code for the body of that method, and also for
 // bodies of methods referred to by that method. That second bit is very important: the fixup causing the crash may
@@ -491,7 +404,7 @@ let inline cacheOptRef cache f =
 // what the function 'delayInsertedToWorkaroundKnownNgenBug' is for. If you get this problem, try inserting 
 //    delayInsertedToWorkaroundKnownNgenBug "Delay1" (fun () -> ...)
 // at the top of the function that doesn't seem to be being called correctly. This will help you isolate out the problem
-// and may make the problem go away altogher. Enable the 'print' commands in that function too.
+// and may make the problem go away altogether. Enable the 'print' commands in that function too.
 
 let delayInsertedToWorkaroundKnownNgenBug s f = 
     (* Some random code to prevent inlining of this function *)
diff --git a/src/fsharp/opt.fsi b/src/fsharp/opt.fsi
deleted file mode 100644
index ab33a344e59..00000000000
--- a/src/fsharp/opt.fsi
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-module internal Microsoft.FSharp.Compiler.Opt
-
-open Internal.Utilities
-open Microsoft.FSharp.Compiler 
-open Microsoft.FSharp.Compiler.Env 
-open Microsoft.FSharp.Compiler.Tast
-open Microsoft.FSharp.Compiler.AbstractIL 
-open Microsoft.FSharp.Compiler.AbstractIL.Internal 
-
-type OptimizationSettings = 
-    { abstractBigTargets : bool
-      jitOptUser : bool option
-      localOptUser : bool option
-      crossModuleOptUser : bool option
-      bigTargetSize : int
-      veryBigExprSize : int 
-      lambdaInlineThreshold : int
-      reportingPhase : bool;
-      reportNoNeedToTailcall: bool
-      reportFunctionSizes : bool
-      reportHasEffect : bool
-      reportTotalSizes : bool }
-
-    member jitOpt : unit -> bool 
-    member localOpt : unit -> bool 
-    static member Defaults : OptimizationSettings
-
-/// Optimization information 
-type ModuleInfo
-type LazyModuleInfo = Lazy
-
-#if NO_COMPILER_BACKEND
-#else
-[]
-type IncrementalOptimizationEnv =
-    static member Empty : IncrementalOptimizationEnv
-
-/// For building optimization environments incrementally 
-val internal BindCcu : CcuThunk -> LazyModuleInfo -> IncrementalOptimizationEnv -> TcGlobals -> IncrementalOptimizationEnv
-
-/// The entry point. Boolean indicates 'incremental extension' in FSI 
-val internal OptimizeImplFile : OptimizationSettings *  CcuThunk (* scope *) * Env.TcGlobals * ConstraintSolver.TcValF * Import.ImportMap * IncrementalOptimizationEnv * isIncrementalFragment: bool * emitTaicalls: bool * TypedImplFile -> IncrementalOptimizationEnv * TypedImplFile * LazyModuleInfo
-
-/// Displaying optimization data
-val internal moduleInfoL : TcGlobals -> LazyModuleInfo -> Layout.layout
-
-/// Saving and re-reading optimization information 
-val p_LazyModuleInfo : LazyModuleInfo -> Pickle.WriterState -> unit 
-
-/// Rewrite the modul info using the export remapping 
-val RemapLazyModulInfo : Env.TcGlobals -> Tastops.Remap -> (LazyModuleInfo -> LazyModuleInfo)
-val AbstractLazyModulInfoToEssentials : (LazyModuleInfo -> LazyModuleInfo)
-val UnionModuleInfos: seq -> LazyModuleInfo
-val ExprHasEffect: Env.TcGlobals -> Expr -> bool
-#endif
-
-val internal u_LazyModuleInfo : Pickle.ReaderState -> LazyModuleInfo
diff --git a/src/fsharp/outcome.fs b/src/fsharp/outcome.fs
deleted file mode 100644
index d2a348d455f..00000000000
--- a/src/fsharp/outcome.fs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-// --------------------------------------------------------------------	
-// Outcomes.  These are used to describe steps of a machine that
-// may raise errors.  The errors can be trapped.
-// --------------------------------------------------------------------	
-
-module internal Microsoft.FSharp.Compiler.Outcome
-
-open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-
-let success a = Result a
-let raze (b:exn) = Exception b
-
-// map
-let (|?>) res f = 
-  match res with 
-  | Result x -> Result(f x )
-  | Exception err -> Exception err
-  
-let ForceRaise = function
-  | Result x -> x
-  | Exception err -> raise err
-
-let otherwise f x =
-  match x with 
-  | Result x -> success x
-  | Exception _err -> f()
-
-    
diff --git a/src/fsharp/outcome.fsi b/src/fsharp/outcome.fsi
deleted file mode 100644
index 64cd9f4968d..00000000000
--- a/src/fsharp/outcome.fsi
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-module internal Microsoft.FSharp.Compiler.Outcome
-
-open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-
-val success : 'T -> ResultOrException<'T>
-val raze : exn -> ResultOrException<'T>
-val ( |?> ) : ResultOrException<'T> -> ('T -> 'U) -> ResultOrException<'U>
-val ForceRaise : ResultOrException<'T> -> 'T
-val otherwise : (unit -> ResultOrException<'T>) -> ResultOrException<'T> -> ResultOrException<'T>
diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy
old mode 100644
new mode 100755
index 390653be97d..8b12825e181
--- a/src/fsharp/pars.fsy
+++ b/src/fsharp/pars.fsy
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 %{
 
@@ -30,7 +30,8 @@ let debugPrint(s) = ignore s
 let exprFromParseError (e:SynExpr) = SynExpr.FromParseError(e,e.Range)
 let patFromParseError (e:SynPat) = SynPat.FromParseError(e, e.Range)
 
-let mkSynOptionalExpr m xopt = 
+let mkSynOptionalExpr (m: range) xopt = 
+    let m = m.MakeSynthetic()
     match xopt with 
     | None -> mkSynLidGet m Ast.FSharpLib.CorePath "None"
     | Some x  -> SynExpr.App(ExprAtomicFlag.NonAtomic, false, mkSynLidGet m Ast.FSharpLib.CorePath "Some",x,m)
@@ -258,12 +259,13 @@ let rangeOfLongIdent(lid:LongIdent) =
 %token  COMMENT WHITESPACE HASH_LINE HASH_LIGHT INACTIVECODE LINE_COMMENT STRING_TEXT EOF
 %token  HASH_IF HASH_ELSE HASH_ENDIF 
 
-%start signatureFile implementationFile interaction 
+%start signatureFile implementationFile interaction typedSeqExprEOF typEOF
+%type  typedSeqExprEOF
 %type  implementationFile
 %type  signatureFile
 %type  interaction
 %type  ident
-%type  typ
+%type  typ typEOF
 %type  tyconSpfns
 %type  patternResult
 %type  declExpr
@@ -495,10 +497,9 @@ interaction:
      { IDefns ([],lhs parseState) }
 
 
-/* The terminator of an interaction in F# Interactive */
 interactiveTerminator: 
   | SEMICOLON_SEMICOLON {}
-  | EOF     {}
+  | EOF     { checkEndOfFileError $1 }
 
 
 /* An group of items considered to be one interaction, plus a terminator */
@@ -1001,7 +1002,6 @@ classMemberSpfnGetSetElements:
          raiseParseErrorAt (rhs2 parseState 1 3) (FSComp.SR.parsGetOrSetRequired());
       MemberKind.PropertyGetSet }
 
-
 memberSpecFlags: 
   | memberFlags { $1 }  
   | ABSTRACT        { (false,AbstractMemberFlags) }
@@ -1445,8 +1445,10 @@ tyconDefn:
          match tcDefRepr with
          | SynTypeDefnRepr.ObjectModel (k,cspec,m) -> SynTypeDefnRepr.ObjectModel (k,memberCtorPattern::cspec,m)
          | _ -> reportParseErrorAt (rhs2 parseState 1 5) (FSComp.SR.parsOnlyClassCanTakeValueArguments()); tcDefRepr
-      
-       TypeDefn($1,tcDefRepr,members, unionRanges (rhs parseState 1) tcDefRepr.Range)  }
+       let declRange = unionRanges (rhs parseState 1) tcDefRepr.Range
+       let mWhole = (declRange, members) ||> unionRangeWithListBy (fun (mem:SynMemberDefn) -> mem.Range)
+       
+       TypeDefn($1,tcDefRepr,members,mWhole) }
 
 
 /* The right-hand-side of a type definition */
@@ -2938,6 +2940,9 @@ typedSeqExpr:
   | seqExpr COLON               typeWithTypeConstraints { SynExpr.Typed ($1,$3, unionRanges $1.Range $3.Range) }
   | seqExpr { $1 }
 
+typedSeqExprEOF:
+  | typedSeqExpr EOF { checkEndOfFileError $2; $1 }
+
 seqExpr:
   | declExpr seps seqExpr
       { SynExpr.Sequential(SequencePointsAtSeq,true,$1,$3,unionRanges $1.Range $3.Range) } 
@@ -4218,6 +4223,9 @@ typ:
   | tupleType %prec prec_typ_prefix 
      { $1 }
 
+typEOF:
+  | typ EOF { checkEndOfFileError $2; $1 }
+
 
 tupleType:
   | appType STAR tupleOrQuotTypeElements 
@@ -4580,7 +4588,8 @@ typar:
 staticallyKnownHeadTypar: 
   | INFIX_AT_HAT_OP ident 
     {  if $1 <> "^" then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedTypeParameter());
-       Typar($2,HeadTypeStaticReq,false) }
+       let id = mkSynId (lhs parseState) ($2).idText
+       Typar(id,HeadTypeStaticReq,false) }
 
   
 
diff --git a/src/fsharp/pickle.fsi b/src/fsharp/pickle.fsi
deleted file mode 100644
index deba917e2bf..00000000000
--- a/src/fsharp/pickle.fsi
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-module internal Microsoft.FSharp.Compiler.Pickle 
-
-open Internal.Utilities
-open Microsoft.FSharp.Compiler 
-open Microsoft.FSharp.Compiler.AbstractIL 
-open Microsoft.FSharp.Compiler.AbstractIL.IL
-open Microsoft.FSharp.Compiler.AbstractIL.Internal 
-open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-open Microsoft.FSharp.Compiler.Tast
-
-// Fixup pickled data w.r.t. a set of CCU thunks indexed by name
-[]
-type PickledDataWithReferences<'RawData> = 
-    { /// The data that uses a collection of CcuThunks internally
-      RawData: 'RawData; 
-      /// The assumptions that need to be fixed up
-      FixupThunks: list } 
-
-    member Fixup : (CcuReference -> CcuThunk) -> 'RawData
-    /// Like Fixup but loader may return None, in which case there is no fixup.
-    member OptionalFixup: (CcuReference -> CcuThunk option) -> 'RawData
-    
-#if INCLUDE_METADATA_WRITER
-type WriterState 
-
-type pickler<'T> = 'T -> WriterState -> unit
-val internal p_byte : int -> WriterState -> unit
-val internal p_bool : bool -> WriterState -> unit
-val internal p_int : int -> WriterState -> unit
-val internal p_string : string -> WriterState -> unit
-val internal p_lazy : 'T pickler -> Lazy<'T> pickler
-val inline  internal p_tup2 : ('T1 pickler) -> ('T2 pickler) -> ('T1 * 'T2) pickler
-val inline  internal p_tup3 : ('T1 pickler) -> ('T2 pickler) -> ('T3 pickler) -> ('T1 * 'T2 * 'T3) pickler
-val inline  internal p_tup4 : ('T1 pickler) -> ('T2 pickler) -> ('T3 pickler) -> ('T4 pickler) -> ('T1 * 'T2 * 'T3 * 'T4) pickler
-val internal p_array : 'T pickler -> 'T[] pickler
-val internal p_namemap : 'T pickler -> NameMap<'T> pickler
-val internal p_const : Const pickler
-val internal p_vref : string -> ValRef pickler
-val internal p_tcref : string -> TyconRef pickler
-val internal p_ucref : UnionCaseRef pickler
-val internal p_expr : Expr pickler
-val internal p_typ : TType pickler
-val internal pickleModuleOrNamespace : pickler
-val internal pickleModuleInfo : pickler
-val pickleObjWithDanglingCcus : string -> Env.TcGlobals -> scope:CcuThunk -> ('T pickler) -> 'T -> byte[]
-#else
-#endif
-
-type ReaderState 
-
-type unpickler<'T> = ReaderState -> 'T
-val internal u_byte : ReaderState -> int
-val internal u_bool : ReaderState -> bool
-val internal u_int : ReaderState -> int
-val internal u_string : ReaderState -> string
-val internal u_lazy : 'T unpickler -> Lazy<'T> unpickler
-val inline  internal u_tup2 : ('T2 unpickler) -> ('T3 unpickler ) -> ('T2 * 'T3) unpickler
-val inline  internal u_tup3 : ('T2 unpickler) -> ('T3 unpickler ) -> ('T4 unpickler ) -> ('T2 * 'T3 * 'T4) unpickler
-val inline  internal u_tup4 : ('T2 unpickler) -> ('T3 unpickler ) -> ('T4 unpickler ) -> ('T5 unpickler) -> ('T2 * 'T3 * 'T4 * 'T5) unpickler
-val internal u_array : 'T unpickler -> 'T[] unpickler
-val internal u_namemap : 'T unpickler -> NameMap<'T> unpickler
-val internal u_const : Const unpickler
-val internal u_vref : ValRef unpickler
-val internal u_tcref : TyconRef unpickler
-val internal u_ucref : UnionCaseRef unpickler
-val internal u_expr : Expr unpickler
-val internal u_typ : TType unpickler
-val internal unpickleModuleOrNamespace : ReaderState -> ModuleOrNamespace
-val internal unpickleModuleInfo : ReaderState -> PickledModuleInfo
-val internal unpickleObjWithDanglingCcus : string -> viewedScope:ILScopeRef -> ilModule:ILModuleDef -> ('T  unpickler) -> byte[] ->  PickledDataWithReferences<'T>
-
-
-
diff --git a/src/fsharp/pplex.fsl b/src/fsharp/pplex.fsl
index 8fe85ee7dea..d7b3a71b770 100644
--- a/src/fsharp/pplex.fsl
+++ b/src/fsharp/pplex.fsl
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 {
 
diff --git a/src/fsharp/pppars.fsy b/src/fsharp/pppars.fsy
index 0f76836c366..868cf94a602 100644
--- a/src/fsharp/pppars.fsy
+++ b/src/fsharp/pppars.fsy
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 %{
 open Microsoft.FSharp.Compiler.Ast
diff --git a/src/fsharp/range.fs b/src/fsharp/range.fs
old mode 100644
new mode 100755
index 776822ba062..019884754bf
--- a/src/fsharp/range.fs
+++ b/src/fsharp/range.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 /// Anything to do with special names of identifiers and other lexical rules 
 module internal Microsoft.FSharp.Compiler.Range
@@ -231,14 +231,29 @@ let trimRangeToLine (r:range) =
 let stringOfPos   (pos:pos) = sprintf "(%d,%d)" pos.Line pos.Column
 let stringOfRange (r:range) = sprintf "%s%s-%s" r.FileName (stringOfPos r.Start) (stringOfPos r.End)
 
+#if CHECK_LINE0_TYPES // turn on to check that we correctly transform zero-based line counts to one-based line counts
+// Visual Studio uses line counts starting at 0, F# uses them starting at 1 
+[] type ZeroBasedLineAnnotation
 
-module Pos =
+type Line0 = int
+#else
+type Line0 = int
+#endif
+type Pos01 = Line0 * int
+type Range01 = Pos01 * Pos01
+
+module Line =
     // Visual Studio uses line counts starting at 0, F# uses them starting at 1 
-    let fromVS line idx = mkPos (line+1) idx 
-    let toVS (p:pos) = (p.Line - 1, p.Column)
+    let fromZ (line:Line0) = int line+1
+    let toZ (line:int) : Line0 = LanguagePrimitives.Int32WithMeasure(line - 1)
+
+module Pos =
+    let fromZ (line:Line0) idx = mkPos (Line.fromZ line) idx 
+    let toZ (p:pos) = (Line.toZ p.Line, p.Column)
 
 
 module Range =
-    let toVS (m:range) = Pos.toVS m.Start, Pos.toVS m.End
+    let toZ (m:range) = Pos.toZ m.Start, Pos.toZ m.End
+    let toFileZ (m:range) = m.FileName, toZ m
 
 
diff --git a/src/fsharp/range.fsi b/src/fsharp/range.fsi
old mode 100644
new mode 100755
index c3403986663..07e2abd4c29
--- a/src/fsharp/range.fsi
+++ b/src/fsharp/range.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 module internal Microsoft.FSharp.Compiler.Range
 
@@ -86,11 +86,34 @@ val rangeCmdArgs : range
 val stringOfPos   : pos   -> string
 val stringOfRange : range -> string
 
-module Pos =
-    // Visual Studio uses line counts starting at 0, F# uses them starting at 1 
-    val fromVS : line:int -> column:int -> pos
-    val toVS : pos -> (int * int)
+/// Represents a line number when using zero-based line counting (used by Visual Studio)
+#if CHECK_LINE0_TYPES
+// Visual Studio uses line counts starting at 0, F# uses them starting at 1 
+[] type ZeroBasedLineAnnotation
+
+type Line0 = int
+#else
+type Line0 = int
+#endif
+
+/// Represents a position using zero-based line counting (used by Visual Studio)
+type Pos01 = Line0 * int
+/// Represents a range using zero-based line counting (used by Visual Studio)
+type Range01 = Pos01 * Pos01
 
+module Line =
+    /// Convert a line number from zero-based line counting (used by Visual Studio) to one-based line counting (used internally in the F# compiler and in F# error messages) 
+    val fromZ : Line0 -> int
+    /// Convert a line number from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio)
+    val toZ : int -> Line0 
+
+module Pos =
+    /// Convert a position from zero-based line counting (used by Visual Studio) to one-based line counting (used internally in the F# compiler and in F# error messages) 
+    val fromZ : line:Line0 -> column:int -> pos
+    /// Convert a position from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio)
+    val toZ : pos -> Pos01
 
 module Range =
-    val toVS : range -> (int * int) * (int * int)
+    /// Convert a range from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio)
+    val toZ : range -> Range01
+    val toFileZ : range -> string * Range01
diff --git a/src/fsharp/rational.fs b/src/fsharp/rational.fs
index f41f0d1c366..e17ebb93aca 100644
--- a/src/fsharp/rational.fs
+++ b/src/fsharp/rational.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 /// Rational arithmetic, used for exponents on units-of-measure
 module internal Microsoft.FSharp.Compiler.Rational
diff --git a/src/fsharp/rational.fsi b/src/fsharp/rational.fsi
index 866826a9662..6528a1881e4 100644
--- a/src/fsharp/rational.fsi
+++ b/src/fsharp/rational.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 /// Rational arithmetic, used for exponents on units-of-measure
 module internal Microsoft.FSharp.Compiler.Rational
diff --git a/src/fsharp/sr.fs b/src/fsharp/sr.fs
index e173b39db99..72506eac38b 100644
--- a/src/fsharp/sr.fs
+++ b/src/fsharp/sr.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler 
     open Microsoft.FSharp.Core
@@ -86,7 +86,7 @@ namespace Microsoft.FSharp.Compiler
                     b.AppendFormat(messageString, (Array.ofList (List.rev args))) |> ignore
                     box(b.ToString())
                 // REVIEW: For these purposes, this should be a nop, but I'm leaving it
-                // in incase we ever decide to support labels for the error format string
+                // in case we ever decide to support labels for the error format string
                 // E.g., "%s%d"
                 elif System.Char.IsSurrogatePair(fmt,i) then 
                    capture args ty (i+2)
diff --git a/src/fsharp/sr.fsi b/src/fsharp/sr.fsi
index ab65711747f..a47042cd2ed 100644
--- a/src/fsharp/sr.fsi
+++ b/src/fsharp/sr.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler 
     
diff --git a/src/fsharp/tainted.fs b/src/fsharp/tainted.fs
index 7917902e828..3bde45d1171 100644
--- a/src/fsharp/tainted.fs
+++ b/src/fsharp/tainted.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler
 
diff --git a/src/fsharp/tainted.fsi b/src/fsharp/tainted.fsi
index da19dbab06d..5e00f95b317 100644
--- a/src/fsharp/tainted.fsi
+++ b/src/fsharp/tainted.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler
 
@@ -70,7 +70,7 @@ type internal Tainted<'T> =
     /// Apply an operation that returns an option. Unwrap option. Any exception will be attributed to the type provider with an error located at the given range
     member PApplyOption : ('T -> 'U option) * range:range -> Tainted<'U> option
 
-    /// Apply an operation and 'untaint' the result. The result must be marshalable. Any exception will be attributed to the type provider with an error located at the given range
+    /// Apply an operation and 'untaint' the result. The result must be marshallable. Any exception will be attributed to the type provider with an error located at the given range
     member PUntaint : ('T -> 'U) * range:range -> 'U
 
     /// Apply an operation and 'untaint' the result. This can be used if the return type 
@@ -81,7 +81,7 @@ type internal Tainted<'T> =
     member OfType<'U> : unit -> Tainted<'U> option
 
     /// Assert that the value is of 'U and coerce the value.
-    /// If corecion fails, the failuer will be blamed on a type provider
+    /// If coercion fails, the failure will be blamed on a type provider
     member Coerce<'U> : range:range -> Tainted<'U>
 
 
diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs
old mode 100644
new mode 100755
index 725206e61ed..d1d95924c25
--- a/src/fsharp/tast.fs
+++ b/src/fsharp/tast.fs
@@ -1,5 +1,9 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
   
+//-------------------------------------------------------------------------
+// Defines the typed abstract syntax trees used throughout the F# compiler.
+//------------------------------------------------------------------------- 
+
 module internal Microsoft.FSharp.Compiler.Tast 
 
 open System
@@ -28,20 +32,15 @@ open Microsoft.FSharp.Compiler.ExtensionTyping
 open Microsoft.FSharp.Core.CompilerServices
 #endif
 
-#if DEBUG
-///verboseStamps: print #stamp on each id -- very verbose - but sometimes useful. Turn on using '--stamps'
-let verboseStamps = ref false
-#endif
-
 /// Unique name generator for stamps attached to lambdas and object expressions
 type Unique = int64
 //++GLOBAL MUTABLE STATE
-let newUnique = let i = ref 0L in fun () -> i := !i + 1L; !i
+let newUnique = let i = ref 0L in fun () -> System.Threading.Interlocked.Increment(i)
 type Stamp = int64
 
 /// Unique name generator for stamps attached to to val_specs, tycon_specs etc.
 //++GLOBAL MUTABLE STATE
-let newStamp = let i = ref 0L in fun () -> i := !i + 1L; !i
+let newStamp = let i = ref 0L in fun () -> System.Threading.Interlocked.Increment(i)
 
 /// A global generator of compiler generated names
 // ++GLOBAL MUTABLE STATE
@@ -239,6 +238,7 @@ type ValFlags(flags:int64) =
         // Clear the IsGeneratedEventVal, since there's no use in propagating specialname information for generated add/remove event vals
                                                       (flags       &&&    ~~~0b011001100000000000L) 
 
+/// Represents the kind of a type parameter
 []
 type TyparKind = 
     | Type 
@@ -253,7 +253,7 @@ type TyparKind =
       | TyparKind.Measure -> "measure"
 
 []
-/// Indicates if the type variable can be sovled or given new constraints. The status of a type variable
+/// Indicates if the type variable can be solved or given new constraints. The status of a type variable
 /// evolves towards being either rigid or solved. 
 type TyparRigidity = 
     /// Indicates the type parameter can't be solved
@@ -310,7 +310,7 @@ type TyparFlags(flags:int32) =
                                             | 0b000000001000 -> HeadTypeStaticReq
                                             | _             -> failwith "unreachable"
 
-    /// Indicates if the type variable can be sovled or given new constraints. The status of a type variable
+    /// Indicates if the type variable can be solved or given new constraints. The status of a type variable
     /// generally always evolves towards being either rigid or solved. 
     member x.Rigidity = 
                              match (flags &&& 0b000011100000) with 
@@ -407,11 +407,6 @@ type ModuleOrNamespaceKind =
     | Namespace
 
 
-/// The information ILXGEN needs about the location of an item
-type CompilationPath = 
-    | CompPath of ILScopeRef * (string * ModuleOrNamespaceKind) list
-    member x.ILScopeRef = (let (CompPath(scoref,_)) = x in scoref)
-    member x.AccessPath = (let (CompPath(_,p)) = x in p)
 
 
 /// A public path records where a construct lives within the global namespace
@@ -424,19 +419,25 @@ type PublicPath      =
         pp.[0..pp.Length-2]
 
 
+/// The information ILXGEN needs about the location of an item
+type CompilationPath = 
+    | CompPath of ILScopeRef * (string * ModuleOrNamespaceKind) list
+    member x.ILScopeRef = (let (CompPath(scoref,_)) = x in scoref)
+    member x.AccessPath = (let (CompPath(_,p)) = x in p)
+    member x.MangledPath = List.map fst x.AccessPath
+    member x.NestedPublicPath (id:Ident) = PubPath(Array.append (Array.ofList x.MangledPath) [| id.idText |])
+    member x.ParentCompPath = 
+        let a,_ = List.frontAndBack x.AccessPath
+        CompPath(x.ILScopeRef,a)
+    member x.NestedCompPath n modKind = CompPath(x.ILScopeRef,x.AccessPath@[(n,modKind)])
+
+
 let getNameOfScopeRef sref = 
     match sref with 
     | ILScopeRef.Local -> ""
     | ILScopeRef.Module mref -> mref.Name
     | ILScopeRef.Assembly aref -> aref.Name
-let mangledTextOfCompPath (CompPath(scoref,path)) = getNameOfScopeRef scoref + "/" + textOfPath (List.map fst path)
-  
-let mangledPathOfCompPath (CompPath(_,path))  = List.map fst path
-let publicPathOfCompPath (id:Ident) cpath = PubPath(Array.append (Array.ofList (mangledPathOfCompPath cpath)) [| id.idText |])
-let parentCompPath (CompPath(scoref,cpath)) = 
-    let a,_ = List.frontAndBack cpath 
-    CompPath(scoref,a)
-let mkNestedCPath (CompPath(scoref,p)) n modKind = CompPath(scoref,p@[(n,modKind)])
+
 
 #if EXTENSIONTYPING
 let definitionLocationOfProvidedItem (p : Tainted<#IProvidedCustomAttributeProvider>) =
@@ -451,24 +452,32 @@ let definitionLocationOfProvidedItem (p : Tainted<#IProvidedCustomAttributeProvi
     
 #endif
 
-// Type definitions, exception definitions, module definitions and
-// namespace definitions are all 'entities'. These have too much in common to make it 
-// worth factoring them out as separate types.
+/// Represents a type definition, exception definition, module definition or namespace definition.
 [] 
 type Entity = 
     { mutable Data: EntityData }
     /// The name of the namespace, module or type, possibly with mangling, e.g. List`1, List or FailureException 
     member x.LogicalName = x.Data.entity_logical_name
+
     /// The compiled name of the namespace, module or type, e.g. FSharpList`1, ListModule or FailureException 
     member x.CompiledName = match x.Data.entity_compiled_name with None -> x.LogicalName | Some s -> s
+
     /// The display name of the namespace, module or type, e.g. List instead of List`1, and no static parameters
     member x.DisplayName = x.GetDisplayName(false, false)
+
     /// The display name of the namespace, module or type with <_,_,_> added for generic types, plus static parameters if any
     member x.DisplayNameWithStaticParametersAndUnderscoreTypars = x.GetDisplayName(true, true)
 
     /// The display name of the namespace, module or type, e.g. List instead of List`1, including static parameters if any
     member x.DisplayNameWithStaticParameters = x.GetDisplayName(true, false)
 
+#if EXTENSIONTYPING
+    member x.IsStaticInstantiationTycon = 
+        x.IsProvidedErasedTycon &&
+            let _nm,args = PrettyNaming.demangleProvidedTypeName x.LogicalName
+            args.Length > 0 
+#endif
+
     member x.GetDisplayName(withStaticParameters, withUnderscoreTypars) = 
         let nm = x.LogicalName
         let getName () =
@@ -508,6 +517,19 @@ type Entity =
 #endif
         x.Data.entity_range
 
+    /// The range in the implementation, adjusted for an item in a signature
+    member x.DefinitionRange = 
+        match x.Data.entity_other_range with 
+        | Some (r, true) -> r
+        | _ -> x.Range
+
+    member x.SigRange = 
+        match x.Data.entity_other_range with 
+        | Some (r, false) -> r
+        | _ -> x.Range
+
+    member x.SetOtherRange m                              = x.Data.entity_other_range <- Some m
+
     /// A unique stamp for this module, namespace or type definition within the context of this compilation. 
     /// Note that because of signatures, there are situations where in a single compilation the "same" 
     /// module, namespace or type may have two distinct Entity objects that have distinct stamps.
@@ -580,7 +602,7 @@ type Entity =
     /// Indicates if this entity is an F# type abbreviation definition
     member x.IsTypeAbbrev = x.TypeAbbrev.IsSome
 
-    /// Get the value representing the accessiblity of the r.h.s. of an F# type definition.
+    /// Get the value representing the accessibility of the r.h.s. of an F# type definition.
     member x.TypeReprAccessibility = x.Data.entity_tycon_repr_accessibility
 
     /// Get the cache of the compiled ILTypeRef representation of this module or type.
@@ -589,7 +611,7 @@ type Entity =
     /// Get a blob of data indicating how this type is nested in other namespaces, modules or types.
     member x.PublicPath = x.Data.entity_pubpath
 
-    /// Get the value representing the accessiblity of an F# type definition or module.
+    /// Get the value representing the accessibility of an F# type definition or module.
     member x.Accessibility = x.Data.entity_accessiblity
 
     /// Indicates the type prefers the "tycon" syntax for display etc. 
@@ -669,7 +691,6 @@ type Entity =
 
     /// Get a list of all instance fields for F#-defined record, struct and class fields in this type definition.
     /// including hidden fields from the compilation of implicit class constructions.
-
     // NOTE: This method doesn't perform particularly well, and is over-used, but doesn't seem to appear on performance traces
     member x.AllInstanceFieldsAsList = x.AllFieldsAsList |> List.filter (fun f -> not f.IsStatic)
 
@@ -712,20 +733,16 @@ type Entity =
         | None -> None
 
     
-    // OSGN support
     /// Create a new entity with empty, unlinked data. Only used during unpickling of F# metadata.
     static member NewUnlinked() : Entity = { Data = nullableSlotEmpty() }
+
     /// Create a new entity with the given backing data. Only used during unpickling of F# metadata.
-    static member New reason (data: EntityData) : Entity  = 
-#if DEBUG
-        if !verboseStamps then 
-            dprintf "entity %s#%d (%s)\n" data.entity_logical_name data.entity_stamp reason
-#else
-        ignore(reason)
-#endif
+    static member New _reason (data: EntityData) : Entity  = 
         { Data = data }
+
     /// Link an entity based on empty, unlinked data to the given data. Only used during unpickling of F# metadata.
     member x.Link tg = x.Data <- nullableSlotFull(tg)
+
     /// Indicates if the entity is linked to backing data. Only used during unpickling of F# metadata.
     member x.IsLinked = match box x.Data with null -> false | _ -> true 
 
@@ -837,12 +854,16 @@ type Entity =
 
     /// Gets any implicit hash/equals (with comparer argument) methods added to an F# record, union or struct type definition.
     member x.GeneratedHashAndEqualsWithComparerValues = x.TypeContents.tcaug_hash_and_equals_withc 
+
     /// Gets any implicit CompareTo (with comparer argument) methods added to an F# record, union or struct type definition.
     member x.GeneratedCompareToWithComparerValues = x.TypeContents.tcaug_compare_withc
+
     /// Gets any implicit CompareTo methods added to an F# record, union or struct type definition.
     member x.GeneratedCompareToValues = x.TypeContents.tcaug_compare
+
     /// Gets any implicit hash/equals methods added to an F# record, union or struct type definition.
     member x.GeneratedHashAndEqualsValues = x.TypeContents.tcaug_equals
+
     /// Gets all implicit hash/equals/compare methods added to an F# record, union or struct type definition.
     member x.AllGeneratedValues = 
         [ match x.GeneratedCompareToValues with 
@@ -955,6 +976,11 @@ and
       /// The declaration location for the type constructor 
       entity_range: range
       
+      // MUTABILITY: the signature is adjusted when it is checked
+      /// If this field is populated, this is the implementation range for an item in a signature, otherwise it is 
+      /// the signature range for an item in an implementation
+      mutable entity_other_range: (range * bool) option
+      
       /// The declared accessibility of the representation, not taking signatures into account 
       entity_tycon_repr_accessibility: Accessibility
       
@@ -999,7 +1025,7 @@ and
       // REVIEW: it looks like entity_cpath subsumes this 
       entity_pubpath : PublicPath option 
 
-      /// Indicates how visible is the entitiy is.
+      /// Indicates how visible is the entity is.
       entity_accessiblity: Accessibility   
  
       /// The stable path to the type, e.g. Microsoft.FSharp.Core.FSharpFunc`2 
@@ -1128,36 +1154,47 @@ and
 
 #if EXTENSIONTYPING
 and 
-   [< RequireQualifiedAccess; NoComparison; NoEquality>]
+   []
    
    /// The information kept about a provided type
    TProvidedTypeInfo = 
    { /// The parameters given to the provider that provided to this type.
      ResolutionEnvironment : ExtensionTyping.ResolutionEnvironment
+
      /// The underlying System.Type (wrapped as a ProvidedType to make sure we don't call random things on
      /// System.Type, and wrapped as Tainted to make sure we track which provider this came from, for reporting
      /// error messages)
      ProvidedType:  Tainted
+
      /// The base type of the type. We use it to compute the compiled representation of the type for erased types.
      /// Reading is delayed, since it does an import on the underlying type
      LazyBaseType: LazyWithContext 
+
      /// A flag read eagerly from the provided type and used to compute basic properties of the type definition.
      IsClass:  bool 
+
      /// A flag read eagerly from the provided type and used to compute basic properties of the type definition.
      IsSealed:  bool 
+
      /// A flag read eagerly from the provided type and used to compute basic properties of the type definition.
      IsInterface:  bool 
      /// A flag read eagerly from the provided type and used to compute basic properties of the type definition.
      IsStructOrEnum: bool 
+
      /// A flag read eagerly from the provided type and used to compute basic properties of the type definition.
      IsEnum: bool 
+
      /// A type read from the provided type and used to compute basic properties of the type definition.
      /// Reading is delayed, since it does an import on the underlying type
      UnderlyingTypeOfEnum: (unit -> TType) 
+
      /// A flag read from the provided type and used to compute basic properties of the type definition.
      /// Reading is delayed, since it looks at the .BaseType
      IsDelegate: (unit -> bool) 
+
+     /// Indicates the type is erased
      IsErased: bool 
+
      /// Indicates the type is generated, but type-relocation is suppressed
      IsSuppressRelocate : bool }
 
@@ -1172,12 +1209,16 @@ and
   TyconObjModelKind = 
     /// Indicates the type is a class (also used for units-of-measure)
     | TTyconClass 
+
     /// Indicates the type is an interface 
     | TTyconInterface 
+
     /// Indicates the type is a struct 
     | TTyconStruct 
+
     /// Indicates the type is a delegate with the given Invoke signature 
     | TTyconDelegate of SlotSig 
+
     /// Indicates the type is an enumeration 
     | TTyconEnum
     
@@ -1190,17 +1231,19 @@ and
     []
     TyconObjModelData = 
     { /// Indicates whether the type declaration is a class, interface, enum, delegate or struct 
-      fsobjmodel_kind: TyconObjModelKind;
+      fsobjmodel_kind: TyconObjModelKind
+
       /// The declared abstract slots of the class, interface or struct 
-      fsobjmodel_vslots: ValRef list; 
+      fsobjmodel_vslots: ValRef list
+
       /// The fields of the class, struct or enum 
       fsobjmodel_rfields: TyconRecdFields }
 
 and 
-    []
+    []
     TyconRecdFields = 
     { /// The fields of the record, in declaration order. 
-      FieldsByIndex: RecdField[];
+      FieldsByIndex: RecdField[]
       
       /// The fields of the record, indexed by name. 
       FieldsByName : NameMap }
@@ -1215,10 +1258,10 @@ and
     member x.TrueInstanceFieldsAsList = x.AllFieldsAsList |> List.filter (fun f -> not f.IsStatic && not f.IsCompilerGenerated)   
 
 and 
-    []
+    []
     TyconUnionCases = 
     { /// The cases of the discriminated union, in declaration order. 
-      CasesByIndex: UnionCase[];
+      CasesByIndex: UnionCase[]
       /// The cases of the discriminated union, indexed by name. 
       CasesByName : NameMap
     }
@@ -1229,38 +1272,61 @@ and
     member x.UnionCasesAsList = x.CasesByIndex |> Array.toList
 
 and 
-    []
+    []
     TyconUnionData =
     { /// The cases contained in the discriminated union. 
-      CasesTable: TyconUnionCases;
+      CasesTable: TyconUnionCases
       /// The ILX data structure representing the discriminated union. 
-      CompiledRepresentation: IlxUnionRef cache; 
+      CompiledRepresentation: IlxUnionRef cache 
     }
     member x.UnionCasesAsList = x.CasesTable.CasesByIndex |> Array.toList
 
 and 
-    []
+    []
     []
     UnionCase =
     { /// Data carried by the case. 
-      FieldTable: TyconRecdFields;
+      FieldTable: TyconRecdFields
+
       /// Return type constructed by the case. Normally exactly the type of the enclosing type, sometimes an abbreviation of it 
-      ReturnType: TType;
+      ReturnType: TType
+
       /// Name of the case in generated IL code 
-      CompiledName: string;
+      CompiledName: string
+
       /// Documentation for the case 
-      XmlDoc : XmlDoc;
+      XmlDoc : XmlDoc
+
       /// XML documentation signature for the case
-      mutable XmlDocSig : string;
+      mutable XmlDocSig : string
+
       /// Name/range of the case 
-      Id: Ident; 
+      Id: Ident 
+
+      /// If this field is populated, this is the implementation range for an item in a signature, otherwise it is 
+      /// the signature range for an item in an implementation
+      // MUTABILITY: used when propagating signature attributes into the implementation.
+      mutable OtherRangeOpt : (range * bool) option
+
       ///  Indicates the declared visibility of the union constructor, not taking signatures into account 
-      Accessibility: Accessibility; 
+      Accessibility: Accessibility 
+
       /// Attributes, attached to the generated static method to make instances of the case 
       // MUTABILITY: used when propagating signature attributes into the implementation.
-      mutable Attribs: Attribs; }
+      mutable Attribs: Attribs }
 
     member uc.Range = uc.Id.idRange
+
+    member uc.DefinitionRange = 
+        match uc.OtherRangeOpt with 
+        | Some (m,true) -> m
+        | _ -> uc.Range 
+
+    member uc.SigRange = 
+        match uc.OtherRangeOpt with 
+        | Some (m,false) -> m
+        | _ -> uc.Range 
+
     member uc.DisplayName = uc.Id.idText
     member uc.RecdFieldsArray = uc.FieldTable.FieldsByIndex 
     member uc.RecdFields = uc.FieldTable.FieldsByIndex |> Array.toList
@@ -1273,53 +1339,107 @@ and
     []
     RecdField =
     { /// Is the field declared mutable in F#? 
-      rfield_mutable: bool;
+      rfield_mutable: bool
+
       /// Documentation for the field 
-      rfield_xmldoc : XmlDoc;
+      rfield_xmldoc : XmlDoc
+
       /// XML Documentation signature for the field
-      mutable rfield_xmldocsig : string;
+      mutable rfield_xmldocsig : string
+
       /// The type of the field, w.r.t. the generic parameters of the enclosing type constructor 
-      rfield_type: TType;
+      rfield_type: TType
+
       /// Indicates a static field 
-      rfield_static: bool;
+      rfield_static: bool
+
       /// Indicates a volatile field 
-      rfield_volatile: bool;
+      rfield_volatile: bool
+
       /// Indicates a compiler generated field, not visible to Intellisense or name resolution 
-      rfield_secret: bool;
+      rfield_secret: bool
+
       /// The default initialization info, for static literals 
-      rfield_const: Const option; 
+      rfield_const: Const option 
+
       ///  Indicates the declared visibility of the field, not taking signatures into account 
-      rfield_access: Accessibility; 
+      rfield_access: Accessibility 
+
       /// Attributes attached to generated property 
       // MUTABILITY: used when propagating signature attributes into the implementation.
-      mutable rfield_pattribs: Attribs; 
+      mutable rfield_pattribs: Attribs 
+
       /// Attributes attached to generated field 
       // MUTABILITY: used when propagating signature attributes into the implementation.
-      mutable rfield_fattribs: Attribs; 
+      mutable rfield_fattribs: Attribs 
+
       /// Name/declaration-location of the field 
-      rfield_id: Ident }
+      rfield_id: Ident 
+
+      /// If this field is populated, this is the implementation range for an item in a signature, otherwise it is 
+      /// the signature range for an item in an implementation
+      // MUTABILITY: used when propagating signature attributes into the implementation.
+      mutable rfield_other_range: (range * bool) option }
+
+    ///  Indicates the declared visibility of the field, not taking signatures into account 
     member v.Accessibility = v.rfield_access
+
+    /// Attributes attached to generated property 
     member v.PropertyAttribs = v.rfield_pattribs
+
+    /// Attributes attached to generated field 
     member v.FieldAttribs = v.rfield_fattribs
+
+    /// Declaration-location of the field 
     member v.Range = v.rfield_id.idRange
+
+    member v.DefinitionRange = 
+        match v.rfield_other_range with 
+        | Some (m, true) -> m
+        | _ -> v.Range 
+
+    member v.SigRange = 
+        match v.rfield_other_range with 
+        | Some (m, false) -> m
+        | _ -> v.Range 
+
+    /// Name/declaration-location of the field 
     member v.Id = v.rfield_id
+
+    /// Name of the field 
     member v.Name = v.rfield_id.idText
+
+      /// Indicates a compiler generated field, not visible to Intellisense or name resolution 
     member v.IsCompilerGenerated = v.rfield_secret
+
+    /// Is the field declared mutable in F#? 
     member v.IsMutable = v.rfield_mutable
+
+    /// Indicates a static field 
     member v.IsStatic = v.rfield_static
+
+    /// Indicates a volatile field 
     member v.IsVolatile = v.rfield_volatile
+
+    /// The type of the field, w.r.t. the generic parameters of the enclosing type constructor 
     member v.FormalType = v.rfield_type
+
+    /// XML Documentation signature for the field
     member v.XmlDoc = v.rfield_xmldoc
+
+    /// Get or set the XML documentation signature for the field
     member v.XmlDocSig
         with get() = v.rfield_xmldocsig
         and set(x) = v.rfield_xmldocsig <- x
 
+    /// The default initialization info, for static literals 
     member v.LiteralValue = 
         match v.rfield_const  with 
         | None -> None
         | Some Const.Zero -> None
         | Some k -> Some k
 
+    /// Indicates if the field is zero-initialized
     member v.IsZeroInit = 
         match v.rfield_const  with 
         | None -> false 
@@ -1329,10 +1449,13 @@ and
 and ExceptionInfo =
     /// Indicates that an exception is an abbreviation for the given exception 
     | TExnAbbrevRepr of TyconRef 
+
     /// Indicates that an exception is shorthand for the given .NET exception type 
     | TExnAsmRepr of ILTypeRef
+
     /// Indicates that an exception carries the given record of values 
     | TExnFresh of TyconRecdFields
+
     /// Indicates that an exception is abstract, i.e. is in a signature file, and we do not know the representation 
     | TExnNone
 
@@ -1469,8 +1592,8 @@ and
       /// Get a table of values indexed by logical name
       member mtyp.AllValsByLogicalName = 
           let addValByName (x:Val) tab = 
-             // Note: names may occur twice prior to raising errors about this in PostTypecheckSemanticChecks
-             // Earlier ones take precedence sice we report errors about the later ones
+             // Note: names may occur twice prior to raising errors about this in PostTypeCheckSemanticChecks
+             // Earlier ones take precedence since we report errors about the later ones
              if not x.IsMember && not x.IsCompilerGenerated then 
                  NameMap.add x.LogicalName x tab 
              else
@@ -1509,8 +1632,11 @@ and Tycon = Entity
 /// A set of static methods for constructing types.
 and Construct = 
       
-    static member NewModuleOrNamespaceType mkind tycons vals = ModuleOrNamespaceType(mkind, QueueList.ofList vals, QueueList.ofList tycons)
-    static member NewEmptyModuleOrNamespaceType mkind = Construct.NewModuleOrNamespaceType mkind [] []
+    static member NewModuleOrNamespaceType mkind tycons vals = 
+        ModuleOrNamespaceType(mkind, QueueList.ofList vals, QueueList.ofList tycons)
+
+    static member NewEmptyModuleOrNamespaceType mkind = 
+        Construct.NewModuleOrNamespaceType mkind [] []
 
 #if EXTENSIONTYPING
 
@@ -1576,32 +1702,33 @@ and Construct =
                 let enclosingName = ExtensionTyping.GetFSharpPathToProvidedType(st,m)
                 CompPath(ilScopeRef,enclosingName |> List.map(fun id->id,ModuleOrNamespaceKind.Namespace))
             | Some p -> p
-        let pubpath = publicPathOfCompPath id cpath
+        let pubpath = cpath.NestedPublicPath id
 
         let repr = Construct.NewProvidedTyconRepr(resolutionEnvironment, st, importProvidedType, isSuppressRelocate, m)
 
         Tycon.New "tycon"
-          { entity_stamp=stamp;
+          { entity_stamp=stamp
             entity_logical_name=name
-            entity_compiled_name=None;
-            entity_kind=kind;
-            entity_range=m;
-            entity_flags=EntityFlags(usesPrefixDisplay=false, isModuleOrNamespace=false,preEstablishedHasDefaultCtor=false, hasSelfReferentialCtor=false);
-            entity_attribs=[]; // fetched on demand via est.fs API
-            entity_typars= LazyWithContext.NotLazy [];
-            entity_tycon_abbrev = None;
-            entity_tycon_repr = repr;
-            entity_tycon_repr_accessibility = TAccess([]);
-            entity_exn_info=TExnNone;
-            entity_tycon_tcaug=TyconAugmentation.Create();
-            entity_modul_contents = lazy new ModuleOrNamespaceType(Namespace, QueueList.ofList [], QueueList.ofList []);
+            entity_compiled_name=None
+            entity_kind=kind
+            entity_range=m
+            entity_other_range=None
+            entity_flags=EntityFlags(usesPrefixDisplay=false, isModuleOrNamespace=false,preEstablishedHasDefaultCtor=false, hasSelfReferentialCtor=false)
+            entity_attribs=[] // fetched on demand via est.fs API
+            entity_typars= LazyWithContext.NotLazy []
+            entity_tycon_abbrev = None
+            entity_tycon_repr = repr
+            entity_tycon_repr_accessibility = TAccess([])
+            entity_exn_info=TExnNone
+            entity_tycon_tcaug=TyconAugmentation.Create()
+            entity_modul_contents = lazy new ModuleOrNamespaceType(Namespace, QueueList.ofList [], QueueList.ofList [])
             // Generated types get internal accessibility
-            entity_accessiblity= access;
-            entity_xmldoc =  XmlDoc [||]; // fetched on demand via est.fs API
-            entity_xmldocsig="";        
-            entity_pubpath = Some pubpath;
-            entity_cpath = Some cpath;
-            entity_il_repr_cache = newCache(); } 
+            entity_accessiblity= access
+            entity_xmldoc =  XmlDoc [||] // fetched on demand via est.fs API
+            entity_xmldocsig=""        
+            entity_pubpath = Some pubpath
+            entity_cpath = Some cpath
+            entity_il_repr_cache = newCache() } 
 #endif
 
     static member NewModuleOrNamespace cpath access (id:Ident) xml attribs mtype = 
@@ -1611,6 +1738,7 @@ and Construct =
           { entity_logical_name=id.idText
             entity_compiled_name=None
             entity_range = id.idRange
+            entity_other_range = None
             entity_stamp=stamp
             entity_kind=TyparKind.Type
             entity_modul_contents = mtype
@@ -1621,13 +1749,14 @@ and Construct =
             entity_tycon_repr_accessibility = access
             entity_exn_info=TExnNone
             entity_tycon_tcaug=TyconAugmentation.Create()
-            entity_pubpath=cpath |> Option.map (publicPathOfCompPath id)
+            entity_pubpath=cpath |> Option.map (fun (cp:CompilationPath) -> cp.NestedPublicPath id)
             entity_cpath=cpath
             entity_accessiblity=access
             entity_attribs=attribs
             entity_xmldoc=xml
             entity_xmldocsig=""        
             entity_il_repr_cache = newCache() } 
+
 and Accessibility = 
     /// Indicates the construct can only be accessed from any code in the given type constructor, module or assembly. [] indicates global scope. 
     | TAccess of CompilationPath list
@@ -1681,36 +1810,56 @@ and
     { mutable Data: TyparData
       /// A cached TAST type used when this type variable is used as type.
       mutable AsType: TType }
+
+    /// The name of the type parameter 
     member x.Name                = x.Data.typar_id.idText
+
+    /// The range of the identifier for the type parameter definition
     member x.Range               = x.Data.typar_id.idRange
+
+    /// The identifier for a type parameter definition
     member x.Id                  = x.Data.typar_id
-    /// The unique stamp of the typar definition
+
+    /// The unique stamp of the type parameter
     member x.Stamp               = x.Data.typar_stamp
+
     /// The inferred equivalence for the type inference variable, if any.
     member x.Solution            = x.Data.typar_solution
+
     /// The inferred constraints for the type inference variable, if any
     member x.Constraints         = x.Data.typar_constraints
+
     /// Indicates if the type variable is compiler generated, i.e. is an implicit type inference variable 
     member x.IsCompilerGenerated = x.Data.typar_flags.IsCompilerGenerated
-    /// Indicates if the type variable can be sovled or given new constraints. The status of a type variable
+
+    /// Indicates if the type variable can be solved or given new constraints. The status of a type variable
     /// generally always evolves towards being either rigid or solved. 
     member x.Rigidity            = x.Data.typar_flags.Rigidity
+
     /// Indicates if a type parameter is needed at runtime and may not be eliminated
     member x.DynamicReq          = x.Data.typar_flags.DynamicReq
+
     /// Indicates that whether or not a generic type definition satisfies the equality constraint is dependent on whether this type variable satisfies the equality constraint.
     member x.EqualityConditionalOn = x.Data.typar_flags.EqualityConditionalOn
+
     /// Indicates that whether or not a generic type definition satisfies the comparison constraint is dependent on whether this type variable satisfies the comparison constraint.
     member x.ComparisonConditionalOn = x.Data.typar_flags.ComparisonConditionalOn
+
     /// Indicates if the type variable has a static "head type" requirement, i.e. ^a variables used in FSharp.Core and member constraints.
     member x.StaticReq           = x.Data.typar_flags.StaticReq
+
     /// Indicates if the type inference variable was generated after an error when type checking expressions or patterns
     member x.IsFromError         = x.Data.typar_flags.IsFromError
+
     /// Indicates whether a type variable can be instantiated by types or units-of-measure.
     member x.Kind                = x.Data.typar_flags.Kind
+
     /// Indicates whether a type variable is erased in compiled .NET IL code, i.e. whether it is a unit-of-measure variable
     member x.IsErased            = match x.Kind with TyparKind.Type -> false | _ -> true
+
     /// The declared attributes of the type parameter. Empty for type inference variables and parameters from .NET 
     member x.Attribs             = x.Data.typar_attribs
+
     /// Indicates the display name of a type variable
     member x.DisplayName = if x.Name = "?" then "?"+string x.Stamp else x.Name
 
@@ -1743,7 +1892,7 @@ and
         | None -> false
         | _ -> true
 
-    /// Sets the identifier assocaited with a type variable
+    /// Sets the identifier associated with a type variable
     member x.SetIdent id = x.Data.typar_id <- id
 
     /// Sets the rigidity of a type variable
@@ -1767,7 +1916,7 @@ and
     /// Indicates a constraint that a type is a subtype of the given type 
     | CoercesTo              of TType * range
 
-    /// Indicates a default value for an inference type variable should it be netiher generalized nor solved 
+    /// Indicates a default value for an inference type variable should it be neither generalized nor solved 
     | DefaultsTo             of int * TType * range 
     
     /// Indicates a constraint that a type has a 'null' value 
@@ -1778,7 +1927,7 @@ and
     
     /// Indicates a constraint that a type is a non-Nullable value type 
     /// These are part of .NET's model of generic constraints, and in order to 
-    /// generate verifiable code we must attach them to F# generalzied type variables as well. 
+    /// generate verifiable code we must attach them to F# generalized type variables as well. 
     | IsNonNullableStruct     of range 
     
     /// Indicates a constraint that a type is a reference type 
@@ -1829,6 +1978,7 @@ and
     []
     /// Indicates the solution of a member constraint during inference.
     TraitConstraintSln = 
+
     /// FSMethSln(typ, vref, minst)
     ///
     /// Indicates a trait is solved by an F# method.
@@ -1887,10 +2037,13 @@ and
     []
     Val = 
     { mutable Data: ValData }
+
     /// The place where the value was defined. 
     member x.Range = x.Data.val_range
+
     /// A unique stamp within the context of this invocation of the compiler process 
     member x.Stamp = x.Data.val_stamp
+
     /// The type of the value. 
     /// May be a TType_forall for a generic value. 
     /// May be a type variable or type containing type variables during type inference. 
@@ -1902,8 +2055,10 @@ and
     member x.Accessibility              = x.Data.val_access
 
     /// Range of the definition (implementation) of the value, used by Visual Studio 
-    /// Updated by mutation when the implementation is matched against the signature. 
-    member x.DefinitionRange            = x.Data.val_defn_range
+    member x.DefinitionRange            =  x.Data.DefinitionRange
+
+    /// Range of the definition (signature) of the value, used by Visual Studio 
+    member x.SigRange            = x.Data.SigRange
 
     /// The value of a value or member marked with [] 
     member x.LiteralValue               = x.Data.val_const
@@ -1963,14 +2118,11 @@ and
 
     /// Is this a member, if so some more data about the member.
     ///
-    /// Note, the value may still be (a) an extension member or (b) and abtract slot without
+    /// Note, the value may still be (a) an extension member or (b) and abstract slot without
     /// a true body. These cases are often causes of bugs in the compiler.
     member x.MemberInfo                 = x.Data.val_member_info
 
-    /// Indicates if this is a member, and if so, gives some more data about the member.
-    ///
-    /// Note, the value may still be (a) an extension member or (b) and abtract slot without
-    /// a true body. These cases are often causes of bugs in the compiler.
+    /// Indicates if this is a member
     member x.IsMember                   = x.MemberInfo.IsSome
 
     /// Indicates if this is a member, excluding extension members
@@ -1984,7 +2136,7 @@ and
 
     /// Indicates if this is an F#-defined instance member. 
     ///
-    /// Note, the value may still be (a) an extension member or (b) and abtract slot without
+    /// Note, the value may still be (a) an extension member or (b) and abstract slot without
     /// a true body. These cases are often causes of bugs in the compiler.
     member x.IsInstanceMember = x.IsMember && x.MemberInfo.Value.MemberFlags.IsInstance
 
@@ -2018,7 +2170,7 @@ and
     /// Indicates if the backing field for a static value is suppressed.
     member x.IsCompiledAsStaticPropertyWithoutField = x.Data.val_flags.IsCompiledAsStaticPropertyWithoutField
 
-    /// Indicates if this is allows the use of an explicit type instantiation (i.e. does it itself have explciti type arguments,
+    /// Indicates if this value allows the use of an explicit type instantiation (i.e. does it itself have explicit type arguments,
     /// or does it have a signature?)
     member x.PermitsExplicitTypeInstantiation = x.Data.val_flags.PermitsExplicitTypeInstantiation
 
@@ -2169,7 +2321,7 @@ and
         //    The implicit 'copyOfStruct' variables here:
         //         let dt = System.DateTime.Now - System.DateTime.Now // IsMemberOrModuleBinding = false, IsCompiledAsTopLevel = true, IsMember = false, CompilerGenerated=true
         //    
-        // However we don't need this for CompilerGenerated members such as the imlpementations of IComparable
+        // However we don't need this for CompilerGenerated members such as the implementations of IComparable
         if x.IsCompiledAsTopLevel  && not x.IsMember  && (x.IsCompilerGenerated || not x.IsMemberOrModuleBinding) then 
             globalStableNameGenerator.GetUniqueCompilerGeneratedName(givenName,x.Range,x.Stamp) 
         else 
@@ -2212,7 +2364,7 @@ and
     member x.SetIsCompiledAsStaticPropertyWithoutField() = x.Data.val_flags <- x.Data.val_flags.SetIsCompiledAsStaticPropertyWithoutField
     member x.SetValReprInfo info                          = x.Data.val_repr_info <- info
     member x.SetType ty                                  = x.Data.val_type <- ty
-    member x.SetDefnRange m                              = x.Data.val_defn_range <- m
+    member x.SetOtherRange m                              = x.Data.val_other_range <- Some m
 
     /// Create a new value with empty, unlinked data. Only used during unpickling of F# metadata.
     static member NewUnlinked() : Val  = { Data = nullableSlotEmpty() }
@@ -2230,7 +2382,7 @@ and
     
     
 and 
-    []
+    []
     []
     ValData =
 
@@ -2243,7 +2395,9 @@ and
     { val_logical_name: string
       val_compiled_name: string option
       val_range: range
-      mutable val_defn_range: range 
+      /// If this field is populated, this is the implementation range for an item in a signature, otherwise it is 
+      /// the signature range for an item in an implementation
+      mutable val_other_range: (range * bool) option 
       mutable val_type: TType
       val_stamp: Stamp 
       /// See vflags section further below for encoding/decodings here 
@@ -2262,7 +2416,7 @@ and
       val_member_info: ValMemberInfo option
 
       /// Custom attributes attached to the value. These contain references to other values (i.e. constructors in types). Mutable to fixup  
-      /// these value references after copying a colelction of values. 
+      /// these value references after copying a collection of values. 
       mutable val_attribs: Attribs
 
       // MUTABILITY CLEANUP: mutability of this field is used by 
@@ -2287,8 +2441,17 @@ and
       /// XML documentation signature for the value
       mutable val_xmldocsig : string } 
 
+    member x.DefinitionRange            = 
+        match x.val_other_range with
+        | Some (m,true) -> m
+        | _ -> x.val_range
+
+    member x.SigRange            = 
+        match x.val_other_range with
+        | Some (m,false) -> m
+        | _ -> x.val_range
 and 
-    []
+    []
     ValMemberInfo = 
     { /// The parent type. For an extension member this is the type being extended 
       ApparentParent: TyconRef  
@@ -2303,7 +2466,7 @@ and
 
 
 and 
-    []
+    []
     NonLocalValOrMemberRef = 
     { /// A reference to the entity containing the value or member. THis will always be a non-local reference
       EnclosingEntity : EntityRef 
@@ -2323,7 +2486,7 @@ and ValPublicPath      =
 and NonLocalEntityRef    = 
     | NonLocalEntityRef of CcuThunk * string[]
 
-    /// Try to find the entity correspondng to the given path in the given CCU
+    /// Try to find the entity corresponding to the given path in the given CCU
     static member TryDerefEntityPath(ccu: CcuThunk, path:string[], i:int, entity:Entity) = 
         if i >= path.Length then Some entity
         else  
@@ -2337,7 +2500,7 @@ and NonLocalEntityRef    =
 #endif
 
 #if EXTENSIONTYPING
-    /// Try to find the entity correspondng to the given path, using type-providers to link the data
+    /// Try to find the entity corresponding to the given path, using type-providers to link the data
     static member TryDerefEntityPathViaProvidedType(ccu: CcuThunk, path:string[], i:int, entity:Entity) = 
         // Errors during linking are not necessarily given good ranges. This has always been the case in F# 2.0, but also applies to
         // type provider type linking errors in F# 3.0.
@@ -2393,14 +2556,14 @@ and NonLocalEntityRef    =
                 | [(_,st)] ->
                     // 'entity' is at position i in the dereference chain. We resolved to position 'j'.
                     // Inject namespaces until we're an position j, and then inject the type.
-                    // Note: this is similar to code in build.fs
+                    // Note: this is similar to code in CompileOps.fs
                     let rec injectNamespacesFromIToJ (entity: Entity) k = 
                         if k = j  then 
                             let newEntity = Construct.NewProvidedTycon(resolutionEnvironment, st, ccu.ImportProvidedType, false, m)
                             entity.ModuleOrNamespaceType.AddProvidedTypeEntity(newEntity)
                             newEntity
                         else
-                            let cpath = mkNestedCPath entity.CompilationPath entity.LogicalName ModuleOrNamespaceKind.Namespace
+                            let cpath = entity.CompilationPath.NestedCompPath entity.LogicalName ModuleOrNamespaceKind.Namespace
                             let newEntity = 
                                 Construct.NewModuleOrNamespace 
                                     (Some cpath) 
@@ -2428,9 +2591,12 @@ and NonLocalEntityRef    =
 #endif
             
     /// Try to link a non-local entity reference to an actual entity
-    member nleref.TryDeref = 
+    member nleref.TryDeref(canError) = 
         let (NonLocalEntityRef(ccu,path)) = nleref 
-        ccu.EnsureDerefable(path)
+        if canError then 
+            ccu.EnsureDerefable(path)
+
+        if ccu.IsUnresolvedReference then None else
 
         match NonLocalEntityRef.TryDerefEntityPath(ccu, path, 0, ccu.Contents)  with
         | Some _ as r -> r
@@ -2475,16 +2641,12 @@ and NonLocalEntityRef    =
 
     /// Dereference the nonlocal reference, and raise an error if this fails.
     member nleref.Deref = 
-        match nleref.TryDeref with 
+        match nleref.TryDeref(canError=true) with 
         | Some res -> res
         | None -> 
-              errorR (InternalUndefinedItemRef (FSComp.SR.tastUndefinedItemRefModuleNamespace, nleref.DisplayName, nleref.AssemblyName, "")); 
+              errorR (InternalUndefinedItemRef (FSComp.SR.tastUndefinedItemRefModuleNamespace, nleref.DisplayName, nleref.AssemblyName, "")) 
               raise (KeyNotFoundException())
         
-    /// Try to get the details of the module or namespace fragment referred to by this non-local reference.
-    member nleref.TryModuleOrNamespaceType = 
-        nleref.TryDeref |> Option.map (fun v -> v.ModuleOrNamespaceType) 
-
     /// Get the details of the module or namespace fragment for the entity referred to by this non-local reference.
     member nleref.ModuleOrNamespaceType = 
         nleref.Deref.ModuleOrNamespaceType
@@ -2504,31 +2666,31 @@ and
     member x.PrivateTarget = x.binding
     member x.ResolvedTarget = x.binding
 
-    member private tcr.Resolve() = 
-        let res = tcr.nlr.TryDeref
+    member private tcr.Resolve(canError) = 
+        let res = tcr.nlr.TryDeref(canError)
         match res with 
         | Some r -> 
              tcr.binding <- nullableSlotFull r 
         | None -> 
              ()
 
-    // Dereference the TyconRef to a Tycon. Amortize the cost of doing this.
-    // This path should not allocate in the amortized case
+    /// Dereference the TyconRef to a Tycon. Amortize the cost of doing this.
+    /// This path should not allocate in the amortized case
     member tcr.Deref = 
         match box tcr.binding with 
         | null ->
-            tcr.Resolve()
+            tcr.Resolve(canError=true)
             match box tcr.binding with 
             | null -> error (InternalUndefinedItemRef (FSComp.SR.tastUndefinedItemRefModuleNamespaceType, String.concat "." tcr.nlr.EnclosingMangledPath, tcr.nlr.AssemblyName, tcr.nlr.LastItemMangledName))
             | _ -> tcr.binding
         | _ -> 
             tcr.binding
 
-    // Dereference the TyconRef to a Tycon option.
+    /// Dereference the TyconRef to a Tycon option.
     member tcr.TryDeref = 
         match box tcr.binding with 
         | null -> 
-            tcr.Resolve()
+            tcr.Resolve(canError=false)
             match box tcr.binding with 
             | null -> None
             | _ -> Some tcr.binding
@@ -2547,35 +2709,53 @@ and
 
     /// Gets the data indicating the compiled representation of a type or module in terms of Abstract IL data structures.
     member x.CompiledRepresentation = x.Deref.CompiledRepresentation
+
     /// Gets the data indicating the compiled representation of a named type or module in terms of Abstract IL data structures.
     member x.CompiledRepresentationForNamedType = x.Deref.CompiledRepresentationForNamedType
+
+    /// The implementation definition location of the namespace, module or type
+    member x.DefinitionRange = x.Deref.DefinitionRange
+
+    /// The signature definition location of the namespace, module or type
+    member x.SigRange = x.Deref.SigRange
+
     /// The name of the namespace, module or type, possibly with mangling, e.g. List`1, List or FailureException 
     member x.LogicalName = x.Deref.LogicalName
+
     /// The compiled name of the namespace, module or type, e.g. FSharpList`1, ListModule or FailureException 
     member x.CompiledName = x.Deref.CompiledName
+
     /// The display name of the namespace, module or type, e.g. List instead of List`1, not including static parameters
     member x.DisplayName = x.Deref.DisplayName
+
     /// The display name of the namespace, module or type with <_,_,_> added for generic types,  including static parameters
     member x.DisplayNameWithStaticParametersAndUnderscoreTypars = x.Deref.DisplayNameWithStaticParametersAndUnderscoreTypars
+
     /// The display name of the namespace, module or type, e.g. List instead of List`1, including static parameters
     member x.DisplayNameWithStaticParameters = x.Deref.DisplayNameWithStaticParameters
+
     /// The code location where the module, namespace or type is defined.
     member x.Range = x.Deref.Range
+
     /// A unique stamp for this module, namespace or type definition within the context of this compilation. 
     /// Note that because of signatures, there are situations where in a single compilation the "same" 
     /// module, namespace or type may have two distinct Entity objects that have distinct stamps.
     member x.Stamp = x.Deref.Stamp
+
     /// The F#-defined custom attributes of the entity, if any. If the entity is backed by Abstract IL or provided metadata
     /// then this does not include any attributes from those sources.
     member x.Attribs = x.Deref.Attribs
+
     /// The XML documentation of the entity, if any. If the entity is backed by provided metadata
     /// then this _does_ include this documentation. If the entity is backed by Abstract IL metadata
     /// or comes from another F# assembly then it does not (because the documentation will get read from 
     /// an XML file).
     member x.XmlDoc = x.Deref.XmlDoc
+
     /// The XML documentation sig-string of the entity, if any, to use to lookup an .xml doc file. This also acts
     /// as a cache for this sig-string computation.
     member x.XmlDocSig = x.Deref.XmlDocSig
+
     /// The logical contents of the entity when it is a module or namespace fragment.
     member x.ModuleOrNamespaceType = x.Deref.ModuleOrNamespaceType
     
@@ -2584,14 +2764,19 @@ and
 
     /// The logical contents of the entity when it is a type definition.
     member x.TypeContents = x.Deref.TypeContents
+
     /// The kind of the type definition - is it a measure definition or a type definition?
     member x.TypeOrMeasureKind = x.Deref.TypeOrMeasureKind
+
     /// The identifier at the point of declaration of the type definition.
     member x.Id = x.Deref.Id
+
     /// The information about the r.h.s. of a type definition, if any. For example, the r.h.s. of a union or record type.
     member x.TypeReprInfo = x.Deref.TypeReprInfo
+
     /// The information about the r.h.s. of an F# exception definition, if any. 
     member x.ExceptionInfo        = x.Deref.ExceptionInfo
+
     /// Indicates if the entity represents an F# exception declaration.
     member x.IsExceptionDecl      = x.Deref.IsExceptionDecl
     
@@ -2599,128 +2784,184 @@ and
     /// 
     /// Lazy because it may read metadata, must provide a context "range" in case error occurs reading metadata.
     member x.Typars m             = x.Deref.Typars m
+
     /// Get the type parameters for an entity that is a type declaration, otherwise return the empty list.
     member x.TyparsNoRange        = x.Deref.TyparsNoRange
+
     /// Indicates if this entity is an F# type abbreviation definition
     member x.TypeAbbrev           = x.Deref.TypeAbbrev
+
+    /// Indicates if this entity is an F# type abbreviation definition
     member x.IsTypeAbbrev         = x.Deref.IsTypeAbbrev
-    /// Get the value representing the accessiblity of the r.h.s. of an F# type definition.
+
+    /// Get the value representing the accessibility of the r.h.s. of an F# type definition.
     member x.TypeReprAccessibility = x.Deref.TypeReprAccessibility
+
     /// Get the cache of the compiled ILTypeRef representation of this module or type.
     member x.CompiledReprCache    = x.Deref.CompiledReprCache
+
     /// Get a blob of data indicating how this type is nested in other namespaces, modules or types.
     member x.PublicPath : PublicPath option = x.Deref.PublicPath
-    /// Get the value representing the accessiblity of an F# type definition or module.
+
+    /// Get the value representing the accessibility of an F# type definition or module.
     member x.Accessibility        = x.Deref.Accessibility
+
     /// Indicates the type prefers the "tycon" syntax for display etc. 
     member x.IsPrefixDisplay      = x.Deref.IsPrefixDisplay
+
     /// Indicates the "tycon blob" is actually a module 
     member x.IsModuleOrNamespace  = x.Deref.IsModuleOrNamespace
+
     /// Indicates if the entity is a namespace
     member x.IsNamespace          = x.Deref.IsNamespace
+
     /// Indicates if the entity is an F# module definition
     member x.IsModule             = x.Deref.IsModule
+
+    /// Get a blob of data indicating how this type is nested inside other namespaces, modules and types.
     member x.CompilationPathOpt   = x.Deref.CompilationPathOpt
+
 #if EXTENSIONTYPING
     /// Indicates if the entity is a provided namespace fragment
     member x.IsProvided               = x.Deref.IsProvided
+
     /// Indicates if the entity is a provided namespace fragment
     member x.IsProvidedNamespace      = x.Deref.IsProvidedNamespace
+
     /// Indicates if the entity is an erased provided type definition
     member x.IsProvidedErasedTycon    = x.Deref.IsProvidedErasedTycon
+
+    /// Indicates if the entity is an erased provided type definition that incorporates a static instantiation (and therefore in some sense compiler generated)
+    member x.IsStaticInstantiationTycon    = x.Deref.IsStaticInstantiationTycon
+
     /// Indicates if the entity is a generated provided type definition, i.e. not erased.
     member x.IsProvidedGeneratedTycon = x.Deref.IsProvidedGeneratedTycon
 #endif
+
     /// Get a blob of data indicating how this type is nested inside other namespaces, modules and types.
     member x.CompilationPath      = x.Deref.CompilationPath
+
     /// Get a table of fields for all the F#-defined record, struct and class fields in this type definition, including
     /// static fields, 'val' declarations and hidden fields from the compilation of implicit class constructions.
     member x.AllFieldTable        = x.Deref.AllFieldTable
+
     /// Get an array of fields for all the F#-defined record, struct and class fields in this type definition, including
     /// static fields, 'val' declarations and hidden fields from the compilation of implicit class constructions.
     member x.AllFieldsArray       = x.Deref.AllFieldsArray
+
     /// Get a list of fields for all the F#-defined record, struct and class fields in this type definition, including
     /// static fields, 'val' declarations and hidden fields from the compilation of implicit class constructions.
     member x.AllFieldsAsList = x.Deref.AllFieldsAsList
+
     /// Get a list of all fields for F#-defined record, struct and class fields in this type definition,
     /// including static fields, but excluding compiler-generate fields.
     member x.TrueFieldsAsList = x.Deref.TrueFieldsAsList
+
     /// Get a list of all instance fields for F#-defined record, struct and class fields in this type definition,
     /// excluding compiler-generate fields.
     member x.TrueInstanceFieldsAsList = x.Deref.TrueInstanceFieldsAsList
+
     /// Get a list of all instance fields for F#-defined record, struct and class fields in this type definition.
     /// including hidden fields from the compilation of implicit class constructions.
     // NOTE: This method doesn't perform particularly well, and is over-used, but doesn't seem to appear on performance traces
     member x.AllInstanceFieldsAsList = x.Deref.AllInstanceFieldsAsList
+
     /// Get a field by index in definition order
     member x.GetFieldByIndex  n        = x.Deref.GetFieldByIndex n
+
     /// Get a field by name.
     member x.GetFieldByName n          = x.Deref.GetFieldByName n
+
     /// Get the union cases and other union-type information for a type, if any
     member x.UnionTypeInfo             = x.Deref.UnionTypeInfo
+
     /// Get the union cases for a type, if any
     member x.UnionCasesArray           = x.Deref.UnionCasesArray
+
     /// Get the union cases for a type, if any, as a list
     member x.UnionCasesAsList          = x.Deref.UnionCasesAsList
+
     /// Get a union case of a type by name
     member x.GetUnionCaseByName n      = x.Deref.GetUnionCaseByName n
+
     /// Get the blob of information associated with an F# object-model type definition, i.e. class, interface, struct etc.
     member x.FSharpObjectModelTypeInfo = x.Deref.FSharpObjectModelTypeInfo
+
     /// Gets the immediate interface definitions of an F# type definition. Further interfaces may be supported through class and interface inheritance.
     member x.ImmediateInterfacesOfFSharpTycon   = x.Deref.ImmediateInterfacesOfFSharpTycon
+
     /// Gets the immediate interface types of an F# type definition. Further interfaces may be supported through class and interface inheritance.
     member x.ImmediateInterfaceTypesOfFSharpTycon = x.Deref.ImmediateInterfaceTypesOfFSharpTycon
+
     /// Gets the immediate members of an F# type definition, excluding compiler-generated ones.
     /// Note: result is alphabetically sorted, then for each name the results are in declaration order
     member x.MembersOfFSharpTyconSorted = x.Deref.MembersOfFSharpTyconSorted
+
     /// Gets all immediate members of an F# type definition keyed by name, including compiler-generated ones.
     /// Note: result is a indexed table, and for each name the results are in reverse declaration order
     member x.MembersOfFSharpTyconByName = x.Deref.MembersOfFSharpTyconByName
+
     /// Indicates if this is a struct or enum type definition , i.e. a value type definition
     member x.IsStructOrEnumTycon       = x.Deref.IsStructOrEnumTycon
+
     /// Indicates if this is an F# type definition which is one of the special types in FSharp.Core.dll which uses 
     /// an assembly-code representation for the type, e.g. the primitive array type constructor.
     member x.IsAsmReprTycon            = x.Deref.IsAsmReprTycon
+
     /// Indicates if this is an F# type definition which is one of the special types in FSharp.Core.dll like 'float<_>' which
     /// defines a measure type with a relation to an existing non-measure type as a representation.
     member x.IsMeasureableReprTycon    = x.Deref.IsMeasureableReprTycon
+
     /// Indicates if the entity is erased, either a measure definition, or an erased provided type definition
     member x.IsErased                  = x.Deref.IsErased
     
     /// Gets any implicit hash/equals (with comparer argument) methods added to an F# record, union or struct type definition.
     member x.GeneratedHashAndEqualsWithComparerValues = x.Deref.GeneratedHashAndEqualsWithComparerValues
+
     /// Gets any implicit CompareTo (with comparer argument) methods added to an F# record, union or struct type definition.
     member x.GeneratedCompareToWithComparerValues = x.Deref.GeneratedCompareToWithComparerValues
+
     /// Gets any implicit CompareTo methods added to an F# record, union or struct type definition.
     member x.GeneratedCompareToValues = x.Deref.GeneratedCompareToValues
+
     /// Gets any implicit hash/equals methods added to an F# record, union or struct type definition.
     member x.GeneratedHashAndEqualsValues = x.Deref.GeneratedHashAndEqualsValues
     
     /// Indicate if this is a type definition backed by Abstract IL metadata.
     member x.IsILTycon                = x.Deref.IsILTycon
+
     /// Get the Abstract IL scope, nesting and metadata for this 
     /// type definition, assuming it is backed by Abstract IL metadata.
     member x.ILTyconInfo              = x.Deref.ILTyconInfo
+
     /// Get the Abstract IL metadata for this type definition, assuming it is backed by Abstract IL metadata.
     member x.ILTyconRawMetadata       = x.Deref.ILTyconRawMetadata
+
     /// Indicate if this is a type whose r.h.s. is known to be a union type definition.
     member x.IsUnionTycon             = x.Deref.IsUnionTycon
+
     /// Indicates if this is an F# type definition whose r.h.s. is known to be a record type definition.
     member x.IsRecordTycon            = x.Deref.IsRecordTycon
+
     /// Indicates if this is an F# type definition whose r.h.s. is known to be some kind of F# object model definition
     member x.IsFSharpObjectModelTycon = x.Deref.IsFSharpObjectModelTycon
+
     /// Indicates if this is an F# type definition whose r.h.s. definition is unknown (i.e. a traditional ML 'abstract' type in a signature,
     /// which in F# is called a 'unknown representation' type).
     member x.IsHiddenReprTycon        = x.Deref.IsHiddenReprTycon
 
     /// Indicates if this is an F#-defined interface type definition 
     member x.IsFSharpInterfaceTycon   = x.Deref.IsFSharpInterfaceTycon
+
     /// Indicates if this is an F#-defined delegate type definition 
     member x.IsFSharpDelegateTycon    = x.Deref.IsFSharpDelegateTycon
+
     /// Indicates if this is an F#-defined enum type definition 
     member x.IsFSharpEnumTycon        = x.Deref.IsFSharpEnumTycon
+
     /// Indicates if this is a .NET-defined enum type definition 
     member x.IsILEnumTycon            = x.Deref.IsILEnumTycon
+
     /// Indicates if this is an enum type definition 
     member x.IsEnumTycon              = x.Deref.IsEnumTycon
 
@@ -2729,14 +2970,17 @@ and
 
     /// Indicates if this is a .NET-defined struct or enum type definition , i.e. a value type definition
     member x.IsILStructOrEnumTycon          = x.Deref.IsILStructOrEnumTycon
+
     /// Indicates if we have pre-determined that a type definition has a default constructor.
     member x.PreEstablishedHasDefaultConstructor = x.Deref.PreEstablishedHasDefaultConstructor
+
     /// Indicates if we have pre-determined that a type definition has a self-referential constructor using 'as x'
     member x.HasSelfReferentialConstructor = x.Deref.HasSelfReferentialConstructor
 
 
 /// note: ModuleOrNamespaceRef and TyconRef are type equivalent 
 and ModuleOrNamespaceRef       = EntityRef
+
 and TyconRef       = EntityRef
 
 /// References are either local or nonlocal
@@ -2753,6 +2997,7 @@ and
     member x.PrivateTarget = x.binding
     member x.ResolvedTarget = x.binding
 
+    /// Dereference the ValRef to a Val.
     member vr.Deref = 
         match box vr.binding with 
         | null ->
@@ -2767,6 +3012,7 @@ and
             res 
         | _ -> vr.binding
 
+    /// Dereference the ValRef to a Val option.
     member vr.TryDeref = 
         match box vr.binding with 
         | null -> 
@@ -2781,55 +3027,153 @@ and
         | _ -> 
             Some vr.binding
 
+    /// The type of the value. May be a TType_forall for a generic value. 
+    /// May be a type variable or type containing type variables during type inference. 
     member x.Type                       = x.Deref.Type
+
+    /// Get the type of the value including any generic type parameters
     member x.TypeScheme                 = x.Deref.TypeScheme
+
+    /// Get the type of the value after removing any generic type parameters
     member x.TauType                    = x.Deref.TauType
+
     member x.Typars                     = x.Deref.Typars
     member x.LogicalName                = x.Deref.LogicalName
     member x.DisplayName                = x.Deref.DisplayName
     member x.CoreDisplayName            = x.Deref.CoreDisplayName
     member x.Range                      = x.Deref.Range
 
+    /// Get the value representing the accessibility of an F# type definition or module.
     member x.Accessibility              = x.Deref.Accessibility
+
+    /// The parent type or module, if any (None for expression bindings and parameters)
     member x.ActualParent               = x.Deref.ActualParent
+
+    /// Get the apparent parent entity for the value, i.e. the entity under with which the
+    /// value is associated. For extension members this is the nominal type the member extends.
+    /// For other values it is just the actual parent.
     member x.ApparentParent             = x.Deref.ApparentParent
+
     member x.DefinitionRange            = x.Deref.DefinitionRange
+
+    member x.SigRange        = x.Deref.SigRange
+
+    /// The value of a value or member marked with [] 
     member x.LiteralValue               = x.Deref.LiteralValue
+
     member x.Id                         = x.Deref.Id
+
+    /// Get the name of the value, assuming it is compiled as a property.
+    ///   - If this is a property then this is 'Foo' 
+    ///   - If this is an implementation of an abstract slot then this is the name of the property implemented by the abstract slot
     member x.PropertyName               = x.Deref.PropertyName
+
+    /// A unique stamp within the context of this invocation of the compiler process 
     member x.Stamp                      = x.Deref.Stamp
+
+    /// Is this represented as a "top level" static binding (i.e. a static field, static member,
+    /// instance member), rather than an "inner" binding that may result in a closure.
     member x.IsCompiledAsTopLevel       = x.Deref.IsCompiledAsTopLevel
+
+    /// Indicates if this member is an F#-defined dispatch slot.
     member x.IsDispatchSlot             = x.Deref.IsDispatchSlot
+
+    /// The name of the method in compiled code (with some exceptions where ilxgen.fs decides not to use a method impl)
     member x.CompiledName         = x.Deref.CompiledName
 
+    /// Get the public path to the value, if any? Should be set if and only if
+    /// IsMemberOrModuleBinding is set.
     member x.PublicPath                 = x.Deref.PublicPath
+
+    /// The quotation expression associated with a value given the [] tag
     member x.ReflectedDefinition        = x.Deref.ReflectedDefinition
+
+    /// Indicates if this is an F#-defined 'new' constructor member
     member x.IsConstructor              = x.Deref.IsConstructor
+
+    /// Indicates if this value was a member declared 'override' or an implementation of an interface slot
     member x.IsOverrideOrExplicitImpl   = x.Deref.IsOverrideOrExplicitImpl
+
+    /// Is this a member, if so some more data about the member.
     member x.MemberInfo                 = x.Deref.MemberInfo
+
+    /// Indicates if this is a member
     member x.IsMember                   = x.Deref.IsMember
+
+    /// Indicates if this is an F#-defined value in a module, or an extension member, but excluding compiler generated bindings from optimizations
     member x.IsModuleBinding            = x.Deref.IsModuleBinding
+
+    /// Indicates if this is an F#-defined instance member. 
+    ///
+    /// Note, the value may still be (a) an extension member or (b) and abstract slot without
+    /// a true body. These cases are often causes of bugs in the compiler.
     member x.IsInstanceMember           = x.Deref.IsInstanceMember
 
+    /// Indicates if this value is declared 'mutable'
     member x.IsMutable                  = x.Deref.IsMutable
+
+    /// Indicates if this value allows the use of an explicit type instantiation (i.e. does it itself have explicit type arguments,
+    /// or does it have a signature?)
     member x.PermitsExplicitTypeInstantiation  = x.Deref.PermitsExplicitTypeInstantiation
+
+    /// Indicates if this is inferred to be a method or function that definitely makes no critical tailcalls?
     member x.MakesNoCriticalTailcalls  = x.Deref.MakesNoCriticalTailcalls
+
+    /// Is this a member definition or module definition?
     member x.IsMemberOrModuleBinding    = x.Deref.IsMemberOrModuleBinding
+
+    /// Indicates if this is an F#-defined extension member
     member x.IsExtensionMember          = x.Deref.IsExtensionMember
+
+    /// Indicates if this is a constructor member generated from the de-sugaring of implicit constructor for a class type?
     member x.IsIncrClassConstructor = x.Deref.IsIncrClassConstructor
+
+    /// Indicates if this is a member generated from the de-sugaring of 'let' function bindings in the implicit class syntax?
     member x.IsIncrClassGeneratedMember = x.Deref.IsIncrClassGeneratedMember
+
+    /// Get the information about a recursive value used during type inference
     member x.RecursiveValInfo           = x.Deref.RecursiveValInfo
+
+    /// Indicates if this is a 'base' or 'this' value?
     member x.BaseOrThisInfo             = x.Deref.BaseOrThisInfo
+
+    //  Indicates if this value was declared to be a type function, e.g. "let f<'a> = typeof<'a>"
     member x.IsTypeFunction             = x.Deref.IsTypeFunction
+
+    /// Records the "extra information" for a value compiled as a method.
+    ///
+    /// This indicates the number of arguments in each position for a curried function.
     member x.ValReprInfo                 = x.Deref.ValReprInfo
+
+    /// Get the inline declaration on the value
     member x.InlineInfo                 = x.Deref.InlineInfo
+
+    /// Indicates whether the inline declaration for the value indicate that the value must be inlined?
     member x.MustInline                 = x.Deref.MustInline
+
+    /// Indicates whether this value was generated by the compiler.
+    ///
+    /// Note: this is true for the overrides generated by hash/compare augmentations
     member x.IsCompilerGenerated        = x.Deref.IsCompilerGenerated
+
+    /// Get the declared attributes for the value
     member x.Attribs                    = x.Deref.Attribs
+
+    /// Get the declared documentation for the value
     member x.XmlDoc                     = x.Deref.XmlDoc
+
+    /// Get or set the signature for the value's XML documentation
     member x.XmlDocSig                  = x.Deref.XmlDocSig
+
+    /// Get the actual parent entity for the value (a module or a type), i.e. the entity under which the
+    /// value will appear in compiled code. For extension members this is the module where the extension member
+    /// is declared.
     member x.TopValActualParent         = x.Deref.TopValActualParent
+
+    /// Get the apparent parent entity for a member
     member x.MemberApparentParent       = x.Deref.MemberApparentParent
+
+    /// Get the number of 'this'/'self' object arguments for the member. Instance extension members return '1'.
     member x.NumObjArgs                 = x.Deref.NumObjArgs
 
     override x.ToString() = 
@@ -2841,23 +3185,61 @@ and UnionCaseRef =
     member x.TyconRef = let (UCRef(tcref,_)) = x in tcref
     member x.CaseName = let (UCRef(_,nm)) = x in nm
     member x.Tycon = x.TyconRef.Deref
+    member x.UnionCase = 
+        match x.TyconRef.GetUnionCaseByName x.CaseName with 
+        | Some res -> res
+        | None -> error(InternalError(sprintf "union case %s not found in type %s" x.CaseName x.TyconRef.LogicalName, x.TyconRef.Range))
+
+    member x.TryUnionCase =  x.TyconRef.TryDeref |> Option.bind (fun tcref -> tcref.GetUnionCaseByName x.CaseName)
+
+    member x.Attribs = x.UnionCase.Attribs
+    member x.Range = x.UnionCase.Range
+
+    member x.DefinitionRange = x.UnionCase.DefinitionRange
+
+    member x.SigRange = x.UnionCase.DefinitionRange
+
+    member x.Index = 
+        try 
+           // REVIEW: this could be faster, e.g. by storing the index in the NameMap 
+            x.TyconRef.UnionCasesArray |> Array.findIndex (fun ucspec -> ucspec.DisplayName = x.CaseName) 
+        with :? KeyNotFoundException -> 
+            error(InternalError(sprintf "union case %s not found in type %s" x.CaseName x.TyconRef.LogicalName, x.TyconRef.Range))
+    member x.AllFieldsAsList = x.UnionCase.FieldTable.AllFieldsAsList
+    member x.ReturnType = x.UnionCase.ReturnType
+    member x.FieldByIndex n = x.UnionCase.FieldTable.FieldByIndex n
 
 and RecdFieldRef = 
     | RFRef of TyconRef * string
     member x.TyconRef = let (RFRef(tcref,_)) = x in tcref
     member x.FieldName = let (RFRef(_,id)) = x in id
     member x.Tycon = x.TyconRef.Deref
+    member x.RecdField = 
+        let (RFRef(tcref,id)) = x
+        match tcref.GetFieldByName id with 
+        | Some res -> res
+        | None -> error(InternalError(sprintf "field %s not found in type %s" id tcref.LogicalName, tcref.Range))
+
+    member x.TryRecdField =  x.TyconRef.TryDeref |> Option.bind (fun tcref -> tcref.GetFieldByName x.FieldName)
+
+    member x.PropertyAttribs = x.RecdField.PropertyAttribs
+    member x.Range = x.RecdField.Range
+
+    member x.DefinitionRange = x.RecdField.DefinitionRange
+
+    member x.SigRange = x.RecdField.DefinitionRange
+
+    member x.Index =
+        let (RFRef(tcref,id)) = x
+        try 
+            // REVIEW: this could be faster, e.g. by storing the index in the NameMap 
+            tcref.AllFieldsArray |> Array.findIndex (fun rfspec -> rfspec.Name = id)  
+        with :? KeyNotFoundException -> 
+            error(InternalError(sprintf "field %s not found in type %s" id tcref.LogicalName, tcref.Range))
 
 and 
   /// The algebra of types
     []
-// REMOVING because of possible stack overflow 
-
-#if EXTENSIBLE_DUMPER
-#if DEBUG
-    [)>]
-#endif  
-#endif  
     TType =
 
     /// TType_forall(typars, bodyTy).
@@ -2892,6 +3274,7 @@ and
 
     /// Indicates the type is a unit-of-measure expression being used as an argument to a type or member
     | TType_measure of MeasureExpr
+
     override x.ToString() =  
         match x with 
         | TType_forall (_tps,ty) -> "forall _. " + ty.ToString()
@@ -2925,7 +3308,7 @@ and MeasureExpr =
     | MeasureRationalPower of MeasureExpr * Rational
 
 and 
-    []
+    []
     CcuData = 
     { /// Holds the filename for the DLL, if any 
       FileName: string option 
@@ -2946,7 +3329,7 @@ and
       IsFSharp: bool 
       
 #if EXTENSIONTYPING
-      /// Is the CCu an assembly inected by a type provider
+      /// Is the CCu an assembly injected by a type provider
       IsProviderGenerated: bool 
 
       /// Triggered when the contents of the CCU are invalidated
@@ -3109,7 +3492,7 @@ and CcuResolutionResult =
     | UnresolvedCcu of string
 
 /// Represents the information saved in the assembly signature data resource for an F# assembly
-and PickledModuleInfo =
+and PickledCcuInfo =
   { mspec: ModuleOrNamespace
     compileTimeWorkingDir: string
     usesQuotations : bool }
@@ -3121,22 +3504,23 @@ and PickledModuleInfo =
 and Attribs = Attrib list 
 
 and AttribKind = 
-  /// Indicates an attribute refers to a type defined in an imported .NET assembly 
-  | ILAttrib of ILMethodRef 
-  /// Indicates an attribute refers to a type defined in an imported F# assembly 
-  | FSAttrib of ValRef
+    /// Indicates an attribute refers to a type defined in an imported .NET assembly 
+    | ILAttrib of ILMethodRef 
+    /// Indicates an attribute refers to a type defined in an imported F# assembly 
+    | FSAttrib of ValRef
 
 /// Attrib(kind,unnamedArgs,propVal,appliedToAGetterOrSetter,targetsOpt,range)
 and Attrib = 
-  | Attrib of TyconRef * AttribKind * AttribExpr list * AttribNamedArg list * bool * AttributeTargets option * range
+    | Attrib of TyconRef * AttribKind * AttribExpr list * AttribNamedArg list * bool * AttributeTargets option * range
 
 /// We keep both source expression and evaluated expression around to help intellisense and signature printing
 and AttribExpr = 
     /// AttribExpr(source, evaluated)
-    AttribExpr of Expr * Expr 
+    | AttribExpr of Expr * Expr 
 
 /// AttribNamedArg(name,type,isField,value)
-and AttribNamedArg = AttribNamedArg of (string*TType*bool*AttribExpr)
+and AttribNamedArg = 
+    | AttribNamedArg of (string*TType*bool*AttribExpr)
 
 /// Constants in expressions
 and []
@@ -3187,7 +3571,7 @@ and
 
     /// TDBind(binding, body)
     ///
-    /// Bind the given value throught the remaining cases of the dtree. 
+    /// Bind the given value through the remaining cases of the dtree. 
     /// These arise from active patterns and some optimizations to prevent
     /// repeated computations in decision trees.
     ///    binding -- the value and the expression it is bound to
@@ -3226,7 +3610,7 @@ and
     ///     activePatExpr     -- The active pattern function being called, perhaps applied to some active pattern parameters.
     ///     activePatResTys   -- The result types (case types) of the active pattern.
     ///     activePatIdentity -- The value and the types it is applied to. If there are any active pattern parameters then this is empty. 
-    ///     idx               -- The case number of of the active pattern which the test relates to.
+    ///     idx               -- The case number of the active pattern which the test relates to.
     ///     activePatternInfo -- The extracted info for the active pattern.
     | ActivePatternCase of Expr * TTypes * (ValRef * TypeInst) option * int * ActivePatternInfo
 
@@ -3248,7 +3632,7 @@ and Binding =
 and ActivePatternElemRef = 
     | APElemRef of ActivePatternInfo * ValRef * int 
 
-    member x.IsTotalActivePattern = (let (APElemRef(total,_,_)) = x in total)
+    member x.ActivePatternInfo = (let (APElemRef(info,_,_)) = x in info)
     member x.ActivePatternVal = (let (APElemRef(_,vref,_)) = x in vref)
     member x.CaseIndex = (let (APElemRef(_,_,n)) = x in n)
 
@@ -3276,14 +3660,14 @@ and ValReprInfo  =
         loop args 0
 
 /// Records the "extra information" for an argument compiled as a real
-/// method argument, specificially the argument name and attributes.
+/// method argument, specifically the argument name and attributes.
 and 
     []
     ArgReprInfo = 
     { 
-      // MUTABILITY; used when propagating signature attributes into the implementation.
+      // MUTABILITY: used when propagating signature attributes into the implementation.
       mutable Attribs : Attribs 
-      // MUTABILITY; used when propagating names of parameters from signature into the implementation.
+      // MUTABILITY: used when propagating names of parameters from signature into the implementation.
       mutable Name : Ident option  }
 
 /// Records the extra metadata stored about typars for type parameters
@@ -3356,7 +3740,7 @@ and
     /// as the mark for all the decision making and binding that happens during the match. 
     | Match of SequencePointInfoForBinding * range * DecisionTree * DecisionTreeTarget array * range * TType
 
-    /// If we statically know some infomation then in many cases we can use a more optimized expression 
+    /// If we statically know some information then in many cases we can use a more optimized expression 
     /// This is primarily used by terms in the standard library, particularly those implementing overloaded 
     /// operators. 
     | StaticOptimization of StaticOptimization list * Expr * Expr * range
@@ -3450,7 +3834,7 @@ and
     /// Pseudo method calls. This is used for overloaded operations like op_Addition. 
     | TraitCall of TraitConstraintInfo  
 
-    /// Operation nodes represnting C-style operations on byrefs and mutable vals (l-values) 
+    /// Operation nodes representing C-style operations on byrefs and mutable vals (l-values) 
     | LValueOp of LValueOperation * ValRef 
 
     /// ILCall(useCallvirt,isProtected,valu,newobj,valUseFlags,isProp,noTailCall,mref,actualTypeInst,actualMethInst, retTy)
@@ -3474,7 +3858,7 @@ and RecordConstructionInfo =
    | RecdExpr
    
 
-/// If this is Some(ty) then it indicates that a .NET 2.0 constrained call is required, witht he given type as the
+/// If this is Some(ty) then it indicates that a .NET 2.0 constrained call is required, with the given type as the
 /// static type of the object argument.
 and ConstrainedCallInfo = TType option
 
@@ -3607,7 +3991,7 @@ and FreeLocals = Zset
 /// Represents a set of free type parameters
 and FreeTypars = Zset
 /// Represents a set of 'free' named type definitions. Used to collect the named type definitions referred to 
-/// from atype or expression.
+/// from a type or expression.
 and FreeTycons = Zset
 /// Represents a set of 'free' record field definitions. Used to collect the record field definitions referred to 
 /// from an expression.
@@ -3632,7 +4016,7 @@ and FreeTyvars =
 /// Represents an amortized computation of the free variables in an expression
 and FreeVarsCache = FreeVars cache
 
-/// Represents the set of free variables in an an expression
+/// Represents the set of free variables in an expression
 and FreeVars = 
     { /// The summary of locally defined variables used in the expression. These may be hidden at let bindings etc. 
       /// or made private by a signature or marked 'internal' or 'private', and we have to check various conditions associated with that. 
@@ -3733,7 +4117,7 @@ let foldTImplFile  f z (TImplFile(_,_,moduleExpr,_,_)) = f z moduleExpr
 
 let typarEq    (lv1:Typar) (lv2:Typar) = (lv1.Stamp = lv2.Stamp)
 
-/// Equality on type varialbes, implemented as reference equality. This should be equivalent to using typarEq.
+/// Equality on type variables, implemented as reference equality. This should be equivalent to using typarEq.
 let typarRefEq (tp1: Typar) (tp2: Typar) = (tp1 === tp2)
 
 
@@ -3748,50 +4132,9 @@ let ccuEq (mv1: CcuThunk) (mv2: CcuThunk) =
      else 
         mv1.Contents === mv2.Contents)
 
-/// For derefencing in the middle of a pattern
+/// For dereferencing in the middle of a pattern
 let (|ValDeref|) (vr :ValRef) = vr.Deref
 
-//---------------------------------------------------------------------------
-// Get information from refs
-//---------------------------------------------------------------------------
-
-exception InternalUndefinedTyconItem of (string * string -> int * string) * TyconRef * string
-
-type UnionCaseRef with 
-    member x.UnionCase = 
-        let (UCRef(tcref,nm)) = x
-        match tcref.GetUnionCaseByName nm with 
-        | Some res -> res
-        | None -> error (InternalUndefinedTyconItem (FSComp.SR.tastUndefinedTyconItemUnionCase, tcref, nm))
-    member x.Attribs = x.UnionCase.Attribs
-    member x.Range = x.UnionCase.Range
-    member x.Index = 
-        let (UCRef(tcref,id)) = x
-        try 
-           // REVIEW: this could be faster, e.g. by storing the index in the NameMap 
-            tcref.UnionCasesArray |> Array.findIndex (fun ucspec -> ucspec.DisplayName = id) 
-        with :? KeyNotFoundException -> 
-            error(InternalError(sprintf "union case %s not found in type %s" id tcref.LogicalName, tcref.Range))
-    member x.AllFieldsAsList = x.UnionCase.FieldTable.AllFieldsAsList
-    member x.ReturnType = x.UnionCase.ReturnType
-    member x.FieldByIndex n = x.UnionCase.FieldTable.FieldByIndex n
-
-type RecdFieldRef with 
-    member x.RecdField = 
-        let (RFRef(tcref,id)) = x
-        match tcref.GetFieldByName id with 
-        | Some res -> res
-        | None -> error (InternalUndefinedTyconItem (FSComp.SR.tastUndefinedTyconItemField, tcref, id))
-    member x.PropertyAttribs = x.RecdField.PropertyAttribs
-    member x.Range = x.RecdField.Range
-
-    member x.Index =
-        let (RFRef(tcref,id)) = x
-        try 
-            // REVIEW: this could be faster, e.g. by storing the index in the NameMap 
-            tcref.AllFieldsArray |> Array.findIndex (fun rfspec -> rfspec.Name = id)  
-        with :? KeyNotFoundException -> 
-            error(InternalError(sprintf "field %s not found in type %s" id tcref.LogicalName, tcref.Range))
 
 //--------------------------------------------------------------------------
 // Make references to TAST items
@@ -3820,25 +4163,24 @@ let mkNestedNonLocalEntityRef (nleref:NonLocalEntityRef) id = mkNonLocalEntityRe
 let mkNonLocalTyconRef nleref id = ERefNonLocal (mkNestedNonLocalEntityRef nleref id)
 let mkNonLocalTyconRefPreResolved x nleref id = ERefNonLocalPreResolved x (mkNestedNonLocalEntityRef nleref id)
 
-let mkNestedUnionCaseRef tcref (uc: UnionCase) = mkUnionCaseRef tcref uc.Id.idText
-let mkNestedRecdFieldRef tcref (rf: RecdField) = mkRecdFieldRef tcref rf.Name
-
 type EntityRef with 
     
-    member tcref.UnionCasesAsRefList         = tcref.UnionCasesAsList         |> List.map (mkNestedUnionCaseRef tcref)
-    member tcref.TrueInstanceFieldsAsRefList = tcref.TrueInstanceFieldsAsList |> List.map (mkNestedRecdFieldRef tcref)
-    member tcref.AllFieldAsRefList           = tcref.AllFieldsAsList          |> List.map (mkNestedRecdFieldRef tcref)
+    member tcref.UnionCasesAsRefList         = tcref.UnionCasesAsList         |> List.map tcref.MakeNestedUnionCaseRef
+    member tcref.TrueInstanceFieldsAsRefList = tcref.TrueInstanceFieldsAsList |> List.map tcref.MakeNestedRecdFieldRef
+    member tcref.AllFieldAsRefList           = tcref.AllFieldsAsList          |> List.map tcref.MakeNestedRecdFieldRef
 
-    member tcref.MkNestedTyconRef (x:Entity) : TyconRef  = 
+    member tcref.NestedTyconRef (x:Entity) = 
         match tcref with 
         | ERefLocal _ -> mkLocalTyconRef x
         | ERefNonLocal nlr -> mkNonLocalTyconRefPreResolved x nlr x.LogicalName
 
-    member tcref.MkNestedRecdFieldRef tycon (rf:Ident) = mkRecdFieldRef (tcref.MkNestedTyconRef tycon) rf.idText 
+    member tcref.RecdFieldRefInNestedTycon tycon (id:Ident) = mkRecdFieldRef (tcref.NestedTyconRef tycon) id.idText 
+    member tcref.MakeNestedRecdFieldRef  (rf: RecdField) = mkRecdFieldRef tcref rf.Name
+    member tcref.MakeNestedUnionCaseRef  (uc: UnionCase) = mkUnionCaseRef tcref uc.Id.idText
 
 /// Make a reference to a union case for type in a module or namespace
 let mkModuleUnionCaseRef (modref:ModuleOrNamespaceRef) tycon uc = 
-    mkNestedUnionCaseRef (modref.MkNestedTyconRef tycon) uc
+    (modref.NestedTyconRef tycon).MakeNestedUnionCaseRef uc
 
 let VRefLocal    x : ValRef = { binding=x; nlr=Unchecked.defaultof<_> }      
 let VRefNonLocal x : ValRef = { binding=Unchecked.defaultof<_>; nlr=x }      
@@ -3879,7 +4221,7 @@ let copyTypars tps = List.map copyTypar tps
 //-------------------------------------------------------------------------- 
     
 let tryShortcutSolvedUnitPar canShortcut (r:Typar) = 
-    if r.Kind = TyparKind.Type then failwith "tryShortcutSolvedUnitPar: kind=type";
+    if r.Kind = TyparKind.Type then failwith "tryShortcutSolvedUnitPar: kind=type"
     match r.Solution with
     | Some (TType_measure unt) -> 
         if canShortcut then 
@@ -4071,7 +4413,7 @@ let primEntityRefEq compilingFslib fslibCcu (x : EntityRef) (y : EntityRef) =
 let primUnionCaseRefEq compilingFslib fslibCcu (UCRef(tcr1,c1) as uc1) (UCRef(tcr2,c2) as uc2) = 
     uc1 === uc2 || (primEntityRefEq compilingFslib fslibCcu tcr1 tcr2 && c1 = c2)
 
-/// Primitive routine to compare two ValRef's for equality.  On the whol value identity is not particularly
+/// Primitive routine to compare two ValRef's for equality.  On the whole value identity is not particularly
 /// significant in F#. However it is significant for
 ///    (a) Active Patterns 
 ///    (b) detecting uses of "special known values" from FSharp.Core.dll, such as 'seq' 
@@ -4097,7 +4439,9 @@ let primValRefEq compilingFslib fslibCcu (x : ValRef) (y : ValRef) =
 // pubpath/cpath mess
 //---------------------------------------------------------------------------
 
-let stringOfAccess (TAccess paths) = String.concat ";" (List.map mangledTextOfCompPath paths)
+let stringOfAccess (TAccess paths) = 
+    let mangledTextOfCompPath (CompPath(scoref,path)) = getNameOfScopeRef scoref + "/" + textOfPath (List.map fst path)  
+    String.concat ";" (List.map mangledTextOfCompPath paths)
 
 let demangledPathOfCompPath (CompPath(_,path)) = 
     path |> List.map (fun (nm,k) -> Entity.DemangleEntityName nm k)
@@ -4145,16 +4489,16 @@ let combineAccess (TAccess a1) (TAccess a2) = TAccess(a1@a2)
 
 let NewFreeVarsCache() = newCache ()
 
-let MakeUnionCasesTable ucs = 
+let MakeUnionCasesTable ucs : TyconUnionCases = 
     { CasesByIndex = Array.ofList ucs 
       CasesByName = NameMap.ofKeyedList (fun uc -> uc.DisplayName) ucs }
                                                                   
-let MakeRecdFieldsTable ucs = 
+let MakeRecdFieldsTable ucs : TyconRecdFields = 
     { FieldsByIndex = Array.ofList ucs 
       FieldsByName = ucs  |> NameMap.ofKeyedList (fun rfld -> rfld.Name) }
                                                                   
 
-let MakeUnionCases ucs = 
+let MakeUnionCases ucs : TyconUnionData = 
     { CasesTable=MakeUnionCasesTable ucs 
       CompiledRepresentation=newCache() }
 
@@ -4173,7 +4517,7 @@ let NewTypar (kind,rigid,Typar(id,staticReq,isCompGen),isFromError,dynamicReq,at
 
 let NewRigidTypar nm m = NewTypar (TyparKind.Type,TyparRigidity.Rigid,Typar(mkSynId m nm,NoStaticReq,true),false,TyparDynamicReq.Yes,[],false,false)
 
-let NewUnionCase id nm tys rty attribs docOption access = 
+let NewUnionCase id nm tys rty attribs docOption access : UnionCase = 
     { Id=id
       CompiledName=nm
       XmlDoc=docOption
@@ -4181,7 +4525,8 @@ let NewUnionCase id nm tys rty attribs docOption access =
       Accessibility=access
       FieldTable = MakeRecdFieldsTable tys
       ReturnType = rty
-      Attribs=attribs } 
+      Attribs=attribs 
+      OtherRangeOpt = None } 
 
 let NewModuleOrNamespaceType mkind tycons vals = 
     ModuleOrNamespaceType(mkind, QueueList.ofList vals, QueueList.ofList tycons)
@@ -4196,11 +4541,12 @@ let NewExn cpath (id:Ident) access repr attribs doc =
         entity_logical_name=id.idText
         entity_compiled_name=None
         entity_range=id.idRange
+        entity_other_range=None
         entity_exn_info= repr
         entity_tycon_tcaug=TyconAugmentation.Create()
         entity_xmldoc=doc
         entity_xmldocsig=""
-        entity_pubpath=cpath |> Option.map (publicPathOfCompPath id)
+        entity_pubpath=cpath |> Option.map (fun (cp:CompilationPath) -> cp.NestedPublicPath id)
         entity_accessiblity=access
         entity_tycon_repr_accessibility=access
         entity_modul_contents = notlazy (NewEmptyModuleOrNamespaceType ModuleOrType)
@@ -4223,7 +4569,8 @@ let NewRecdField  stat konst id ty isMutable isVolatile pattribs fattribs docOpt
       rfield_secret = secret
       rfield_xmldoc = docOption 
       rfield_xmldocsig = ""
-      rfield_id=id }
+      rfield_id=id 
+      rfield_other_range = None }
 
     
 let NewTycon (cpath, nm, m, access, reprAccess, kind, typars, docOption, usesPrefixDisplay, preEstablishedHasDefaultCtor, hasSelfReferentialCtor, mtyp) =
@@ -4234,6 +4581,7 @@ let NewTycon (cpath, nm, m, access, reprAccess, kind, typars, docOption, usesPre
         entity_compiled_name=None
         entity_kind=kind
         entity_range=m
+        entity_other_range=None
         entity_flags=EntityFlags(usesPrefixDisplay=usesPrefixDisplay, isModuleOrNamespace=false,preEstablishedHasDefaultCtor=preEstablishedHasDefaultCtor, hasSelfReferentialCtor=hasSelfReferentialCtor)
         entity_attribs=[] // fixed up after
         entity_typars=typars
@@ -4246,7 +4594,7 @@ let NewTycon (cpath, nm, m, access, reprAccess, kind, typars, docOption, usesPre
         entity_accessiblity=access
         entity_xmldoc = docOption
         entity_xmldocsig=""        
-        entity_pubpath=cpath |> Option.map (publicPathOfCompPath (mkSynId m nm))
+        entity_pubpath=cpath |> Option.map (fun (cp:CompilationPath) -> cp.NestedPublicPath (mkSynId m nm))
         entity_cpath = cpath
         entity_il_repr_cache = newCache() } 
 
@@ -4269,15 +4617,12 @@ let NewModuleOrNamespace cpath access (id:Ident) xml attribs mtype = Construct.N
 
 let NewVal (logicalName:string,m:range,compiledName,ty,isMutable,isCompGen,arity,access,recValInfo,specialRepr,baseOrThis,attribs,inlineInfo,doc,isModuleOrMemberBinding,isExtensionMember,isIncrClassSpecialMember,isTyFunc,allowTypeInst,isGeneratedEventVal,konst,actualParent) : Val = 
     let stamp = newStamp() 
-#if DEBUG
-    if !verboseStamps then dprintf "NewVal, %s#%d\n" logicalName stamp
-#endif
     Val.New
         { val_stamp = stamp
           val_logical_name=logicalName
           val_compiled_name= (match compiledName with Some v when v <> logicalName -> compiledName | _ -> None)
           val_range=m
-          val_defn_range=m
+          val_other_range=None
           val_defn=None
           val_repr_info= arity
           val_actual_parent= actualParent
@@ -4306,10 +4651,7 @@ let NewCcuContents sref m nm mty =
 let NewModifiedTycon f (orig:Tycon) = 
     let stamp = newStamp() 
     let data = orig.Data 
-#if DEBUG
-    if !verboseStamps then dprintf "NewModifiedTycon, %s#%d, based on %s#%d\n" orig.LogicalName stamp orig.LogicalName data.entity_stamp
-#endif
-    Tycon.New "NewModifiedTycon" (f { data with entity_stamp=stamp; }) 
+    Tycon.New "NewModifiedTycon" (f { data with entity_stamp=stamp }) 
     
 /// Create a module Tycon based on an existing one using the function 'f'. 
 /// We require that we be given the parent for the new module. 
@@ -4324,9 +4666,6 @@ let NewModifiedModuleOrNamespace f orig =
 let NewModifiedVal f (orig:Val) = 
     let data = orig.Data
     let stamp = newStamp() 
-#if DEBUG
-    if !verboseStamps then dprintf "NewModifiedVal, stamp #%d, based on stamp #%d\n" stamp data.val_stamp
-#endif
     let data' = f { data with val_stamp=stamp }
     Val.New data'
 
@@ -4335,60 +4674,59 @@ let NewClonedTycon orig =  NewModifiedTycon (fun d -> d) orig
 
 //------------------------------------------------------------------------------
 
-/// Combine two maps where the given function reconciles entries that have the same key
-let private combineMaps f m1 m2 = 
-    Map.foldBack (fun k v acc -> Map.add k (if Map.containsKey k m2 then f [v;Map.find k m2] else f [v]) acc) m1 
-      (Map.foldBack (fun k v acc -> if Map.containsKey k m1 then acc else Map.add k (f [v]) acc) m2 Map.empty)
-
-let private combineMultiMaps f (m1: MultiMap<_,_>) (m2: MultiMap<_,_>) = 
-    Map.foldBack (fun k v acc -> List.foldBack (MultiMap.add k) (if Map.containsKey k m2 then f [v;Map.find k m2] else f [v]) acc) m1 
-      (Map.foldBack (fun k v acc -> if Map.containsKey k m1 then acc else List.foldBack (MultiMap.add k) (f [v]) acc) m2 MultiMap.empty)
-
-
-/// Combine module types when multiple namespace fragments contribute to the
-/// same namespace, making new module specs as we go.
-let rec private combineModuleOrNamespaceTypes path m (mty1:ModuleOrNamespaceType)  (mty2:ModuleOrNamespaceType)  = 
-    match mty1.ModuleOrNamespaceKind,mty2.ModuleOrNamespaceKind  with 
-    | Namespace,Namespace -> 
-        let kind = mty1.ModuleOrNamespaceKind
-        // REVIEW: this is not preserving order as we merge namespace declaration groups
-        let entities = 
-            (mty1.AllEntitiesByLogicalMangledName,mty2.AllEntitiesByLogicalMangledName) 
-            ||>  combineMaps (combineEntityList path) 
-
-        let vals = QueueList.append mty1.AllValsAndMembers mty2.AllValsAndMembers
-
-        new ModuleOrNamespaceType(kind, vals, QueueList.ofList (NameMap.range entities))
-
-    | Namespace, _ | _,Namespace -> 
-        error(Error(FSComp.SR.tastNamespaceAndModuleWithSameNameInAssembly(textOfPath path),m))
-
-    | _-> 
-        error(Error(FSComp.SR.tastTwoModulesWithSameNameInAssembly(textOfPath path),m))
-
-and private combineEntityList path l = 
-    match l with
-    | h :: t -> List.fold (combineEntites path) h t
-    | _ -> failwith "combineEntityList"
-
-and private combineEntites path (entity1:Entity) (entity2:Entity) = 
-
-    match entity1.IsModuleOrNamespace, entity2.IsModuleOrNamespace with
-    | true,true -> 
-        entity1 |> NewModifiedTycon (fun data1 -> 
-                    { data1 with 
-                         entity_xmldoc = XmlDoc.Merge entity1.XmlDoc entity2.XmlDoc
-                         entity_attribs = entity1.Attribs @ entity2.Attribs
-                         entity_modul_contents=lazy (combineModuleOrNamespaceTypes (path@[entity2.DemangledModuleOrNamespaceName]) entity2.Range entity1.ModuleOrNamespaceType entity2.ModuleOrNamespaceType); }) 
-    | false,false -> 
-        error(Error(FSComp.SR.tastDuplicateTypeDefinitionInAssembly(entity2.LogicalName, textOfPath path),entity2.Range))
-    | _,_ -> 
-        error(Error(FSComp.SR.tastConflictingModuleAndTypeDefinitionInAssembly(entity2.LogicalName, textOfPath path),entity2.Range))
+/// Combine a list of ModuleOrNamespaceType's making up the description of a CCU. checking there are now
+/// duplicate modules etc.
+let CombineCcuContentFragments m l = 
+
+    let CombineMaps f m1 m2 = 
+        Map.foldBack (fun k v acc -> Map.add k (if Map.containsKey k m2 then f [v;Map.find k m2] else f [v]) acc) m1 
+          (Map.foldBack (fun k v acc -> if Map.containsKey k m1 then acc else Map.add k (f [v]) acc) m2 Map.empty)
+
+    /// Combine module types when multiple namespace fragments contribute to the
+    /// same namespace, making new module specs as we go.
+    let rec CombineModuleOrNamespaceTypes path m (mty1:ModuleOrNamespaceType)  (mty2:ModuleOrNamespaceType)  = 
+        match mty1.ModuleOrNamespaceKind,mty2.ModuleOrNamespaceKind  with 
+        | Namespace,Namespace -> 
+            let kind = mty1.ModuleOrNamespaceKind
+            let entities = 
+                (mty1.AllEntitiesByLogicalMangledName,mty2.AllEntitiesByLogicalMangledName) 
+                ||>  CombineMaps (CombineEntityList path) 
+
+            let vals = QueueList.append mty1.AllValsAndMembers mty2.AllValsAndMembers
+
+            ModuleOrNamespaceType(kind, vals, QueueList.ofList (NameMap.range entities))
+
+        | Namespace, _ | _,Namespace -> 
+            error(Error(FSComp.SR.tastNamespaceAndModuleWithSameNameInAssembly(textOfPath path),m))
+
+        | _-> 
+            error(Error(FSComp.SR.tastTwoModulesWithSameNameInAssembly(textOfPath path),m))
+
+    and CombineEntityList path l = 
+        match l with
+        | h :: t -> List.fold (CombineEntites path) h t
+        | _ -> failwith "CombineEntityList"
+
+    and CombineEntites path (entity1:Entity) (entity2:Entity) = 
+
+        match entity1.IsModuleOrNamespace, entity2.IsModuleOrNamespace with
+        | true,true -> 
+            entity1 |> NewModifiedTycon (fun data1 -> 
+                        { data1 with 
+                             entity_xmldoc = XmlDoc.Merge entity1.XmlDoc entity2.XmlDoc
+                             entity_attribs = entity1.Attribs @ entity2.Attribs
+                             entity_modul_contents=lazy (CombineModuleOrNamespaceTypes (path@[entity2.DemangledModuleOrNamespaceName]) entity2.Range entity1.ModuleOrNamespaceType entity2.ModuleOrNamespaceType) }) 
+        | false,false -> 
+            error(Error(FSComp.SR.tastDuplicateTypeDefinitionInAssembly(entity2.LogicalName, textOfPath path),entity2.Range))
+        | _,_ -> 
+            error(Error(FSComp.SR.tastConflictingModuleAndTypeDefinitionInAssembly(entity2.LogicalName, textOfPath path),entity2.Range))
     
-and combineModuleOrNamespaceTypeList path m l = 
-    match l with
-    | h :: t -> List.fold (combineModuleOrNamespaceTypes path m) h t
-    | _ -> failwith "combineModuleOrNamespaceTypeList"
+    and CombineModuleOrNamespaceTypeList path m l = 
+        match l with
+        | h :: t -> List.fold (CombineModuleOrNamespaceTypes path m) h t
+        | _ -> failwith "CombineModuleOrNamespaceTypeList"
+
+    CombineModuleOrNamespaceTypeList [] m l
 
 //--------------------------------------------------------------------------
 // Resource format for pickled data
diff --git a/src/fsharp/tc.fsi b/src/fsharp/tc.fsi
deleted file mode 100644
index ce46550bcb2..00000000000
--- a/src/fsharp/tc.fsi
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-module internal Microsoft.FSharp.Compiler.TypeChecker
-
-open Internal.Utilities
-open Microsoft.FSharp.Compiler.AbstractIL 
-open Microsoft.FSharp.Compiler.AbstractIL.IL
-open Microsoft.FSharp.Compiler.AbstractIL.Internal 
-open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-open Microsoft.FSharp.Compiler 
-
-open Microsoft.FSharp.Compiler.Range
-open Microsoft.FSharp.Compiler.Ast
-open Microsoft.FSharp.Compiler.ErrorLogger
-open Microsoft.FSharp.Compiler.Tast
-open Microsoft.FSharp.Compiler.Tastops
-open Microsoft.FSharp.Compiler.Lib
-open Microsoft.FSharp.Compiler.Infos
-open Microsoft.FSharp.Compiler.Import
-open Microsoft.FSharp.Compiler.Env
-
-open System.Collections.Generic
-
-[]
-type TcEnv =
-    member DisplayEnv : DisplayEnv
-    member NameEnv : Nameres.NameResolutionEnv
-
-(* Incremental construction of environments, e.g. for F# Interactive *)
-val internal CreateInitialTcEnv : TcGlobals * ImportMap * range * (CcuThunk * string list * bool) list -> TcEnv 
-val internal AddCcuToTcEnv      : TcGlobals * ImportMap * range * TcEnv * CcuThunk * autoOpens: string list * bool -> TcEnv 
-val internal AddLocalRootModuleOrNamespace : Nameres.TcResultsSink -> TcGlobals -> ImportMap -> range -> TcEnv -> ModuleOrNamespaceType -> TcEnv
-val internal TcOpenDecl         : Nameres.TcResultsSink  -> TcGlobals -> ImportMap -> range -> range -> TcEnv -> Ast.LongIdent -> TcEnv 
-
-type TopAttribs =
-    { mainMethodAttrs : Attribs;
-      netModuleAttrs  : Attribs;
-      assemblyAttrs   : Attribs  }
-
-type ConditionalDefines = 
-    string list
-
-val internal EmptyTopAttrs : TopAttribs
-val internal CombineTopAttrs : TopAttribs -> TopAttribs -> TopAttribs
-
-val internal TypecheckOneImplFile : 
-      TcGlobals * NiceNameGenerator * ImportMap * CcuThunk * (unit -> bool) * ConditionalDefines * Nameres.TcResultsSink
-      -> TcEnv 
-      -> Tast.ModuleOrNamespaceType option
-      -> ParsedImplFileInput
-      -> Eventually
-
-val internal TypecheckOneSigFile : 
-      TcGlobals * NiceNameGenerator * ImportMap * CcuThunk  * (unit -> bool) * ConditionalDefines * Nameres.TcResultsSink 
-      -> TcEnv                             
-      -> ParsedSigFileInput
-      -> Eventually
-
-//-------------------------------------------------------------------------
-// exceptions arising from type checking 
-//------------------------------------------------------------------------- 
-
-exception internal BakedInMemberConstraintName of string * range
-exception internal FunctionExpected of DisplayEnv * TType * range
-exception internal NotAFunction of DisplayEnv * TType * range * range
-exception internal Recursion of DisplayEnv * Ast.Ident * TType * TType * range
-exception internal RecursiveUseCheckedAtRuntime of DisplayEnv * ValRef * range
-exception internal LetRecEvaluatedOutOfOrder of DisplayEnv * ValRef * ValRef * range
-exception internal LetRecCheckedAtRuntime of range
-exception internal LetRecUnsound of DisplayEnv * ValRef list * range
-exception internal TyconBadArgs of DisplayEnv * TyconRef * int * range
-exception internal UnionCaseWrongArguments of DisplayEnv * int * int * range
-exception internal UnionCaseWrongNumberOfArgs of DisplayEnv * int * int * range
-exception internal FieldsFromDifferentTypes of DisplayEnv * RecdFieldRef * RecdFieldRef * range
-exception internal FieldGivenTwice of DisplayEnv * RecdFieldRef * range
-exception internal MissingFields of string list * range
-exception internal UnitTypeExpected of DisplayEnv * TType * bool * range
-exception internal FunctionValueUnexpected of DisplayEnv * TType * range
-exception internal UnionPatternsBindDifferentNames of range
-exception internal VarBoundTwice of Ast.Ident
-exception internal ValueRestriction of DisplayEnv * bool * Val * Typar * range
-exception internal FieldNotMutable of DisplayEnv * RecdFieldRef * range
-exception internal ValNotMutable of DisplayEnv * ValRef * range
-exception internal ValNotLocal of DisplayEnv * ValRef * range
-exception internal InvalidRuntimeCoercion of DisplayEnv * TType * TType * range
-exception internal IndeterminateRuntimeCoercion of DisplayEnv * TType * TType * range
-exception internal IndeterminateStaticCoercion of DisplayEnv * TType * TType * range
-exception internal StaticCoercionShouldUseBox of DisplayEnv * TType * TType * range
-exception internal RuntimeCoercionSourceSealed of DisplayEnv * TType * range
-exception internal CoercionTargetSealed of DisplayEnv * TType * range
-exception internal UpcastUnnecessary of range
-exception internal TypeTestUnnecessary of range
-exception internal SelfRefObjCtor of bool * range
-exception internal VirtualAugmentationOnNullValuedType of range
-exception internal NonVirtualAugmentationOnNullValuedType of range
-exception internal UseOfAddressOfOperator of range
-exception internal DeprecatedThreadStaticBindingWarning of range
-exception internal NotUpperCaseConstructor of range
-exception internal IntfImplInIntrinsicAugmentation of range
-exception internal IntfImplInExtrinsicAugmentation of range
-exception internal OverrideInIntrinsicAugmentation of range
-exception internal OverrideInExtrinsicAugmentation of range
-exception internal NonUniqueInferredAbstractSlot of TcGlobals * DisplayEnv * string * MethInfo * MethInfo * range
-exception internal StandardOperatorRedefinitionWarning of string * range
-exception internal ParameterlessStructCtor of range
-
-val internal TcFieldInit : range -> ILFieldInit -> Tast.Const
-
-val IsSecurityAttribute : TcGlobals -> ImportMap -> Dictionary -> Attrib -> range -> bool
-val IsSecurityCriticalAttribute : TcGlobals -> Attrib -> bool
-val LightweightTcValForUsingInBuildMethodCall : g : TcGlobals -> vref:ValRef -> vrefFlags : ValUseFlag -> vrefTypeInst : TTypes -> m : range -> Expr * TType
\ No newline at end of file
diff --git a/src/fsharp/tlr.fsi b/src/fsharp/tlr.fsi
deleted file mode 100644
index c0b16fcaeea..00000000000
--- a/src/fsharp/tlr.fsi
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-module internal Microsoft.FSharp.Compiler.Tlr 
-
-open Microsoft.FSharp.Compiler 
-
-val MakeTLRDecisions : Tast.CcuThunk -> Env.TcGlobals -> Tast.TypedImplFile -> Tast.TypedImplFile
-#if TLR_LIFT
-val liftTLR : bool ref
-#endif
diff --git a/src/fsharp/vs/IncrementalBuild.fs b/src/fsharp/vs/IncrementalBuild.fs
old mode 100644
new mode 100755
index 59ca37f8b57..e4e7ce807da
--- a/src/fsharp/vs/IncrementalBuild.fs
+++ b/src/fsharp/vs/IncrementalBuild.fs
@@ -1,32 +1,36 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler
-#nowarn "57"
-open Internal.Utilities.Debug
-open Internal.Utilities.FileSystem
+
+
 open System
 open System.IO
-open System.Reflection             
-open System.Diagnostics
 open System.Collections.Generic
-open System
-
 open Microsoft.FSharp.Compiler
-open Microsoft.FSharp.Compiler.Range
-open Microsoft.FSharp.Compiler.Build
+open Microsoft.FSharp.Compiler.NameResolution
 open Microsoft.FSharp.Compiler.Tastops
-open Microsoft.FSharp.Compiler.ErrorLogger
 open Microsoft.FSharp.Compiler.Lib
 open Microsoft.FSharp.Compiler.AbstractIL
+open Microsoft.FSharp.Compiler.AbstractIL.IL
+open Microsoft.FSharp.Compiler.AbstractIL.Internal
 open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library 
+open Microsoft.FSharp.Compiler.CompileOps
+open Microsoft.FSharp.Compiler.CompileOptions
+open Microsoft.FSharp.Compiler.Ast
+open Microsoft.FSharp.Compiler.ErrorLogger
+open Microsoft.FSharp.Compiler.TcGlobals
+open Microsoft.FSharp.Compiler.TypeChecker
+open Microsoft.FSharp.Compiler.Tast 
+open Microsoft.FSharp.Compiler.Range
+open Internal.Utilities
+open Internal.Utilities.Collections
 
+
+[]
 module internal IncrementalBuild =
 
     /// A particular node in the Expr language. Use an int for keys instead of the entire Expr to avoid extra hashing.
-    type Id = 
-        | Id of int
-        static member toInt (Id id) = id
-        override id.ToString() = match id with Id(n) ->sprintf "Id(%d)" n
+    type Id = Id of int
             
     []
     /// A build rule representing a single output
@@ -44,23 +48,21 @@ module internal IncrementalBuild =
         /// ScalarMap (uniqueRuleId, outputName, input, taskFunction)
         ///
         /// A build rule representing the transformation of a single input to a single output
+        /// THIS CASE IS CURRENTLY UNUSED
         | ScalarMap of Id * string * ScalarBuildRule * (obj->obj)
 
         /// Get the Id for the given ScalarBuildRule.
-        static member GetId = function
+        member  x.Id = 
+            match x with
             | ScalarInput(id,_) ->id
             | ScalarDemultiplex(id,_,_,_) ->id
             | ScalarMap(id,_,_,_) ->id
         /// Get the Name for the givenScalarExpr.
-        static member GetName = function
+        member x.Name = 
+            match x with 
             | ScalarInput(_,n) ->n                
             | ScalarDemultiplex(_,n,_,_) ->n
             | ScalarMap(_,n,_,_) ->n                
-        override ve.ToString() = 
-            match ve with 
-            | ScalarInput(Id id,name) ->sprintf "InputScalar(%d,%s)" id name
-            | ScalarDemultiplex(Id id,name,_,_) ->sprintf "ScalarDemultiplex(%d,%s)" id name
-            | ScalarMap(Id id,name,_,_) ->sprintf "ScalarMap(%d,%s)" id name
 
     /// A build rule with a vector of outputs
     and VectorBuildRule = 
@@ -71,7 +73,7 @@ module internal IncrementalBuild =
 
         /// VectorInput (uniqueRuleId, outputName, initialAccumulator, inputs, taskFunction)
         ///
-        /// A build rule representing the scan-left combinining a single scalar accumulator input with a vector of inputs
+        /// A build rule representing the scan-left combining a single scalar accumulator input with a vector of inputs
         | VectorScanLeft of Id * string * ScalarBuildRule * VectorBuildRule * (obj->obj->Eventually)
 
         /// VectorMap (uniqueRuleId, outputName, inputs, taskFunction)
@@ -90,43 +92,36 @@ module internal IncrementalBuild =
         | VectorMultiplex of Id * string * ScalarBuildRule * (obj->obj[])
 
         /// Get the Id for the given VectorBuildRule.
-        static member GetId = function
+        member x.Id = 
+            match x with 
             | VectorInput(id,_) ->id
             | VectorScanLeft(id,_,_,_,_) ->id
             | VectorMap(id,_,_,_) ->id
-            | VectorStamp(id,_,_,_) ->id
+            | VectorStamp (id,_,_,_) ->id
             | VectorMultiplex(id,_,_,_) ->id
         /// Get the Name for the given VectorBuildRule.
-        static member GetName = function
+        member x.Name = 
+            match x with 
             | VectorInput(_,n) ->n
             | VectorScanLeft(_,n,_,_,_) ->n
             | VectorMap(_,n,_,_) ->n
-            | VectorStamp(_,n,_,_) ->n
+            | VectorStamp (_,n,_,_) ->n
             | VectorMultiplex(_,n,_,_) ->n
-        override ve.ToString() = 
-            match ve with 
-            | VectorInput(Id id,name) ->sprintf "VectorInput(%d,%s)" id name
-            | VectorScanLeft(Id id,name,_,_,_) ->sprintf "VectorScanLeft(%d,%s)" id name
-            | VectorMap(Id id,name,_,_) ->sprintf "VectorMap(%d,%s)" id name
-            | VectorStamp(Id id,name,_,_) ->sprintf "VectorStamp(%d,%s)" id name
-            | VectorMultiplex(Id id,name,_,_) ->sprintf "VectorMultiplex(%d,%s)" id name
         
     []
     type BuildRuleExpr =
         | ScalarBuildRule of ScalarBuildRule
         | VectorBuildRule of VectorBuildRule      
         /// Get the Id for the given Expr.
-        static member GetId = function
-            | ScalarBuildRule se ->ScalarBuildRule.GetId se
-            | VectorBuildRule ve ->VectorBuildRule.GetId ve      
+        member x.Id = 
+            match x with 
+            | ScalarBuildRule se -> se.Id
+            | VectorBuildRule ve -> ve.Id      
         /// Get the Name for the given Expr.
-        static member GetName= function
-            | ScalarBuildRule se ->ScalarBuildRule.GetName se
-            | VectorBuildRule ve ->VectorBuildRule.GetName ve      
-        override e.ToString() = 
-            match e with 
-            | ScalarBuildRule _ -> sprintf "ScalarBuildRule se" 
-            | VectorBuildRule _ -> sprintf "VectorBuildRule ve"
+        member x.Name = 
+            match x with 
+            | ScalarBuildRule se -> se.Name
+            | VectorBuildRule ve -> ve.Name    
 
     // Ids of exprs            
     let nextid = ref 999 // Number ids starting with 1000 to discern them
@@ -134,70 +129,79 @@ module internal IncrementalBuild =
         nextid:=!nextid+1
         Id(!nextid)                    
         
+    type INode = 
+        abstract Name: string
+
     type IScalar = 
-        abstract GetScalarExpr : unit -> ScalarBuildRule
+        inherit INode
+        abstract Expr: ScalarBuildRule
+
     type IVector =
-        abstract GetVectorExpr : unit-> VectorBuildRule
+        inherit INode
+        abstract Expr: VectorBuildRule
             
-    type Scalar<'T> =  interface  end
+    type Scalar<'T> =  interface inherit IScalar  end
 
-    type Vector<'T> = interface end
+    type Vector<'T> = interface inherit IVector end
     
     /// The outputs of a build        
     []
     type NamedOutput = 
-        | NamedVectorOutput of string * IVector
-        | NamedScalarOutput of string * IScalar
+        | NamedVectorOutput of IVector
+        | NamedScalarOutput of IScalar
 
-    type BuildRules = { RuleList : (string * BuildRuleExpr) list }
+    type BuildRules = { RuleList: (string * BuildRuleExpr) list }
 
     /// Visit each task and call op with the given accumulator.
     let FoldOverBuildRules(rules:BuildRules, op, acc)=
-        let rec VisitVector (ve:VectorBuildRule) acc = 
+        let rec visitVector (ve:VectorBuildRule) acc = 
             match ve with
             | VectorInput _ ->op (VectorBuildRule ve) acc
-            | VectorScanLeft(_,_,a,i,_) ->op (VectorBuildRule ve) (VisitVector i (VisitScalar a acc))
+            | VectorScanLeft(_,_,a,i,_) ->op (VectorBuildRule ve) (visitVector i (visitScalar a acc))
             | VectorMap(_,_,i,_)
-            | VectorStamp(_,_,i,_) ->op (VectorBuildRule ve) (VisitVector i acc)
-            | VectorMultiplex(_,_,i,_) ->op (VectorBuildRule ve) (VisitScalar i acc)
-        and VisitScalar (se:ScalarBuildRule) acc = 
+            | VectorStamp (_,_,i,_) ->op (VectorBuildRule ve) (visitVector i acc)
+            | VectorMultiplex(_,_,i,_) ->op (VectorBuildRule ve) (visitScalar i acc)
+
+        and visitScalar (se:ScalarBuildRule) acc = 
             match se with
             | ScalarInput _ ->op (ScalarBuildRule se) acc
-            | ScalarDemultiplex(_,_,i,_) ->op (ScalarBuildRule se) (VisitVector i acc)
-            | ScalarMap(_,_,i,_) ->op (ScalarBuildRule se) (VisitScalar i acc)
-        let rec VisitRule (expr:BuildRuleExpr) acc =  
+            | ScalarDemultiplex(_,_,i,_) ->op (ScalarBuildRule se) (visitVector i acc)
+            | ScalarMap(_,_,i,_) ->op (ScalarBuildRule se) (visitScalar i acc)
+
+        let visitRule (expr:BuildRuleExpr) acc =  
             match expr with
-            | ScalarBuildRule se ->VisitScalar se acc
-            | VectorBuildRule ve ->VisitVector ve acc
-        List.foldBack VisitRule (rules.RuleList |> List.map snd) acc            
+            | ScalarBuildRule se ->visitScalar se acc
+            | VectorBuildRule ve ->visitVector ve acc
+
+        List.foldBack visitRule (rules.RuleList |> List.map snd) acc            
     
     /// Convert from interfaces into discriminated union.
-    let ToBuild (names:NamedOutput list) : BuildRules = 
+    let ToBuild (names:NamedOutput list): BuildRules = 
 
         // Create the rules.
-        let CreateRules() = 
-           { RuleList = names |> List.map(function NamedVectorOutput(n,v) -> n,VectorBuildRule(v.GetVectorExpr())
-                                                 | NamedScalarOutput(n,s) -> n,ScalarBuildRule(s.GetScalarExpr())) }
+        let createRules() = 
+           { RuleList = names |> List.map (function NamedVectorOutput(v) -> v.Name,VectorBuildRule(v.Expr)
+                                                  | NamedScalarOutput(s) -> s.Name,ScalarBuildRule(s.Expr)) }
         
         // Ensure that all names are unique.
-        let EnsureUniqueNames (expr:BuildRuleExpr) (acc:Map) = 
+        let ensureUniqueNames (expr:BuildRuleExpr) (acc:Map) = 
             let AddUniqueIdToNameMapping(id,name)=
                 match acc.TryFind name with
-                 | Some(priorId) -> 
+                 | Some priorId -> 
                     if id<>priorId then failwith (sprintf "Two build expressions had the same name: %s" name)
                     else acc
                  | None-> Map.add name id acc
-            let id = BuildRuleExpr.GetId(expr)
-            let name = BuildRuleExpr.GetName(expr)
+            let id = expr.Id
+            let name = expr.Name
             AddUniqueIdToNameMapping(id,name)
         
         // Validate the rule tree
-        let ValidateRules (rules:BuildRules) =
-            FoldOverBuildRules(rules,EnsureUniqueNames,Map.empty) |> ignore
+        let validateRules (rules:BuildRules) =
+            FoldOverBuildRules(rules,ensureUniqueNames,Map.empty) |> ignore
         
         // Convert and validate
-        let rules = CreateRules()
-        ValidateRules rules
+        let rules = createRules()
+        validateRules rules
         rules
 
     /// These describe the input conditions for a result. If conditions change then the result is invalid.
@@ -208,16 +212,13 @@ module internal IncrementalBuild =
         | BoundInputVector // An external input into the build
         | IndexedValueElement of DateTime
         | UnevaluatedInput
+
         /// Return true if the result is fully evaluated
-        member is.IsEvaluated() = 
-        
-            let rec IsEvaluated(is) =
-                match is with
-                | UnevaluatedInput -> false
-                | SingleMappedVectorInput iss -> iss |> Array.forall IsEvaluated
-                | _ -> true
-            IsEvaluated(is)
-        override is.ToString() = sprintf "%A" is
+        member is.IsEvaluated = 
+            match is with
+            | UnevaluatedInput -> false
+            | SingleMappedVectorInput iss -> iss |> Array.forall (fun is -> is.IsEvaluated)
+            | _ -> true
             
     
     /// A slot for holding a single result.
@@ -225,28 +226,25 @@ module internal IncrementalBuild =
         | NotAvailable
         | InProgress of (unit -> Eventually) * DateTime 
         | Available of obj * DateTime * InputSignature
+
         /// Get the available result. Throw an exception if not available.
-        static member GetAvailable = function Available(o,_,_) ->o  | _->failwith "No available result"
-        /// Get the time stamp if available. Otheriwse MaxValue.        
-        static member Timestamp = function Available(_,ts,_) ->ts | InProgress(_,ts) -> ts | _-> DateTime.MaxValue
+        member x.GetAvailable() = match x with Available(o,_,_) ->o  | _ -> failwith "No available result"
+
+        /// Get the time stamp if available. Otherwise MaxValue.        
+        member x.Timestamp = match x with Available(_,ts,_) -> ts | InProgress(_,ts) -> ts | _ -> DateTime.MaxValue
+
         /// Get the time stamp if available. Otheriwse MaxValue.        
-        static member InputSignature = function Available(_,_,signature) ->signature | _-> UnevaluatedInput
+        member x.InputSignature = match x with Available(_,_,signature) -> signature | _ -> UnevaluatedInput
         
         member x.ResultIsInProgress =  match x with | InProgress _ -> true | _ -> false
         member x.GetInProgressContinuation() =  match x with | InProgress (f,_) -> f() | _ -> failwith "not in progress"
-        member x.TryGetAvailable() =  match x with | InProgress _ | NotAvailable -> None | Available(obj,dt,i) -> Some(obj,dt,i)
+        member x.TryGetAvailable() =  match x with | InProgress _ | NotAvailable -> None | Available(obj,dt,i) -> Some (obj,dt,i)
 
-        override r.ToString() = 
-            match r with 
-            | NotAvailable -> "NotAvailable"
-            | InProgress _ -> "InProgress"
-            | Available(o, ts, _) -> sprintf "Available('%s' as of %A)" (o.ToString()) ts
-            
     /// An immutable sparse vector of results.                
     type ResultVector(size,zeroElementTimestamp,map) =
         let get slot = 
             match Map.tryFind slot map with
-            | Some(result) ->result
+            | Some result ->result
             | None->NotAvailable                   
         let asList = lazy List.map (fun i->i,get i) [0..size-1]
 
@@ -257,72 +255,31 @@ module internal IncrementalBuild =
             if size<>newsize then 
                 ResultVector(newsize, zeroElementTimestamp, map |> Map.filter(fun s _ -> s < newsize))
             else rv
+
         member rv.Set(slot,value) = 
-            #if DEBUG
+#if DEBUG
             if slot<0 then failwith "ResultVector slot less than zero"
             if slot>=size then failwith "ResultVector slot too big"
-            #endif
+#endif
             ResultVector(size, zeroElementTimestamp, Map.add slot value map)
+
         member rv.MaxTimestamp() =
-//            use t = Trace.Call("IncrementalBuildVerbose", "MaxTimestamp",  fun _->sprintf "vector of size=%d" size)
-            let Maximize (lasttimestamp:DateTime) (_,result) = 
-                let thistimestamp = Result.Timestamp result
-                let m = max lasttimestamp thistimestamp
-//                use t = Trace.Call("IncrementalBuildVerbose", "Maximize",  fun _->sprintf "last=%s this=%s max=%s" (lasttimestamp.ToString()) (thistimestamp.ToString()) (m.ToString()))
-                m
-            List.fold Maximize zeroElementTimestamp (asList.Force())
+            let maximize (lasttimestamp:DateTime) (_,result:Result) =  max lasttimestamp result.Timestamp
+            List.fold maximize zeroElementTimestamp (asList.Force())
+
         member rv.Signature() =
             let l = asList.Force()
-            let l = l |> List.map(fun (_,result) ->Result.InputSignature result)
+            let l = l |> List.map (fun (_,result) -> result.InputSignature)
             SingleMappedVectorInput (l|>List.toArray)
                                   
-        member rv.FoldLeft f s : 'a = List.fold f s (asList.Force())
-        override rv.ToString() = asList.ToString()   // NOTE: Force()ing this inside ToString() leads to StackOverflowException and very undesirable debugging behavior for all of F#
+        member rv.FoldLeft f s: 'a = List.fold f s (asList.Force())
                 
     /// A result of performing build actions
     []
     type ResultSet =
         | ScalarResult of Result
         | VectorResult of ResultVector
-        override rs.ToString() = 
-            match rs with
-            | ScalarResult(sr) ->sprintf "ScalarResult(%s)" (sr.ToString())
-            | VectorResult(rs) ->sprintf "VectorResult(%s)" (rs.ToString())
                             
-    /// Action timing
-    module Time =     
-        let sw = new Stopwatch()
-        let Action<'T> taskname slot func : 'T= 
-            if Trace.ShouldLog("IncrementalBuildWorkUnits") then 
-                let slotMessage = 
-                    if slot= -1 then sprintf "%s" taskname
-                    else sprintf "%s over slot %d" taskname slot
-                // Timings and memory
-                let maxGen = System.GC.MaxGeneration
-                let ptime = System.Diagnostics.Process.GetCurrentProcess()
-                let timePrev = ptime.UserProcessorTime.TotalSeconds
-                let gcPrev = [| for i in 0 .. maxGen -> System.GC.CollectionCount i |]
-                let pbPrev = ptime.PrivateMemorySize64 in                
-
-                // Call the function
-                let result = func()
-                
-                // Report.
-                let timeNow = ptime.UserProcessorTime.TotalSeconds
-                let pbNow = ptime.PrivateMemorySize64
-                let spanGC = [| for i in 0 .. maxGen -> System.GC.CollectionCount i - gcPrev.[i] |]
-                
-                Trace.PrintLine("IncrementalBuildWorkUnits", fun _ ->
-                                                        sprintf "%s TIME: %4.3f MEM: %3d (delta) G0: %3d G1: %2d G2: %2d" 
-                                                            slotMessage
-                                                            (timeNow - timePrev) 
-                                                            (pbNow - pbPrev)
-                                                            spanGC.[min 0 maxGen] 
-                                                            spanGC.[min 1 maxGen] 
-                                                            spanGC.[min 2 maxGen])
-                result
-            else func()            
-        
     /// Result of a particular action over the bound build tree
     []
     type ActionResult = 
@@ -330,12 +287,6 @@ module internal IncrementalBuild =
         | ScalarValuedResult of Id * obj * DateTime * InputSignature
         | VectorValuedResult of Id * obj[] * DateTime * InputSignature
         | ResizeResult of Id * (*slotcount*) int
-        override ar.ToString() = 
-            match ar with
-            | IndexedResult(id,slot,slotcount,_,dt) ->sprintf "IndexedResult(%d,%d,%d,obj,%A)" (Id.toInt id) slot slotcount dt
-            | ScalarValuedResult(id,_,dt,inputsig) ->sprintf "ScalarValuedResult(%d,obj,%A,%A)" (Id.toInt id) dt inputsig
-            | VectorValuedResult(id,_,dt,inputsig) ->sprintf "VectorValuedResult(%d,obj[],%A,%A)" (Id.toInt id) dt inputsig
-            | ResizeResult(id,slotcount) ->sprintf "ResizeResult(%d,%d)" (Id.toInt id) slotcount
         
         
     /// A pending action over the bound build tree
@@ -346,268 +297,266 @@ module internal IncrementalBuild =
         | VectorAction of Id * (*taskname*)string * DateTime * InputSignature *  (unit->obj[])
         | ResizeResultAction of Id * (*slotcount*) int 
         /// Execute one action and return a corresponding result.
-        static member Execute action = 
+        member action.Execute() = 
             match action with
-            | IndexedAction(id,taskname,slot,slotcount,timestamp,func) -> IndexedResult(id,slot,slotcount,Time.Action taskname slot func,timestamp)
-            | ScalarAction(id,taskname,timestamp,inputsig,func) -> ScalarValuedResult(id,Time.Action taskname (-1) func,timestamp,inputsig)
-            | VectorAction(id,taskname,timestamp,inputsig,func) -> VectorValuedResult(id,Time.Action taskname (-1) func,timestamp,inputsig)
+            | IndexedAction(id,_taskname,slot,slotcount,timestamp,func) -> IndexedResult(id,slot,slotcount,func(),timestamp)
+            | ScalarAction(id,_taskname,timestamp,inputsig,func) -> ScalarValuedResult(id,func(),timestamp,inputsig)
+            | VectorAction(id,_taskname,timestamp,inputsig,func) -> VectorValuedResult(id,func(),timestamp,inputsig)
             | ResizeResultAction(id,slotcount) -> ResizeResult(id,slotcount)
      
-    /// String helper functions for when there's no %A
-    type String = 
-        static member OfList2 l =
-            " ["^String.Join(",\n ", List.toArray (l|>List.map (fun (v1,v2) ->((box v1).ToString()) + ";" + ((box v2).ToString())))) + " ]"
-            
     /// A set of build rules and the corresponding, possibly partial, results from building.
     []
     type PartialBuild(rules:BuildRules, results:Map) = 
         member bt.Rules = rules
         member bt.Results = results
-        override bt.ToString() = 
-            let sb = new System.Text.StringBuilder()
-            results |> Map.iter(fun id result->
-                                    let id = Id.toInt id
-                                    let s = sprintf "\n    {Id=%d,ResultSet=%s}" id (result.ToString())
-                                    let _ = sb.Append(s)
-                                    ())
-            sprintf "{Rules={%s}\n Results={%s}}" (String.OfList2 rules.RuleList) (sb.ToString())
    
     /// Given an expression, find the expected width.
     let rec GetVectorWidthByExpr(bt:PartialBuild,ve:VectorBuildRule) = 
-        let KnownValue ve = 
-            match bt.Results.TryFind(VectorBuildRule.GetId ve) with 
-            | Some(resultSet) ->
+        let id = ve.Id
+        let KnownValue() = 
+            match bt.Results.TryFind id with 
+            | Some resultSet ->
                 match resultSet with
-                | VectorResult rv ->Some(rv.Size)
+                | VectorResult rv ->Some rv.Size
                 | _ -> failwith "Expected vector to have vector result."
             | None-> None
         match ve with
         | VectorScanLeft(_,_,_,i,_)
         | VectorMap(_,_,i,_)
-        | VectorStamp(_,_,i,_) ->
+        | VectorStamp (_,_,i,_) ->
             match GetVectorWidthByExpr(bt,i) with
             | Some _ as r -> r
-            | None->KnownValue ve  
+            | None -> KnownValue()
         | VectorInput _
-        | VectorMultiplex _ -> KnownValue ve  
+        | VectorMultiplex _ -> KnownValue()
         
     /// Given an expression name, get the corresponding expression.    
     let GetTopLevelExprByName(bt:PartialBuild, seek:string) =
-        bt.Rules.RuleList |> List.filter(fun(name,_) ->name=seek) |> List.map(fun(_,root) ->root) |> List.head
+        bt.Rules.RuleList |> List.filter(fun(name,_) ->name=seek) |> List.map (fun(_,root) ->root) |> List.head
     
     /// Get an expression matching the given name.
-    let GetExprByName(bt:PartialBuild, seek:string) : BuildRuleExpr = 
-        let MatchName (expr:BuildRuleExpr) (acc:BuildRuleExpr option) : BuildRuleExpr option =
-            let name = BuildRuleExpr.GetName(expr)
-            if name = seek then Some(expr) else acc
-        let matchOption = FoldOverBuildRules(bt.Rules,MatchName,None)
+    let GetExprByName(bt:PartialBuild, node:INode): BuildRuleExpr = 
+        let matchName (expr:BuildRuleExpr) (acc:BuildRuleExpr option): BuildRuleExpr option =
+            if expr.Name = node.Name then Some expr else acc
+        let matchOption = FoldOverBuildRules(bt.Rules,matchName,None)
         Option.get matchOption
 
     // Given an Id, find the corresponding expression.
-    let GetExprById(bt:PartialBuild, seek:Id) : BuildRuleExpr= 
-        let rec VectorExprOfId ve =
+    let GetExprById(bt:PartialBuild, seek:Id): BuildRuleExpr= 
+        let rec vectorExprOfId ve =
             match ve with
-            | VectorInput(id,_) ->if seek=id then Some(VectorBuildRule ve) else None
+            | VectorInput(id,_) ->if seek=id then Some (VectorBuildRule ve) else None
             | VectorScanLeft(id,_,a,i,_) ->
-                if seek=id then Some(VectorBuildRule ve) else
-                    let result = ScalarExprOfId(a) 
-                    match result with Some _ -> result | None->VectorExprOfId i
-            | VectorMap(id,_,i,_) ->if seek=id then Some(VectorBuildRule ve) else VectorExprOfId i
-            | VectorStamp(id,_,i,_) ->if seek=id then Some(VectorBuildRule ve) else VectorExprOfId i
-            | VectorMultiplex(id,_,i,_) ->if seek=id then Some(VectorBuildRule ve) else ScalarExprOfId i
-        and ScalarExprOfId se =
+                if seek=id then Some (VectorBuildRule ve) else
+                    let result = scalarExprOfId(a) 
+                    match result with Some _ -> result | None->vectorExprOfId i
+            | VectorMap(id,_,i,_) ->if seek=id then Some (VectorBuildRule ve) else vectorExprOfId i
+            | VectorStamp (id,_,i,_) ->if seek=id then Some (VectorBuildRule ve) else vectorExprOfId i
+            | VectorMultiplex(id,_,i,_) ->if seek=id then Some (VectorBuildRule ve) else scalarExprOfId i
+
+        and scalarExprOfId se =
             match se with
-            | ScalarInput(id,_) ->if seek=id then Some(ScalarBuildRule se) else None
-            | ScalarDemultiplex(id,_,i,_) ->if seek=id then Some(ScalarBuildRule se) else VectorExprOfId i
-            | ScalarMap(id,_,i,_) ->if seek=id then Some(ScalarBuildRule se) else ScalarExprOfId i
-        let ExprOfId(expr:BuildRuleExpr) = 
+            | ScalarInput(id,_) ->if seek=id then Some (ScalarBuildRule se) else None
+            | ScalarDemultiplex(id,_,i,_) ->if seek=id then Some (ScalarBuildRule se) else vectorExprOfId i
+            | ScalarMap(id,_,i,_) ->if seek=id then Some (ScalarBuildRule se) else scalarExprOfId i
+
+        let exprOfId(expr:BuildRuleExpr) = 
             match expr with
-            | ScalarBuildRule se ->ScalarExprOfId se
-            | VectorBuildRule ve ->VectorExprOfId ve
-        let exprs = bt.Rules.RuleList |> List.map(fun(_,root) ->ExprOfId(root)) |> List.filter Option.isSome
+            | ScalarBuildRule se ->scalarExprOfId se
+            | VectorBuildRule ve ->vectorExprOfId ve
+
+        let exprs = bt.Rules.RuleList |> List.map (fun(_,root) ->exprOfId(root)) |> List.filter Option.isSome
         match exprs with
-        | Some(expr)::_ -> expr
-        | _ -> failwith (sprintf "GetExprById did not find an expression for Id %d" (Id.toInt seek))
+        | Some expr :: _ -> expr
+        | _ -> failwith (sprintf "GetExprById did not find an expression for Id")
 
     let GetVectorWidthById (bt:PartialBuild) seek = 
         match GetExprById(bt,seek) with 
         | ScalarBuildRule _ ->failwith "Attempt to get width of scalar." 
-        | VectorBuildRule ve ->Option.get (GetVectorWidthByExpr(bt,ve))
+        | VectorBuildRule ve -> Option.get (GetVectorWidthByExpr(bt,ve))
 
-    let GetScalarExprResult(bt:PartialBuild, se:ScalarBuildRule) =
-        match bt.Results.TryFind(ScalarBuildRule.GetId se) with 
-        | Some(resultSet) ->
+    let GetScalarExprResult (bt:PartialBuild, se:ScalarBuildRule) =
+        match bt.Results.TryFind (se.Id) with 
+        | Some resultSet ->
             match se,resultSet with
-            | ScalarInput _,ScalarResult(r)
-            | ScalarMap _,ScalarResult(r)
-            | ScalarDemultiplex _,ScalarResult(r) ->r
-            | se,result->failwith (sprintf "GetScalarExprResult had no match for %A,%A" se result) 
+            | ScalarInput _,ScalarResult r
+            | ScalarMap _,ScalarResult r
+            | ScalarDemultiplex _,ScalarResult r ->r
+            | _ ->failwith "GetScalarExprResult had no match"
         | None->NotAvailable
 
-    let GetVectorExprResultVector(bt:PartialBuild, ve:VectorBuildRule) =
-        match bt.Results.TryFind(VectorBuildRule.GetId ve) with 
-        | Some(resultSet) ->
+    let GetVectorExprResultVector (bt:PartialBuild, ve:VectorBuildRule) =
+        match bt.Results.TryFind (ve.Id) with 
+        | Some resultSet ->
             match ve,resultSet with
             | VectorScanLeft _,VectorResult rv
             | VectorMap _,VectorResult rv
             | VectorInput _,VectorResult rv
             | VectorStamp _,VectorResult rv
             | VectorMultiplex _,VectorResult rv -> Some rv
-            | ve,result->failwith (sprintf "GetVectorExprResultVector had no match for %A,%A" ve result) 
+            | _ -> failwith "GetVectorExprResultVector had no match"
         | None->None
 
-    let GetVectorExprResult(bt:PartialBuild, ve:VectorBuildRule, slot) =
-        match bt.Results.TryFind(VectorBuildRule.GetId ve) with 
-        | Some(resultSet) ->
+    let GetVectorExprResult (bt:PartialBuild, ve:VectorBuildRule, slot) =
+        match bt.Results.TryFind ve.Id with 
+        | Some resultSet ->
             match ve,resultSet with
             | VectorScanLeft _,VectorResult rv
             | VectorMap _,VectorResult rv
             | VectorInput _,VectorResult rv
             | VectorStamp _,VectorResult rv -> rv.Get slot
             | VectorMultiplex _,VectorResult rv -> rv.Get slot
-            | ve,result->failwith (sprintf "GetVectorExprResult had no match for %A,%A" ve result) 
+            | _ -> failwith "GetVectorExprResult had no match" 
         | None->NotAvailable
 
     /// Get the maximum build stamp for an output.
-    let MaxTimestamp(bt:PartialBuild,id,_inputstamp) = 
-        match bt.Results.TryFind(id) with
-        | Some(resultset) -> 
+    let MaxTimestamp(bt:PartialBuild,id) = 
+        match bt.Results.TryFind id with
+        | Some resultset -> 
             match resultset with 
-            | ScalarResult(rs) -> Result.Timestamp rs
+            | ScalarResult(rs) -> rs.Timestamp
             | VectorResult rv -> rv.MaxTimestamp()
         | None -> DateTime.MaxValue
         
     let Signature(bt:PartialBuild,id) =
-        match bt.Results.TryFind(id) with
-        | Some(resultset) -> 
+        match bt.Results.TryFind id with
+        | Some resultset -> 
             match resultset with 
-            | ScalarResult(rs) -> Result.InputSignature rs
+            | ScalarResult(rs) -> rs.InputSignature
             | VectorResult rv -> rv.Signature()
         | None -> UnevaluatedInput               
      
     /// Get all the results for the given expr.
-    let AllResultsOfExpr extractor (bt:PartialBuild) expr = 
+    let AllResultsOfExpr extractor (bt:PartialBuild) (expr: VectorBuildRule) = 
         let GetAvailable (rv:ResultVector) = 
             let Extract acc (_, result) = (extractor result)::acc
             List.rev (rv.FoldLeft Extract [])
         let GetVectorResultById id = 
-            match bt.Results.TryFind(id) with
-            | Some(found) ->
+            match bt.Results.TryFind id with
+            | Some found ->
                 match found with
                 | VectorResult rv ->GetAvailable rv
                 | _ -> failwith "wrong result type"
             | None -> []
             
-        GetVectorResultById(VectorBuildRule.GetId(expr))
+        GetVectorResultById(expr.Id)
 
 
    
+    []
+    type BuildInput =
+        | Vector of INode * obj list
+        | Scalar of INode * obj
+
+        /// Declare a named scalar output.
+        static member ScalarInput (node:Scalar<'T>,value: 'T) = BuildInput.Scalar(node,box value)
+        static member VectorInput(node:Vector<'T>,values: 'T list) = BuildInput.Vector(node,List.map box values)
+
         
     let AvailableAllResultsOfExpr bt expr = 
         let msg = "Expected all results to be available"
         AllResultsOfExpr (function Available(o,_,_) -> o | _ -> failwith msg) bt expr
         
     /// Bind a set of build rules to a set of input values.
-    let ToBound(buildRules:BuildRules, vectorinputs, scalarinputs) = 
+    let ToBound(buildRules:BuildRules, inputs: BuildInput list) = 
         let now = DateTime.Now
-        let rec ApplyScalarExpr(se,results) =
+        let rec applyScalarExpr(se,results) =
             match se with
             | ScalarInput(id,n) -> 
-                let matches = scalarinputs 
-                                |> List.filter (fun (inputname,_) ->inputname=n) 
-                                |> List.map (fun (_,inputvalue:obj) -> ScalarResult(Available(inputvalue,now,BoundInputScalar)))
+                let matches = 
+                   [ for input in inputs  do
+                       match input with 
+                       | BuildInput.Scalar (node, value) ->
+                         if node.Name = n then 
+                             yield ScalarResult(Available(value,now,BoundInputScalar))
+                       | _ -> () ]
                 List.foldBack (Map.add id) matches results
-            | ScalarMap(_,_,se,_) ->ApplyScalarExpr(se,results)
+            | ScalarMap(_,_,se,_) ->applyScalarExpr(se,results)
             | ScalarDemultiplex(_,_,ve,_) ->ApplyVectorExpr(ve,results)
         and ApplyVectorExpr(ve,results) =
             match ve with
             | VectorInput(id,n) ->
-                let matches = vectorinputs 
-                                |> List.filter (fun (inputname,_,_) ->inputname=n) 
-                                |> List.map (fun (_,size,inputvalues:obj list) ->
-                                                        let results = inputvalues|>List.mapi(fun i value->i,Available(value,now,BoundInputVector))
-                                                        VectorResult(ResultVector(size,DateTime.MinValue,results|>Map.ofList))
-                                                        )
+                let matches = 
+                   [ for input in inputs  do
+                       match input with 
+                       | BuildInput.Scalar _ -> ()
+                       | BuildInput.Vector (node, values) ->
+                         if node.Name = n then 
+                            let results = values|>List.mapi(fun i value->i,Available(value,now,BoundInputVector))
+                            yield VectorResult(ResultVector(values.Length,DateTime.MinValue,results|>Map.ofList)) ]
                 List.foldBack (Map.add id) matches results
-            | VectorScanLeft(_,_,a,i,_) ->ApplyVectorExpr(i,ApplyScalarExpr(a,results))
+            | VectorScanLeft(_,_,a,i,_) ->ApplyVectorExpr(i,applyScalarExpr(a,results))
             | VectorMap(_,_,i,_)
-            | VectorStamp(_,_,i,_) ->ApplyVectorExpr(i,results)
-            | VectorMultiplex(_,_,i,_) ->ApplyScalarExpr(i,results)
-        let ApplyExpr expr results =
+            | VectorStamp (_,_,i,_) ->ApplyVectorExpr(i,results)
+            | VectorMultiplex(_,_,i,_) ->applyScalarExpr(i,results)
+
+        let applyExpr expr results =
             match expr with
-            | ScalarBuildRule se ->ApplyScalarExpr(se,results)
+            | ScalarBuildRule se ->applyScalarExpr(se,results)
             | VectorBuildRule ve ->ApplyVectorExpr(ve,results)
                                                                              
         // Place vector inputs into results map.
-        let results = List.foldBack ApplyExpr (buildRules.RuleList |> List.map snd) Map.empty
+        let results = List.foldBack applyExpr (buildRules.RuleList |> List.map snd) Map.empty
         PartialBuild(buildRules,results)
         
-        
-    /// Visit each executable action and call actionFunc with the given accumulator.
-    let ForeachAction output bt (actionFunc:Action->'acc->'acc) (acc:'acc) =
-        use t = Trace.Call("IncrementalBuildVerbose", "ForeachAction",  fun _->sprintf "name=%s" output)
-        let seen = Dictionary<_,_>()
-        let Seen(id) = 
-            if seen.ContainsKey(id) then true
-            else seen.[id]<-true
-                 false
+    type Target = Target of INode * int option
+
+    /// Visit each executable action necessary to evaluate the given output (with an optional slot in a
+    /// vector output). Call actionFunc with the given accumulator.
+    let ForeachAction (Target(output, optSlot)) bt (actionFunc:Action->'acc->'acc) (acc:'acc) =
+        let seen = Dictionary()
+        let isSeen id = 
+            if seen.ContainsKey id then true
+            else 
+                seen.[id] <- true
+                false
                  
-        let HasChanged(inputtimestamp,outputtimestamp) =
-           if inputtimestamp<>outputtimestamp then
-               Trace.PrintLine("IncrementalBuildVerbose", fun _ -> sprintf "Input timestamp is %A. Output timestamp is %A." inputtimestamp outputtimestamp)
-               true
-           else false
-           
-           
-        let ShouldEvaluate(bt,currentsig:InputSignature,id) =
-            let isAvailable = currentsig.IsEvaluated()
-            if isAvailable then 
-                let priorsig = Signature(bt,id)
-                currentsig<>priorsig
+        let shouldEvaluate(bt,currentsig:InputSignature,id) =
+            if currentsig.IsEvaluated then 
+                currentsig <> Signature(bt,id)
             else false
             
         /// Make sure the result vector saved matches the size of expr
-        let ResizeVectorExpr(ve:VectorBuildRule,acc)  = 
-            let id = VectorBuildRule.GetId ve
+        let resizeVectorExpr(ve:VectorBuildRule,acc)  = 
             match GetVectorWidthByExpr(bt,ve) with
-            | Some(expectedWidth) ->
-                match bt.Results.TryFind(id) with
-                | Some(found) ->
+            | Some expectedWidth ->
+                match bt.Results.TryFind ve.Id with
+                | Some found ->
                     match found with
                     | VectorResult rv ->
                         if rv.Size<> expectedWidth then 
-                            actionFunc (ResizeResultAction(id,expectedWidth)) acc
+                            actionFunc (ResizeResultAction(ve.Id ,expectedWidth)) acc
                         else acc
                     | _ -> acc
                 | None -> acc        
             | None -> acc           
         
-        let rec VisitVector ve acc =
+        let rec visitVector optSlot (ve: VectorBuildRule) acc =
         
-            if Seen(VectorBuildRule.GetId ve) then acc
+            if isSeen ve.Id then acc
             else
-                Trace.PrintLine("IncrementalBuildVerbose", fun _ -> sprintf "In ForeachAction at vector expression %s" (ve.ToString()))
-                let acc = ResizeVectorExpr(ve,acc)        
+                let acc = resizeVectorExpr(ve,acc)        
                 match ve with
                 | VectorInput _ ->acc
                 | VectorScanLeft(id,taskname,accumulatorExpr,inputExpr,func) ->
                     let acc =
                         match GetVectorWidthByExpr(bt,ve) with
-                        | Some(cardinality) ->                    
-                            let GetInputAccumulator slot =
-                                if slot=0 then GetScalarExprResult(bt,accumulatorExpr) 
-                                else GetVectorExprResult(bt,ve,slot-1)
+                        | Some cardinality ->                    
+                            let limit = match optSlot with None -> cardinality | Some slot -> (slot+1)
                         
                             let Scan slot =
-                                let accumulatorResult = GetInputAccumulator slot
-                                let inputResult = GetVectorExprResult(bt,inputExpr,slot)
+                                let accumulatorResult = 
+                                    if slot=0 then GetScalarExprResult (bt,accumulatorExpr) 
+                                    else GetVectorExprResult (bt,ve,slot-1)
+
+                                let inputResult = GetVectorExprResult (bt,inputExpr,slot)
                                 match accumulatorResult,inputResult with 
                                 | Available(accumulator,accumulatortimesamp,_accumulatorInputSig),Available(input,inputtimestamp,_inputSig) ->
                                     let inputtimestamp = max inputtimestamp accumulatortimesamp
-                                    let prevoutput = GetVectorExprResult(bt,ve,slot)
-                                    let outputtimestamp = Result.Timestamp prevoutput
+                                    let prevoutput = GetVectorExprResult (bt,ve,slot)
+                                    let outputtimestamp = prevoutput.Timestamp
                                     let scanOp = 
-                                        if HasChanged(inputtimestamp,outputtimestamp) then
+                                        if inputtimestamp <> outputtimestamp then
                                             Some (fun () -> func accumulator input)
                                         elif prevoutput.ResultIsInProgress then
                                             Some prevoutput.GetInProgressContinuation
@@ -615,253 +564,268 @@ module internal IncrementalBuild =
                                             // up-to-date and complete, no work required
                                             None
                                     match scanOp with 
-                                    | Some scanOp -> Some(actionFunc (IndexedAction(id,taskname,slot,cardinality,inputtimestamp,scanOp)) acc)
+                                    | Some scanOp -> Some (actionFunc (IndexedAction(id,taskname,slot,cardinality,inputtimestamp,scanOp)) acc)
                                     | None -> None
                                 | _ -> None                            
                                 
-                            match ([0..cardinality-1]|>List.tryPick Scan) with Some(acc) ->acc | None->acc
+                            match ([0..limit-1]|>List.tryPick Scan) with Some (acc) ->acc | None->acc
                         | None -> acc
                     
                     // Check each slot for an action that may be performed.
-                    VisitVector inputExpr (VisitScalar accumulatorExpr acc)
+                    visitVector None inputExpr (visitScalar accumulatorExpr acc)
+
                 | VectorMap(id, taskname, inputExpr, func) ->
                     let acc =
                         match GetVectorWidthByExpr(bt,ve) with
-                        | Some(cardinality) ->       
+                        | Some cardinality ->       
                             if cardinality=0 then
                                 // For vector length zero, just propagate the prior timestamp.
-                                let inputtimestamp = MaxTimestamp(bt,VectorBuildRule.GetId(inputExpr),DateTime.MinValue)
-                                let outputtimestamp = MaxTimestamp(bt,id,DateTime.MinValue)
-                                if HasChanged(inputtimestamp,outputtimestamp) then
-                                    Trace.PrintLine("IncrementalBuildVerbose", fun _ -> sprintf "Vector Map with cardinality zero setting output timestamp to %A." inputtimestamp)
+                                let inputtimestamp = MaxTimestamp(bt,inputExpr.Id)
+                                let outputtimestamp = MaxTimestamp(bt,id)
+                                if inputtimestamp <> outputtimestamp then
                                     actionFunc (VectorAction(id,taskname,inputtimestamp,EmptyTimeStampedInput inputtimestamp, fun _ ->[||])) acc
                                 else acc
                             else                                                
                                 let MapResults acc slot =
-                                    let inputtimestamp = Result.Timestamp (GetVectorExprResult(bt,inputExpr,slot))
-                                    let outputtimestamp = Result.Timestamp (GetVectorExprResult(bt,ve,slot))
-                                    if HasChanged(inputtimestamp,outputtimestamp) then
+                                    let inputtimestamp = GetVectorExprResult(bt,inputExpr,slot).Timestamp
+                                    let outputtimestamp = GetVectorExprResult(bt,ve,slot).Timestamp
+                                    if inputtimestamp <> outputtimestamp then
                                         let OneToOneOp() =
-                                            Eventually.Done (func (Result.GetAvailable (GetVectorExprResult(bt,inputExpr,slot))))
+                                            Eventually.Done (func (GetVectorExprResult(bt,inputExpr,slot).GetAvailable()))
                                         actionFunc (IndexedAction(id,taskname,slot,cardinality,inputtimestamp,OneToOneOp)) acc
                                     else acc
-                                [0..cardinality-1] |> List.fold MapResults acc                         
+                                match optSlot with 
+                                | None ->
+                                    [0..cardinality-1] |> List.fold MapResults acc                         
+                                | Some slot -> 
+                                    MapResults acc slot
                         | None -> acc
-                    VisitVector inputExpr acc
-                | VectorStamp(id, taskname, inputExpr, func) -> 
+
+                    visitVector optSlot inputExpr acc
+
+                | VectorStamp (id, taskname, inputExpr, func) -> 
                
                     // For every result that is available, check time stamps.
                     let acc =
                         match GetVectorWidthByExpr(bt,ve) with
-                        | Some(cardinality) ->    
+                        | Some cardinality ->    
                             if cardinality=0 then
                                 // For vector length zero, just propagate the prior timestamp.
-                                let inputtimestamp = MaxTimestamp(bt,VectorBuildRule.GetId(inputExpr),DateTime.MinValue)
-                                let outputtimestamp = MaxTimestamp(bt,id,DateTime.MinValue)
-                                if HasChanged(inputtimestamp,outputtimestamp) then
-                                    Trace.PrintLine("IncrementalBuildVerbose", fun _ -> sprintf "Vector Stamp with cardinality zero setting output timestamp to %A." inputtimestamp)
+                                let inputtimestamp = MaxTimestamp(bt,inputExpr.Id)
+                                let outputtimestamp = MaxTimestamp(bt,id)
+                                if inputtimestamp <> outputtimestamp then
                                     actionFunc (VectorAction(id,taskname,inputtimestamp,EmptyTimeStampedInput inputtimestamp,fun _ ->[||])) acc
                                 else acc
                             else                 
-                                let CheckStamp acc slot = 
-                                    let inputresult = GetVectorExprResult(bt,inputExpr,slot)
+                                let checkStamp acc slot = 
+                                    let inputresult = GetVectorExprResult (bt,inputExpr,slot)
                                     match inputresult with
                                     | Available(ires,_,_) ->
-                                        let oldtimestamp = Result.Timestamp (GetVectorExprResult(bt,ve,slot))
+                                        let oldtimestamp = GetVectorExprResult(bt,ve,slot).Timestamp
                                         let newtimestamp = func ires
-                                        if newtimestamp<>oldtimestamp then 
-                                            Trace.PrintLine("IncrementalBuildVerbose", fun _ -> sprintf "Old timestamp was %A. New timestamp is %A." oldtimestamp newtimestamp)
+                                        if newtimestamp <> oldtimestamp then 
                                             actionFunc (IndexedAction(id,taskname,slot,cardinality,newtimestamp, fun _ -> Eventually.Done ires)) acc
                                         else acc
                                     | _ -> acc
-                                [0..cardinality-1] |> List.fold CheckStamp acc
+                                match optSlot with 
+                                | None ->
+                                    [0..cardinality-1] |> List.fold checkStamp acc
+                                | Some slot -> 
+                                    checkStamp acc slot
                         | None -> acc
-                    VisitVector inputExpr acc
+                    visitVector optSlot inputExpr acc
+
                 | VectorMultiplex(id, taskname, inputExpr, func) -> 
-                    VisitScalar inputExpr
-                        (match GetScalarExprResult(bt,inputExpr) with
+                    let acc = 
+                        match GetScalarExprResult (bt,inputExpr) with
                          | Available(inp,inputtimestamp,inputsig) ->
-                           let outputtimestamp = MaxTimestamp(bt,id,inputtimestamp)
-                           if HasChanged(inputtimestamp,outputtimestamp) then
+                           let outputtimestamp = MaxTimestamp(bt,id)
+                           if inputtimestamp <> outputtimestamp then
                                let MultiplexOp() = func inp
                                actionFunc (VectorAction(id,taskname,inputtimestamp,inputsig,MultiplexOp)) acc
                            else acc
-                         | _->acc)                
-        and VisitScalar se acc =
-            if Seen(ScalarBuildRule.GetId se) then acc
+                         | _ -> acc
+                    visitScalar inputExpr acc
+
+        and visitScalar (se:ScalarBuildRule) acc =
+            if isSeen se.Id then acc
             else
-                Trace.PrintLine("IncrementalBuildVerbose", fun _ -> sprintf "In ForeachAction at scalar expression %s" (se.ToString()))
                 match se with
-                | ScalarInput _ ->acc
-                | ScalarDemultiplex(id,taskname,inputExpr,func) ->
-                    VisitVector inputExpr 
-                            (
-                                match GetVectorExprResultVector(bt,inputExpr) with
-                                | Some(inputresult) ->   
-                                    let currentsig = inputresult.Signature()
-                                    if ShouldEvaluate(bt,currentsig,id) then
-                                        let inputtimestamp = MaxTimestamp(bt, VectorBuildRule.GetId(inputExpr), DateTime.MaxValue) 
-                                        let DemultiplexOp() = 
-                                            let input = AvailableAllResultsOfExpr bt inputExpr |> List.toArray
-                                            func input
-                                        actionFunc (ScalarAction(id,taskname,inputtimestamp,currentsig,DemultiplexOp)) acc
-                                    else acc
-                                | None -> acc
-                            )
-                | ScalarMap(id,taskname,inputExpr,func) ->
-                    VisitScalar inputExpr
-                        (match GetScalarExprResult(bt,inputExpr) with
-                         | Available(inp,inputtimestamp,inputsig) ->
-                           let outputtimestamp = MaxTimestamp(bt, id, inputtimestamp)
-                           if HasChanged(inputtimestamp,outputtimestamp) then
+                | ScalarInput _ -> acc
+                | ScalarDemultiplex (id,taskname,inputExpr,func) ->
+                    let acc = 
+                        match GetVectorExprResultVector (bt,inputExpr) with
+                        | Some inputresult ->   
+                            let currentsig = inputresult.Signature()
+                            if shouldEvaluate(bt,currentsig,id) then
+                                let inputtimestamp = MaxTimestamp(bt, inputExpr.Id)
+                                let DemultiplexOp() = 
+                                    let input = AvailableAllResultsOfExpr bt inputExpr |> List.toArray
+                                    func input
+                                actionFunc (ScalarAction(id,taskname,inputtimestamp,currentsig,DemultiplexOp)) acc
+                            else acc
+                        | None -> acc
+
+                    visitVector None inputExpr acc
+
+                | ScalarMap (id,taskname,inputExpr,func) ->
+                    let acc = 
+                        match GetScalarExprResult (bt,inputExpr) with
+                        | Available(inp,inputtimestamp,inputsig) ->
+                           let outputtimestamp = MaxTimestamp(bt, id)
+                           if inputtimestamp <> outputtimestamp then
                                let MapOp() = func inp
                                actionFunc (ScalarAction(id,taskname,inputtimestamp,inputsig,MapOp)) acc
                            else acc
-                         | _->acc)
+                        | _ -> acc
+                    
+                    visitScalar inputExpr acc
                          
-        let Visit expr acc = 
-            match expr with
-            | ScalarBuildRule se ->VisitScalar se acc
-            | VectorBuildRule ve ->VisitVector ve acc                    
                     
-        let filtered = bt.Rules.RuleList |> List.filter (fun (s,_) -> s = output) |> List.map snd
-        List.foldBack Visit filtered acc
+        let expr = bt.Rules.RuleList |> List.find (fun (s,_) -> s = output.Name) |> snd
+        match expr with
+        | ScalarBuildRule se -> visitScalar se acc
+        | VectorBuildRule ve -> visitVector optSlot ve acc                    
+    
+    /// Compute the max timestamp on all available inputs
+    let ComputeMaxTimeStamp output (bt: PartialBuild) acc =
+        let expr = bt.Rules.RuleList |> List.find (fun (s,_) -> s = output) |> snd
+        match expr with 
+        | VectorBuildRule  (VectorStamp (_id, _taskname, inputExpr, func) as ve) -> 
+                match GetVectorWidthByExpr(bt,ve) with
+                | Some cardinality ->    
+                    let CheckStamp acc slot = 
+                        match GetVectorExprResult (bt,inputExpr,slot) with
+                        | Available(ires,_,_) -> max acc (func ires)
+                        | _ -> acc
+                    [0..cardinality-1] |> List.fold CheckStamp acc
+                | None -> acc
+
+        | _ -> failwith "expected a VectorStamp"
     
+
     /// Given the result of a single action, apply that action to the Build
     let ApplyResult(actionResult:ActionResult,bt:PartialBuild) = 
-        use t = Trace.Call("IncrementalBuildVerbose", "ApplyResult", fun _ -> "")
-        let result = 
-            match actionResult with 
-            | ResizeResult(id,slotcount) ->
-                match bt.Results.TryFind(id) with
-                | Some(resultSet) ->
-                    match resultSet with 
-                    | VectorResult rv -> 
-                        let rv = rv.Resize(slotcount)
-                        let results = Map.add id (VectorResult rv) bt.Results
-                        PartialBuild(bt.Rules,results)
-                    | _ -> failwith "Unexpected"                
-                | None -> failwith "Unexpected"
-            | ScalarValuedResult(id,value,timestamp,inputsig) ->
-                PartialBuild(bt.Rules, Map.add id (ScalarResult(Available(value,timestamp,inputsig))) bt.Results)
-            | VectorValuedResult(id,values,timestamp,inputsig) ->
-                let Append acc slot = 
-                    Map.add slot (Available(values.[slot],timestamp,inputsig)) acc
-                let results = [0..values.Length-1]|>List.fold Append (Map.empty)
-                let results = VectorResult(ResultVector(values.Length,timestamp,results))
-                let bt = PartialBuild(bt.Rules, Map.add id results bt.Results)
-                bt
+        match actionResult with 
+        | ResizeResult(id,slotcount) ->
+            match bt.Results.TryFind id with
+            | Some resultSet ->
+                match resultSet with 
+                | VectorResult rv -> 
+                    let rv = rv.Resize(slotcount)
+                    let results = Map.add id (VectorResult rv) bt.Results
+                    PartialBuild(bt.Rules,results)
+                | _ -> failwith "Unexpected"                
+            | None -> failwith "Unexpected"
+        | ScalarValuedResult(id,value,timestamp,inputsig) ->
+            PartialBuild(bt.Rules, Map.add id (ScalarResult(Available(value,timestamp,inputsig))) bt.Results)
+        | VectorValuedResult(id,values,timestamp,inputsig) ->
+            let Append acc slot = 
+                Map.add slot (Available(values.[slot],timestamp,inputsig)) acc
+            let results = [0..values.Length-1]|>List.fold Append Map.empty
+            let results = VectorResult(ResultVector(values.Length,timestamp,results))
+            let bt = PartialBuild(bt.Rules, Map.add id results bt.Results)
+            bt
                 
-            | IndexedResult(id,index,slotcount,value,timestamp) ->
-                let width = (GetVectorWidthById bt id)
-                let priorResults = bt.Results.TryFind(id) 
-                let prior =
-                    match priorResults with
-                    | Some(prior) ->prior
-                    | None->VectorResult(ResultVector.OfSize width)
-                match prior with
-                | VectorResult rv ->                                
-                    let result = 
-                        match value with 
-                        | Eventually.Done res -> 
-                            Trace.PrintLine("FSharpBackgroundBuildVerbose", fun _ -> "Eventually.Done...")
-                            Available(res,timestamp, IndexedValueElement timestamp)
-                        | Eventually.NotYetDone f -> 
-                            Trace.PrintLine("FSharpBackgroundBuildVerbose", fun _ -> "Eventually.NotYetDone...")
-                            InProgress (f,timestamp)
-                    let results = rv.Resize(slotcount).Set(index,result)
-                    PartialBuild(bt.Rules, Map.add id (VectorResult(results)) bt.Results)
-                | _->failwith "Unexpected"
-        result
+        | IndexedResult(id,index,slotcount,value,timestamp) ->
+            let width = GetVectorWidthById bt id
+            let priorResults = bt.Results.TryFind id 
+            let prior =
+                match priorResults with
+                | Some prior ->prior
+                | None->VectorResult(ResultVector.OfSize width)
+            match prior with
+            | VectorResult rv ->                                
+                let result = 
+                    match value with 
+                    | Eventually.Done res -> 
+                        Available(res,timestamp, IndexedValueElement timestamp)
+                    | Eventually.NotYetDone f -> 
+                        InProgress (f,timestamp)
+                let results = rv.Resize(slotcount).Set(index,result)
+                PartialBuild(bt.Rules, Map.add id (VectorResult(results)) bt.Results)
+            | _ -> failwith "Unexpected"
         
+    let ExecuteApply (action:Action) bt = 
+        let actionResult = action.Execute()
+        ApplyResult(actionResult,bt)
+
     /// Evaluate the result of a single output
-    let EvalLeafsFirst output bt =
-        use t = Trace.Call("IncrementalBuildVerbose", "EvalLeafsFirst", fun _->sprintf "name=%s" output)
-
-        let ExecuteApply action bt = 
-            let actionResult = Action.Execute(action)
-            ApplyResult(actionResult,bt)
-        let rec Eval(bt,gen) =
-            Trace.PrintLine("FSharpBackgroundBuildVerbose", fun _ -> sprintf "---- Build generation %d ----" gen)
+    let EvalLeafsFirst target bt =
+
+        let rec eval(bt,gen) =
             #if DEBUG
             // This can happen, for example, if there is a task whose timestamp never stops increasing.
             // Possibly could detect this case directly.
             if gen>5000 then failwith "Infinite loop in incremental builder?"
             #endif
-            let newBt = ForeachAction output bt ExecuteApply bt
-            if newBt=bt then bt else Eval(newBt,gen+1)
-        Eval(bt,0)
+            let newBt = ForeachAction target bt ExecuteApply bt
+            if newBt=bt then bt else eval(newBt,gen+1)
+        eval(bt,0)
         
-    let Step output (bt:PartialBuild) = 
-        use t = Trace.Call("IncrementalBuildVerbose", "Step", fun _->sprintf "name=%s" output)
+    let Step target (bt:PartialBuild) = 
         
-        let BuildActionList() = 
-            use t = Trace.Call("IncrementalBuildVerbose", "BuildActionList", fun _->sprintf "name=%s" output)
-            let Cons action list =  action :: list  
-            // Hey look, we're building up the whole list, executing one thing and then throwing
-            // the list away. What about saving the list inside the Build instance?
-            ForeachAction output bt Cons []
+        // Hey look, we're building up the whole list, executing one thing and then throwing
+        // the list away. What about saving the list inside the Build instance?
+        let worklist = ForeachAction target bt (fun a l -> a :: l) []
             
-        let ExecuteOneAction(worklist) = 
-            use t = Trace.Call("IncrementalBuildVerbose", "ExecuteOneAction", fun _->sprintf "name=%s" output)
-            match worklist with 
-            | action::_ ->
-                let actionResult = Action.Execute(action)
-                Some(ApplyResult(actionResult,bt))
-            | _->None
+        match worklist with 
+        | action::_ -> Some (ExecuteApply action bt)
+        | _ -> None
             
-        ExecuteOneAction(BuildActionList())                
-        
-    /// Eval by calling step over and over until done.
-    let rec EvalStepwise output bt = 
-        use t = Trace.Call("IncrementalBuildVerbose", "EvalStepwise", fun _->sprintf "name=%s" output)
-        let rec Evaluate(output,bt)= 
-            let newBt = Step output bt
-            match newBt with
-            | Some(newBt) -> Evaluate(output,newBt)
-            | None->bt
-        Evaluate(output,bt)
-        
-  /// Evaluate a build.
-    let Eval output bt = EvalLeafsFirst output bt
+    /// Evaluate an output of the build.
+    let Eval node bt = EvalLeafsFirst (Target(node,None)) bt
+
+    /// Evaluate an output of the build.
+    let EvalUpTo (node, n) bt = EvalLeafsFirst (Target(node, Some n)) bt
+
+    /// Check if an output is up-to-date and ready
+    let IsReady target bt = 
+        let worklist = ForeachAction target bt (fun a l -> a :: l) []
+        worklist.IsEmpty
 
-  /// Get a scalar vector. Result must be available
-    let GetScalarResult<'T>(name,bt) : ('T*DateTime) option = 
-        use t = Trace.Call("IncrementalBuildVerbose", "GetScalarResult", fun _->sprintf "name=%s" name)
-        match GetTopLevelExprByName(bt,name) with 
+    /// Check if an output is up-to-date and ready
+    let MaxTimeStampInDependencies target bt = 
+        ComputeMaxTimeStamp target bt DateTime.MinValue 
+
+    /// Get a scalar vector. Result must be available
+    let GetScalarResult<'T>(node:Scalar<'T>,bt): ('T*DateTime) option = 
+        match GetTopLevelExprByName(bt,node.Name) with 
         | ScalarBuildRule se ->
-            let id = ScalarBuildRule.GetId se
-            match bt.Results.TryFind(id) with
-            | Some(result) ->
+            let id = se.Id
+            match bt.Results.TryFind id with
+            | Some result ->
                 match result with 
                 | ScalarResult(sr) ->
                     match sr.TryGetAvailable() with                     
-                    | Some(r,timestamp,_) -> Some(downcast r, timestamp)
+                    | Some (r,timestamp,_) -> Some (downcast r, timestamp)
                     | None -> None
                 | _ ->failwith "Expected a scalar result."
             | None->None
         | VectorBuildRule _ -> failwith "Expected scalar."
     
-  /// Get a result vector. All results must be available or thrown an exception.
-    let GetVectorResult<'T>(name,bt) : 'T[] = 
-        match GetTopLevelExprByName(bt,name) with 
+    /// Get a result vector. All results must be available or thrown an exception.
+    let GetVectorResult<'T>(node:Vector<'T>,bt): 'T[] = 
+        match GetTopLevelExprByName(bt,node.Name) with 
         | ScalarBuildRule _ -> failwith "Expected vector."
-        | VectorBuildRule ve -> AvailableAllResultsOfExpr bt ve |> List.map(unbox) |> Array.ofList
+        | VectorBuildRule ve -> AvailableAllResultsOfExpr bt ve |> List.map (unbox) |> Array.ofList
         
-  /// Get an element of vector result or None if there were no results.
-    let GetVectorResultBySlot<'T>(name,slot,bt) : ('T*DateTime) option = 
-        match GetTopLevelExprByName(bt,name) with 
+    /// Get an element of vector result or None if there were no results.
+    let GetVectorResultBySlot<'T>(node:Vector<'T>,slot,bt): ('T*DateTime) option = 
+        match GetTopLevelExprByName(bt,node.Name) with 
         | ScalarBuildRule _ -> failwith "Expected vector expression"
         | VectorBuildRule ve ->
             match GetVectorExprResult(bt,ve,slot).TryGetAvailable() with
-            | Some(o,timestamp,_) -> Some(downcast o,timestamp)
+            | Some (o,timestamp,_) -> Some (downcast o,timestamp)
             | None->None
 
     /// Given an input value, find the corresponding slot.        
-    let GetSlotByInput<'T>(name:string,input:'T,build:PartialBuild,equals:'T->'T->bool) : int = 
-        let expr = GetExprByName(build,name)
-        let id = BuildRuleExpr.GetId(expr)
-        let resultSet = Option.get ( build.Results.TryFind(id))
+    let TryGetSlotByInput<'T>(node:Vector<'T>,input:'T,build:PartialBuild,equals:'T->'T->bool): int option = 
+        let expr = GetExprByName(build,node)
+        let id = expr.Id
+        match build.Results.TryFind id with 
+        | None -> None
+        | Some resultSet ->
         match resultSet with 
         | VectorResult rv ->
             let MatchNames acc (slot,result) = 
@@ -871,10 +835,9 @@ module internal IncrementalBuild =
                     if equals o input then Some slot else acc
                 | _ -> acc
             let slotOption = rv.FoldLeft MatchNames None
-            match slotOption with 
-            | Some slot -> slot
-            | _ -> failwith (sprintf "Could not find requested input '%A' named '%s' in set %+A" input name rv)
-        | _ -> failwith (sprintf "Could not find requested input: %A" input)
+            slotOption 
+            // failwith (sprintf "Could not find requested input '%A' named '%s' in set %+A" input name rv)
+        | _ -> None // failwith (sprintf "Could not find requested input: %A" input)
 
     
     // Redeclare functions in the incremental build scope-----------------------------------------------------------------------
@@ -886,140 +849,121 @@ module internal IncrementalBuild =
         let expr = VectorInput(NextId(),name) 
         { new Vector<'T>
           interface IVector with
-               override pe.GetVectorExpr() = expr }
+               override __.Name = name
+               override pe.Expr = expr }
 
     /// Declares a scalar build input.
     let InputScalar<'T> name = 
         let expr = ScalarInput(NextId(),name)
         { new Scalar<'T>
           interface IScalar with
-               override pe.GetScalarExpr() = expr }
-    
-    module Scalar =
+               override __.Name = name
+               override pe.Expr = expr }
     
-        let Map (taskname:string) (task:'I->'O) (input:Scalar<'I>) : Scalar<'O> =
-            let BoxingMap i = box(task(unbox(i)))
-            let input = (input:?>IScalar).GetScalarExpr()
-            let expr = ScalarMap(NextId(),taskname,input,BoxingMap)
-            { new Scalar<'O>
-              interface IScalar with
-                   override pe.GetScalarExpr() = expr}
-                   
-        let Multiplex (taskname:string) (task:'I -> 'O array) (input:Scalar<'I>) : Vector<'O> =      
-            let BoxingMultiplex i = Array.map box (task(unbox(i)))
-            let input = (input:?>IScalar).GetScalarExpr()
-            let expr = VectorMultiplex(NextId(),taskname,input,BoxingMultiplex) 
-            { new Vector<'O>
-              interface IVector with
-                   override pe.GetVectorExpr() = expr}    
             
     module Vector =
         /// Maps one vector to another using the given function.    
-        let Map (taskname:string) (task:'I ->'O) (input:Vector<'I>) : Vector<'O> = 
-            let BoxingMapVector i =
-                box(task(unbox i))
-            let input = (input:?>IVector).GetVectorExpr()
-            let expr = VectorMap(NextId(),taskname,input,BoxingMapVector) 
+        let Map (taskname:string) (task:'I ->'O) (input:Vector<'I>): Vector<'O> = 
+            let input = input.Expr
+            let expr = VectorMap(NextId(),taskname,input,unbox >> task >> box) 
             { new Vector<'O>
               interface IVector with
-                   override pe.GetVectorExpr() = expr }            
+                   override __.Name = taskname
+                   override pe.Expr = expr }            
             
         
         /// Apply a function to each element of the vector, threading an accumulator argument
         /// through the computation. Returns intermediate results in a vector.
-        let ScanLeft (taskname:string) (task:'A -> 'I -> Eventually<'A>) (acc:Scalar<'A>) (input:Vector<'I>) : Vector<'A> =
-            let BoxingScanLeft a i =
-                Eventually.box(task (unbox a) (unbox i))
-            let acc = (acc:?>IScalar).GetScalarExpr()
-            let input = (input:?>IVector).GetVectorExpr()
+        let ScanLeft (taskname:string) (task:'A -> 'I -> Eventually<'A>) (acc:Scalar<'A>) (input:Vector<'I>): Vector<'A> =
+            let BoxingScanLeft a i = Eventually.box(task (unbox a) (unbox i))
+            let acc = acc.Expr
+            let input = input.Expr
             let expr = VectorScanLeft(NextId(),taskname,acc,input,BoxingScanLeft) 
             { new Vector<'A>
               interface IVector with
-                   override pe.GetVectorExpr() = expr }    
+                   override __.Name = taskname
+                   override pe.Expr = expr }    
             
         /// Apply a function to a vector to get a scalar value.
-        let Demultiplex (taskname:string) (task:'I[] -> 'O) (input:Vector<'I>) : Scalar<'O> =
+        let Demultiplex (taskname:string) (task:'I[] -> 'O) (input:Vector<'I>): Scalar<'O> =
             let BoxingDemultiplex i =
                 box(task (Array.map unbox i) )
-            let input = (input:?>IVector).GetVectorExpr()
+            let input = input.Expr
             let expr = ScalarDemultiplex(NextId(),taskname,input,BoxingDemultiplex)
             { new Scalar<'O>
               interface IScalar with
-                   override pe.GetScalarExpr() = expr }                
+                   override __.Name = taskname
+                   override pe.Expr = expr }                
             
         /// Creates a new vector with the same items but with 
         /// timestamp specified by the passed-in function.  
-        let Stamp (taskname:string) (task:'I -> DateTime) (input:Vector<'I>) : Vector<'I> =
-            let BoxingTouch i =
-                task(unbox i)
-            let input = (input:?>IVector).GetVectorExpr()
-            let expr = VectorStamp(NextId(),taskname,input,BoxingTouch) 
+        let Stamp (taskname:string) (task:'I -> DateTime) (input:Vector<'I>): Vector<'I> =
+            let input = input.Expr
+            let expr = VectorStamp (NextId(),taskname,input,unbox >> task) 
             { new Vector<'I>
               interface IVector with
-                   override pe.GetVectorExpr() = expr }    
+                   override __.Name = taskname
+                   override pe.Expr = expr }    
 
-        let AsScalar (taskname:string) (input:Vector<'I>) : Scalar<'I array> = 
+        let AsScalar (taskname:string) (input:Vector<'I>): Scalar<'I array> = 
             Demultiplex taskname (fun v->v) input
                   
     /// Declare build outputs and bind them to real values.
     type BuildDescriptionScope() =
         let mutable outputs = []
         /// Declare a named scalar output.
-        member b.DeclareScalarOutput(name,output:Scalar<'t>)=
-            let output:IScalar = output:?>IScalar
-            outputs <- NamedScalarOutput(name,output) :: outputs
+        member b.DeclareScalarOutput(output:Scalar<'T>)=
+            outputs <- NamedScalarOutput(output) :: outputs
         /// Declare a named vector output.
-        member b.DeclareVectorOutput(name,output:Vector<'t>)=
-            let output:IVector = output:?>IVector
-            outputs <- NamedVectorOutput(name,output) :: outputs
-        /// Set the conrete inputs for this build
-        member b.GetInitialPartialBuild(vectorinputs,scalarinputs) =
-            ToBound(ToBuild outputs,vectorinputs,scalarinputs)   
+        member b.DeclareVectorOutput(output:Vector<'T>)=
+            outputs <- NamedVectorOutput(output) :: outputs
+        /// Set the concrete inputs for this build
+        member b.GetInitialPartialBuild(inputs:BuildInput list) =
+            ToBound(ToBuild outputs,inputs)   
 
 
 []
-type Severity = 
+type FSharpErrorSeverity = 
     | Warning 
     | Error
 
-type ErrorInfo = {
-    FileName:string
-    StartLine:int
-    EndLine:int
-    StartColumn:int
-    EndColumn:int
-    Severity:Severity
-    Message:string 
-    Subcategory:string } with 
-    override e.ToString()=
-        sprintf "%s (%d,%d)-(%d,%d) %s %s %s" 
-            e.FileName
-            e.StartLine e.StartColumn e.EndLine e.EndColumn
-            e.Subcategory
-            (if e.Severity=Severity.Warning then "warning" else "error") 
-            e.Message    
+type FSharpErrorInfo(fileName, s:pos, e:pos, severity: FSharpErrorSeverity, message: string, subcategory: string, errorNum: int) = 
+    member __.StartLine = Line.toZ s.Line
+    member __.StartLineAlternate = s.Line
+    member __.EndLine = Line.toZ e.Line
+    member __.EndLineAlternate = e.Line
+    member __.StartColumn = s.Column
+    member __.EndColumn = e.Column
+    member __.Severity = severity
+    member __.Message = message
+    member __.Subcategory = subcategory
+    member __.FileName = fileName
+    member __.ErrorNumber = errorNum
+    member __.WithStart(newStart) = FSharpErrorInfo(fileName, newStart, e, severity, message, subcategory, errorNum)
+    member __.WithEnd(newEnd) = FSharpErrorInfo(fileName, s, newEnd, severity, message, subcategory, errorNum)
+    override __.ToString()= sprintf "%s (%d,%d)-(%d,%d) %s %s %s" fileName (int s.Line) (s.Column + 1) (int e.Line) (e.Column + 1) subcategory (if severity=FSharpErrorSeverity.Warning then "warning" else "error")  message
             
-    /// Decompose a warning or error into parts: position, severity, message
+    /// Decompose a warning or error into parts: position, severity, message, error number
+    static member (*internal*) CreateFromException(exn,warn,trim:bool,fallbackRange:range) = 
+        let m = match GetRangeOfError exn with Some m -> m | None -> fallbackRange 
+        let e = if trim then m.Start else m.End
+        let msg = bufs (fun buf -> OutputPhasedError buf exn false)
+        let errorNum = GetErrorNumber exn
+        FSharpErrorInfo(m.FileName, m.Start, e, (if warn then FSharpErrorSeverity.Warning else FSharpErrorSeverity.Error), msg, exn.Subcategory(), errorNum)
+        
+    /// Decompose a warning or error into parts: position, severity, message, error number
     static member internal CreateFromExceptionAndAdjustEof(exn,warn,trim:bool,fallbackRange:range, (linesCount:int, lastLength:int)) = 
-        let r = ErrorInfo.CreateFromException(exn,warn,trim,fallbackRange)
+        let r = FSharpErrorInfo.CreateFromException(exn,warn,trim,fallbackRange)
                 
         // Adjust to make sure that errors reported at Eof are shown at the linesCount        
-        let startline, schange = min (r.StartLine, false) (linesCount, true)
-        let endline,   echange = min (r.EndLine, false)   (linesCount, true)
+        let startline, schange = min (r.StartLineAlternate, false) (linesCount, true)
+        let endline,   echange = min (r.EndLineAlternate, false)   (linesCount, true)
         
         if not (schange || echange) then r
         else
-            let r = if schange then { r with StartLine = startline; StartColumn = lastLength } else r
-            if echange then { r with EndLine = endline; EndColumn = 1 + lastLength } else r
-
-    /// Decompose a warning or error into parts: position, severity, message
-    static member internal CreateFromException(exn,warn,trim:bool,fallbackRange:range) = 
-        let m = match RangeOfError exn with Some m -> m | None -> fallbackRange 
-        let (s1:int),(s2:int) = Pos.toVS m.Start
-        let (s3:int),(s4:int) = Pos.toVS (if trim then m.Start else m.End)
-        let msg = bufs (fun buf -> OutputPhasedError buf exn false)
-        {FileName=m.FileName; StartLine=s1; StartColumn=s2; EndLine=s3; EndColumn=s4; Severity=(if warn then Severity.Warning else Severity.Error); Subcategory=exn.Subcategory(); Message=msg}
-        
+            let r = if schange then r.WithStart(mkPos startline lastLength) else r
+            if echange then r.WithEnd(mkPos  endline (1 + lastLength)) else r
+
     
 /// Use to reset error and warning handlers            
 []
@@ -1031,19 +975,19 @@ type ErrorScope()  =
         PushErrorLoggerPhaseUntilUnwind (fun _oldLogger -> 
             { new ErrorLogger("ErrorScope") with 
                 member x.WarnSinkImpl(exn) = 
-                      errors <- ErrorInfo.CreateFromException(exn,true,false,range.Zero):: errors
+                      errors <- FSharpErrorInfo.CreateFromException(exn,true,false,range.Zero):: errors
                 member x.ErrorSinkImpl(exn) = 
-                      let err = ErrorInfo.CreateFromException(exn,false,false,range.Zero)
+                      let err = FSharpErrorInfo.CreateFromException(exn,false,false,range.Zero)
                       errors <- err :: errors
-                      mostRecentError <- Some(err)
+                      mostRecentError <- Some err
                 member x.ErrorCount = errors.Length })
         
-    member x.Errors = errors |> List.filter (fun error -> error.Severity = Severity.Error)
-    member x.Warnings = errors |> List.filter (fun error -> error.Severity = Severity.Warning)
+    member x.Errors = errors |> List.filter (fun error -> error.Severity = FSharpErrorSeverity.Error)
+    member x.Warnings = errors |> List.filter (fun error -> error.Severity = FSharpErrorSeverity.Warning)
     member x.ErrorsAndWarnings = errors
     member x.TryGetFirstErrorText() =
         match x.Errors with 
-        | error :: _ -> Some(error.Message)
+        | error :: _ -> Some error.Message
         | [] -> None
     
     interface IDisposable with
@@ -1053,14 +997,14 @@ type ErrorScope()  =
 
     static member MostRecentError = mostRecentError
     
-    static member Protect<'a> (m:range) (f:unit->'a) (err:string->'a) : 'a = 
+    static member Protect<'a> (m:range) (f:unit->'a) (err:string->'a): 'a = 
         use errorScope = new ErrorScope()
         let res = 
             try 
-                Some(f())
+                Some (f())
             with e -> errorRecovery e m; None
         match res with 
-        | Some(res) ->res
+        | Some res ->res
         | None -> 
             match errorScope.TryGetFirstErrorText() with 
             | Some text -> err text
@@ -1072,46 +1016,23 @@ type ErrorScope()  =
     static member ProtectAndDiscard m f = 
         ErrorScope.Protect m f (fun _ -> ())
       
-// ------------------------------------------------------------------------------------------
-// The incremental build definition for parsing and typechecking F#
-// ------------------------------------------------------------------------------------------
-module internal IncrementalFSharpBuild =
-
-    open Internal.Utilities
-    open Internal.Utilities.Collections
-
-    open IncrementalBuild
-    open Microsoft.FSharp.Compiler.Build
-    open Microsoft.FSharp.Compiler.Fscopts
-    open Microsoft.FSharp.Compiler.Ast
-    open Microsoft.FSharp.Compiler.ErrorLogger
-    open Microsoft.FSharp.Compiler.Env
-    open Microsoft.FSharp.Compiler.TypeChecker
-    open Microsoft.FSharp.Compiler.Tast 
-    open Microsoft.FSharp.Compiler.Range
-    open Microsoft.FSharp.Compiler
-    open Microsoft.FSharp.Compiler.AbstractIL.Internal
-
-    module Tc = Microsoft.FSharp.Compiler.TypeChecker
-
-    open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
-    open Internal.Utilities.Debug
-
-    // This type is designed to be a lightweight way to instrument the most recent filenames that the
-    // IncrementalBuilder did a parse/typecheck of, so we can more easily unittest/debug the 
-    // 'incremental' behavior of the product.
+
+        
+
+// Record the most recent IncrementalBuilder events, so we can more easily unittest/debug the 
+// 'incremental' behavior of the product.
+module IncrementalBuilderEventTesting = 
+
     type internal FixedLengthMRU<'T>() =
-        let MAX = 40   // Length of the MRU.  For our current unit tests, 40 is enough.
-        let data : ('T option)[] = Array.create MAX None
+        let MAX = 400   // Length of the MRU.  For our current unit tests, 400 is enough.
+        let data = Array.create MAX None
         let mutable curIndex = 0
         let mutable numAdds = 0
         // called by the product, to note when a parse/typecheck happens for a file
         member this.Add(filename:'T) =
             numAdds <- numAdds + 1
             data.[curIndex] <- Some filename
-            curIndex <- curIndex + 1
-            if curIndex = MAX then
-                curIndex <- 0
+            curIndex <- (curIndex + 1) % MAX
         member this.CurrentEventNum = numAdds
         // called by unit tests, returns 'n' most recent additions.
         member this.MostRecentList(n:int) : list<'T> =
@@ -1129,68 +1050,63 @@ module internal IncrementalFSharpBuild =
                 i <- i - 1
                 remaining <- remaining - 1
             List.rev s
-    
+
     type IBEvent =
         | IBEParsed of string // filename
         | IBETypechecked of string // filename
-        | IBEDeleted
-
-    let IncrementalBuilderEventsMRU = new FixedLengthMRU()  
-    let GetMostRecentIncrementalBuildEvents(n) = IncrementalBuilderEventsMRU.MostRecentList(n)
-    let GetCurrentIncrementalBuildEventNum() = IncrementalBuilderEventsMRU.CurrentEventNum 
-
-    type FileDependency = {
-            // Name of the file
-            Filename : string
-            // If true, then deletion or creation of this file should trigger an entirely fresh build
-            ExistenceDependency : bool
-            // If true, then changing this file should trigger and call to incrementally build
-            IncrementalBuildDependency : bool } with
-        override this.ToString() =
-            sprintf "FileDependency(%s,existence=%A,incremental=%A)" this.Filename this.ExistenceDependency this.IncrementalBuildDependency 
-
-    /// Accumulated results of type checking.
-    []
-    type TypeCheckAccumulator =
-        { tcState: TcState
-          tcImports:TcImports
-          tcGlobals:TcGlobals
-          tcConfig:TcConfig
-          tcEnv: TcEnv
-          topAttribs:TopAttribs option
-          typedImplFiles:TypedImplFile list
-          errors:(PhasedError * bool) list } // errors=true, warnings=false
+        | IBECreated
+
+    // ++GLOBAL MUTBALE STATE FOR TESTING++
+    let MRU = new FixedLengthMRU()  
+    let GetMostRecentIncrementalBuildEvents(n) = MRU.MostRecentList(n)
+    let GetCurrentIncrementalBuildEventNum() = MRU.CurrentEventNum 
+
+module Tc = Microsoft.FSharp.Compiler.TypeChecker
+
+open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
+open Internal.Utilities.Debug
+
+/// Accumulated results of type checking.
+[]
+type TypeCheckAccumulator =
+    { tcState: TcState
+      tcImports:TcImports
+      tcGlobals:TcGlobals
+      tcConfig:TcConfig
+      tcEnvAtEndOfFile: TcEnv
+      tcResolutions: TcResolutions list
+      tcSymbolUses: TcSymbolUses list
+      topAttribs:TopAttribs option
+      typedImplFiles:TypedImplFile list
+      tcErrors:(PhasedError * FSharpErrorSeverity) list } // errors=true, warnings=false
 
-    /// Maximum time share for a piece of background work before it should (cooperatively) yield
-    /// to enable other requests to be serviced. Yielding means returning a continuation function
-    /// (via an Eventually<_> value of case NotYetDone) that can be called as the next piece of work. 
-    let maxTimeShareMilliseconds = 
-        match System.Environment.GetEnvironmentVariable("mFSharp_MaxTimeShare") with 
-        | null | "" -> 50L
-        | s -> int64 s
       
-    /// Global service state
-    type FrameworkImportsCacheKey = (*resolvedpath*)string list * string * (*ClrRoot*)string list* (*fsharpBinaries*)string
-    let private frameworkTcImportsCache = AgedLookup(8, areSame=(fun (x,y) -> x = y)) 
+/// Global service state
+type FrameworkImportsCacheKey = (*resolvedpath*)string list * string * (*ClrRoot*)string list* (*fsharpBinaries*)string
+
+type FrameworkImportsCache(keepStrongly) = 
+    let frameworkTcImportsCache = AgedLookup(keepStrongly, areSame=(fun (x,y) -> x = y)) 
+    member __.Downsize() = frameworkTcImportsCache.Resize(keepStrongly=0)
+    member __.Clear() = frameworkTcImportsCache.Clear()
 
     /// This function strips the "System" assemblies from the tcConfig and returns a age-cached TcImports for them.
-    let GetFrameworkTcImports(tcConfig:TcConfig) =
+    member __.Get(tcConfig:TcConfig) =
         // Split into installed and not installed.
         let frameworkDLLs,nonFrameworkResolutions,unresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig)
         let frameworkDLLsKey = 
             frameworkDLLs 
-            |> List.map(fun ar->ar.resolvedPath) // The cache key. Just the minimal data.
+            |> List.map (fun ar->ar.resolvedPath) // The cache key. Just the minimal data.
             |> List.sort  // Sort to promote cache hits.
         let tcGlobals,frameworkTcImports = 
             // Prepare the frameworkTcImportsCache
             //
             // The data elements in this key are very important. There should be nothing else in the TcConfig that logically affects
             // the import of a set of framework DLLs into F# CCUs. That is, the F# CCUs that result from a set of DLLs (including
-            // FSharp.Core.dll andb mscorlib.dll) must be logically invariant of all the other compiler configuration parameters.
+            // FSharp.Core.dll and mscorlib.dll) must be logically invariant of all the other compiler configuration parameters.
             let key = (frameworkDLLsKey,
-                       tcConfig.primaryAssembly.Name, 
-                       tcConfig.ClrRoot,
-                       tcConfig.fsharpBinariesDir)
+                        tcConfig.primaryAssembly.Name, 
+                        tcConfig.ClrRoot,
+                        tcConfig.fsharpBinariesDir)
             match frameworkTcImportsCache.TryGet key with 
             | Some res -> res
             | None -> 
@@ -1201,478 +1117,654 @@ module internal IncrementalFSharpBuild =
         tcGlobals,frameworkTcImports,nonFrameworkResolutions,unresolved
 
 
-    /// An error logger that captures errors and eventually sends a single error or warning for all the errors and warning in a file
-    type CompilationErrorLogger (debugName:string, tcConfig:TcConfig, errorLogger:ErrorLogger) = 
-        inherit ErrorLogger("CompilationErrorLogger("+debugName+")")
+/// An error logger that capture errors, filtering them according to warning levels etc.
+type internal CompilationErrorLogger (debugName:string, tcConfig:TcConfig) = 
+    inherit ErrorLogger("CompilationErrorLogger("+debugName+")")
             
-        let warningsSeenInScope = new ResizeArray<_>()
-        let errorsSeenInScope = new ResizeArray<_>()
+    let warningsSeenInScope = new ResizeArray<_>()
+    let errorsSeenInScope = new ResizeArray<_>()
             
-        let warningOrError warn exn = 
-            let warn = warn && not (ReportWarningAsError tcConfig.globalWarnLevel tcConfig.specificWarnOff tcConfig.specificWarnOn tcConfig.specificWarnAsError tcConfig.specificWarnAsWarn tcConfig.globalWarnAsError exn)                
-            if not warn then
-                errorsSeenInScope.Add(exn)
-                errorLogger.ErrorSink(exn)                
-            else if ReportWarning tcConfig.globalWarnLevel tcConfig.specificWarnOff tcConfig.specificWarnOn exn then 
-                warningsSeenInScope.Add(exn)
-                errorLogger.WarnSink(exn)                    
+    let warningOrError warn exn = 
+        let warn = warn && not (ReportWarningAsError (tcConfig.globalWarnLevel, tcConfig.specificWarnOff, tcConfig.specificWarnOn, tcConfig.specificWarnAsError, tcConfig.specificWarnAsWarn, tcConfig.globalWarnAsError) exn)                
+        if not warn then
+            errorsSeenInScope.Add(exn)
+        else if ReportWarning (tcConfig.globalWarnLevel, tcConfig.specificWarnOff, tcConfig.specificWarnOn) exn then 
+            warningsSeenInScope.Add(exn)
 
-        override x.WarnSinkImpl(exn) = warningOrError true exn
-        override x.ErrorSinkImpl(exn) = warningOrError false exn
-        override x.ErrorCount = errorLogger.ErrorCount 
+    override x.WarnSinkImpl(exn) = warningOrError true exn
+    override x.ErrorSinkImpl(exn) = warningOrError false exn
+    override x.ErrorCount = errorsSeenInScope.Count
 
-        member x.GetErrors() = 
-            let errorsAndWarnings = (errorsSeenInScope |> ResizeArray.toList |> List.map(fun e->e,true)) @ (warningsSeenInScope |> ResizeArray.toList |> List.map(fun e->e,false))
-            errorsAndWarnings
+    member x.GetErrors() = 
+        [ for e in errorsSeenInScope -> e,FSharpErrorSeverity.Error 
+          for e in warningsSeenInScope -> e,FSharpErrorSeverity.Warning ]
 
 
-    /// This represents the global state established as each task function runs as part of the build
-    ///
-    /// Use to reset error and warning handlers            
-    type CompilationGlobalsScope(errorLogger:ErrorLogger,phase,projectDirectory) = 
-        do ignore projectDirectory
-        let unwindEL = PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger)
-        let unwindBP = PushThreadBuildPhaseUntilUnwind (phase)
-        // Return the disposable object that cleans up
-        interface IDisposable with
-            member d.Dispose() =
-                unwindBP.Dispose()         
-                unwindEL.Dispose()
+/// This represents the global state established as each task function runs as part of the build
+///
+/// Use to reset error and warning handlers            
+type CompilationGlobalsScope(errorLogger:ErrorLogger,phase,projectDirectory) = 
+    do ignore projectDirectory
+    let unwindEL = PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger)
+    let unwindBP = PushThreadBuildPhaseUntilUnwind (phase)
+    // Return the disposable object that cleans up
+    interface IDisposable with
+        member d.Dispose() =
+            unwindBP.Dispose()         
+            unwindEL.Dispose()
                             
-        
 
-    //------------------------------------------------------------------------------------
-    // Rules for reactive building.
-    //
-    // This phrases the compile as a series of vector functions and vector manipulations.
-    // Rules written in this language are then transformed into a plan to execute the 
-    // various steps of the process.
-    //-----------------------------------------------------------------------------------
-
-    type IncrementalBuilder(tcConfig : TcConfig, projectDirectory : string, assemblyName, niceNameGen : Ast.NiceNameGenerator, lexResourceManager,
-                            sourceFiles:string list, ensureReactive, errorLogger:ErrorLogger, 
-                            keepGeneratedTypedAssembly:bool)
-               =
-        //use t = Trace.Call("IncrementalBuildVerbose", "Create", fun _ -> sprintf " tcConfig.includes = %A" tcConfig.includes)
-        
-        let tcConfigP = TcConfigProvider.Constant(tcConfig)
-        let importsInvalidated = new Event()
-        let beforeTypeCheckFile = new Event<_>()
-
-        // Resolve assemblies and create the framework TcImports. This is done when constructing the
-        // builder itself, rather than as an incremental task. This caches a level of "system" references. No type providers are 
-        // included in these references. 
-        let (tcGlobals,frameworkTcImports,nonFrameworkResolutions,unresolvedReferences) = GetFrameworkTcImports tcConfig
-        
-        // Check for the existence of loaded sources and prepend them to the sources list if present.
-        let sourceFiles = tcConfig.GetAvailableLoadedSources() @ (sourceFiles|>List.map(fun s -> rangeStartup,s))
+//------------------------------------------------------------------------------------
+// Rules for reactive building.
+//
+// This phrases the compile as a series of vector functions and vector manipulations.
+// Rules written in this language are then transformed into a plan to execute the 
+// various steps of the process.
+//-----------------------------------------------------------------------------------
+
+type PartialCheckResults = 
+    { TcState: TcState 
+      TcImports: TcImports 
+      TcGlobals: TcGlobals 
+      TcConfig: TcConfig 
+      TcEnvAtEnd: TcEnv 
+      Errors: (PhasedError * FSharpErrorSeverity) list 
+      TcResolutions: TcResolutions list 
+      TcSymbolUses: TcSymbolUses list 
+      TopAttribs: TopAttribs option
+      TimeStamp: System.DateTime }
+
+    static member Create (tcAcc: TypeCheckAccumulator, timestamp) = 
+        { TcState = tcAcc.tcState
+          TcImports = tcAcc.tcImports
+          TcGlobals = tcAcc.tcGlobals
+          TcConfig = tcAcc.tcConfig
+          TcEnvAtEnd = tcAcc.tcEnvAtEndOfFile
+          Errors = tcAcc.tcErrors
+          TcResolutions = tcAcc.tcResolutions
+          TcSymbolUses = tcAcc.tcSymbolUses
+          TopAttribs = tcAcc.topAttribs
+          TimeStamp = timestamp }
+
+
+[]
+module Utilities = 
+    let TryFindStringAttribute tcGlobals attribSpec attribs =
+        match TryFindFSharpAttribute tcGlobals attribSpec attribs with
+        | Some (Attrib(_,_,[ AttribStringArg(s) ],_,_,_,_))  -> Some s
+        | _ -> None
+
+/// The implementation of the information needed by TcImports in CompileOps.fs for an F# assembly reference.
+//
+/// Constructs the build data (IRawFSharpAssemblyData) representing the assembly when used 
+/// as a cross-assembly reference.  Note the assembly has not been generated on disk, so this is
+/// a virtualized view of the assembly contents as computed by background checking.
+type RawFSharpAssemblyDataBackedByLanguageService (tcConfig,tcGlobals,tcState:TcState,outfile,topAttrs,assemblyName,ilAssemRef) = 
+
+    /// Try to find an attribute that takes a string argument
+
+    let generatedCcu = tcState.Ccu
+    let exportRemapping = MakeExportRemapping generatedCcu generatedCcu.Contents
+                      
+    let sigData = 
+        let _sigDataAttributes,sigDataResources = Driver.EncodeInterfaceData(tcConfig,tcGlobals,exportRemapping,generatedCcu,outfile,true)
+        [ for r in sigDataResources  do
+            let ccuName = GetSignatureDataResourceName r
+            let bytes = 
+                match r.Location with 
+                | ILResourceLocation.Local b -> b()
+                | _ -> assert false; failwith "unreachable"
+            yield (ccuName, bytes) ]
+
+    let autoOpenAttrs = topAttrs.assemblyAttrs |> List.choose (List.singleton >> TryFindStringAttribute tcGlobals tcGlobals.attrib_AutoOpenAttribute)
+    let ivtAttrs = topAttrs.assemblyAttrs |> List.choose (List.singleton >> TryFindStringAttribute tcGlobals tcGlobals.attrib_InternalsVisibleToAttribute)
+    interface IRawFSharpAssemblyData with 
+        member __.GetAutoOpenAttributes(_ilg) = autoOpenAttrs
+        member __.GetInternalsVisibleToAttributes(_ilg) =  ivtAttrs
+        member __.TryGetRawILModule() = None
+        member __.GetRawFSharpSignatureData(_m,_ilShortAssemName,_filename) = sigData
+        member __.GetRawFSharpOptimizationData(_m,_ilShortAssemName,_filename) = [ ]
+        member __.GetRawTypeForwarders() = mkILExportedTypes []  // TODO: cross-project references with type forwarders
+        member __.ShortAssemblyName = assemblyName
+        member __.ILScopeRef = IL.ILScopeRef.Assembly ilAssemRef
+        member __.ILAssemblyRefs = [] // These are not significant for service scenarios
+        member __.HasAnyFSharpSignatureDataAttribute =  true
+        member __.HasMatchingFSharpSignatureDataAttribute _ilg = true
+
+
+/// Manages an incremental build graph for the build of a single F# project
+type IncrementalBuilder(frameworkTcImportsCache: FrameworkImportsCache, tcConfig: TcConfig, projectDirectory, outfile, assemblyName, niceNameGen: Ast.NiceNameGenerator, lexResourceManager,
+                        sourceFiles, projectReferences: IProjectReference list, ensureReactive, 
+                        keepAssemblyContents, keepAllBackgroundResolutions) =
 
-        // Mark up the source files with an indicator flag indicating if they are the last source file in the project
-        let sourceFiles = 
-            let flags = tcConfig.ComputeCanContainEntryPoint(sourceFiles |> List.map snd)
-            (sourceFiles,flags) ||> List.map2 (fun (m,nm) flag -> (m,nm,flag))
+    /// Maximum time share for a piece of background work before it should (cooperatively) yield
+    /// to enable other requests to be serviced. Yielding means returning a continuation function
+    /// (via an Eventually<_> value of case NotYetDone) that can be called as the next piece of work. 
+    let maxTimeShareMilliseconds = 
+        match System.Environment.GetEnvironmentVariable("FCS_MaxTimeShare") with 
+        | null | "" -> 50L
+        | s -> int64 s
+
+    let tcConfigP = TcConfigProvider.Constant(tcConfig)
+    let importsInvalidated = new Event()
+    let fileParsed = new Event<_>()
+    let beforeTypeCheckFile = new Event<_>()
+    let fileChecked = new Event<_>()
+    let projectChecked = new Event<_>()
+
+    // Resolve assemblies and create the framework TcImports. This is done when constructing the
+    // builder itself, rather than as an incremental task. This caches a level of "system" references. No type providers are 
+    // included in these references. 
+    let (tcGlobals,frameworkTcImports,nonFrameworkResolutions,unresolvedReferences) = frameworkTcImportsCache.Get tcConfig
         
-        // Get the original referenced assembly names
-        // do System.Diagnostics.Debug.Assert(not((sprintf "%A" nonFrameworkResolutions).Contains("System.dll")),sprintf "Did not expect a system import here. %A" nonFrameworkResolutions)
-
-        // Get the names and time stamps of all the non-framework referenced assemblies, which will act 
-        // as inputs to one of the nodes in the build. 
-        //
-        // This operation is done when constructing the builder itself, rather than as an incremental task. 
-        let nonFrameworkAssemblyInputs = 
-            // Note we are not calling errorLogger.GetErrors() anywhere for this task. 
-            // REVIEW: Consider if this is ok. I believe so, because this is a background build and we aren't currently reporting errors from the background build. 
-            let errorLogger = CompilationErrorLogger("nonFrameworkAssemblyInputs", tcConfig, errorLogger)
-            // Return the disposable object that cleans up
-            use _holder = new CompilationGlobalsScope(errorLogger,BuildPhase.Parameter, projectDirectory) 
-
-            [ for r in nonFrameworkResolutions do
-                let originalTimeStamp = 
-                    try 
-                        if FileSystem.SafeExists(r.resolvedPath) then
-                            let result = FileSystem.GetLastWriteTimeShim(r.resolvedPath)
-                            Trace.Print("FSharpBackgroundBuildVerbose", fun _ -> sprintf "Found referenced assembly '%s'.\n" r.resolvedPath)
-                            result
-                        else
-                            Trace.Print("FSharpBackgroundBuildVerbose", fun _ -> sprintf "Did not find referenced assembly '%s' on disk.\n" r.resolvedPath)
-                            DateTime.Now                               
-                    with e -> 
-                        Trace.Print("FSharpBackgroundBuildVerbose", fun _ -> sprintf "Did not find referenced assembly '%s' due to exception.\n" r.resolvedPath)
-                        // Note we are not calling errorLogger.GetErrors() anywhere for this task. This warning will not be reported...
-                        // REVIEW: Consider if this is ok. I believe so, because this is a background build and we aren't currently reporting errors from the background build. 
-                        errorLogger.Warning(e)
+    // Check for the existence of loaded sources and prepend them to the sources list if present.
+    let sourceFiles = tcConfig.GetAvailableLoadedSources() @ (sourceFiles |>List.map (fun s -> rangeStartup,s))
+
+    // Mark up the source files with an indicator flag indicating if they are the last source file in the project
+    let sourceFiles = 
+        let flags = tcConfig.ComputeCanContainEntryPoint(sourceFiles |> List.map snd)
+        (sourceFiles,flags) ||> List.map2 (fun (m,nm) flag -> (m,nm,flag))
+
+    // Get the names and time stamps of all the non-framework referenced assemblies, which will act 
+    // as inputs to one of the nodes in the build. 
+    //
+    // This operation is done when constructing the builder itself, rather than as an incremental task. 
+    let nonFrameworkAssemblyInputs = 
+        // Note we are not calling errorLogger.GetErrors() anywhere for this task. 
+        // This is ok because not much can actually go wrong here.
+        let errorLogger = CompilationErrorLogger("nonFrameworkAssemblyInputs", tcConfig)
+        // Return the disposable object that cleans up
+        use _holder = new CompilationGlobalsScope(errorLogger,BuildPhase.Parameter, projectDirectory) 
+
+        [ for r in nonFrameworkResolutions do
+            let originalTimeStamp = 
+                try 
+                    if FileSystem.SafeExists(r.resolvedPath) then
+                        let result = FileSystem.GetLastWriteTimeShim(r.resolvedPath)
+                        result
+                    else
                         DateTime.Now                               
-                yield (r.originalReference.Range,r.resolvedPath,originalTimeStamp)  ]
+                with e -> 
+                    // Note we are not calling errorLogger.GetErrors() anywhere for this task. This warning will not be reported...
+                    errorLogger.Warning(e)
+                    DateTime.Now                               
+            yield (Choice1Of2 r.resolvedPath,originalTimeStamp)  
+          for pr in projectReferences  do
+            yield Choice2Of2 pr, defaultArg (pr.GetLogicalTimeStamp()) DateTime.Now]
             
-        // The IncrementalBuilder needs to hold up to one item that needs to be disposed, which is the tcImports for the incremental
-        // build. 
-        let mutable cleanupItem = None : TcImports option
-        let disposeCleanupItem() =
-             match cleanupItem with 
-             | None -> ()
-             | Some item -> 
-                 cleanupItem <- None
-                 dispose item 
-
-        let setCleanupItem x = 
-             assert cleanupItem.IsNone
-             cleanupItem <- Some x
-
-        let mutable disposed = false
-        let assertNotDisposed() =
-            if disposed then  
-                System.Diagnostics.Debug.Assert(false, "IncrementalBuild object has already been disposed!")
-        let mutable referenceCount = 0
-
-        ///----------------------------------------------------
-        /// START OF BUILD TASK FUNCTIONS 
+    // The IncrementalBuilder needs to hold up to one item that needs to be disposed, which is the tcImports for the incremental
+    // build. 
+    let mutable cleanupItem = None: TcImports option
+    let disposeCleanupItem() =
+            match cleanupItem with 
+            | None -> ()
+            | Some item -> 
+                cleanupItem <- None
+                dispose item 
+
+    let setCleanupItem x = 
+            assert cleanupItem.IsNone
+            cleanupItem <- Some x
+
+    let mutable disposed = false
+    let assertNotDisposed() =
+        if disposed then  
+            System.Diagnostics.Debug.Assert(false, "IncrementalBuild object has already been disposed!")
+    let mutable referenceCount = 0
+
+    //----------------------------------------------------
+    // START OF BUILD TASK FUNCTIONS 
                 
-        /// This is a build task function that gets placed into the build rules as the computation for a VectorStamp
-        ///
-        /// Get the timestamp of the given file name.
-        let StampFileNameTask (_m:range, filename:string, _isLastCompiland:bool) =
-            assertNotDisposed()
-            FileSystem.GetLastWriteTimeShim(filename)
+    /// This is a build task function that gets placed into the build rules as the computation for a VectorStamp
+    ///
+    /// Get the timestamp of the given file name.
+    let StampFileNameTask (_m:range, filename:string, _isLastCompiland:bool) =
+        assertNotDisposed()
+        FileSystem.GetLastWriteTimeShim(filename)
                             
-        /// This is a build task function that gets placed into the build rules as the computation for a VectorMap
-        ///
-        /// Parse the given files and return the given inputs. This function is expected to be
-        /// able to be called with a subset of sourceFiles and return the corresponding subset of
-        /// parsed inputs. 
-        let ParseTask (sourceRange:range,filename:string,isLastCompiland) =
-            assertNotDisposed()
-            let errorLogger = CompilationErrorLogger("ParseTask", tcConfig, errorLogger)
-            // Return the disposable object that cleans up
-            use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parse, projectDirectory)
-
-            Trace.Print("FSharpBackgroundBuild", fun _ -> sprintf "Parsing %s..." filename)
-            
-            try  
-                IncrementalBuilderEventsMRU.Add(IBEParsed filename)
-                let result = ParseOneInputFile(tcConfig,lexResourceManager, [], filename ,isLastCompiland,errorLogger,(*retryLocked*)true)
-                Trace.PrintLine("FSharpBackgroundBuildVerbose", fun _ -> sprintf "done.")
-                result,sourceRange,filename,errorLogger.GetErrors ()
-            with exn -> 
-                System.Diagnostics.Debug.Assert(false, sprintf "unexpected failure in IncrementalFSharpBuild.Parse\nerror = %s" (exn.ToString()))
-                failwith "last chance failure"  
+    /// This is a build task function that gets placed into the build rules as the computation for a VectorMap
+    ///
+    /// Parse the given files and return the given inputs. This function is expected to be
+    /// able to be called with a subset of sourceFiles and return the corresponding subset of
+    /// parsed inputs. 
+    let ParseTask (sourceRange:range,filename:string,isLastCompiland) =
+        assertNotDisposed()
+        let errorLogger = CompilationErrorLogger("ParseTask", tcConfig)
+        // Return the disposable object that cleans up
+        use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parse, projectDirectory)
+
+        try  
+            IncrementalBuilderEventTesting.MRU.Add(IncrementalBuilderEventTesting.IBEParsed filename)
+            let result = ParseOneInputFile(tcConfig,lexResourceManager, [], filename ,isLastCompiland,errorLogger,(*retryLocked*)true)
+            fileParsed.Trigger filename
+            result,sourceRange,filename,errorLogger.GetErrors ()
+        with exn -> 
+            System.Diagnostics.Debug.Assert(false, sprintf "unexpected failure in IncrementalFSharpBuild.Parse\nerror = %s" (exn.ToString()))
+            failwith "last chance failure"  
                 
         
-        /// This is a build task function that gets placed into the build rules as the computation for a Vector.Stamp
-        ///
-        /// Timestamps of referenced assemblies are taken from the file's timestamp.
-        let TimestampReferencedAssemblyTask (_range, filename, originalTimeStamp) =
-            assertNotDisposed()
-            // Note: we are not calling errorLogger.GetErrors() anywhere. Is this a problem?
-            let errorLogger = CompilationErrorLogger("TimestampReferencedAssemblyTask", tcConfig, errorLogger)
-            // Return the disposable object that cleans up
-            use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter, projectDirectory) // Parameter because -r reference
-
-            let timestamp = 
-                try
+    /// This is a build task function that gets placed into the build rules as the computation for a Vector.Stamp
+    ///
+    /// Timestamps of referenced assemblies are taken from the file's timestamp.
+    let TimestampReferencedAssemblyTask (ref, originalTimeStamp) =
+        assertNotDisposed()
+        // Note: we are not calling errorLogger.GetErrors() anywhere. Not a problem because timestamping can't really fail
+        let errorLogger = CompilationErrorLogger("TimestampReferencedAssemblyTask", tcConfig)
+        // Return the disposable object that cleans up
+        use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter, projectDirectory) // Parameter because -r reference
+
+        let timestamp = 
+            try
+                match ref with 
+                | Choice1Of2 (filename) -> 
                     if FileSystem.SafeExists(filename) then
-                        let ts = FileSystem.GetLastWriteTimeShim(filename)
-                        if ts<>originalTimeStamp then 
-                            Trace.PrintLine("FSharpBackgroundBuildVerbose", fun _ -> sprintf "Noticing change in timestamp of file %s from %A to %A" filename originalTimeStamp ts)
-                        else    
-                            Trace.PrintLine("FSharpBackgroundBuildVerbose", fun _ -> sprintf "Noticing no change in timestamp of file %s (still %A)" filename originalTimeStamp)
-                        ts
+                        FileSystem.GetLastWriteTimeShim(filename)
                     else
-                        Trace.PrintLine("FSharpBackgroundBuildVerbose", fun _ -> sprintf "Noticing that file %s was deleted, but ignoring that for timestamp checking" filename)
                         originalTimeStamp
-                with exn -> 
-                    // For example, malformed filename
-                    Trace.PrintLine("FSharpBackgroundBuildVerbose", fun _ -> sprintf "Exception when checking stamp of file %s, using old stamp %A" filename originalTimeStamp)
-                    // Note we are not calling errorLogger.GetErrors() anywhere for this task. This warning will not be reported...
-                    // REVIEW: Consider if this is ok. I believe so, because this is a background build and we aren't currently reporting errors from the background build. 
-                    errorLogger.Warning exn
-                    originalTimeStamp                      
-            timestamp
+                | Choice2Of2 (pr:IProjectReference) ->
+                    defaultArg (pr.GetLogicalTimeStamp()) originalTimeStamp
+            with exn -> 
+                // Note we are not calling errorLogger.GetErrors() anywhere for this task. This warning will not be reported...
+                errorLogger.Warning exn
+                originalTimeStamp                      
+        timestamp
                 
          
-        /// This is a build task function that gets placed into the build rules as the computation for a Vector.Demultiplex
-        ///
-        // Link all the assemblies together and produce the input typecheck accumulator               
-        let CombineImportedAssembliesTask _ : TypeCheckAccumulator =
-            assertNotDisposed()
-            let errorLogger = CompilationErrorLogger("CombineImportedAssembliesTask", tcConfig, errorLogger)
-            // Return the disposable object that cleans up
-            use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter, projectDirectory)
-
-            let tcImports = 
-                try
-                    // We dispose any previous tcImports, for the case where a dependency changed which caused this part
-                    // of the partial build to be re-evaluated.
-                    disposeCleanupItem()
+    /// This is a build task function that gets placed into the build rules as the computation for a Vector.Demultiplex
+    ///
+    // Link all the assemblies together and produce the input typecheck accumulator               
+    let CombineImportedAssembliesTask _: TypeCheckAccumulator =
+        assertNotDisposed()
+        let errorLogger = CompilationErrorLogger("CombineImportedAssembliesTask", tcConfig)
+        // Return the disposable object that cleans up
+        use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter, projectDirectory)
 
-                    Trace.PrintLine("FSharpBackgroundBuild", fun _ -> "About to (re)create tcImports")
-                    let tcImports = TcImports.BuildNonFrameworkTcImports(None,tcConfigP,tcGlobals,frameworkTcImports,nonFrameworkResolutions,unresolvedReferences)  
+        let tcImports = 
+            try
+                // We dispose any previous tcImports, for the case where a dependency changed which caused this part
+                // of the partial build to be re-evaluated.
+                disposeCleanupItem()
+
+                let tcImports = TcImports.BuildNonFrameworkTcImports(tcConfigP,tcGlobals,frameworkTcImports,nonFrameworkResolutions,unresolvedReferences)  
 #if EXTENSIONTYPING
-                    for ccu in tcImports.GetCcusExcludingBase() do
-                        // When a CCU reports an invalidation, merge them together and just report a 
-                        // general "imports invalidated". This triggers a rebuild.
-                        ccu.Deref.InvalidateEvent.Add(fun msg -> importsInvalidated.Trigger msg)
+                for ccu in tcImports.GetCcusExcludingBase() do
+                    // When a CCU reports an invalidation, merge them together and just report a 
+                    // general "imports invalidated". This triggers a rebuild.
+                    ccu.Deref.InvalidateEvent.Add(fun msg -> importsInvalidated.Trigger msg)
 #endif
                     
-                    Trace.PrintLine("FSharpBackgroundBuild", fun _ -> "(Re)created tcImports")
                     
-                    // The tcImports must be cleaned up if this builder ever gets disposed. We also dispose any previous
-                    // tcImports should we be re-creating an entry because a dependency changed which caused this part
-                    // of the partial build to be re-evaluated.
-                    setCleanupItem tcImports
-
-                    tcImports
-                with e -> 
-                    System.Diagnostics.Debug.Assert(false, sprintf "Could not BuildAllReferencedDllTcImports %A" e)
-                    Trace.PrintLine("FSharpBackgroundBuild", fun _ -> "Failed to recreate tcImports\n  %A")
-                    errorLogger.Warning(e)
-                    frameworkTcImports           
-
-            let tcEnv0 = GetInitialTypecheckerEnv (Some assemblyName) rangeStartup tcConfig tcImports tcGlobals
-            let tcState0 = TypecheckInitialState (rangeStartup,assemblyName,tcConfig,tcGlobals,tcImports,niceNameGen,tcEnv0)
-            let tcAcc = 
-                { tcGlobals=tcGlobals
-                  tcImports=tcImports
-                  tcState=tcState0
-                  tcConfig=tcConfig
-                  tcEnv=tcEnv0
-                  topAttribs=None
-                  typedImplFiles=[]
-                  errors=errorLogger.GetErrors() }   
-            tcAcc
+                // The tcImports must be cleaned up if this builder ever gets disposed. We also dispose any previous
+                // tcImports should we be re-creating an entry because a dependency changed which caused this part
+                // of the partial build to be re-evaluated.
+                setCleanupItem tcImports
+
+                tcImports
+            with e -> 
+                System.Diagnostics.Debug.Assert(false, sprintf "Could not BuildAllReferencedDllTcImports %A" e)
+                errorLogger.Warning(e)
+                frameworkTcImports           
+
+        let tcEnvAtEndOfFile = GetInitialTcEnv (Some assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals)
+        let tcState = GetInitialTcState (rangeStartup, assemblyName, tcConfig, tcGlobals, tcImports, niceNameGen, tcEnvAtEndOfFile)
+        let tcAcc = 
+            { tcGlobals=tcGlobals
+              tcImports=tcImports
+              tcState=tcState
+              tcConfig=tcConfig
+              tcEnvAtEndOfFile=tcEnvAtEndOfFile
+              tcResolutions=[]
+              tcSymbolUses=[]
+              topAttribs=None
+              typedImplFiles=[]
+              tcErrors=errorLogger.GetErrors() }   
+        tcAcc
                 
-        /// This is a build task function that gets placed into the build rules as the computation for a Vector.ScanLeft
-        ///
-        /// Type check all files.     
-        let TypeCheckTask (tcAcc:TypeCheckAccumulator) input : Eventually =    
-            assertNotDisposed()
-            match input with 
-            | Some input, _sourceRange, filename, parseErrors->
-                IncrementalBuilderEventsMRU.Add(IBETypechecked filename)
-                let capturingErrorLogger = CompilationErrorLogger("TypeCheckTask", tcConfig, errorLogger)
-                let errorLogger = GetErrorLoggerFilteringByScopedPragmas(false,GetScopedPragmasForInput(input),capturingErrorLogger)
-                let tcAcc = {tcAcc with errors = tcAcc.errors @ parseErrors}
-                let fullComputation = 
-                    eventually {
-                        Trace.PrintLine("FSharpBackgroundBuild", fun _ -> sprintf "Typechecking %s..." filename)                
-                        beforeTypeCheckFile.Trigger filename
-                        let! (tcEnv,topAttribs,typedImplFiles),tcState = 
-                            TypecheckOneInputEventually ((fun () -> errorLogger.ErrorCount > 0),
-                                                         tcConfig,tcAcc.tcImports,
-                                                         tcAcc.tcGlobals,
-                                                         None,
-                                                         Nameres.TcResultsSink.NoSink,
-                                                         tcAcc.tcState,input)
+    /// This is a build task function that gets placed into the build rules as the computation for a Vector.ScanLeft
+    ///
+    /// Type check all files.     
+    let TypeCheckTask (tcAcc:TypeCheckAccumulator) input: Eventually =    
+        assertNotDisposed()
+        match input with 
+        | Some input, _sourceRange, filename, parseErrors->
+            IncrementalBuilderEventTesting.MRU.Add(IncrementalBuilderEventTesting.IBETypechecked filename)
+            let capturingErrorLogger = CompilationErrorLogger("TypeCheckTask", tcConfig)
+            let errorLogger = GetErrorLoggerFilteringByScopedPragmas(false,GetScopedPragmasForInput(input),capturingErrorLogger)
+            let fullComputation = 
+                eventually {
+                    beforeTypeCheckFile.Trigger filename
+
+                    ApplyMetaCommandsFromInputToTcConfig tcConfig (input, Path.GetDirectoryName filename) |> ignore
+                    let sink = TcResultsSinkImpl(tcAcc.tcGlobals)
+                    let hadParseErrors = not (List.isEmpty parseErrors)
+
+                    let! (tcEnvAtEndOfFile,topAttribs,typedImplFiles),tcState = 
+                        TypeCheckOneInputEventually ((fun () -> hadParseErrors || errorLogger.ErrorCount > 0),
+                                                        tcConfig,tcAcc.tcImports,
+                                                        tcAcc.tcGlobals,
+                                                        None,
+                                                        TcResultsSink.WithSink sink,
+                                                        tcAcc.tcState,input)
                         
-                        /// Only keep the typed interface files when doing a "full" build for fsc.exe, otherwise just throw them away
-                        let typedImplFiles = if keepGeneratedTypedAssembly then typedImplFiles else []
-                        Trace.PrintLine("FSharpBackgroundBuild", fun _ -> sprintf "done.")
-                        return {tcAcc with tcState=tcState 
-                                           tcEnv=tcEnv
-                                           topAttribs=Some topAttribs
-                                           typedImplFiles=typedImplFiles
-                                           errors = tcAcc.errors @ capturingErrorLogger.GetErrors() } 
-                    }
+                    /// Only keep the typed interface files when doing a "full" build for fsc.exe, otherwise just throw them away
+                    let typedImplFiles = if keepAssemblyContents then typedImplFiles else []
+                    let tcResolutions = if keepAllBackgroundResolutions then sink.GetResolutions() else TcResolutions.Empty
+                    let tcSymbolUses = sink.GetSymbolUses()  
+                    fileChecked.Trigger filename
+                    return {tcAcc with tcState=tcState 
+                                       tcEnvAtEndOfFile=tcEnvAtEndOfFile
+                                       topAttribs=Some topAttribs
+                                       typedImplFiles=typedImplFiles
+                                       tcResolutions=tcAcc.tcResolutions @ [tcResolutions]
+                                       tcSymbolUses=tcAcc.tcSymbolUses @ [tcSymbolUses]
+                                       tcErrors = tcAcc.tcErrors @ parseErrors @ capturingErrorLogger.GetErrors() } 
+                }
                     
-                // Run part of the Eventually<_> computation until a timeout is reached. If not complete, 
-                // return a new Eventually<_> computation which recursively runs more of the computation.
-                //   - When the whole thing is finished commit the error results sent through the errorLogger.
-                //   - Each time we do real work we reinstall the CompilationGlobalsScope
-                if ensureReactive then 
-                    let timeSlicedComputation = 
-                        fullComputation |> 
-                           Eventually.repeatedlyProgressUntilDoneOrTimeShareOver 
-                              maxTimeShareMilliseconds
-                              (fun f -> 
-                                  // Reinstall the compilation globals each time we start or restart
-                                  use unwind = new CompilationGlobalsScope (errorLogger, BuildPhase.TypeCheck, projectDirectory) 
-                                  Trace.Print("FSharpBackgroundBuildVerbose", fun _ -> sprintf "continuing %s.\n" filename)
-                                  f()
-                                  (* unwind dispose *)
-                              )
+            // Run part of the Eventually<_> computation until a timeout is reached. If not complete, 
+            // return a new Eventually<_> computation which recursively runs more of the computation.
+            //   - When the whole thing is finished commit the error results sent through the errorLogger.
+            //   - Each time we do real work we reinstall the CompilationGlobalsScope
+            if ensureReactive then 
+                let timeSlicedComputation = 
+                    fullComputation |> 
+                        Eventually.repeatedlyProgressUntilDoneOrTimeShareOver 
+                            maxTimeShareMilliseconds
+                            (fun f -> 
+                                // Reinstall the compilation globals each time we start or restart
+                                use unwind = new CompilationGlobalsScope (errorLogger, BuildPhase.TypeCheck, projectDirectory) 
+                                f())
                                
-                    timeSlicedComputation
-                else 
-                    use unwind = new CompilationGlobalsScope (errorLogger, BuildPhase.TypeCheck, projectDirectory) 
-                    fullComputation |> Eventually.force |> Eventually.Done 
-            | _ -> 
-                Eventually.Done tcAcc
+                timeSlicedComputation
+            else 
+                use unwind = new CompilationGlobalsScope (errorLogger, BuildPhase.TypeCheck, projectDirectory) 
+                fullComputation |> Eventually.force |> Eventually.Done 
+        | _ -> 
+            Eventually.Done tcAcc
+
+
+    /// This is a build task function that gets placed into the build rules as the computation for a Vector.Demultiplex
+    ///
+    /// Finish up the typechecking to produce outputs for the rest of the compilation process
+    let FinalizeTypeCheckTask (tcStates:TypeCheckAccumulator[]) = 
+        assertNotDisposed()
+        let errorLogger = CompilationErrorLogger("CombineImportedAssembliesTask", tcConfig)
+        use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.TypeCheck, projectDirectory)
+
+        // Get the state at the end of the type-checking of the last file
+        let finalAcc = tcStates.[tcStates.Length-1]
+
+        // Finish the checking
+        let (_tcEnvAtEndOfLastFile,topAttrs,mimpls),tcState = 
+            let results = tcStates |> List.ofArray |> List.map (fun acc-> acc.tcEnvAtEndOfFile, defaultArg acc.topAttribs EmptyTopAttrs, acc.typedImplFiles)
+            TypeCheckMultipleInputsFinish (results,finalAcc.tcState)
+
+  
+        let ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt = 
+          try
+            // TypeCheckClosedInputSetFinish fills in tcState.Ccu but in incrfemental scenarios we don't want this,
+            // so we make this temporary here
+            let oldContents = tcState.Ccu.Deref.Contents
+            try
+            let tcState,tcAssemblyExpr = TypeCheckClosedInputSetFinish (mimpls,tcState)
+
+            // Compute the identity of the generated assembly based on attributes, options etc.
+            // Some of this is duplicated from fsc.fs
+            let ilAssemRef = 
+                let publicKey = 
+                    try 
+                        let signingInfo = Driver.ValidateKeySigningAttributes (tcConfig, tcGlobals, topAttrs)
+                        match Driver.GetSigner signingInfo with 
+                        | None -> None
+                        | Some s -> Some (PublicKey.KeyAsToken(s.PublicKey))
+                    with e -> 
+                        errorRecoveryNoRange e
+                        None
+                let locale = TryFindStringAttribute tcGlobals (mkMscorlibAttrib tcGlobals "System.Reflection.AssemblyCultureAttribute") topAttrs.assemblyAttrs
+                let assemVerFromAttrib = 
+                    TryFindStringAttribute tcGlobals (mkMscorlibAttrib tcGlobals "System.Reflection.AssemblyVersionAttribute") topAttrs.assemblyAttrs 
+                    |> Option.bind  (fun v -> try Some (parseILVersion v) with _ -> None)
+                let ver = 
+                    match assemVerFromAttrib with 
+                    | None -> tcConfig.version.GetVersionInfo(tcConfig.implicitIncludeDir)
+                    | Some v -> v
+                ILAssemblyRef.Create(assemblyName, None, publicKey, false, Some ver, locale)
                 
-        /// This is a build task function that gets placed into the build rules as the computation for a Vector.Demultiplex
-        ///
-        /// Finish up the typechecking to produce outputs for the rest of the compilation process
-        let FinalizeTypeCheckTask (tcStates:TypeCheckAccumulator[]) = 
-            assertNotDisposed()
-            Trace.PrintLine("FSharpBackgroundBuildVerbose", fun _ -> sprintf "Finalizing Type Check" )
-            let finalAcc = tcStates.[tcStates.Length-1]
-            let results = tcStates |> List.ofArray |> List.map (fun acc-> acc.tcEnv, (Option.get acc.topAttribs), acc.typedImplFiles)
-            let (tcEnvAtEndOfLastFile,topAttrs,mimpls),tcState = TypecheckMultipleInputsFinish (results,finalAcc.tcState)
-            let tcState,tassembly = TypecheckClosedInputSetFinish (mimpls,tcState)
-            tcState, topAttrs, tassembly, tcEnvAtEndOfLastFile, finalAcc.tcImports, finalAcc.tcGlobals, finalAcc.tcConfig
-
-        // END OF BUILD TASK FUNCTIONS
-        // ---------------------------------------------------------------------------------------------            
-
-        // ---------------------------------------------------------------------------------------------            
-        // START OF BUILD DESCRIPTION
-
-        let buildDescription            = new BuildDescriptionScope ()
-
-        // Inputs
-        let filenames                   = InputVector "FileNames"
-        let referencedAssemblies        = InputVector "ReferencedAssemblies"
+            let tcAssemblyDataOpt = 
+                try
+                  // Assemblies containing type provider components can not successfully be used via cross-assembly references.
+                  // We return 'None' for the assembly portion of the cross-assembly reference 
+                  let hasTypeProviderAssemblyAttrib = 
+                      topAttrs.assemblyAttrs |> List.exists (fun (Attrib(tcref,_,_,_,_,_,_)) -> tcref.CompiledRepresentationForNamedType.BasicQualifiedName = typeof.FullName)
+                  if hasTypeProviderAssemblyAttrib then
+                    None
+                  else
+                    Some  (RawFSharpAssemblyDataBackedByLanguageService (tcConfig,tcGlobals,tcState,outfile,topAttrs,assemblyName,ilAssemRef) :> IRawFSharpAssemblyData)
+
+                with e -> 
+                    errorRecoveryNoRange e
+                    None
+            ilAssemRef, tcAssemblyDataOpt, Some tcAssemblyExpr
+            finally 
+                tcState.Ccu.Deref.Contents <- oldContents
+          with e -> 
+            errorRecoveryNoRange e
+            mkSimpleAssRef assemblyName, None, None
+
+        let finalAccWithErrors = 
+            { finalAcc with 
+                tcErrors = finalAcc.tcErrors @ errorLogger.GetErrors() 
+                topAttribs = Some topAttrs
+            }
+        ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt, finalAccWithErrors
+
+    // END OF BUILD TASK FUNCTIONS
+    // ---------------------------------------------------------------------------------------------            
+
+    // ---------------------------------------------------------------------------------------------            
+    // START OF BUILD DESCRIPTION
+
+    // Inputs
+    let fileNamesNode               = InputVector "FileNames"
+    let referencedAssembliesNode    = InputVector*DateTime> "ReferencedAssemblies"
         
-        // Build
-        let stampedFileNames            = Vector.Stamp "SourceFileTimeStamps" StampFileNameTask filenames
-        let parseTrees                  = Vector.Map "Parse" ParseTask stampedFileNames
-        let stampedReferencedAssemblies = Vector.Stamp "TimestampReferencedAssembly" TimestampReferencedAssemblyTask referencedAssemblies
-        let initialTcAcc                = Vector.Demultiplex "CombineImportedAssemblies" CombineImportedAssembliesTask stampedReferencedAssemblies
-        let tcStates                    = Vector.ScanLeft "TypeCheck" TypeCheckTask initialTcAcc parseTrees
-        let finalizedTypeCheck          = Vector.Demultiplex "FinalizeTypeCheck" FinalizeTypeCheckTask tcStates
-
-        // Outputs
-        do buildDescription.DeclareVectorOutput ("ParseTrees", parseTrees)
-        do buildDescription.DeclareVectorOutput ("TypeCheckingStates",tcStates)
-        do buildDescription.DeclareScalarOutput ("InitialTcAcc", initialTcAcc)
-        do buildDescription.DeclareScalarOutput ("FinalizeTypeCheck", finalizedTypeCheck)
-
-        // END OF BUILD DESCRIPTION
-        // ---------------------------------------------------------------------------------------------            
-
-
-        let fileDependencies = 
-            let unresolvedFileDependencies = 
-                unresolvedReferences
-                |> List.map (function Microsoft.FSharp.Compiler.Build.UnresolvedAssemblyReference(referenceText, _) -> referenceText)
-                |> List.filter(fun referenceText->not(Path.IsInvalidPath(referenceText))) // Exclude things that are definitely not a file name
-                |> List.map(fun referenceText -> if FileSystem.IsPathRootedShim(referenceText) then referenceText else System.IO.Path.Combine(projectDirectory,referenceText))
-                |> List.map (fun file->{Filename =  file; ExistenceDependency = true; IncrementalBuildDependency = true })
-            let resolvedFileDependencies = 
-                nonFrameworkResolutions |> List.map (fun r -> {Filename =  r.resolvedPath ; ExistenceDependency = true; IncrementalBuildDependency = true })
-#if DEBUG
-            do resolvedFileDependencies |> List.iter (fun x -> System.Diagnostics.Debug.Assert(FileSystem.IsPathRootedShim(x.Filename), sprintf "file dependency should be absolute path: '%s'" x.Filename))
-#endif        
-            let sourceFileDependencies = 
-                sourceFiles  |> List.map (fun (_,f,_) -> {Filename =  f ; ExistenceDependency = true; IncrementalBuildDependency = true })               
-            List.concat [unresolvedFileDependencies;resolvedFileDependencies;sourceFileDependencies]
-
-#if TRACK_DOWN_EXTRA_BACKSLASHES        
-        do fileDependencies |> List.iter(fun dep ->
-              Debug.Assert(not(dep.Filename.Contains(@"\\")), "IncrementalBuild.Create results in a non-canonical filename with extra backslashes: "^dep.Filename)
-              )
-#endif        
-
-        do IncrementalBuilderEventsMRU.Add(IBEDeleted)
-        let buildInputs = ["FileNames", sourceFiles.Length, sourceFiles |> List.map box
-                           "ReferencedAssemblies", nonFrameworkAssemblyInputs.Length, nonFrameworkAssemblyInputs |> List.map box ]
-
-        // This is the intial representation of progress through the build, i.e. we have made no progress.
-        let mutable partialBuild = buildDescription.GetInitialPartialBuild (buildInputs, [])
-
-        member this.IncrementUsageCount() = 
-            assertNotDisposed() 
-            referenceCount  <- referenceCount  + 1
-            { new System.IDisposable with member x.Dispose() = this.DecrementUsageCount() }
-        member this.DecrementUsageCount() = 
-            assertNotDisposed()
-            referenceCount  <- referenceCount  - 1
-            if referenceCount = 0 then 
-                 disposed <- true
-                 disposeCleanupItem()
-
-        member __.IsAlive = referenceCount > 0
-
-        member __.TcConfig = tcConfig
-        member __.BeforeTypeCheckFile = beforeTypeCheckFile.Publish
-        member __.ImportedCcusInvalidated = importsInvalidated.Publish
-        member __.Dependencies = fileDependencies
+    // Build
+    let stampedFileNamesNode        = Vector.Stamp "SourceFileTimeStamps" StampFileNameTask fileNamesNode
+    let parseTreesNode              = Vector.Map "ParseTrees" ParseTask stampedFileNamesNode
+    let stampedReferencedAssembliesNode = Vector.Stamp "TimestampReferencedAssembly" TimestampReferencedAssemblyTask referencedAssembliesNode
+    let initialTcAccNode            = Vector.Demultiplex "CombineImportedAssemblies" CombineImportedAssembliesTask stampedReferencedAssembliesNode
+    let tcStatesNode                = Vector.ScanLeft "TypeCheckingStates" TypeCheckTask initialTcAccNode parseTreesNode
+    let finalizedTypeCheckNode      = Vector.Demultiplex "FinalizeTypeCheck" FinalizeTypeCheckTask tcStatesNode
+
+    // Outputs
+    let buildDescription            = new BuildDescriptionScope ()
+
+    do buildDescription.DeclareVectorOutput stampedFileNamesNode
+    do buildDescription.DeclareVectorOutput stampedReferencedAssembliesNode
+    do buildDescription.DeclareVectorOutput parseTreesNode
+    do buildDescription.DeclareVectorOutput tcStatesNode
+    do buildDescription.DeclareScalarOutput initialTcAccNode
+    do buildDescription.DeclareScalarOutput finalizedTypeCheckNode
+
+    // END OF BUILD DESCRIPTION
+    // ---------------------------------------------------------------------------------------------            
+
+
+    let fileDependencies = 
+        [ for (UnresolvedAssemblyReference(referenceText, _))  in unresolvedReferences do
+            // Exclude things that are definitely not a file name
+            if not(FileSystem.IsInvalidPathShim(referenceText)) then 
+                let file = if FileSystem.IsPathRootedShim(referenceText) then referenceText else Path.Combine(projectDirectory,referenceText) 
+                yield file 
+
+          for r in nonFrameworkResolutions do 
+                yield  r.resolvedPath 
+
+          for (_,f,_) in sourceFiles do
+                yield f 
+        ]
+
+    do IncrementalBuilderEventTesting.MRU.Add(IncrementalBuilderEventTesting.IBECreated)
+    let buildInputs = [ BuildInput.VectorInput (fileNamesNode, sourceFiles)
+                        BuildInput.VectorInput (referencedAssembliesNode, nonFrameworkAssemblyInputs) ]
+
+    // This is the initial representation of progress through the build, i.e. we have made no progress.
+    let mutable partialBuild = buildDescription.GetInitialPartialBuild buildInputs
+
+    let EvalAndKeepOutput f = 
+        let newPartialBuild = f partialBuild
+        partialBuild <- newPartialBuild
+        newPartialBuild
+
+    let MaxTimeStampInDependencies (output:INode) = 
+        IncrementalBuild.MaxTimeStampInDependencies output.Name partialBuild 
+
+    member this.IncrementUsageCount() = 
+        assertNotDisposed() 
+        referenceCount  <- referenceCount  + 1
+        { new System.IDisposable with member x.Dispose() = this.DecrementUsageCount() }
+
+    member this.DecrementUsageCount() = 
+        assertNotDisposed()
+        referenceCount  <- referenceCount  - 1
+        if referenceCount = 0 then 
+                disposed <- true
+                disposeCleanupItem()
+
+    member __.IsAlive = referenceCount > 0
+
+    member __.TcConfig = tcConfig
+    member __.FileParsed = fileParsed.Publish
+    member __.BeforeTypeCheckFile = beforeTypeCheckFile.Publish
+    member __.FileChecked = fileChecked.Publish
+    member __.ProjectChecked = projectChecked.Publish
+    member __.ImportedCcusInvalidated = importsInvalidated.Publish
+    member __.Dependencies = fileDependencies 
 #if EXTENSIONTYPING
-        member __.ThereAreLiveTypeProviders = 
-            let liveTPs =
-                match cleanupItem with 
-                | None -> []
-                | Some tcImports -> [for ia in tcImports.GetImportedAssemblies() do yield! ia.TypeProviders]
-            match liveTPs with
-            | [] -> false
-            | _ -> true                
+    member __.ThereAreLiveTypeProviders = 
+        let liveTPs =
+            match cleanupItem with 
+            | None -> []
+            | Some tcImports -> [for ia in tcImports.GetImportedAssemblies() do yield! ia.TypeProviders]
+        match liveTPs with
+        | [] -> false
+        | _ -> true                
 #endif
 
-        member __.Step () =  
-            match IncrementalBuild.Step "TypeCheckingStates" partialBuild with 
-            | None -> 
-                false
-            | Some newPartialBuild -> 
-                partialBuild <- newPartialBuild
-                true
+    member __.Step () =  
+        match IncrementalBuild.Step (Target(tcStatesNode, None)) partialBuild with 
+        | None -> 
+            projectChecked.Trigger()
+            false
+        | Some newPartialBuild -> 
+            partialBuild <- newPartialBuild
+            true
     
-        member __.GetAntecedentTypeCheckResultsBySlot slotOfFile = 
-            let result = 
-                match slotOfFile with
-                | (*first file*) 0 -> GetScalarResult("InitialTcAcc",partialBuild)
-                | _ -> GetVectorResultBySlot("TypeCheckingStates",slotOfFile-1,partialBuild)  
+    member ib.GetCheckResultsBeforeFileInProjectIfReady filename: PartialCheckResults option  = 
+        let slotOfFile = ib.GetSlotOfFileName filename
+        let result = 
+            match slotOfFile with
+            | (*first file*) 0 -> GetScalarResult(initialTcAccNode,partialBuild)
+            | _ -> GetVectorResultBySlot(tcStatesNode,slotOfFile-1,partialBuild)  
         
-            match result with
-            | Some({tcState=tcState; tcGlobals=tcGlobals; tcConfig=tcConfig; tcImports=tcImports; errors=errors},timestamp) ->
-                Some(tcState,tcImports,tcGlobals,tcConfig,errors,timestamp)
-            | _->None
+        match result with
+        | Some (tcAcc,timestamp) -> Some (PartialCheckResults.Create (tcAcc,timestamp))
+        | _ -> None
         
-        member __.TypeCheck() = 
-            let newPartialBuild = IncrementalBuild.Eval "FinalizeTypeCheck" partialBuild
-            partialBuild <- newPartialBuild
-            match GetScalarResult("FinalizeTypeCheck",partialBuild) with
-            | Some((tcState,topAttribs,typedAssembly,tcEnv,tcImports,tcGlobals,tcConfig),_) -> tcState,topAttribs,typedAssembly,tcEnv,tcImports,tcGlobals,tcConfig
-            | None -> failwith "Build was not evaluated."
+    
+    member ib.AreCheckResultsBeforeFileInProjectReady filename = 
+        let slotOfFile = ib.GetSlotOfFileName filename
+        match slotOfFile with
+        | (*first file*) 0 -> IncrementalBuild.IsReady (Target(initialTcAccNode, None)) partialBuild 
+        | _ -> IncrementalBuild.IsReady (Target(tcStatesNode, Some (slotOfFile-1))) partialBuild  
         
-        member __.GetSlotOfFileName(filename:string) =
-            // Get the slot of the given file and force it to build.
-            let CompareFileNames (_,f1,_) (_,f2,_) = 
-                let result = 
-                       System.String.Compare(f1,f2,StringComparison.CurrentCultureIgnoreCase)=0
-                    || System.String.Compare(FileSystem.GetFullPathShim(f1),FileSystem.GetFullPathShim(f2),StringComparison.CurrentCultureIgnoreCase)=0
-                result
-            GetSlotByInput("FileNames",(rangeStartup,filename,false),partialBuild,CompareFileNames)
+    member ib.GetCheckResultsBeforeFileInProject filename = 
+        let slotOfFile = ib.GetSlotOfFileName filename
+        ib.GetTypeCheckResultsBeforeSlotInProject slotOfFile
+
+    member ib.GetCheckResultsAfterFileInProject filename = 
+        let slotOfFile = ib.GetSlotOfFileName filename + 1
+        ib.GetTypeCheckResultsBeforeSlotInProject slotOfFile
+
+    member ib.GetTypeCheckResultsBeforeSlotInProject slotOfFile = 
+        let result = 
+            match slotOfFile with
+            | (*first file*) 0 -> 
+                let build = EvalAndKeepOutput (IncrementalBuild.Eval initialTcAccNode)  
+                GetScalarResult(initialTcAccNode,build)
+            | _ -> 
+                let build = EvalAndKeepOutput (IncrementalBuild.EvalUpTo (tcStatesNode, (slotOfFile-1))) 
+                GetVectorResultBySlot(tcStatesNode,slotOfFile-1,build)  
         
-#if NO_QUICK_SEARCH_HELPERS // only used in QuickSearch prototype
-#else
-        member __.GetSlotsCount () =
-          let expr = GetExprByName(partialBuild,"FileNames")
-          let id = BuildRuleExpr.GetId(expr)
-          match partialBuild.Results.TryFind(id) with
-          | Some(VectorResult vr) -> vr.Size
-          | _ -> failwith "Cannot know sizes"
-      
-        member this.GetParseResultsBySlot slot =
-          let result = GetVectorResultBySlot("ParseTrees",slot,partialBuild)  
-          match result with
-          | Some ((inputOpt,range,fileName), _) -> inputOpt, range, fileName
-          | None -> 
-                let newPartialBuild = IncrementalBuild.Eval "ParseTrees" partialBuild
-                partialBuild <- newPartialBuild
-                this.GetParseResultsBySlot slot
+        match result with
+        | Some (tcAcc,timestamp) -> PartialCheckResults.Create (tcAcc,timestamp)
+        | None -> failwith "Build was not evaluated, expected the results to be ready after 'Eval'."
+
+    member b.GetCheckResultsAfterLastFileInProject () = 
+        b.GetTypeCheckResultsBeforeSlotInProject(b.GetSlotsCount()) 
+
+    member __.GetCheckResultsAndImplementationsForProject() = 
+        let build = EvalAndKeepOutput (IncrementalBuild.Eval finalizedTypeCheckNode)
+        match GetScalarResult(finalizedTypeCheckNode,build) with
+        | Some ((ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt, tcAcc), timestamp) -> 
+            PartialCheckResults.Create (tcAcc,timestamp), ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt
+        | None -> failwith "Build was not evaluated, expcted the results to be ready after 'Eval'."
+        
+    member __.GetLogicalTimeStampForProject() = 
+        let t1 = MaxTimeStampInDependencies stampedFileNamesNode 
+        let t2 = MaxTimeStampInDependencies stampedReferencedAssembliesNode 
+        max t1 t2
+        
+    member __.GetSlotOfFileName(filename:string) =
+        // Get the slot of the given file and force it to build.
+        let CompareFileNames (_,f1,_) (_,f2,_) = 
+            let result = 
+                   System.String.Compare(f1,f2,StringComparison.CurrentCultureIgnoreCase)=0
+                || System.String.Compare(FileSystem.GetFullPathShim(f1),FileSystem.GetFullPathShim(f2),StringComparison.CurrentCultureIgnoreCase)=0
+            result
+        match TryGetSlotByInput(fileNamesNode,(rangeStartup,filename,false),partialBuild,CompareFileNames) with
+        | Some slot -> slot
+        | None -> failwith (sprintf "The file '%s' was not part of the project. Did you call InvalidateConfiguration when the list of files in the project changed?" filename)
         
-#endif // 
+    member __.GetSlotsCount () =
+        let expr = GetExprByName(partialBuild,fileNamesNode)
+        match partialBuild.Results.TryFind (expr.Id) with
+        | Some (VectorResult vr) -> vr.Size
+        | _ -> failwith "Failed to find sizes"
+      
+    member ib.GetParseResultsForFile filename =
+        let slotOfFile = ib.GetSlotOfFileName filename
+        match GetVectorResultBySlot(parseTreesNode,slotOfFile,partialBuild) with
+        | Some (results, _) -> results
+        | None -> 
+            let build = EvalAndKeepOutput (IncrementalBuild.EvalUpTo (parseTreesNode, slotOfFile))  
+            match GetVectorResultBySlot(parseTreesNode,slotOfFile,build) with
+            | Some (results, _) -> results
+            | None -> failwith "Build was not evaluated, expcted the results to be ready after 'Eval'."
+
+    member __.ProjectFileNames  = sourceFiles  |> List.map (fun (_,f,_) -> f)
 
-            //------------------------------------------------------------------------------------
-            // CreateIncrementalBuilder (for background type checking). Note that fsc.fs also
-            // creates an incremental builder used by the command line compiler.
-            //-----------------------------------------------------------------------------------
-        static member CreateBackgroundBuilderForProjectOptions (scriptClosureOptions:LoadClosure option, sourceFiles:string list, commandLineArgs:string list, projectDirectory, useScriptResolutionRules, isIncompleteTypeCheckEnvironment) =
+    /// CreateIncrementalBuilder (for background type checking). Note that fsc.fs also
+    /// creates an incremental builder used by the command line compiler.
+    static member TryCreateBackgroundBuilderForProjectOptions (frameworkTcImportsCache, scriptClosureOptions:LoadClosure option, sourceFiles:string list, commandLineArgs:string list, projectReferences, projectDirectory, useScriptResolutionRules, isIncompleteTypeCheckEnvironment, keepAssemblyContents, keepAllBackgroundResolutions) =
     
-            // Trap and report warnings and errors from creation.
-            use errorScope = new ErrorScope()
+        // Trap and report warnings and errors from creation.
+        use errorScope = new ErrorScope()
+        let builderOpt = 
+            try
 
             // Create the builder.         
             // Share intern'd strings across all lexing/parsing
             let resourceManager = new Lexhelp.LexResourceManager() 
 
             /// Create a type-check configuration
-            let tcConfigB = 
+            let tcConfigB, sourceFilesNew = 
                 let defaultFSharpBinariesDir = Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler.Value
                     
                 // see also fsc.fs:runFromCommandLineToImportingAssemblies(), as there are many similarities to where the PS creates a tcConfigB
                 let tcConfigB = 
                     TcConfigBuilder.CreateNew(defaultFSharpBinariesDir, implicitIncludeDir=projectDirectory, 
-                                              optimizeForMemory=true, isInteractive=false, isInvalidationSupported=true) 
-                // The following uses more memory but means we don't take read-exclusions on the DLLs we reference 
+                                                optimizeForMemory=true, isInteractive=false, isInvalidationSupported=true) 
+                // The following uses more memory but means we don'T take read-exclusions on the DLLs we reference 
                 // Could detect well-known assemblies--ie System.dll--and open them with read-locks 
                 tcConfigB.openBinariesInMemory <- true
                 tcConfigB.resolutionEnvironment 
@@ -1684,39 +1776,33 @@ module internal IncrementalFSharpBuild =
                     let define = if useScriptResolutionRules then "INTERACTIVE" else "COMPILED"
                     define::tcConfigB.conditionalCompilationDefines
 
-                // Apply command-line arguments.
-                try
-                    ParseCompilerOptions
-                        (fun _sourceOrDll -> () )
-                        (Fscopts.GetCoreServiceCompilerOptions tcConfigB)
-                        commandLineArgs             
-                with e -> errorRecovery e range0
+                tcConfigB.projectReferences <- projectReferences
 
+                // Apply command-line arguments and collect more source files if they are in the arguments
+                let sourceFilesNew = 
+                    try
+                        let sourceFilesAcc = ResizeArray(sourceFiles)
+                        let collect name = if not (Filename.isDll name) then sourceFilesAcc.Add name
+                        ParseCompilerOptions (collect, GetCoreServiceCompilerOptions tcConfigB, commandLineArgs)
+                        sourceFilesAcc |> ResizeArray.toList
+                    with e ->
+                        errorRecovery e range0
+                        sourceFiles
 
                 // Never open PDB files for the language service, even if --standalone is specified
                 tcConfigB.openDebugInformationForLaterStaticLinking <- false
         
-                if tcConfigB.framework then
-                    // ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-                    // If you see a failure here running unittests consider whether it it caused by 
-                    // a mismatched version of Microsoft.Build.Framework. Run unittests under a debugger. If
-                    // you see an old version of Microsoft.Build.*.dll getting loaded it it is likely caused by
-                    // using an old ITask or ITaskItem from some tasks assembly.
-                    // I solved this problem by adding a Unittests.config.dll which has a binding redirect to 
-                    // the current (right now, 4.0.0.0) version of the tasks assembly.
-                    // ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-                    System.Diagnostics.Debug.Assert(false, "Language service requires --noframework flag")
-                    tcConfigB.framework<-false
-                tcConfigB 
+                tcConfigB, sourceFilesNew
+
             match scriptClosureOptions with
             | Some closure -> 
                 let dllReferences = 
                     [for reference in tcConfigB.referencedDLLs do
                         // If there's (one or more) resolutions of closure references then yield them all
                         match closure.References  |> List.tryFind (fun (resolved,_)->resolved=reference.Text) with
-                        | Some(resolved,closureReferences) -> 
+                        | Some (resolved,closureReferences) -> 
                             for closureReference in closureReferences do
-                                yield AssemblyReference(closureReference.originalReference.Range, resolved)
+                                yield AssemblyReference(closureReference.originalReference.Range, resolved, None)
                         | None -> yield reference]
                 tcConfigB.referencedDLLs<-[]
                 // Add one by one to remove duplicates
@@ -1724,39 +1810,33 @@ module internal IncrementalFSharpBuild =
                     tcConfigB.AddReferencedAssemblyByPath(dllReference.Range,dllReference.Text)
                 tcConfigB.knownUnresolvedReferences<-closure.UnresolvedReferences
             | None -> ()
+
             // Make sure System.Numerics is referenced for out-of-project .fs files
             if isIncompleteTypeCheckEnvironment then 
                 tcConfigB.addVersionSpecificFrameworkReferences <- true 
 
-            let _, _, assemblyName = tcConfigB.DecideNames sourceFiles
-        
             let tcConfig = TcConfig.Create(tcConfigB,validate=true)
 
             let niceNameGen = NiceNameGenerator()
         
-            // Sink internal errors and warnings.
-            // Q: Why is it ok to ignore these?
-            // These are errors from the background build of files the user doesn't see. Squiggles will appear in the editted file via the foreground parse\typecheck
-            let warnSink (exn:PhasedError) = Trace.PrintLine("IncrementalBuild", (exn.ToString >> sprintf "Background warning: %s"))
-            let errorSink (exn:PhasedError) = Trace.PrintLine("IncrementalBuild", (exn.ToString >> sprintf "Background error: %s"))
-
-            let errorLogger =
-                { new ErrorLogger("CreateIncrementalBuilder") with 
-                      member x.ErrorCount=0
-                      member x.WarnSinkImpl e = warnSink e
-                      member x.ErrorSinkImpl e = errorSink e }
-
+            let outfile, _, assemblyName = tcConfigB.DecideNames sourceFilesNew
+        
             let builder = 
-                new IncrementalBuilder 
-                        (tcConfig, projectDirectory, assemblyName, niceNameGen,
-                        resourceManager, sourceFiles, true, // stay reactive
-                        errorLogger, false // please discard implementation results
-                        )
-                                 
-            Trace.PrintLine("IncrementalBuild", fun () -> sprintf "CreateIncrementalBuilder: %A" builder.Dependencies)
-    #if DEBUG
-            builder.Dependencies|> List.iter (fun df -> System.Diagnostics.Debug.Assert(FileSystem.IsPathRootedShim(df.Filename), sprintf "dependency file was not absolute: '%s'" df.Filename))
-    #endif
-
-            (builder, errorScope.ErrorsAndWarnings)
-
+                new IncrementalBuilder(frameworkTcImportsCache,
+                                        tcConfig, projectDirectory, outfile, assemblyName, niceNameGen,
+                                        resourceManager, sourceFilesNew, projectReferences, ensureReactive=true, 
+                                        keepAssemblyContents=keepAssemblyContents, 
+                                        keepAllBackgroundResolutions=keepAllBackgroundResolutions)
+            Some builder
+            with e -> 
+            errorRecoveryNoRange e
+            None
+
+        builderOpt, errorScope.ErrorsAndWarnings
+
+    static member KeepBuilderAlive (builderOpt: IncrementalBuilder option) = 
+        match builderOpt with 
+        | Some builder -> builder.IncrementUsageCount() 
+        | None -> { new System.IDisposable with member __.Dispose() = () }
+
+    member b.IsBeingKeptAliveApartFromCacheEntry = (referenceCount >= 2)
\ No newline at end of file
diff --git a/src/fsharp/vs/IncrementalBuild.fsi b/src/fsharp/vs/IncrementalBuild.fsi
old mode 100644
new mode 100755
index 104072bbcb8..f78637d67bb
--- a/src/fsharp/vs/IncrementalBuild.fsi
+++ b/src/fsharp/vs/IncrementalBuild.fsi
@@ -1,178 +1,263 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler
 
+open System
 open Microsoft.FSharp.Compiler
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.ErrorLogger
+open Microsoft.FSharp.Compiler.AbstractIL
 open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-open Microsoft.FSharp.Compiler.Build
+open Microsoft.FSharp.Compiler.TcGlobals
+open Microsoft.FSharp.Compiler.CompileOps
+open Microsoft.FSharp.Compiler.NameResolution
 
 
 []
-type internal Severity = 
+type internal FSharpErrorSeverity = 
     | Warning 
     | Error
 
-type internal ErrorInfo = 
-    { FileName:string
-      StartLine:int
-      EndLine:int
-      StartColumn:int
-      EndColumn:int
-      Severity:Severity
-      Message:string
-      Subcategory:string }
-    static member CreateFromExceptionAndAdjustEof : PhasedError * bool * bool * range * (int*int) -> ErrorInfo
-
-// implementation details used by other code in the compiler    
+[]
+type internal FSharpErrorInfo = 
+    member FileName: string
+    member StartLineAlternate:int
+    member EndLineAlternate:int
+    []
+    member StartLine:Line0
+    []
+    member EndLine:Line0
+    member StartColumn:int
+    member EndColumn:int
+    member Severity:FSharpErrorSeverity
+    member Message:string
+    member Subcategory:string
+    member ErrorNumber:int
+    static member internal CreateFromExceptionAndAdjustEof : PhasedError * bool * bool * range * lastPosInFile:(int*int) -> FSharpErrorInfo
+    static member internal CreateFromException : PhasedError * bool * bool * range -> FSharpErrorInfo
+
+// Implementation details used by other code in the compiler    
 []
 type internal ErrorScope = 
-    interface System.IDisposable
+    interface IDisposable
     new : unit -> ErrorScope
-    member ErrorsAndWarnings : ErrorInfo list
+    member ErrorsAndWarnings : FSharpErrorInfo list
     static member Protect<'a> : range -> (unit->'a) -> (string->'a) -> 'a
     static member ProtectWithDefault<'a> : range -> (unit -> 'a) -> 'a -> 'a
     static member ProtectAndDiscard : range -> (unit -> unit) -> unit
 
-/// Generalized Incremental Builder. This is exposed only for unittesting purposes.
-module internal IncrementalBuild =
-  // A build scalar.
-  type Scalar<'T> = interface end
-  /// A build vector.        
-  type Vector<'T> = interface end
-
-  /// A set of build rules and the corresponding, possibly partial, results from building.
-  type PartialBuild 
-
-  /// Declares a vector build input.
-  /// Only required for unit testing.
-  val InputScalar : string -> Scalar<'T>
-
-  /// Declares a scalar build input.
-  /// Only required for unit testing.
-  val InputVector : string -> Vector<'T>
-
-  /// Methods for acting on build Scalars
-  /// Only required for unit testing.
-  module Scalar = 
-      /// Apply a function to one scalar to produce another.
-      val Map : string -> ('I -> 'O) -> Scalar<'I> -> Scalar<'O>
-      /// Apply a function to scalar value to produce a vector.
-      val Multiplex : string -> ('I -> 'O[])->Scalar<'I> -> Vector<'O>
-
-  /// Methods for acting on build Vectors
-  /// Only required for unit testing.
-  module Vector = 
-      /// Maps one vector to another using the given function.    
-      val Map : string -> ('I -> 'O) -> Vector<'I> -> Vector<'O>
-      /// Updates the creates a new vector with the same items but with 
-      /// timestamp specified by the passed-in function.  
-      val Stamp : string -> ('I -> System.DateTime) -> Vector<'I> -> Vector<'I>
-      /// Apply a function to each element of the vector, threading an accumulator argument
-      /// through the computation. Returns intermediate results in a vector.
-      val ScanLeft : string -> ('A -> 'I -> Eventually<'A>) -> Scalar<'A> -> Vector<'I> -> Vector<'A>
-      /// Apply a function to a vector to get a scalar value.
-      val Demultiplex : string -> ('I[] -> 'O)->Vector<'I> -> Scalar<'O>
-      /// Convert a Vector into a Scalar.
-      val AsScalar: string -> Vector<'I> -> Scalar<'I[]> 
-
-  /// Evaluate a build. Only required for unit testing.
-  val Eval : string -> PartialBuild -> PartialBuild
-  /// Do one step in the build. Only required for unit testing.
-  val Step : (string -> PartialBuild -> PartialBuild option)
-  /// Get a scalar vector. Result must be available. Only required for unit testing.
-  val GetScalarResult<'T> : string * PartialBuild -> ('T * System.DateTime) option
-  /// Get a result vector. All results must be available or thrown an exception. Only required for unit testing.
-  val GetVectorResult<'T> : string * PartialBuild -> 'T[]
-  /// Get an element of vector result or None if there were no results. Only required for unit testing.
-  val GetVectorResultBySlot<'T> : string*int*PartialBuild -> ('T * System.DateTime) option
+/// Lookup the global static cache for building the FrameworkTcImports
+type internal FrameworkImportsCache = 
+    new : size: int -> FrameworkImportsCache
+    member Get : TcConfig -> TcGlobals * TcImports * AssemblyResolution list * UnresolvedAssemblyReference list
+    member Clear: unit -> unit
+    member Downsize: unit -> unit
   
-  /// Declare build outputs and bind them to real values.
-  /// Only required for unit testing.
-  type BuildDescriptionScope = 
-       new : unit -> BuildDescriptionScope
-       /// Declare a named scalar output.
-       member DeclareScalarOutput : name:string * output:Scalar<'T> -> unit
-       /// Declare a named vector output.
-       member DeclareVectorOutput : name:string * output:Vector<'T> -> unit
-       /// Set the conrete inputs for this build. 
-       member GetInitialPartialBuild : vectorinputs:(string * int * obj list) list * scalarinputs:(string*obj) list -> PartialBuild
-
-/// Incremental builder for F# parsing and type checking.  
-module internal IncrementalFSharpBuild =
-
-    /// Used for unit testing
+/// Used for unit testing
+module internal IncrementalBuilderEventTesting =
+
   type IBEvent =
         | IBEParsed of string // filename
         | IBETypechecked of string // filename
-        | IBEDeleted
+        | IBECreated
 
-    /// Used for unit testing
   val GetMostRecentIncrementalBuildEvents : int -> IBEvent list
-    /// Used for unit testing
   val GetCurrentIncrementalBuildEventNum : unit -> int
 
+/// An error logger that capture errors, filtering them according to warning levels etc.
+type internal CompilationErrorLogger = 
+    inherit ErrorLogger
+
+    /// Create the error logger
+    new : debugName:string * tcConfig:TcConfig ->  CompilationErrorLogger
+            
+    /// Get the captured errors
+    member GetErrors : unit -> (PhasedError * FSharpErrorSeverity) list
 
-  type FileDependency = {
-        // Name of the file
-        Filename : string
-        // If true, then deletion or creation of this file should trigger an entirely fresh build
-        ExistenceDependency : bool
-        // If true, then changing this file should trigger an incremental rebuild
-        IncrementalBuildDependency : bool
-      }    
-    
-  type IncrementalBuilder = 
-      new : tcConfig : Build.TcConfig * projectDirectory : string * assemblyName : string * niceNameGen : Microsoft.FSharp.Compiler.Ast.NiceNameGenerator *
-            lexResourceManager : Microsoft.FSharp.Compiler.Lexhelp.LexResourceManager * sourceFiles : string list * ensureReactive : bool *
-            errorLogger : ErrorLogger * keepGeneratedTypedAssembly:bool
-        -> IncrementalBuilder
+/// Represents the state in the incremental graph assocaited with checking a file
+type internal PartialCheckResults = 
+    { TcState : TcState 
+      TcImports: TcImports 
+      TcGlobals: TcGlobals 
+      TcConfig: TcConfig 
+      TcEnvAtEnd : TypeChecker.TcEnv 
+      Errors : (PhasedError * FSharpErrorSeverity) list 
+      TcResolutions: TcResolutions list 
+      TcSymbolUses: TcSymbolUses list 
+      TopAttribs: TypeChecker.TopAttribs option
+      TimeStamp: DateTime }
+
+/// Manages an incremental build graph for the build of an F# project
+[]
+type internal IncrementalBuilder = 
 
       /// Increment the usage count on the IncrementalBuilder by 1. Ths initial usage count is 0. The returns an IDisposable which will 
       /// decrement the usage count on the entire build by 1 and dispose if it is no longer used by anyone.
-      member IncrementUsageCount : unit -> System.IDisposable
+      member IncrementUsageCount : unit -> IDisposable
      
       /// Check if the builder is not disposed
       member IsAlive : bool
 
       /// The TcConfig passed in to the builder creation.
-      member TcConfig : Build.TcConfig
+      member TcConfig : TcConfig
+
+      /// The full set of source files including those from options
+      member ProjectFileNames : string list
 
       /// Raised just before a file is type-checked, to invalidate the state of the file in VS and force VS to request a new direct typecheck of the file.
       /// The incremental builder also typechecks the file (error and intellisense results from the backgroud builder are not
       /// used by VS). 
       member BeforeTypeCheckFile : IEvent
 
+      /// Raised just after a file is parsed
+      member FileParsed : IEvent
+
+      /// Raised just after a file is checked
+      member FileChecked : IEvent
+
+      /// Raised just after the whole project has finished type checking. At this point, accessing the
+      /// overall analysis results for the project will be quick.
+      member ProjectChecked : IEvent
+
       /// Raised when a type provider invalidates the build.
       member ImportedCcusInvalidated : IEvent
 
       /// The list of files the build depends on
-      member Dependencies : FileDependency list
+      member Dependencies : string list
 #if EXTENSIONTYPING
       /// Whether there are any 'live' type providers that may need a refresh when a project is Cleaned
       member ThereAreLiveTypeProviders : bool
 #endif
-      /// Perform one step in the F# build.
+      /// Perform one step in the F# build. Return true if the background work is finished.
       member Step : unit -> bool
 
-      /// Ensure that the given file has been typechecked.
-      /// Get the preceding typecheck state of a slot, allow stale results.
-      member GetAntecedentTypeCheckResultsBySlot :
-        int -> (Build.TcState * Build.TcImports * Microsoft.FSharp.Compiler.Env.TcGlobals * Build.TcConfig * (PhasedError * bool) list * System.DateTime) option
-
-      /// Get the final typecheck result. Only allowed when 'generateTypedImplFiles' was set on Create, otherwise the TypedAssembly will have not implementations.
-      member TypeCheck : unit -> Build.TcState * TypeChecker.TopAttribs * Tast.TypedAssembly * TypeChecker.TcEnv * Build.TcImports * Env.TcGlobals * Build.TcConfig
-
-      /// Attempts to find the slot of the given input file name. Throws an exception if it couldn't find it.    
-      member GetSlotOfFileName : string -> int
- 
-#if NO_QUICK_SEARCH_HELPERS // only used in QuickSearch prototype
-#else
-      /// Get the number of slots on the vector of parse results
-      member GetSlotsCount : unit -> int
+      /// Get the preceding typecheck state of a slot, without checking if it is up-to-date w.r.t.
+      /// the timestamps on files and referenced DLLs prior to this one. Return None if the result is not available.
+      /// This is a very quick operation.
+      member GetCheckResultsBeforeFileInProjectIfReady: filename:string -> PartialCheckResults option
+
+      /// Get the preceding typecheck state of a slot, but only if it is up-to-date w.r.t.
+      /// the timestamps on files and referenced DLLs prior to this one. Return None if the result is not available.
+      /// This is a relatively quick operation.
+      member AreCheckResultsBeforeFileInProjectReady: filename:string -> bool
+
+      /// Get the preceding typecheck state of a slot. Compute the entire type check of the project up
+      /// to the necessary point if the result is not available. This may be a long-running operation.
+      ///
+      // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled)
+      member GetCheckResultsBeforeFileInProject : filename:string -> PartialCheckResults 
+
+      /// Get the typecheck state after checking a file. Compute the entire type check of the project up
+      /// to the necessary point if the result is not available. This may be a long-running operation.
+      ///
+      // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled)
+      member GetCheckResultsAfterFileInProject : filename:string -> PartialCheckResults 
+
+      /// Get the typecheck result after the end of the last file. The typecheck of the project is not 'completed'.
+      /// This may be a long-running operation.
+      ///
+      // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled)
+      member GetCheckResultsAfterLastFileInProject : unit -> PartialCheckResults 
+
+      /// Get the final typecheck result. If 'generateTypedImplFiles' was set on Create then the TypedAssembly will contain implementations.
+      /// This may be a long-running operation.
+      ///
+      // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled)
+      member GetCheckResultsAndImplementationsForProject : unit -> PartialCheckResults * IL.ILAssemblyRef * IRawFSharpAssemblyData option * Tast.TypedAssembly option
+
+      /// Get the logical time stamp that is associated with the output of the project if it were gully built immediately
+      member GetLogicalTimeStampForProject: unit -> DateTime
+
       /// Await the untyped parse results for a particular slot in the vector of parse results.
-      member GetParseResultsBySlot : int -> Ast.ParsedInput option * Range.range * string 
-#endif // QUICK_SEARCH
+      ///
+      /// This may be a marginally long-running operation (parses are relatively quick, only one file needs to be parsed)
+      member GetParseResultsForFile : filename:string -> Ast.ParsedInput option * Range.range * string * (PhasedError * FSharpErrorSeverity) list
+
+      static member TryCreateBackgroundBuilderForProjectOptions : FrameworkImportsCache * scriptClosureOptions:LoadClosure option * sourceFiles:string list * commandLineArgs:string list * projectReferences: IProjectReference list * projectDirectory:string * useScriptResolutionRules:bool * isIncompleteTypeCheckEnvironment : bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool -> IncrementalBuilder option * FSharpErrorInfo list 
+
+      static member KeepBuilderAlive : IncrementalBuilder option -> IDisposable
+      member IsBeingKeptAliveApartFromCacheEntry : bool
+
+/// Generalized Incremental Builder. This is exposed only for unittesting purposes.
+module internal IncrementalBuild =
+    type INode = 
+        abstract Name: string
+
+    type ScalarBuildRule 
+    type VectorBuildRule 
+
+    []
+    type IScalar = 
+        inherit INode
+        abstract Expr: ScalarBuildRule
+
+    []
+    type IVector =
+        inherit INode
+        abstract Expr: VectorBuildRule
+            
+    type Scalar<'T> =  interface inherit IScalar  end
+
+    type Vector<'T> = interface inherit IVector end
+
+    /// A set of build rules and the corresponding, possibly partial, results from building.
+    type PartialBuild 
+
+    /// Declares a vector build input.
+    /// Only required for unit testing.
+    val InputScalar : string -> Scalar<'T>
+
+    /// Declares a scalar build input.
+    /// Only required for unit testing.
+    val InputVector : string -> Vector<'T>
+
+    /// Methods for acting on build Vectors
+    /// Only required for unit testing.
+    module Vector = 
+        /// Maps one vector to another using the given function.    
+        val Map : string -> ('I -> 'O) -> Vector<'I> -> Vector<'O>
+        /// Updates the creates a new vector with the same items but with 
+        /// timestamp specified by the passed-in function.  
+        val Stamp : string -> ('I -> System.DateTime) -> Vector<'I> -> Vector<'I>
+        /// Apply a function to each element of the vector, threading an accumulator argument
+        /// through the computation. Returns intermediate results in a vector.
+        val ScanLeft : string -> ('A -> 'I -> Eventually<'A>) -> Scalar<'A> -> Vector<'I> -> Vector<'A>
+        /// Apply a function to a vector to get a scalar value.
+        val Demultiplex : string -> ('I[] -> 'O)->Vector<'I> -> Scalar<'O>
+        /// Convert a Vector into a Scalar.
+        val AsScalar: string -> Vector<'I> -> Scalar<'I[]> 
+
+    type Target = Target of INode * int  option
+
+    /// Evaluate a build. Only required for unit testing.
+    val Eval : INode -> PartialBuild -> PartialBuild
+
+    /// Evaluate a build for a vector up to a limit. Only required for unit testing.
+    val EvalUpTo : INode * int -> PartialBuild -> PartialBuild
+
+    /// Do one step in the build. Only required for unit testing.
+    val Step : Target -> PartialBuild -> PartialBuild option
+    /// Get a scalar vector. Result must be available. Only required for unit testing.
+    val GetScalarResult : Scalar<'T> * PartialBuild -> ('T * System.DateTime) option
+    /// Get a result vector. All results must be available or thrown an exception. Only required for unit testing.
+    val GetVectorResult : Vector<'T> * PartialBuild -> 'T[]
+    /// Get an element of vector result or None if there were no results. Only required for unit testing.
+    val GetVectorResultBySlot<'T> : Vector<'T> * int * PartialBuild -> ('T * System.DateTime) option
+
+    []
+    type BuildInput =
+        /// Declare a named scalar output.
+        static member ScalarInput: node:Scalar<'T> * value: 'T -> BuildInput
+        static member VectorInput: node:Vector<'T> * value: 'T list -> BuildInput
+
+    /// Declare build outputs and bind them to real values.
+    /// Only required for unit testing.
+    type BuildDescriptionScope = 
+        new : unit -> BuildDescriptionScope
+        /// Declare a named scalar output.
+        member DeclareScalarOutput : output:Scalar<'T> -> unit
+        /// Declare a named vector output.
+        member DeclareVectorOutput : output:Vector<'T> -> unit
+        /// Set the conrete inputs for this build. 
+        member GetInitialPartialBuild : vectorinputs: BuildInput list -> PartialBuild
 
-      static member CreateBackgroundBuilderForProjectOptions : scriptClosureOptions:LoadClosure option * sourceFiles:string list * commandLineArgs:string list * projectDirectory:string * useScriptResolutionRules:bool * isIncompleteTypeCheckEnvironment : bool -> IncrementalBuilder * ErrorInfo list
diff --git a/src/fsharp/vs/Reactor.fs b/src/fsharp/vs/Reactor.fs
old mode 100644
new mode 100755
index 39046d52e49..eea697d3e0e
--- a/src/fsharp/vs/Reactor.fs
+++ b/src/fsharp/vs/Reactor.fs
@@ -1,247 +1,151 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 open System
+open System.Diagnostics
+open System.Globalization
+open System.Threading
 open Microsoft.FSharp.Control
 open Microsoft.FSharp.Compiler.Lib
 
-module internal Reactor =
-
-    type BuildStepper = (unit -> (*keep building*)bool)
-    type Operation = unit -> unit
-
-    type ResultOrException<'TResult> =
-        | Result of 'TResult
-        | Exception of System.Exception
-
-    []
-    type ReactorCommands = 
-        /// Kick off a build.
-        | StartBuild of BuildStepper
-        /// Kick off the most recently known build.
-        | StartRecentBuild                                            
-        /// Do a bit of work on the given build.
-        | Step                                                        
-        /// Do some work synchronized in the mailbox.
-        | SyncOp of Operation * AsyncReplyChannel>  
-        /// Do some work not synchronized in the mailbox.
-        | AsyncOp of Operation 
-        /// Stop building after finishing the current unit of work.
-        | StopBuild of AsyncReplyChannel>              
-        /// Finish building.
-        | FinishBuild of AsyncReplyChannel>            
-        override rc.ToString() = 
-            match rc with
-            | StartBuild _->"StartBuild" 
-            | StartRecentBuild -> "StartRecentBuild"
-            | Step->"Step"
-            | SyncOp _->"SyncOp" 
-            | AsyncOp _->"AsyncOp" 
-            | StopBuild _->"StopBuild"
-            | FinishBuild _->"FinishBuild"
+/// Represents the capability to schedule work in the compiler service operations queue for the compilation thread
+type internal IReactorOperations = 
+    abstract EnqueueAndAwaitOpAsync : string * (CancellationToken -> 'T) -> Async<'T>
+    abstract EnqueueOp: string * (unit -> unit) -> unit
+
+[]
+type internal ReactorCommands = 
+    /// Kick off a build.
+    | SetBackgroundOp of (unit -> bool)  option
+    /// Do some work not synchronized in the mailbox.
+    | Op of string * CancellationToken * (unit -> unit) * (unit -> unit)
+    /// Finish the background building
+    | WaitForBackgroundOpCompletion of AsyncReplyChannel            
+    /// Finish all the queued ops
+    | CompleteAllQueuedOps of AsyncReplyChannel            
         
-    []
-    type ReactorState = 
-        | Idling
-        | ActivelyBuilding of BuildStepper
-        | FinishingBuild of BuildStepper * AsyncReplyChannel>
-        /// An exception was seen in a prior state. The exception is preserved so it can be thrown back to the calling thread.
-        | BackgroundError of Exception                                         
-        override rs.ToString() = 
-            match rs with 
-            | Idling->"Idling" 
-            | ActivelyBuilding _->"ActivelyBuilding"
-            | FinishingBuild _->"FinishingBuild" 
-            | BackgroundError _->"BackgroundError"
-
-     []
-     /// There is one global Reactor for the entire language service, no matter how many projects or files
-     /// are open. 
-     type Reactor() = 
-        // We need to store the culture for the VS thread that is executing now,
-        // so that when the reactor picks up a thread from the threadpool we can set the culture
-        let culture = new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentUICulture.LCID)
-
-        let mutable recentBuild : BuildStepper option = None
-
-        /// Mailbox dispatch function.                
-        let Dispatch (inbox: MailboxProcessor<_>) =
-        
-            // Post an exception back to FinishingBuild channel.
-            let UnexpectedFinishingBuild commandName (channel: AsyncReplyChannel<_>) = 
-                channel.Reply(Exception (new Exception(sprintf "[Bug]Did not expect %s during FinishingBuild." commandName)))        
-                
-            // Kick off a build.
-            let HandleStartBuild build state = 
-                inbox.Post Step
-                match state with 
-                | ActivelyBuilding(_) 
-                | Idling -> ActivelyBuilding build 
-                | FinishingBuild(_) -> state
-                | BackgroundError(_)-> state
-                
-            // Kick off a build of the most recently known build if there is one.
-            let HandleStartRecentBuild = function
-                | Idling -> 
-                    match recentBuild with
-                    | None -> Idling
-                    | Some mostRecent -> HandleStartBuild mostRecent Idling
-                | state -> state
-                
-            // Stop the build.
-            let HandleStopBuild (channel:AsyncReplyChannel<_>) state = 
-                recentBuild<-None
-                match state with 
-                  | ActivelyBuilding(_) 
-                  | Idling -> channel.Reply(Result ())
-                  | FinishingBuild(_, channel) -> UnexpectedFinishingBuild "StopBuild" channel
-                  | BackgroundError e-> channel.Reply(Exception e)
-                Idling
-                
-            // Do the given operation
-            let HandleAsyncOp op state = 
-                try 
-                    op()
-                    state                            
-                with 
-                | e->
-                    System.Diagnostics.Debug.Assert(false, sprintf "Bug in target of HandleAsyncOp: %A: %s\nThe most recent error reported to an error scope: %+A\n" (e.GetType()) e.Message e.StackTrace)
-                    state
-                
-            // Do the given operation and reply
-            let HandleSyncOp op (channel:AsyncReplyChannel<_>) state = 
-                match state with
-                  | ActivelyBuilding(_) 
-                  | FinishingBuild(_)  
-                  | Idling -> 
-                        try 
-                            op()
-                            channel.Reply(Result ())
-                            state                            
-                        with 
-                        | e->
-                            channel.Reply(Exception e)
-                            state
-                  | BackgroundError(e)->
-                        channel.Reply(Exception e)
-                        Idling
-                
-            // Do a step in the build.
-            let HandleStep state = 
-                match state with
-                | FinishingBuild(build,_) 
-                | ActivelyBuilding(build) -> 
-                    recentBuild <- Some(build)
-
-                    // Gather any required reply channel.
-                    let replyChannel = 
-                        match state with 
-                        | Idling | ActivelyBuilding(_) | BackgroundError(_)->None
-                        | FinishingBuild(_,channel)->Some(channel)
-                    
-                    try
-                        if build() then
-                            // More work
-                            inbox.Post Step
-                            state
-                        else
-                            // Work is done. Reply if there is a channel for it.
-                            match replyChannel with
-                             | Some(replyChannel)-> replyChannel.Reply(Result ())    
-                             | None->()
-
-                            // Switch to idle state.
-                            Idling
-                    with e->
-                        System.Diagnostics.Debug.Assert(false, sprintf "[Bug]Failure in HandleStep: %s" (e.ToString()))
-                        match replyChannel with
-                        | Some(replyChannel)->
-                            replyChannel.Reply(Exception e)
-                            Idling
-                        | None->BackgroundError e                 
-                | Idling -> Idling
-                | BackgroundError _ -> state
-                        
-            
-            let HandleFinishBuilding (channel:AsyncReplyChannel<_>) = function
-                | ActivelyBuilding(build)->
-                    inbox.Post Step
-                    FinishingBuild(build,channel)
-                | FinishingBuild(_, channelOld)->
-                    // Don't expect to get here. If this is required then we need to keep all channels and post back to each
-                    // when the build finishes. For now, throw an exception back.                    
-                    UnexpectedFinishingBuild "FinishBuilding" channel
-                    UnexpectedFinishingBuild "FinishBuilding" channelOld
-                    Idling
-                | Idling->
-                    channel.Reply(Result ())
-                    Idling
-                | BackgroundError e->
-                    // We have a waiting channel to post our exception to.
-                    channel.Reply(Exception e)
-                    Idling
-                    
+[]
+/// There is one global Reactor for the entire language service, no matter how many projects or files
+/// are open. 
+type Reactor() = 
+    static let pauseBeforeBackgroundWorkDefault = GetEnvInteger "FCS_PauseBeforeBackgroundWorkMilliseconds" 1000
+    static let theReactor = Reactor()
+    let mutable pauseBeforeBackgroundWork = pauseBeforeBackgroundWorkDefault
+
+    // We need to store the culture for the VS thread that is executing now,
+    // so that when the reactor picks up a thread from the threadpool we can set the culture
+    let culture = new CultureInfo(Thread.CurrentThread.CurrentUICulture.LCID)
+
+    /// Mailbox dispatch function.                
+    let builder = 
+        MailboxProcessor<_>.Start <| fun inbox ->        
                                              
-            // Async workflow which receives messages and dispatches to worker functions.
-            let rec Loop (state: ReactorState) = 
-                async { let! msg = inbox.Receive()
-                        System.Threading.Thread.CurrentThread.CurrentUICulture <- culture
-
-                        match msg with
-                        | StartBuild build -> return! Loop(HandleStartBuild build state)
-                        | StartRecentBuild -> return! Loop(HandleStartRecentBuild state)
-                        | Step -> return! Loop(HandleStep state)
-                        | SyncOp(op,channel) -> return! Loop(HandleSyncOp op channel state)
-                        | AsyncOp(op) -> return! Loop(HandleAsyncOp op state)
-                        | StopBuild(channel) -> return! Loop(HandleStopBuild channel state)
-                        | FinishBuild(channel) -> return! Loop(HandleFinishBuilding channel state)
-                      }
-            Loop Idling
+        // Async workflow which receives messages and dispatches to worker functions.
+        let rec loop (bgOpOpt, onComplete, bg) = 
+            async { Trace.TraceInformation("Reactor: receiving..., remaining {0}, mem {1}, gc2 {2}", inbox.CurrentQueueLength, GC.GetTotalMemory(false)/1000000L, GC.CollectionCount(2))
+                        
+                    // Messages always have priority over the background op.
+                    let! msg = 
+                        async { match bgOpOpt, onComplete with 
+                                | None, None -> 
+                                    let! msg = inbox.Receive() 
+                                    return Some msg 
+                                | _, Some _ -> 
+                                    return! inbox.TryReceive(0) 
+                                | Some _, _ -> 
+                                    let timeout = (if bg then 0 else pauseBeforeBackgroundWork)
+                                    return! inbox.TryReceive(timeout) }
+                    Thread.CurrentThread.CurrentUICulture <- culture
+
+                    match msg with
+                    | Some (SetBackgroundOp bgOpOpt) -> 
+                        Trace.TraceInformation("Reactor: --> set background op, remaining {0}, mem {1}, gc2 {2}", inbox.CurrentQueueLength, GC.GetTotalMemory(false)/1000000L, GC.CollectionCount(2))
+                        return! loop (bgOpOpt, onComplete, false)
+                    | Some (Op (desc, ct, op, ccont)) -> 
+                        if ct.IsCancellationRequested then ccont() else
+                        Trace.TraceInformation("Reactor: --> {0}, remaining {1}, mem {2}, gc2 {3}", desc, inbox.CurrentQueueLength, GC.GetTotalMemory(false)/1000000L, GC.CollectionCount(2))
+                        let time = System.DateTime.Now
+                        op()
+                        let span = System.DateTime.Now - time
+                        //if span.TotalMilliseconds > 100.0 then 
+                        Trace.TraceInformation("Reactor: <-- {0}, remaining {1}, took {2}ms", desc, inbox.CurrentQueueLength, span.TotalMilliseconds)
+                        return! loop (bgOpOpt, onComplete, false)
+                    | Some (WaitForBackgroundOpCompletion channel) -> 
+                        Trace.TraceInformation("Reactor: --> wait for background (debug only), remaining {0}, mem {1}, gc2 {2}", inbox.CurrentQueueLength, GC.GetTotalMemory(false)/1000000L, GC.CollectionCount(2))
+                        match bgOpOpt with 
+                        | None -> ()
+                        | Some bgOp -> while bgOp() do ()
+                        channel.Reply(())
+                        return! loop (None, onComplete, false)
+                    | Some (CompleteAllQueuedOps channel) -> 
+                        Trace.TraceInformation("Reactor: --> stop background work and complete all queued ops, remaining {0}, mem {1}, gc2 {2}", inbox.CurrentQueueLength, GC.GetTotalMemory(false)/1000000L, GC.CollectionCount(2))
+                        return! loop (None, Some channel, false)
+                    | None -> 
+                        match bgOpOpt, onComplete with 
+                        | _, Some onComplete -> onComplete.Reply()
+                        | Some bgOp, None -> 
+                            Trace.TraceInformation("Reactor: --> background step, remaining {0}, mem {1}, gc2 {2}", inbox.CurrentQueueLength, GC.GetTotalMemory(false)/1000000L, GC.CollectionCount(2))
+                            let time = System.DateTime.Now
+                            let res = bgOp()
+                            let span = System.DateTime.Now - time
+                            //if span.TotalMilliseconds > 100.0 then 
+                            Trace.TraceInformation("Reactor: <-- background step, remaining {0}, took {1}ms", inbox.CurrentQueueLength, span.TotalMilliseconds)
+                            return! loop ((if res then Some bgOp else None), onComplete, true)
+                        | None, None -> failwith "unreachable, should have used inbox.Receive"
+                    }
+        async { 
+            while true do 
+                try 
+                    do! loop (None, None, false)
+                with e -> 
+                    Debug.Assert(false,String.Format("unexpected failure in reactor loop {0}, restarting", e))
+        }
             
-        let builder = MailboxProcessor<_>.Start(Dispatch)
-
-        // [Foreground Mailbox Accessors] -----------------------------------------------------------                
-        member r.StartBuilding(build) = builder.Post(StartBuild build)
-        member r.StartBuildingRecent() = builder.Post(StartRecentBuild)
-        member r.StopBuilding() = 
-            match builder.PostAndReply(fun replyChannel->StopBuild(replyChannel)) with
-            | Result result->result
-            | Exception excn->
-                raise excn
-
-        member r.SyncOp(op) =
-            match builder.PostAndReply(fun replyChannel->SyncOp(op,replyChannel)) with
-            | Result result->result
-            | Exception excn->
-                raise excn
-
-        member r.AsyncOp(op) =
-            builder.Post(AsyncOp(op)) 
-
-        // This is for testing only
-        member r.WaitForBackgroundCompile() =
-            match builder.PostAndReply(fun replyChannel->FinishBuild(replyChannel)) with
-            | Result result->result
-            | Exception excn->raise excn
-
-        member r.RunSyncOp f = 
-            let result = ref None
-            r.SyncOp (fun () -> result := Some(f()))
-            Option.get !result
-
-        member r.RunAsyncOp f = 
+
+    // [Foreground Mailbox Accessors] -----------------------------------------------------------                
+    member r.SetBackgroundOp(build) = 
+        Trace.TraceInformation("Reactor: enqueue start background, length {0}", builder.CurrentQueueLength)
+        builder.Post(SetBackgroundOp build)
+
+    member r.EnqueueOp(desc, op) =
+        Trace.TraceInformation("Reactor: enqueue {0}, length {1}", desc, builder.CurrentQueueLength)
+        builder.Post(Op(desc, CancellationToken.None, op, (fun () -> ()))) 
+
+    member r.EnqueueOpPrim(desc, ct, op, ccont) =
+        Trace.TraceInformation("Reactor: enqueue {0}, length {1}", desc, builder.CurrentQueueLength)
+        builder.Post(Op(desc, ct, op, ccont)) 
+
+    member r.CurrentQueueLength =
+        builder.CurrentQueueLength
+
+    // This is for testing only
+    member r.WaitForBackgroundOpCompletion() =
+        Trace.TraceInformation("Reactor: enqueue wait for background, length {0}", builder.CurrentQueueLength)
+        builder.PostAndReply WaitForBackgroundOpCompletion 
+
+    // This is for testing only
+    member r.CompleteAllQueuedOps() =
+        Trace.TraceInformation("Reactor: enqueue wait for all ops, length {0}", builder.CurrentQueueLength)
+        builder.PostAndReply CompleteAllQueuedOps
+
+    member r.EnqueueAndAwaitOpAsync (desc, f) = 
+        async { 
+            let! ct = Async.CancellationToken
             let resultCell = AsyncUtil.AsyncResultCell<_>()
-            r.AsyncOp(
-                fun () ->
+            r.EnqueueOpPrim(desc, ct,
+                op=(fun () ->
                     let result =
                         try
-                            f () |> AsyncUtil.AsyncOk
+                            f ct |> AsyncUtil.AsyncOk
                         with
                         |   e -> e |> AsyncUtil.AsyncException
-                    resultCell.RegisterResult(result)
+                    resultCell.RegisterResult(result)),
+                    ccont=(fun () -> resultCell.RegisterResult (AsyncUtil.AsyncCanceled(OperationCanceledException())) )
+
             )
-            resultCell.AsyncResult
+            return! resultCell.AsyncResult 
+        }
+    member __.PauseBeforeBackgroundWork with get() = pauseBeforeBackgroundWork and set v = pauseBeforeBackgroundWork <- v
 
-    let mutable theReactor = Reactor()
-    let Reactor() = theReactor
+    static member Singleton = theReactor 
 
diff --git a/src/fsharp/vs/Reactor.fsi b/src/fsharp/vs/Reactor.fsi
old mode 100644
new mode 100755
index 341cbc38758..2732113489f
--- a/src/fsharp/vs/Reactor.fsi
+++ b/src/fsharp/vs/Reactor.fsi
@@ -1,42 +1,49 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
-/// Reactor is intended to long-running, but interruptible operations to be interleaved
-/// with one-off synchronous or asynchronous operations. 
+open System.Threading
+
+/// Represents the capability to schedule work in the compiler service operations queue for the compilation thread
+type internal IReactorOperations = 
+
+    /// Put the operation in thq queue, and return an async handle to its result. 
+    abstract EnqueueAndAwaitOpAsync : description: string * action: (CancellationToken -> 'T) -> Async<'T>
+
+    /// Enqueue an operation and return immediately. 
+    abstract EnqueueOp: description: string * action: (unit -> unit) -> unit
+
+/// Reactor is intended for long-running but interruptible operations, interleaved
+/// with one-off asynchronous operations. 
 ///
 /// It is used to guard the global compiler state while maintaining  responsiveness on 
 /// the UI thread.
-module internal Reactor = 
-    
-    /// Does one unit of work and returns true if there is more work to do.
-    type BuildStepper = unit -> (* keep building *) bool
-    
-    /// A synchronous or asynchronous operation to perform
-    type Operation = unit -> unit
-
-    /// Reactor operations
-    []
-    type Reactor =
-        /// Start building. The build function will return true if there is more work to do.
-        member StartBuilding : build:BuildStepper -> unit
-        /// Start building the most recently building thing.
-        member StartBuildingRecent : unit -> unit
-        /// Halt the current build.
-        member StopBuilding : unit -> unit
-        /// Block until the current build is complete.
-        member WaitForBackgroundCompile : unit -> unit
-        /// Block while performing and operation. Restart the most recent build afterward.
-        member SyncOp : op:Operation -> unit
-        /// Start an operation and return immediately. Restart the most recent build after the operation is complete.
-        member AsyncOp : op:Operation -> unit
-    
-        /// Block while performing and operation. Restart the most recent build afterward.
-        member RunSyncOp : (unit -> 'T) -> 'T
-
-        /// Start an operation and return an async handle to its result. 
-        member RunAsyncOp : (unit -> 'T) -> Async<'T>
+/// Reactor operations
+[]
+type internal Reactor =
+
+    /// Set the background building function, which is called repeatedly
+    /// until it returns 'false'.  If None then no background operation is used.
+    member SetBackgroundOp : build:(unit -> bool) option -> unit
+
+    /// Block until the current implicit background build is complete. Unit test only.
+    member WaitForBackgroundOpCompletion : unit -> unit
+
+    /// Block until all operations in the queue are complete
+    member CompleteAllQueuedOps : unit -> unit
+
+    /// Enqueue an uncancellable operation and return immediately. 
+    member EnqueueOp : description: string * op:(unit -> unit) -> unit
+
+    /// For debug purposes
+    member CurrentQueueLength : int
+
+    /// Put the operation in the queue, and return an async handle to its result. 
+    member EnqueueAndAwaitOpAsync : description: string * (CancellationToken -> 'T) -> Async<'T>
+
+    /// The timespan in milliseconds before background work begins after the operations queue is empty
+    member PauseBeforeBackgroundWork : int with get, set
 
     /// Get the reactor for FSharp.Compiler.dll
-    val Reactor : unit -> Reactor
+    static member Singleton : Reactor
   
diff --git a/src/fsharp/vs/ServiceConstants.fs b/src/fsharp/vs/ServiceConstants.fs
index 5c4d5440018..de1df292506 100644
--- a/src/fsharp/vs/ServiceConstants.fs
+++ b/src/fsharp/vs/ServiceConstants.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
diff --git a/src/fsharp/vs/ServiceDeclarations.fs b/src/fsharp/vs/ServiceDeclarations.fs
index b8641654d82..79d519341a2 100644
--- a/src/fsharp/vs/ServiceDeclarations.fs
+++ b/src/fsharp/vs/ServiceDeclarations.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 //----------------------------------------------------------------------------
 // Open up the compiler as an incremental service for parsing,
@@ -7,40 +7,34 @@
 
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
-open Internal.Utilities
 open System
 open System.IO
 open System.Text
 open System.Collections.Generic
- 
 open Microsoft.FSharp.Core.Printf
+open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.AbstractIL.IL 
 open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library  
-open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
 open Microsoft.FSharp.Compiler.PrettyNaming
-
-open Microsoft.FSharp.Compiler.Env 
-open Microsoft.FSharp.Compiler.Parser
+open Microsoft.FSharp.Compiler.TcGlobals 
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.Ast
 open Microsoft.FSharp.Compiler.ErrorLogger
-open Microsoft.FSharp.Compiler.Build
 open Microsoft.FSharp.Compiler.Tast
 open Microsoft.FSharp.Compiler.Tastops
 open Microsoft.FSharp.Compiler.Lib
 open Microsoft.FSharp.Compiler.Layout
 open Microsoft.FSharp.Compiler.Infos
-open Microsoft.FSharp.Compiler.Nameres
-open ItemDescriptionIcons 
+open Microsoft.FSharp.Compiler.NameResolution
+open Microsoft.FSharp.Compiler.SourceCodeServices.ItemDescriptionIcons 
 
 module EnvMisc2 =
-    let GetEnvInteger e dflt = match System.Environment.GetEnvironmentVariable(e) with null -> dflt | t -> try int t with _ -> dflt
-    let maxMembers   = GetEnvInteger "mFSharp_MaxMembersInQuickInfo" 10
+    let maxMembers   = GetEnvInteger "FCS_MaxMembersInQuickInfo" 10
 
     /// dataTipSpinWaitTime limits how long we block the UI thread while a tooltip pops up next to a selected item in an IntelliSense completion list.
     /// This time appears to be somewhat amortized by the time it takes the VS completion UI to actually bring up the tooltip after selecting an item in the first place.
-    let dataTipSpinWaitTime = GetEnvInteger "mFSharp_DataTipSpinWaitTime" 300
+    let dataTipSpinWaitTime = GetEnvInteger "FCS_ToolTipSpinWaitTime" 300
 
 //----------------------------------------------------------------------------
 // Display characteristics of typechecking items
@@ -52,43 +46,33 @@ type IPartialEqualityComparer<'T> =
     /// Can the specified object be tested for equality?
     abstract InEqualityRelation : 'T -> bool
 
-type iDeclarationSet = int
-
 /// Describe a comment as either a block of text or a file+signature reference into an intellidoc file.
-type internal XmlComment =
-    | XmlCommentNone
-    | XmlCommentText of string
-    | XmlCommentSignature of (*File and Signature*) string * string
+[]
+type FSharpXmlDoc =
+    | None
+    | Text of string
+    | XmlDocFileSignature of (*File and Signature*) string * string
 
 /// A single data tip display element
-type internal DataTipElement = 
-    | DataTipElementNone
+[]
+type FSharpToolTipElement = 
+    | None
     /// A single type, method, etc with comment.
-    | DataTipElement of (* text *) string * XmlComment
-    /// A parameter of a method.
-    | DataTipElementParameter of string * XmlComment * string
+    | Single of (* text *) string * FSharpXmlDoc
+    /// A single parameter, with the parameter name.
+    | SingleParameter of (* text *) string * FSharpXmlDoc * string
     /// For example, a method overload group.
-    | DataTipElementGroup of ((* text *) string * XmlComment) list
+    | Group of ((* text *) string * FSharpXmlDoc) list
     /// An error occurred formatting this element
-    | DataTipElementCompositionError of string
+    | CompositionError of string
 
 /// Information for building a data tip box.
 //
 // Note: this type does not hold any handles to compiler data structure.
-type internal DataTipText = 
+type FSharpToolTipText = 
     /// A list of data tip elements to display.
-    | DataTipText of DataTipElement list  
+    | FSharpToolTipText of FSharpToolTipElement list  
 
-/// Test hooks for tweaking internals
-module internal TestHooks = 
-    /// Function used to construct member info text in data tips.
-    let FormatOverloadsToList: (DataTipElement->DataTipElement) option ref = ref None
-
-    let FormatOverloadsToListScope(hook:(DataTipElement->DataTipElement)) : System.IDisposable = 
-        FormatOverloadsToList := Some(hook)
-        {new IDisposable with
-            member d.Dispose() = 
-                FormatOverloadsToList := None}     
 
 module internal ItemDescriptionsImpl = 
 
@@ -97,122 +81,139 @@ module internal ItemDescriptionsImpl =
         isFunTy g tau 
 
      
-    let OutputFullName isDeclInfo ppF fnF os r = 
+    let OutputFullName isDecl ppF fnF os r = 
       // Only display full names in quick info, not declaration text
-      if not isDeclInfo then 
+      if not isDecl then 
         match ppF r with 
         | None -> ()
         | Some _ -> 
             bprintf os "\n\n%s: %s" (FSComp.SR.typeInfoFullName()) (fnF r)
           
-    // Format the supertypes and other useful information about a type to a buffer
-    let OutputUsefulTypeInfo _isDeclInfo (_infoReader:InfoReader) _m _denv _os _ty = ()
-#if DISABLED
-        if false then 
-          ErrorScope.ProtectAndDiscard m (fun () -> 
-            let g = infoReader.g
-            let amap = infoReader.amap
-            let supertypes = 
-                let supertypes = AllSuperTypesOfType g amap m AllowMultiIntfInstantiations.Yes ty
-                let supertypes = supertypes |> List.filter (AccessibilityLogic.IsTypeAccessible g AccessibleFromSomewhere) 
-                let supertypes = supertypes |> List.filter (typeEquiv g g.obj_ty >> not) 
-                let selfs,supertypes = supertypes |> List.partition (typeEquiv g ty) 
-                let supertypesC,supertypesI = supertypes |> List.partition (isInterfaceTy g)
-                let supertypes = selfs @ supertypesC @ supertypesI
-                supertypes
-            let supertypeLs,_ = NicePrint.layoutPrettifiedTypes denv supertypes 
-            // Suppress printing supertypes for enums, delegates, exceptions and attributes
-            if supertypes.Length > 1 // more then self
-                && not (isEnumTy g ty) 
-                && not (isUnionTy g ty) 
-                && not (isRecdTy g ty) 
-                && not (isDelegateTy g ty) 
-                && not (ExistsHeadTypeInEntireHierarchy g amap m ty g.exn_tcr) 
-                && not (ExistsHeadTypeInEntireHierarchy g amap m ty g.tcref_System_Attribute) then 
-                bprintf os "\n\n";
-                List.zip supertypes supertypeLs |> List.iter (fun (superty,supertyL) -> 
-                    if typeEquiv g superty ty then bprintf os "  %s: %a\n" (FSComp.SR.typeInfoType()) bufferL supertyL
-                    elif isClassTy g superty || isInterfaceTy g ty then bprintf os "  %s: %a\n" (FSComp.SR.typeInfoInherits()) bufferL supertyL
-                    else bprintf os "  %s: %a\n" (FSComp.SR.typeInfoImplements()) bufferL supertyL))
-#endif
-           
-    
-    let rangeOfPropInfo (pinfo:PropInfo) =
+    let rangeOfValRef preferFlag (vref:ValRef) =
+        match preferFlag with 
+        | None -> vref.Range 
+        | Some false -> vref.DefinitionRange 
+        | Some true -> vref.SigRange
+
+    let rangeOfEntityRef preferFlag (eref:EntityRef) =
+        match preferFlag with 
+        | None -> eref.Range 
+        | Some false -> eref.DefinitionRange 
+        | Some true -> eref.SigRange
+
+   
+    let rangeOfPropInfo preferFlag (pinfo:PropInfo) =
         match pinfo with
 #if EXTENSIONTYPING 
         |   ProvidedProp(_,pi,_) -> definitionLocationOfProvidedItem pi
 #endif
-        |   _ -> pinfo.ArbitraryValRef |> Option.map (fun v -> v.Range)
+        |   _ -> pinfo.ArbitraryValRef |> Option.map (rangeOfValRef preferFlag)
 
-    let rangeOfMethInfo (g:TcGlobals) (minfo:MethInfo) = 
+    let rangeOfMethInfo (g:TcGlobals) preferFlag (minfo:MethInfo) = 
         match minfo with
 #if EXTENSIONTYPING 
         |   ProvidedMeth(_,mi,_,_) -> definitionLocationOfProvidedItem mi
 #endif
-        |   DefaultStructCtor(_, AppTy g (tcref, _)) -> Some(tcref.Range)
-        |   _ -> minfo.ArbitraryValRef |> Option.map (fun v -> v.Range)
+        |   DefaultStructCtor(_, AppTy g (tcref, _)) -> Some(rangeOfEntityRef preferFlag tcref)
+        |   _ -> minfo.ArbitraryValRef |> Option.map (rangeOfValRef preferFlag)
 
-    let rangeOfEventInfo (einfo:EventInfo) = 
+    let rangeOfEventInfo preferFlag (einfo:EventInfo) = 
         match einfo with
 #if EXTENSIONTYPING 
         | ProvidedEvent (_,ei,_) -> definitionLocationOfProvidedItem ei
 #endif
-        | _ -> einfo.ArbitraryValRef |> Option.map (fun v -> v.Range)
+        | _ -> einfo.ArbitraryValRef |> Option.map (rangeOfValRef preferFlag)
       
-    let rec rangeOfItem (g:TcGlobals) isDeclInfo d = 
+    let rangeOfUnionCaseInfo preferFlag (ucinfo:UnionCaseInfo) =      
+        match preferFlag with 
+        | None -> ucinfo.UnionCase.Range 
+        | Some false -> ucinfo.UnionCase.DefinitionRange 
+        | Some true -> ucinfo.UnionCase.SigRange
+
+    let rangeOfRecdFieldInfo preferFlag (rfinfo:RecdFieldInfo) =      
+        match preferFlag with 
+        | None -> rfinfo.RecdField.Range 
+        | Some false -> rfinfo.RecdField.DefinitionRange 
+        | Some true -> rfinfo.RecdField.SigRange
+
+    let rec rangeOfItem (g:TcGlobals) preferFlag d = 
         match d with
-        | Item.Value vref  | Item.CustomBuilder (_,vref) -> Some (if isDeclInfo then vref.Range else vref.DefinitionRange)
-        | Item.UnionCase(ucinfo,_)     -> Some ucinfo.UnionCase.Range
-        | Item.ActivePatternCase apref -> Some apref.ActivePatternVal.Range
+        | Item.Value vref  | Item.CustomBuilder (_,vref) -> Some (rangeOfValRef preferFlag vref)
+        | Item.UnionCase(ucinfo,_)     -> Some (rangeOfUnionCaseInfo preferFlag ucinfo)
+        | Item.ActivePatternCase apref -> Some (rangeOfValRef preferFlag apref.ActivePatternVal)
         | Item.ExnCase tcref           -> Some tcref.Range
-        | Item.RecdField rfinfo        -> Some rfinfo.RecdFieldRef.Range
-        | Item.Event einfo             -> rangeOfEventInfo einfo
+        | Item.RecdField rfinfo        -> Some (rangeOfRecdFieldInfo preferFlag rfinfo)
+        | Item.Event einfo             -> rangeOfEventInfo preferFlag einfo
         | Item.ILField _               -> None
-        | Item.Property(_,pinfos)      -> rangeOfPropInfo pinfos.Head 
-        | Item.Types(_,(typ :: _))     -> tryNiceEntityRefOfTy typ |> Option.map (fun tcref -> tcref.Range)
-        | Item.CustomOperation (_,_,Some minfo)  -> rangeOfMethInfo g minfo
-        | Item.TypeVar _  -> None
-        | Item.ModuleOrNamespaces(modref :: _) -> Some modref.Range
-        | Item.MethodGroup(_,minfo :: _) 
-        | Item.CtorGroup(_,minfo :: _) -> rangeOfMethInfo g minfo
+        | Item.Property(_,pinfos)      -> rangeOfPropInfo preferFlag pinfos.Head 
+        | Item.Types(_,typs)     -> typs |> List.tryPick (tryNiceEntityRefOfTy >> Option.map (rangeOfEntityRef preferFlag))
+        | Item.CustomOperation (_,_,Some minfo)  -> rangeOfMethInfo g preferFlag minfo
+        | Item.TypeVar (_,tp)  -> Some tp.Range
+        | Item.ModuleOrNamespaces(modrefs) -> modrefs |> List.tryPick (rangeOfEntityRef preferFlag >> Some)
+        | Item.MethodGroup(_,minfos) 
+        | Item.CtorGroup(_,minfos) -> minfos |> List.tryPick (rangeOfMethInfo g preferFlag)
         | Item.ActivePatternResult(APInfo _,_, _, m) -> Some m
-        | Item.SetterArg (_,item) -> rangeOfItem g isDeclInfo item
-        | Item.ArgName _ -> None
-        | _ -> None
+        | Item.SetterArg (_,item) -> rangeOfItem g preferFlag item
+        | Item.ArgName (id,_, _) -> Some id.idRange
+        | Item.CustomOperation (_,_,implOpt) -> implOpt |> Option.bind (rangeOfMethInfo g preferFlag)
+        | Item.ImplicitOp _ -> None
+        | Item.NewDef id -> Some id.idRange
+        | Item.UnqualifiedType tcrefs -> tcrefs |> List.tryPick (rangeOfEntityRef preferFlag >> Some)
+        | Item.DelegateCtor typ 
+        | Item.FakeInterfaceCtor typ -> typ |> tryNiceEntityRefOfTy |> Option.map (rangeOfEntityRef preferFlag)
 
     // Provided type definitions do not have a useful F# CCU for the purposes of goto-definition.
     let computeCcuOfTyconRef (tcref:TyconRef) = 
-        if tcref.IsProvided then None else ccuOfTyconRef tcref
+#if EXTENSIONTYPING
+        if tcref.IsProvided then None else 
+#endif
+        ccuOfTyconRef tcref
 
     let ccuOfMethInfo (g:TcGlobals) (minfo:MethInfo) = 
         match minfo with
         | DefaultStructCtor(_, AppTy g (tcref, _)) -> computeCcuOfTyconRef tcref
-        | _ -> minfo.ArbitraryValRef |> Option.bind ccuOfValRef
+        | _ -> 
+            minfo.ArbitraryValRef 
+            |> Option.bind ccuOfValRef 
+            |> Option.orElse (fun () -> minfo.DeclaringEntityRef |> computeCcuOfTyconRef)
+
 
-    let rec ccuOfItem g d = 
+    let rec ccuOfItem (g:TcGlobals) d = 
         match d with
         | Item.Value vref | Item.CustomBuilder (_,vref) -> ccuOfValRef vref 
         | Item.UnionCase(ucinfo,_)             -> computeCcuOfTyconRef ucinfo.TyconRef
         | Item.ActivePatternCase apref         -> ccuOfValRef apref.ActivePatternVal
         | Item.ExnCase tcref                   -> computeCcuOfTyconRef tcref
         | Item.RecdField rfinfo                -> computeCcuOfTyconRef rfinfo.RecdFieldRef.TyconRef
-        | Item.Event einfo                     -> einfo.ArbitraryValRef |> Option.bind ccuOfValRef
-        | Item.ILField _                       -> None
-        | Item.Property(_,pinfos)              -> pinfos.Head.ArbitraryValRef |> Option.bind ccuOfValRef
-        | Item.MethodGroup(_,minfo :: _) 
-        | Item.CtorGroup(_,minfo :: _)         -> ccuOfMethInfo g minfo
-        | Item.Types(_,(typ :: _))             -> tryNiceEntityRefOfTy typ |> Option.bind (fun tcref -> computeCcuOfTyconRef tcref)
-        | Item.TypeVar _  -> None
-        | Item.CustomOperation (_,_,Some minfo)       -> minfo.ArbitraryValRef |> Option.bind ccuOfValRef
-        | Item.ModuleOrNamespaces(modref :: _) -> computeCcuOfTyconRef modref
+        | Item.Event einfo                     -> einfo.EnclosingType  |> tcrefOfAppTy g |> computeCcuOfTyconRef
+        | Item.ILField finfo                   -> finfo.EnclosingType |> tcrefOfAppTy g |> computeCcuOfTyconRef
+        | Item.Property(_,pinfos)              -> 
+            pinfos |> List.tryPick (fun pinfo -> 
+                pinfo.ArbitraryValRef 
+                |> Option.bind ccuOfValRef
+                |> Option.orElse (fun () -> pinfo.EnclosingType |> tcrefOfAppTy g |> computeCcuOfTyconRef))
+
+        | Item.ArgName (_,_,Some (ArgumentContainer.Method minfo))  -> ccuOfMethInfo g minfo
+
+        | Item.MethodGroup(_,minfos)
+        | Item.CtorGroup(_,minfos) -> minfos |> List.tryPick (ccuOfMethInfo g)
+        | Item.CustomOperation (_,_,Some minfo)       -> ccuOfMethInfo g minfo
+
+        | Item.Types(_,typs)             -> typs |> List.tryPick (tryNiceEntityRefOfTy >> Option.bind computeCcuOfTyconRef)
+
+        | Item.ArgName (_,_,Some (ArgumentContainer.Type eref)) -> computeCcuOfTyconRef eref
+
+        | Item.ModuleOrNamespaces(erefs) 
+        | Item.UnqualifiedType(erefs) -> erefs |> List.tryPick computeCcuOfTyconRef 
+
         | Item.SetterArg (_,item) -> ccuOfItem g item
-        | Item.ArgName _ -> None
+        | Item.TypeVar _  -> None
         | _ -> None
 
     /// Work out the source file for an item and fix it up relative to the CCU if it is relative.
     let fileNameOfItem (g:TcGlobals) qualProjectDir (m:range) h =
         let file = m.FileName 
-        dprintf "file stored in metadata is '%s'\n" file
+        if verbose then dprintf "file stored in metadata is '%s'\n" file
         if not (FileSystem.IsPathRootedShim file) then 
             match ccuOfItem g h with 
             | Some ccu -> 
@@ -241,7 +242,7 @@ module internal ItemDescriptionsImpl =
                   let isPP = HasFSharpAttribute g g.attrib_ProjectionParameterAttribute argInfo.Attribs
                   // Strip the tuple space type of the type of projection parameters
                   let ty = if isPP && isFunTy g ty then rangeOfFunTy g ty else ty
-                  yield ParamNameAndType(argInfo.Name |> Option.map (fun id -> id.idText), ty) ]
+                  yield ParamNameAndType(argInfo.Name, ty) ]
         | _ -> []
 
     // Find the name of the metadata file for this external definition 
@@ -250,68 +251,62 @@ module internal ItemDescriptionsImpl =
         match tcref with 
         | ERefLocal _ -> None
         | ERefNonLocal nlref -> 
-        match nlref.Ccu.FileName with
-        | None -> None
-        | Some ccuFileName -> 
-        // Generalize to get a formal signature 
-        let formalTypars = tcref.Typars(m)
-        let formalTypeInst = generalizeTypars formalTypars
-        let formalTypeInfo = ILTypeInfo.FromType g (TType_app(tcref,formalTypeInst))
-        Some(ccuFileName,formalTypars,formalTypeInfo)
+            // Generalize to get a formal signature 
+            let formalTypars = tcref.Typars(m)
+            let formalTypeInst = generalizeTypars formalTypars
+            let formalTypeInfo = ILTypeInfo.FromType g (TType_app(tcref,formalTypeInst))
+            Some(nlref.Ccu.FileName,formalTypars,formalTypeInfo)
+
+    let mkXmlComment thing =
+        match thing with
+        | Some (Some(fileName), xmlDocSig) -> FSharpXmlDoc.XmlDocFileSignature(fileName, xmlDocSig)
+        | _ -> FSharpXmlDoc.None
 
     let GetXmlDocSigOfEntityRef infoReader m (eref:EntityRef) = 
         if eref.IsILTycon then 
             match metaInfoOfEntityRef infoReader m eref  with
-            | None -> XmlCommentNone
-            | Some (ccuFileName,_,formalTypeInfo) -> XmlCommentSignature(ccuFileName,"T:"+formalTypeInfo.ILTypeRef.FullName)
+            | None -> None
+            | Some (ccuFileName,_,formalTypeInfo) -> Some(ccuFileName,"T:"+formalTypeInfo.ILTypeRef.FullName)
         else
-            match libFileOfEntityRef eref with
-            | None -> XmlCommentNone
-            | Some ccuFileName -> 
-                let m = eref.Deref
-                if m.XmlDocSig = "" then
-                    m.XmlDocSig <- XmlDocSigOfEntity eref
-                XmlCommentSignature (ccuFileName, m.XmlDocSig)
-
-    let GetXmlDocSigOfValRef g (tcref:TyconRef) (vref:ValRef) = 
-        match libFileOfEntityRef tcref with
-        | None -> XmlCommentNone
-        | Some ccuFileName -> 
-            let v = vref.Deref
-            if v.XmlDocSig = "" then
-                v.XmlDocSig <- XmlDocSigOfVal g (buildAccessPath vref.TopValActualParent.CompilationPathOpt) v
-            XmlCommentSignature (ccuFileName, v.XmlDocSig)                
+            let ccuFileName = libFileOfEntityRef eref
+            let m = eref.Deref
+            if m.XmlDocSig = "" then
+                m.XmlDocSig <- XmlDocSigOfEntity eref
+            Some (ccuFileName, m.XmlDocSig)
+
+    let GetXmlDocSigOfScopedValRef g (tcref:TyconRef) (vref:ValRef) = 
+        let ccuFileName = libFileOfEntityRef tcref
+        let v = vref.Deref
+        if v.XmlDocSig = "" then
+            v.XmlDocSig <- XmlDocSigOfVal g (buildAccessPath vref.TopValActualParent.CompilationPathOpt) v
+        Some (ccuFileName, v.XmlDocSig)                
 
     let GetXmlDocSigOfRecdFieldInfo (rfinfo:RecdFieldInfo) = 
         let tcref = rfinfo.TyconRef
-        match libFileOfEntityRef tcref with
-        | None -> XmlCommentNone
-        | Some ccuFileName -> 
-            if rfinfo.RecdField.XmlDocSig = "" then
-                rfinfo.RecdField.XmlDocSig <- XmlDocSigOfProperty [tcref.CompiledRepresentationForNamedType.FullName; rfinfo.Name]
-            XmlCommentSignature (ccuFileName, rfinfo.RecdField.XmlDocSig)            
+        let ccuFileName = libFileOfEntityRef tcref 
+        if rfinfo.RecdField.XmlDocSig = "" then
+            rfinfo.RecdField.XmlDocSig <- XmlDocSigOfProperty [tcref.CompiledRepresentationForNamedType.FullName; rfinfo.Name]
+        Some (ccuFileName, rfinfo.RecdField.XmlDocSig)            
 
     let GetXmlDocSigOfUnionCaseInfo (ucinfo:UnionCaseInfo) = 
         let tcref =  ucinfo.TyconRef
-        match libFileOfEntityRef tcref with
-        | None -> XmlCommentNone
-        | Some ccuFileName -> 
-            if  ucinfo.UnionCase.XmlDocSig = "" then
-                  ucinfo.UnionCase.XmlDocSig <- XmlDocSigOfUnionCase [tcref.CompiledRepresentationForNamedType.FullName; ucinfo.Name]
-            XmlCommentSignature (ccuFileName,  ucinfo.UnionCase.XmlDocSig)
+        let ccuFileName = libFileOfEntityRef tcref
+        if  ucinfo.UnionCase.XmlDocSig = "" then
+            ucinfo.UnionCase.XmlDocSig <- XmlDocSigOfUnionCase [tcref.CompiledRepresentationForNamedType.FullName; ucinfo.Name]
+        Some (ccuFileName,  ucinfo.UnionCase.XmlDocSig)
 
     let GetXmlDocSigOfMethInfo (infoReader:InfoReader)  m (minfo:MethInfo) = 
         let amap = infoReader.amap
         match minfo with
         | FSMeth (g,_,vref,_) ->
-            GetXmlDocSigOfValRef g minfo.DeclaringEntityRef vref
+            GetXmlDocSigOfScopedValRef g minfo.DeclaringEntityRef vref
         | ILMeth (g,ilminfo,_) ->            
             let actualTypeName = ilminfo.DeclaringTyconRef.CompiledRepresentationForNamedType.FullName
             let fmtps = ilminfo.FormalMethodTypars            
             let genArity = if fmtps.Length=0 then "" else sprintf "``%d" fmtps.Length
 
             match metaInfoOfEntityRef infoReader m ilminfo.DeclaringTyconRef  with 
-            | None -> XmlCommentNone
+            | None -> None
             | Some (ccuFileName,formalTypars,formalTypeInfo) ->
                 let filminfo = ILMethInfo(g,formalTypeInfo.ToType,None,ilminfo.RawMetadata,fmtps) 
                 let args = 
@@ -323,82 +318,88 @@ module internal ItemDescriptionsImpl =
                 // If the name of the item itself has periods, they are replaced by the hash-sign ('#'). It is assumed that no item has a hash-sign directly in its name. For example, the fully qualified name of the String constructor would be "System.String.#ctor".
                 let normalizedName = ilminfo.ILName.Replace(".","#")
 
-                XmlCommentSignature (ccuFileName,"M:"+actualTypeName+"."+normalizedName+genArity+XmlDocArgsEnc g (formalTypars,fmtps) args)
-        | DefaultStructCtor _ -> XmlCommentNone
+                Some (ccuFileName,"M:"+actualTypeName+"."+normalizedName+genArity+XmlDocArgsEnc g (formalTypars,fmtps) args)
+        | DefaultStructCtor _ -> None
 #if EXTENSIONTYPING
-        | ProvidedMeth _ -> XmlCommentNone
+        | ProvidedMeth _ -> None
 #endif
 
-    /// This function gets the signature to pass to Visual Studio to use its lookup functions for .NET stuff. 
-    let rec GetXmlDocHelpSigOfItemForLookup (infoReader:InfoReader) m d = 
-        let amap = infoReader.amap
-        let g = infoReader.g
-                
-        match d with
-        | Item.ActivePatternCase (APElemRef(_, vref, _))        
-        | Item.Value vref | Item.CustomBuilder (_,vref) -> 
-            if not vref.IsLocalRef then
-                match vref.nlr.Ccu.FileName with
-                | Some ccuFileName -> 
-                    let v = vref.Deref
-                    if v.XmlDocSig = "" then
-                        v.XmlDocSig <- XmlDocSigOfVal g vref.TopValActualParent.CompiledRepresentationForNamedType.Name v
-                    XmlCommentSignature (ccuFileName, v.XmlDocSig)
-                | None -> XmlCommentNone
-            else 
-                XmlCommentNone
-        | Item.UnionCase (ucinfo,_) -> GetXmlDocSigOfUnionCaseInfo ucinfo
-        | Item.ExnCase tcref -> GetXmlDocSigOfEntityRef infoReader m tcref 
-        | Item.RecdField rfinfo -> GetXmlDocSigOfRecdFieldInfo rfinfo
-        | Item.NewDef _ -> XmlCommentNone
-        | Item.ILField(ILFieldInfo(tinfo, fdef)) -> 
-              match metaInfoOfEntityRef infoReader m tinfo.TyconRef  with
-              | None -> XmlCommentNone
-              | Some (ccuFileName,_,formalTypeInfo) ->
-                  XmlCommentSignature(ccuFileName,"F:"+formalTypeInfo.ILTypeRef.FullName+"."+fdef.Name)
-
-        | Item.Types(_,((TType_app(tcref,_)) :: _)) ->  GetXmlDocSigOfEntityRef infoReader m tcref 
-        | Item.CustomOperation (_,_,Some minfo)       -> GetXmlDocSigOfMethInfo infoReader  m minfo
-        | Item.TypeVar _  -> XmlCommentNone
-        | Item.ModuleOrNamespaces(modref :: _) -> GetXmlDocSigOfEntityRef infoReader m modref
+    let GetXmlDocSigOfValRef g (vref:ValRef) =
+        if not vref.IsLocalRef then
+            let ccuFileName = vref.nlr.Ccu.FileName
+            let v = vref.Deref
+            if v.XmlDocSig = "" then
+                v.XmlDocSig <- XmlDocSigOfVal g vref.TopValActualParent.CompiledRepresentationForNamedType.Name v
+            Some (ccuFileName, v.XmlDocSig)
+        else 
+            None
 
-        | Item.Property(_,(pinfo :: _)) -> 
-            match pinfo with 
+    let GetXmlDocSigOfProp infoReader m pinfo =
+        match pinfo with 
 #if EXTENSIONTYPING
-            | ProvidedProp _ -> XmlCommentNone // No signature is possible. If an xml comment existed it would have been returned by PropInfo.XmlDoc in infos.fs
+        | ProvidedProp _ -> None // No signature is possible. If an xml comment existed it would have been returned by PropInfo.XmlDoc in infos.fs
 #endif
-            | FSProp (g,typ,_,_) as fspinfo -> 
-                let tcref = tcrefOfAppTy g typ
-                match fspinfo.ArbitraryValRef with 
-                | None -> XmlCommentNone
-                | Some vref -> 
-                GetXmlDocSigOfValRef g tcref vref
-            | ILProp(g, (ILPropInfo(tinfo,pdef))) -> 
-                let tcref = tinfo.TyconRef
-                match metaInfoOfEntityRef infoReader m tcref  with
-                | None -> XmlCommentNone
-                | Some (ccuFileName,formalTypars,formalTypeInfo) ->
-                    let filpinfo = ILPropInfo(formalTypeInfo,pdef)
-                    XmlCommentSignature (ccuFileName,"P:"+formalTypeInfo.ILTypeRef.FullName+"."+pdef.Name+XmlDocArgsEnc g (formalTypars,[]) (filpinfo.GetParamTypes(amap,m)))
+        | FSProp (g,typ,_,_) as fspinfo -> 
+            let tcref = tcrefOfAppTy g typ
+            match fspinfo.ArbitraryValRef with 
+            | None -> None
+            | Some vref -> GetXmlDocSigOfScopedValRef g tcref vref
+        | ILProp(g, (ILPropInfo(tinfo,pdef))) -> 
+            let tcref = tinfo.TyconRef
+            match metaInfoOfEntityRef infoReader m tcref  with
+            | Some (ccuFileName,formalTypars,formalTypeInfo) ->
+                let filpinfo = ILPropInfo(formalTypeInfo,pdef)
+                Some (ccuFileName,"P:"+formalTypeInfo.ILTypeRef.FullName+"."+pdef.Name+XmlDocArgsEnc g (formalTypars,[]) (filpinfo.GetParamTypes(infoReader.amap,m)))
+            | _ -> None
 
-        | Item.Event(ILEvent(_,ilEventInfo) as einfo) ->
+    let GetXmlDocSigOfEvent infoReader m (einfo:EventInfo) =
+        match einfo with
+        | ILEvent(_,ilEventInfo) ->
             let tinfo = ilEventInfo.ILTypeInfo 
             let tcref = tinfo.TyconRef 
             match metaInfoOfEntityRef infoReader m tcref  with 
-            | None -> XmlCommentNone 
             | Some (ccuFileName,_,formalTypeInfo) -> 
-                XmlCommentSignature(ccuFileName,"E:"+formalTypeInfo.ILTypeRef.FullName+"."+einfo.EventName)
+                Some(ccuFileName,"E:"+formalTypeInfo.ILTypeRef.FullName+"."+einfo.EventName)
+            | _ -> None
+        | _ -> None
 
-        | Item.MethodGroup(_,minfo :: _) -> GetXmlDocSigOfMethInfo infoReader  m minfo
-        | Item.CtorGroup(_,minfo :: _) -> GetXmlDocSigOfMethInfo infoReader  m minfo
+    let GetXmlDocSigOfILFieldInfo infoReader m (finfo:ILFieldInfo) =
+        match metaInfoOfEntityRef infoReader m (tcrefOfAppTy infoReader.g finfo.EnclosingType) with
+        | Some (ccuFileName,_,formalTypeInfo) ->
+            Some(ccuFileName,"F:"+formalTypeInfo.ILTypeRef.FullName+"."+finfo.FieldName)
+        | _ -> None
+
+    /// This function gets the signature to pass to Visual Studio to use its lookup functions for .NET stuff. 
+    let rec GetXmlDocHelpSigOfItemForLookup (infoReader:InfoReader) m d = 
+        let g = infoReader.g
+                
+        match d with
+        | Item.ActivePatternCase (APElemRef(_, vref, _))        
+        | Item.Value vref | Item.CustomBuilder (_,vref) -> 
+            mkXmlComment (GetXmlDocSigOfValRef g vref)
+        | Item.UnionCase  (ucinfo,_) -> mkXmlComment (GetXmlDocSigOfUnionCaseInfo ucinfo)
+        | Item.ExnCase tcref -> mkXmlComment (GetXmlDocSigOfEntityRef infoReader m tcref)
+        | Item.RecdField rfinfo -> mkXmlComment (GetXmlDocSigOfRecdFieldInfo rfinfo)
+        | Item.NewDef _ -> FSharpXmlDoc.None
+        | Item.ILField finfo -> mkXmlComment (GetXmlDocSigOfILFieldInfo infoReader m finfo)
+        | Item.Types(_,((TType_app(tcref,_)) :: _)) ->  mkXmlComment (GetXmlDocSigOfEntityRef infoReader m tcref)
+        | Item.CustomOperation (_,_,Some minfo) -> mkXmlComment (GetXmlDocSigOfMethInfo infoReader  m minfo)
+        | Item.TypeVar _  -> FSharpXmlDoc.None
+        | Item.ModuleOrNamespaces(modref :: _) -> mkXmlComment (GetXmlDocSigOfEntityRef infoReader m modref)
+
+        | Item.Property(_,(pinfo :: _)) -> mkXmlComment (GetXmlDocSigOfProp infoReader m pinfo)
+        | Item.Event(einfo) -> mkXmlComment (GetXmlDocSigOfEvent infoReader m einfo)
+
+        | Item.MethodGroup(_,minfo :: _) -> mkXmlComment (GetXmlDocSigOfMethInfo infoReader  m minfo)
+        | Item.CtorGroup(_,minfo :: _) -> mkXmlComment (GetXmlDocSigOfMethInfo infoReader  m minfo)
         | Item.ArgName(_, _, Some argContainer) -> match argContainer with 
-                                                   | ArgumentContainer.Method(minfo) -> GetXmlDocSigOfMethInfo infoReader m minfo
-                                                   | ArgumentContainer.Type(tcref) -> GetXmlDocSigOfEntityRef infoReader m tcref
-                                                   | ArgumentContainer.UnionCase(ucinfo) -> GetXmlDocSigOfUnionCaseInfo ucinfo
-        |  _ -> XmlCommentNone
+                                                   | ArgumentContainer.Method(minfo) -> mkXmlComment (GetXmlDocSigOfMethInfo infoReader m minfo)
+                                                   | ArgumentContainer.Type(tcref) -> mkXmlComment (GetXmlDocSigOfEntityRef infoReader m tcref)
+                                                   | ArgumentContainer.UnionCase(ucinfo) -> mkXmlComment (GetXmlDocSigOfUnionCaseInfo ucinfo)
+        |  _ -> FSharpXmlDoc.None
 
     /// Produce an XmlComment with a signature or raw text.
-    let GetXmlComment (xmlDoc:XmlDoc) (infoReader:InfoReader) m d : XmlComment = 
+    let GetXmlComment (xmlDoc:XmlDoc) (infoReader:InfoReader) m d = 
         let result = 
             match xmlDoc with 
             | XmlDoc [| |] -> ""
@@ -409,23 +410,26 @@ module internal ItemDescriptionsImpl =
                         // Note: this code runs for local/within-project xmldoc tooltips, but not for cross-project or .XML
                         bprintf os "\n%s" s))
 
-        let xml = if String.IsNullOrEmpty result then XmlCommentNone else XmlCommentText result
+        let xml = if String.IsNullOrEmpty result then FSharpXmlDoc.None else FSharpXmlDoc.Text result
         match xml with
-        | XmlCommentNone -> GetXmlDocHelpSigOfItemForLookup infoReader m d
+        | FSharpXmlDoc.None -> GetXmlDocHelpSigOfItemForLookup infoReader m d
         | _ -> xml
 
+    let mutable ToolTipFault  = None
+    
     /// Output a method info
-    let FormatOverloadsToList (infoReader:InfoReader) m denv d minfos : DataTipElement = 
+    let FormatOverloadsToList (infoReader:InfoReader) m denv d minfos : FSharpToolTipElement = 
         let formatOne minfo = 
             let text = bufs (fun os -> NicePrint.formatMethInfoToBufferFreeStyle  infoReader.amap m denv os minfo)
             let xml = GetXmlComment (if minfo.HasDirectXmlComment then minfo.XmlDoc else XmlDoc [||]) infoReader m d 
             text,xml
 
-        let result = DataTipElementGroup(minfos |> List.map formatOne)
-
-        match !TestHooks.FormatOverloadsToList with 
-        | Some hook -> hook result
-        | None -> result
+        ToolTipFault |> Option.iter (fun msg -> 
+           let exn = Error((0,msg),range.Zero)
+           let ph = PhasedError.Create(exn, BuildPhase.TypeCheck)
+           phasedError ph)
+ 
+        FSharpToolTipElement.Group(minfos |> List.map formatOne)
 
         
     let pubpath_of_vref         (v:ValRef) = v.PublicPath        
@@ -438,7 +442,7 @@ module internal ItemDescriptionsImpl =
     
     // Like Seq.distinctBy but only filters out duplicates for some of the elements
     let partialDistinctBy (per:IPartialEqualityComparer<_>) seq =
-        // Wrap a Wrap _ aroud all keys in case the key type is itself a type using null as a representation
+        // Wrap a Wrap _ around all keys in case the key type is itself a type using null as a representation
         let dict = new Dictionary,obj>(per)
         seq |> List.filter (fun v -> 
             let v = Wrap(v)
@@ -501,8 +505,8 @@ module internal ItemDescriptionsImpl =
                   fld1 === fld2 // reference equality on the object identity of the AbstractIL metadata blobs for the fields
               | Wrap(Item.CustomOperation (_,_,Some minfo1)), Wrap(Item.CustomOperation (_,_,Some minfo2)) -> 
                     MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2
-              | Wrap(Item.TypeVar nm1), Wrap(Item.TypeVar nm2) -> 
-                    (nm1 = nm2)
+              | Wrap(Item.TypeVar (nm1,tp1)), Wrap(Item.TypeVar (nm2,tp2)) -> 
+                    (nm1 = nm2) && typarRefEq tp1 tp2
               | Wrap(Item.ModuleOrNamespaces(modref1 :: _)), Wrap(Item.ModuleOrNamespaces(modref2 :: _)) -> fullDisplayTextOfModRef modref1 = fullDisplayTextOfModRef modref2
               | Wrap(Item.SetterArg(id1,_)), Wrap(Item.SetterArg(id2,_)) -> (id1.idRange, id1.idText) = (id2.idRange, id2.idText)
               | Wrap(Item.MethodGroup(_, meths1)), Wrap(Item.MethodGroup(_, meths2)) -> 
@@ -532,7 +536,7 @@ module internal ItemDescriptionsImpl =
                   else 1010
               | Wrap(Item.ILField(ILFieldInfo(_, fld))) -> 
                   System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode fld // hash on the object identity of the AbstractIL metadata blob for the field
-              | Wrap(Item.TypeVar nm) -> hash nm
+              | Wrap(Item.TypeVar (nm,_tp)) -> hash nm
               | Wrap(Item.CustomOperation (_,_,Some minfo)) -> minfo.ComputeHashCode()
               | Wrap(Item.CustomOperation (_,_,None)) -> 1
               | Wrap(Item.ModuleOrNamespaces(modref :: _)) -> hash (fullDisplayTextOfModRef modref)          
@@ -579,7 +583,7 @@ module internal ItemDescriptionsImpl =
                 else true ) 
          | _ -> true ))
     
-    let SimplerDisplayEnv denv _isDeclInfo = 
+    let SimplerDisplayEnv denv _isDecl = 
         { denv with suppressInlineKeyword=true; 
                     shortConstraints=true; 
                     showConstraintTyparAnnotations=false; 
@@ -587,28 +591,59 @@ module internal ItemDescriptionsImpl =
                     suppressNestedTypes=true;
                     maxMembers=Some EnvMisc2.maxMembers }
 
+    let rec FullNameOfItem g d = 
+        let denv = DisplayEnv.Empty(g)
+        match d with
+        | Item.ImplicitOp(_, { contents = Some(TraitConstraintSln.FSMethSln(_, vref, _)) }) 
+        | Item.Value vref | Item.CustomBuilder (_,vref) -> fullDisplayTextOfValRef vref
+        | Item.UnionCase (ucinfo,_) -> fullDisplayTextOfUnionCaseRef  ucinfo.UnionCaseRef
+        | Item.ActivePatternResult(apinfo, _ty, idx, _) -> apinfo.Names.[idx]
+        | Item.ActivePatternCase apref -> FullNameOfItem g (Item.Value apref.ActivePatternVal)  + "." + apref.Name 
+        | Item.ExnCase ecref -> fullDisplayTextOfExnRef ecref 
+        | Item.RecdField rfinfo -> fullDisplayTextOfRecdFieldRef  rfinfo.RecdFieldRef
+        | Item.NewDef id -> id.idText
+        | Item.ILField finfo -> bufs (fun os -> NicePrint.outputILTypeRef denv os finfo.ILTypeRef; bprintf os ".%s" finfo.FieldName)
+        | Item.Event einfo -> bufs (fun os -> NicePrint.outputTyconRef denv os (tcrefOfAppTy g einfo.EnclosingType); bprintf os ".%s" einfo.EventName)
+        | Item.Property(_,(pinfo::_)) -> bufs (fun os -> NicePrint.outputTyconRef denv os (tcrefOfAppTy g pinfo.EnclosingType); bprintf os ".%s" pinfo.PropertyName)
+        | Item.CustomOperation (customOpName,_,_) -> customOpName
+        | Item.CtorGroup(_,minfo :: _) -> bufs (fun os -> NicePrint.outputTyconRef denv os minfo.DeclaringEntityRef)
+        | Item.MethodGroup(_,minfo :: _) -> bufs (fun os -> NicePrint.outputTyconRef denv os minfo.DeclaringEntityRef; bprintf os ".%s" minfo.DisplayName)        
+        | Item.UnqualifiedType (tcref :: _) -> bufs (fun os -> NicePrint.outputTyconRef denv os tcref)
+        | Item.FakeInterfaceCtor typ 
+        | Item.DelegateCtor typ 
+        | Item.Types(_,typ:: _) -> bufs (fun os -> NicePrint.outputTyconRef denv os (tcrefOfAppTy g typ))
+        | Item.ModuleOrNamespaces((modref :: _) as modrefs) -> 
+            let definiteNamespace = modrefs |> List.forall (fun modref -> modref.IsNamespace)
+            if definiteNamespace then fullDisplayTextOfModRef modref else modref.DemangledModuleOrNamespaceName
+        | Item.TypeVar (id, _) -> id
+        | Item.ArgName (id, _, _) -> id.idText
+        | Item.SetterArg (_, item) -> FullNameOfItem g item
+        | Item.ImplicitOp(id, _) -> id.idText
+        // unreachable 
+        | Item.UnqualifiedType([]) 
+        | Item.Types(_,[]) 
+        | Item.CtorGroup(_,[]) 
+        | Item.MethodGroup(_,[]) 
+        | Item.ModuleOrNamespaces []
+        | Item.Property(_,[]) -> ""
+
     /// Output a the description of a language item
-    let rec FormatItemDescriptionToDataTipElement isDeclInfo (infoReader:InfoReader) m denv d = 
+    let rec FormatItemDescriptionToToolTipElement isDecl (infoReader:InfoReader) m denv d = 
         let g = infoReader.g
         let amap = infoReader.amap
-        let denv = SimplerDisplayEnv denv isDeclInfo 
+        let denv = SimplerDisplayEnv denv isDecl 
         match d with
         | Item.ImplicitOp(_, { contents = Some(TraitConstraintSln.FSMethSln(_, vref, _)) }) -> 
             // operator with solution
-            FormatItemDescriptionToDataTipElement isDeclInfo infoReader m denv (Item.Value vref)
+            FormatItemDescriptionToToolTipElement isDecl infoReader m denv (Item.Value vref)
         | Item.Value vref | Item.CustomBuilder (_,vref) ->            
             let text = 
                 bufs (fun os -> 
                     NicePrint.outputQualifiedValOrMember denv os vref.Deref 
-                    OutputFullName isDeclInfo pubpath_of_vref fullDisplayTextOfValRef os vref;
-
-                    // adjust the type in case this is the 'this' pointer stored in a reference cell
-                    let ty = StripSelfRefCell(g, vref.BaseOrThisInfo, vref.Type) 
-
-                    OutputUsefulTypeInfo isDeclInfo infoReader m denv os ty)
+                    OutputFullName isDecl pubpath_of_vref fullDisplayTextOfValRef os vref)
 
             let xml = GetXmlComment (if (valRefInThisAssembly g.compilingFslib vref) then vref.XmlDoc else XmlDoc [||]) infoReader m d 
-            DataTipElement(text, xml)
+            FSharpToolTipElement.Single(text, xml)
 
         // Union tags (constructors)
         | Item.UnionCase(ucinfo,_) -> 
@@ -628,15 +663,16 @@ module internal ItemDescriptionsImpl =
 
 
             let xml = GetXmlComment (if (tyconRefUsesLocalXmlDoc g.compilingFslib ucinfo.TyconRef) then uc.XmlDoc else XmlDoc [||]) infoReader m d 
-            DataTipElement(text, xml)
+            FSharpToolTipElement.Single(text, xml)
 
         // Active pattern tag inside the declaration (result)             
-        | Item.ActivePatternResult(APInfo(_, items), ty, idx, _) ->
+        | Item.ActivePatternResult(apinfo, ty, idx, _) ->
+            let items = apinfo.ActiveTags
             let text = bufs (fun os -> 
                 bprintf os "%s %s: " (FSComp.SR.typeInfoActivePatternResult()) (List.item idx items) 
                 NicePrint.outputTy denv os ty)
             let xml = GetXmlComment (XmlDoc [||]) infoReader m d
-            DataTipElement(text, xml)
+            FSharpToolTipElement.Single(text, xml)
 
         // Active pattern tags 
         // XmlDoc is never emitted to xml doc files for these
@@ -651,18 +687,18 @@ module internal ItemDescriptionsImpl =
                     bprintf os "%s %s: " (FSComp.SR.typeInfoActiveRecognizer())
                         apref.Name
                     NicePrint.outputTy denv os ptau 
-                    OutputFullName isDeclInfo pubpath_of_vref fullDisplayTextOfValRef os v)
+                    OutputFullName isDecl pubpath_of_vref fullDisplayTextOfValRef os v)
 
             let xml = GetXmlComment v.XmlDoc infoReader m d 
-            DataTipElement(text, xml)
+            FSharpToolTipElement.Single(text, xml)
 
         // F# exception names
         | Item.ExnCase ecref -> 
             let text =  bufs (fun os -> 
                 NicePrint.outputExnDef denv os ecref.Deref 
-                OutputFullName isDeclInfo pubpath_of_tcref fullDisplayTextOfExnRef os ecref)
+                OutputFullName isDecl pubpath_of_tcref fullDisplayTextOfExnRef os ecref)
             let xml = GetXmlComment (if (tyconRefUsesLocalXmlDoc g.compilingFslib ecref) then ecref.XmlDoc else XmlDoc [||]) infoReader m d 
-            DataTipElement(text, xml)
+            FSharpToolTipElement.Single(text, xml)
 
         // F# record field names
         | Item.RecdField rfinfo ->
@@ -680,12 +716,12 @@ module internal ItemDescriptionsImpl =
                        try bprintf os " = %s" (Layout.showL ( NicePrint.layoutConst denv.g ty lit )) with _ -> ())
 
             let xml = GetXmlComment (if (tyconRefUsesLocalXmlDoc g.compilingFslib rfinfo.TyconRef) then rfield.XmlDoc else XmlDoc [||]) infoReader m d 
-            DataTipElement(text, xml)
+            FSharpToolTipElement.Single(text, xml)
 
         // Not used
         | Item.NewDef id -> 
             let dataTip = bufs (fun os -> bprintf os "%s %s" (FSComp.SR.typeInfoPatternVariable()) id.idText)
-            DataTipElement(dataTip, GetXmlComment (XmlDoc [||]) infoReader m d)
+            FSharpToolTipElement.Single(dataTip, GetXmlComment (XmlDoc [||]) infoReader m d)
 
         // .NET fields
         | Item.ILField finfo ->
@@ -698,7 +734,7 @@ module internal ItemDescriptionsImpl =
                 | Some v -> 
                    try bprintf os " = %s" (Layout.showL ( NicePrint.layoutConst denv.g (finfo.FieldType(infoReader.amap, m)) (TypeChecker.TcFieldInit m v) )) 
                    with _ -> ())
-            DataTipElement(dataTip, GetXmlComment (XmlDoc [||]) infoReader m d)
+            FSharpToolTipElement.Single(dataTip, GetXmlComment (XmlDoc [||]) infoReader m d)
 
         // .NET events
         | Item.Event einfo ->
@@ -707,18 +743,14 @@ module internal ItemDescriptionsImpl =
             let text = 
                 bufs (fun os -> 
                     // REVIEW: use _cxs here
-                    bprintf os "%s "
-                      (FSComp.SR.typeInfoEvent()) 
+                    bprintf os "%s " (FSComp.SR.typeInfoEvent()) 
                     NicePrint.outputTyconRef denv os (tcrefOfAppTy g einfo.EnclosingType) 
-                    bprintf os ".%s: "
-                      einfo.EventName
+                    bprintf os ".%s: " einfo.EventName
                     NicePrint.outputTy denv os rty)
-            // Hosted comments are simulated by hanging them off of the property with
-            // a TypeProviderXmlDocAttribute           
 
             let xml = GetXmlComment (if einfo.HasDirectXmlComment  then einfo.XmlDoc else XmlDoc [||]) infoReader m d 
 
-            DataTipElement(text, xml)
+            FSharpToolTipElement.Single(text, xml)
 
         // F# and .NET properties
         | Item.Property(_,pinfos) -> 
@@ -735,17 +767,11 @@ module internal ItemDescriptionsImpl =
 
             let xml = GetXmlComment (if pinfo.HasDirectXmlComment then pinfo.XmlDoc else XmlDoc [||]) infoReader m d 
 
-            DataTipElement(text, xml)
+            FSharpToolTipElement.Single(text, xml)
 
         // Custom operations in queries
         | Item.CustomOperation (customOpName,usageText,Some minfo) -> 
 
-            // Some fragments if we want the return type and/or parameter names
-            //let rty = minfo.GetFSharpReturnTy(amap, m, minfo.FormalMethodInst)
-            //let _, tys, _= PrettyTypes.PrettifyTypesN g ([ for (_,argTy) in argNamesAndTys -> argTy] @ [rty])
-            //let argTys, rty = List.frontAndBack tys
-            //let paramDatas = (argNames,argTys) ||> List.map2 (fun argName argTy -> ParamData(false,false,OptionalArgInfo.NotOptional,argName |> Option.map (fun i -> i.idText),argTy)) 
-
             // Build 'custom operation: where (bool)
             //        
             //        Calls QueryBuilder.Where'
@@ -772,7 +798,7 @@ module internal ItemDescriptionsImpl =
 
             let xml = GetXmlComment (if minfo.HasDirectXmlComment then minfo.XmlDoc else XmlDoc [||]) infoReader m d 
 
-            DataTipElement(text, xml)
+            FSharpToolTipElement.Single(text, xml)
 
         // F# constructors and methods
         | Item.CtorGroup(_,minfos) 
@@ -787,7 +813,7 @@ module internal ItemDescriptionsImpl =
         | Item.FakeInterfaceCtor typ ->
            let _, typ, _ = PrettyTypes.PrettifyTypes1 g typ
            let text = bufs (fun os -> NicePrint.outputTyconRef denv os (tcrefOfAppTy g typ))
-           DataTipElement(text, GetXmlComment (XmlDoc [||]) infoReader m d)
+           FSharpToolTipElement.Single(text, GetXmlComment (XmlDoc [||]) infoReader m d)
         
         // The 'fake' representation of constructors of .NET delegate types
         | Item.DelegateCtor delty -> 
@@ -799,20 +825,18 @@ module internal ItemDescriptionsImpl =
                          NicePrint.outputTy denv os fty
                          bprintf os ")")
            let xml = GetXmlComment (XmlDoc [||]) infoReader m d
-           DataTipElement(text, xml)
+           FSharpToolTipElement.Single(text, xml)
 
         // Types.
-        | Item.Types(_,((TType_app(tcref,_) as typ):: _)) -> 
+        | Item.Types(_,((TType_app(tcref,_)):: _)) -> 
             let text = 
                 bufs (fun os -> 
-                    //let width = 100
                     let denv = { denv with shortTypeNames = true  }
-                    NicePrint.outputTycon denv infoReader AccessibleFromSomewhere m (* width *) os tcref.Deref;
-                    OutputFullName isDeclInfo pubpath_of_tcref fullDisplayTextOfTyconRef os tcref;
-                    OutputUsefulTypeInfo isDeclInfo infoReader m denv os typ)
+                    NicePrint.outputTycon denv infoReader AccessibleFromSomewhere m (* width *) os tcref.Deref
+                    OutputFullName isDecl pubpath_of_tcref fullDisplayTextOfTyconRef os tcref)
   
             let xml = GetXmlComment (if (tyconRefUsesLocalXmlDoc g.compilingFslib tcref) then tcref.XmlDoc else XmlDoc [||]) infoReader m d 
-            DataTipElement(text, xml)
+            FSharpToolTipElement.Single(text, xml)
 
         // F# Modules and namespaces
         | Item.ModuleOrNamespaces((modref :: _) as modrefs) -> 
@@ -838,9 +862,9 @@ module internal ItemDescriptionsImpl =
                 for i, txt in namesToAdd do
                     bprintf os "\n%s" ((if i = 0 then FSComp.SR.typeInfoFromFirst else FSComp.SR.typeInfoFromNext) txt)
                 let xml = GetXmlComment (if (entityRefInThisAssembly g.compilingFslib modref) then modref.XmlDoc else XmlDoc [||]) infoReader m d 
-                DataTipElement(os.ToString(), xml)
+                FSharpToolTipElement.Single(os.ToString(), xml)
             else
-                DataTipElement(os.ToString(), GetXmlComment (XmlDoc [||]) infoReader m d)
+                FSharpToolTipElement.Single(os.ToString(), GetXmlComment (XmlDoc [||]) infoReader m d)
 
         // Named parameters
         | Item.ArgName (id, argTy, argContainer) -> 
@@ -858,20 +882,20 @@ module internal ItemDescriptionsImpl =
                                if (tyconRefUsesLocalXmlDoc g.compilingFslib ucinfo.TyconRef) then ucinfo.UnionCase.XmlDoc else XmlDoc [||]
                          | _ -> XmlDoc [||]
             let xml = GetXmlComment xmldoc infoReader m d
-            DataTipElementParameter(text, xml, id.idText)
+            FSharpToolTipElement.SingleParameter(text, xml, id.idText)
             
         | Item.SetterArg (_, item) -> 
-            FormatItemDescriptionToDataTipElement isDeclInfo infoReader m denv item
+            FormatItemDescriptionToToolTipElement isDecl infoReader m denv item
         |  _ -> 
-            DataTipElementNone
+            FSharpToolTipElement.None
 
 
     // Format the return type of an item
     let rec FormatItemReturnTypeToBuffer (infoReader:InfoReader) m denv os d = 
-        let isDeclInfo = false
+        let isDecl = false
         let g = infoReader.g
         let amap = infoReader.amap
-        let denv = {SimplerDisplayEnv denv isDeclInfo with useColonForReturnType=true}
+        let denv = {SimplerDisplayEnv denv isDecl with useColonForReturnType=true}
         match d with
         | Item.Value vref | Item.CustomBuilder (_,vref) -> 
             let _, tau = vref.TypeScheme
@@ -1084,10 +1108,10 @@ module internal ItemDescriptionsImpl =
         | Item.ActivePatternResult _ // "let (|Foo|Bar|) = .. Fo$o ..." - no keyword
             ->  None
 
-    let FormatDescriptionOfItem isDeclInfo (infoReader:InfoReader)  m denv d : DataTipElement = 
+    let FormatDescriptionOfItem isDecl (infoReader:InfoReader)  m denv d : FSharpToolTipElement = 
         ErrorScope.Protect m 
-            (fun () -> FormatItemDescriptionToDataTipElement isDeclInfo infoReader m denv d)
-            (fun err -> DataTipElementCompositionError(err))
+            (fun () -> FormatItemDescriptionToToolTipElement isDecl infoReader m denv d)
+            (fun err -> FSharpToolTipElement.CompositionError(err))
         
     let FormatReturnTypeOfItem (infoReader:InfoReader) m denv d = 
         ErrorScope.Protect m (fun () -> bufs (fun buf -> FormatItemReturnTypeToBuffer infoReader m denv buf d)) (fun err -> err)
@@ -1187,67 +1211,64 @@ module internal ItemDescriptionsImpl =
 
 open ItemDescriptionsImpl
 
-//----------------------------------------------------------------------------
-// Declarations
-//----------------------------------------------------------------------------
-
           
 /// An intellisense declaration
 []
-type Declaration(name, glyph:int, info) =
-    let mutable descriptionTextHolder:DataTipText option = None
+type FSharpDeclarationListItem(name, glyph:int, info) =
+    let mutable descriptionTextHolder:FSharpToolTipText option = None
     let mutable task = null
 
     member decl.Name = name
+
+    member decl.DescriptionTextAsync = 
+            match info with
+            | Choice1Of2 (items, infoReader, m, denv, reactor:IReactorOperations, checkAlive) -> 
+                    // reactor causes the lambda to execute on the background compiler thread, through the Reactor
+                    reactor.EnqueueAndAwaitOpAsync ("DescriptionTextAsync", fun _ct -> 
+                          // This is where we do some work which may touch TAST data structures owned by the IncrementalBuilder - infoReader, item etc. 
+                          // It is written to be robust to a disposal of an IncrementalBuilder, in which case it will just return the empty string. 
+                          // It is best to think of this as a "weak reference" to the IncrementalBuilder, i.e. this code is written to be robust to its
+                          // disposal. Yes, you are right to scratch your head here, but this is ok.
+                              if checkAlive() then FSharpToolTipText(items |> Seq.toList |> List.map (FormatDescriptionOfItem true infoReader m denv))
+                              else FSharpToolTipText [ FSharpToolTipElement.Single(FSComp.SR.descriptionUnavailable(), FSharpXmlDoc.None) ])
+            | Choice2Of2 result -> 
+                async.Return result
+
     member decl.DescriptionText = 
         match descriptionTextHolder with
         | Some descriptionText -> descriptionText
         | None ->
-            if task = null then
-                // kick off the actual (non-cooperative) work
-                task <- 
-                    System.Threading.Tasks.Task.Factory.StartNew(fun() ->
-                        // syncop "Synchronous Operation" causes the lambda to execute on the background compiler thread, through the Reactor
-                        match info with
-                        | Choice1Of2 (items, infoReader, m, denv, syncop, checkAlive) -> 
-                            syncop (fun () -> 
-                                // This is where we do some work which may touch TAST data structures owned by the IncrementalBuilder - infoReader, item etc. 
-                                // It is written to be robust to a disposal of an IncrementalBuilder, in which case it will just return the empty string. 
-                                // It is best to think of this as a "weak reference" to the IncrementalBuilder, i.e. this code is written to be robust to its
-                                // disposal. Yes, you are right to scratch your head here, but this is ok.
-                                let description = 
-                                    if checkAlive() then DataTipText(items |> Seq.toList |> List.map (FormatDescriptionOfItem true infoReader m denv))
-                                    else DataTipText [ DataTipElement(FSComp.SR.descriptionUnavailable(), XmlCommentNone) ]
-
-                                descriptionTextHolder<-Some description)
-                        | Choice2Of2 result -> 
-                                descriptionTextHolder<-Some result)
-
-            // The dataTipSpinWaitTime limits how long we block the UI thread while a tooltip pops up next to a selected item in an IntelliSense completion list.
-            // This time appears to be somewhat amortized by the time it takes the VS completion UI to actually bring up the tooltip after selecting an item in the first place.
-            if task.Wait EnvMisc2.dataTipSpinWaitTime then  
-                descriptionTextHolder.Value 
-            else
-                DataTipText [ DataTipElement(FSComp.SR.loadingDescription(), XmlCommentNone) ]
+            match info with
+            | Choice1Of2 _ -> 
+
+                // The dataTipSpinWaitTime limits how long we block the UI thread while a tooltip pops up next to a selected item in an IntelliSense completion list.
+                // This time appears to be somewhat amortized by the time it takes the VS completion UI to actually bring up the tooltip after selecting an item in the first place.
+                if task = null then
+                    // kick off the actual (non-cooperative) work
+                    task <- System.Threading.Tasks.Task.Factory.StartNew(fun() -> 
+                        let text = decl.DescriptionTextAsync |> Async.RunSynchronously
+                        descriptionTextHolder <- Some text) 
+
+                // The dataTipSpinWaitTime limits how long we block the UI thread while a tooltip pops up next to a selected item in an IntelliSense completion list.
+                // This time appears to be somewhat amortized by the time it takes the VS completion UI to actually bring up the tooltip after selecting an item in the first place.
+                task.Wait EnvMisc2.dataTipSpinWaitTime  |> ignore
+                match descriptionTextHolder with 
+                | Some text -> text
+                | None -> FSharpToolTipText [ FSharpToolTipElement.Single(FSComp.SR.loadingDescription(), FSharpXmlDoc.None) ]
+
+            | Choice2Of2 result -> 
+                result
+
     member decl.Glyph = glyph      
       
 /// A table of declarations for Intellisense completion 
 []
-type DeclarationSet(declarations: Declaration[]) = 
+type FSharpDeclarationListInfo(declarations: FSharpDeclarationListItem[]) = 
 
     member self.Items = declarations
     
-    member self.Count = declarations.Length
-
-    member self.Name i = declarations.[i].Name
-
-    member self.Description i : DataTipText = 
-        ErrorScope.Protect Range.range0 (fun () -> declarations.[i].DescriptionText) (fun err -> DataTipText [DataTipElementCompositionError err])
-
-    member self.Glyph i = declarations.[i].Glyph
-            
     // Make a 'Declarations' object for a set of selected items
-    static member Create(infoReader:InfoReader, m, denv, items, syncop:(unit->unit)->unit, checkAlive : unit -> bool) = 
+    static member Create(infoReader:InfoReader, m, denv, items, reactor, checkAlive) = 
         let g = infoReader.g
          
         let items = items |> RemoveExplicitlySuppressed g
@@ -1266,7 +1287,7 @@ type DeclarationSet(declarations: Declaration[]) =
                     // Put type ctors after types, sorted by #typars. RemoveDuplicateItems will remove DefaultStructCtors if a type is also reported with this name
                     | Item.CtorGroup (_, (cinfo :: _)) -> 1000 + 10 * (tcrefOfAppTy g cinfo.EnclosingType).TyparsNoRange.Length 
                     | _ -> 0
-                (d.DisplayName g,n))
+                (d.DisplayName,n))
 
         // Remove all duplicates. We've put the types first, so this removes the DelegateCtor and DefaultStructCtor's.
         let items = items |> RemoveDuplicateItems g
@@ -1274,7 +1295,7 @@ type DeclarationSet(declarations: Declaration[]) =
         if verbose then dprintf "service.ml: mkDecls: %d found groups after filtering\n" (List.length items); 
 
         // Group by display name
-        let items = items |> List.groupBy (fun d -> d.DisplayName g) 
+        let items = items |> List.groupBy (fun d -> d.DisplayName) 
 
         // Filter out operators (and list)
         let items = 
@@ -1298,11 +1319,11 @@ type DeclarationSet(declarations: Declaration[]) =
                 match itemsWithSameName with
                 | [] -> failwith "Unexpected empty bag"
                 | items -> 
-                    new Declaration(nm, GlyphOfItem(denv,items.Head), Choice1Of2 (items, infoReader, m, denv, syncop, checkAlive)))
+                    new FSharpDeclarationListItem(nm, GlyphOfItem(denv,items.Head), Choice1Of2 (items, infoReader, m, denv, reactor, checkAlive)))
 
-        new DeclarationSet(Array.ofList decls)
+        new FSharpDeclarationListInfo(Array.ofList decls)
 
     
-    static member Error msg = new DeclarationSet([| new Declaration("", 0, Choice2Of2 (DataTipText [DataTipElementCompositionError msg])) |] )
-    static member Empty = new DeclarationSet([| |])
+    static member Error msg = new FSharpDeclarationListInfo([| new FSharpDeclarationListItem("", 0, Choice2Of2 (FSharpToolTipText [FSharpToolTipElement.CompositionError msg])) |] )
+    static member Empty = new FSharpDeclarationListInfo([| |])
 
diff --git a/src/fsharp/vs/ServiceDeclarations.fsi b/src/fsharp/vs/ServiceDeclarations.fsi
old mode 100644
new mode 100755
index cc011e3cd45..31a72e6742e
--- a/src/fsharp/vs/ServiceDeclarations.fsi
+++ b/src/fsharp/vs/ServiceDeclarations.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 //----------------------------------------------------------------------------
 // API to the compiler as an incremental service for parsing,
@@ -9,75 +9,100 @@ namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
 open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.Range
-open System.Collections.Generic
-open Microsoft.FSharp.Compiler.Env 
+open Microsoft.FSharp.Compiler.TcGlobals 
 open Microsoft.FSharp.Compiler.Infos
-open Microsoft.FSharp.Compiler.Nameres
+open Microsoft.FSharp.Compiler.NameResolution
 open Microsoft.FSharp.Compiler.Tast
 open Microsoft.FSharp.Compiler.Tastops
 
 /// Describe a comment as either a block of text or a file+signature reference into an intellidoc file.
 //
 // Note: instances of this type do not hold any references to any compiler resources.
-type internal XmlComment =
-    | XmlCommentNone
-    | XmlCommentText of string
-    | XmlCommentSignature of (*File:*) string * (*Signature:*)string
+[]
+type internal FSharpXmlDoc =
+    /// No documentation is available
+    | None
+    /// The text for documentation 
+    | Text of string
+    /// Indicates that the text for the documentation can be found in a .xml documentation file, using the given signature key
+    | XmlDocFileSignature of (*File:*) string * (*Signature:*)string
 
-/// A single data tip display element
+/// A single tool tip display element
 //
 // Note: instances of this type do not hold any references to any compiler resources.
-type internal DataTipElement = 
-    | DataTipElementNone
+[]
+type internal FSharpToolTipElement = 
+    | None
     /// A single type, method, etc with comment.
-    | DataTipElement of (* text *) string * XmlComment
-    /// A parameter of a method.
-    | DataTipElementParameter of string * XmlComment * string
+    | Single of (* text *) string * FSharpXmlDoc
+    /// A single parameter, with the parameter name.
+    | SingleParameter of (* text *) string * FSharpXmlDoc * string
     /// For example, a method overload group.
-    | DataTipElementGroup of ((* text *) string * XmlComment) list
+    | Group of ((* text *) string * FSharpXmlDoc) list
     /// An error occurred formatting this element
-    | DataTipElementCompositionError of string
+    | CompositionError of string
 
-/// Information for building a data tip box.
+/// Information for building a tool tip box.
 //
 // Note: instances of this type do not hold any references to any compiler resources.
-type internal DataTipText = 
+type internal FSharpToolTipText = 
     /// A list of data tip elements to display.
-    | DataTipText of DataTipElement list  
+    | FSharpToolTipText of FSharpToolTipElement list  
     
 []
+/// Represents a declaration in F# source code, with information attached ready for display by an editor.
+/// Returned by GetDeclarations.
+//
 // Note: this type holds a weak reference to compiler resources. 
-type internal Declaration =
+type internal FSharpDeclarationListItem =
+    /// Get the display name for the declaration.
     member Name : string
-    member DescriptionText : DataTipText
+    /// Get the description text for the declaration. Commputing this property may require using compiler
+    /// resources and may trigger execution of a type provider method to retrieve documentation.
+    ///
+    /// May return "Loading..." if timeout occurs
+    member DescriptionText : FSharpToolTipText
+    /// Get the description text, asynchronously.  Never returns "Loading...".
+    member DescriptionTextAsync : Async
+    /// Get the glyph integer for the declaration as used by Visual Studio.
     member Glyph : int
     
 []
+/// Represents a set of declarations in F# source code, with information attached ready for display by an editor.
+/// Returned by GetDeclarations.
+//
 // Note: this type holds a weak reference to compiler resources. 
-type internal DeclarationSet =
-    member Items : Declaration[]
+type internal FSharpDeclarationListInfo =
+    member Items : FSharpDeclarationListItem[]
 
     // Implementation details used by other code in the compiler    
-    static member internal Create : infoReader:InfoReader * m:range * denv:DisplayEnv * items:Item list * syncop:((unit->unit)->unit) * checkAlive:(unit -> bool) -> DeclarationSet
-    static member internal Error : message:string -> DeclarationSet
-    static member internal Empty : DeclarationSet
+    static member internal Create : infoReader:InfoReader * m:range * denv:DisplayEnv * items:Item list * reactor:IReactorOperations * checkAlive:(unit -> bool) -> FSharpDeclarationListInfo
+    static member internal Error : message:string -> FSharpDeclarationListInfo
+    static member Empty : FSharpDeclarationListInfo
 
 
-module internal TestHooks =
-    val FormatOverloadsToListScope                   : (DataTipElement->DataTipElement) -> System.IDisposable
-    
-    
 // implementation details used by other code in the compiler    
 module internal ItemDescriptionsImpl = 
     val isFunction : TcGlobals -> TType -> bool
     val ParamNameAndTypesOfUnaryCustomOperation : TcGlobals -> MethInfo -> ParamNameAndType list
-    val FormatDescriptionOfItem : bool -> InfoReader -> range -> DisplayEnv -> Item -> DataTipElement
+
+    val GetXmlDocSigOfEntityRef : InfoReader -> range -> EntityRef -> (string option * string) option
+    val GetXmlDocSigOfScopedValRef : TcGlobals -> TyconRef -> ValRef -> (string option * string) option
+    val GetXmlDocSigOfILFieldInfo : InfoReader -> range -> ILFieldInfo -> (string option * string) option
+    val GetXmlDocSigOfRecdFieldInfo : RecdFieldInfo -> (string option * string) option
+    val GetXmlDocSigOfUnionCaseInfo : UnionCaseInfo -> (string option * string) option
+    val GetXmlDocSigOfMethInfo : InfoReader -> range -> MethInfo -> (string option * string) option
+    val GetXmlDocSigOfValRef : TcGlobals -> ValRef -> (string option * string) option
+    val GetXmlDocSigOfProp : InfoReader -> range -> PropInfo -> (string option * string) option
+    val GetXmlDocSigOfEvent : InfoReader -> range -> EventInfo -> (string option * string) option
+    val FormatDescriptionOfItem : bool -> InfoReader -> range -> DisplayEnv -> Item -> FSharpToolTipElement
     val FormatReturnTypeOfItem  : InfoReader -> range -> DisplayEnv -> Item -> string
     val RemoveDuplicateItems : TcGlobals -> Item list -> Item list
     val RemoveExplicitlySuppressed : TcGlobals -> Item list -> Item list
     val GetF1Keyword : Item -> string option
-    val rangeOfItem : TcGlobals -> bool -> Item -> range option
+    val rangeOfItem : TcGlobals -> bool option -> Item -> range option
     val fileNameOfItem : TcGlobals -> string option -> range -> Item -> string
-
-
+    val FullNameOfItem : TcGlobals -> Item -> string
+    val ccuOfItem : TcGlobals -> Item -> CcuThunk option
+    val mutable ToolTipFault : string option
 
diff --git a/src/fsharp/vs/ServiceLexing.fs b/src/fsharp/vs/ServiceLexing.fs
old mode 100644
new mode 100755
index 975a03e6ba8..94c965792d0
--- a/src/fsharp/vs/ServiceLexing.fs
+++ b/src/fsharp/vs/ServiceLexing.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 //----------------------------------------------------------------------------
 // Open up the compiler as an incremental service for lexing.
@@ -9,27 +9,74 @@ namespace Microsoft.FSharp.Compiler.SourceCodeServices
 open System
 open System.IO
 open System.Collections.Generic
- 
 open Microsoft.FSharp.Compiler.AbstractIL.Internal  
 open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
-open Internal.Utilities.Debug
 open Microsoft.FSharp.Compiler.Parser
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.Ast
 open Microsoft.FSharp.Compiler.ErrorLogger
 open Microsoft.FSharp.Compiler.Lexhelp
 open Microsoft.FSharp.Compiler.Lib
+open Internal.Utilities.Debug
 
 type Position = int * int
 type Range = Position * Position
+
+module FSharpTokenTag = 
+    let Identifier = tagOfToken (IDENT "a")
+    let String = tagOfToken (STRING "a")
+
+    let IDENT = tagOfToken (IDENT "a")
+    let STRING = tagOfToken (STRING "a")
+    let LPAREN = tagOfToken LPAREN
+    let RPAREN = tagOfToken RPAREN
+    let LBRACK = tagOfToken LBRACK
+    let RBRACK = tagOfToken RBRACK
+    let LBRACE = tagOfToken LBRACE
+    let RBRACE = tagOfToken RBRACE
+    let LBRACK_LESS = tagOfToken LBRACK_LESS
+    let GREATER_RBRACK = tagOfToken GREATER_RBRACK
+    let LESS = tagOfToken (LESS true)
+    let GREATER = tagOfToken (GREATER true)
+    let LBRACK_BAR = tagOfToken LBRACK_BAR
+    let BAR_RBRACK = tagOfToken BAR_RBRACK
+    let PLUS_MINUS_OP = tagOfToken (PLUS_MINUS_OP "a")
+    let MINUS = tagOfToken MINUS
+    let STAR = tagOfToken STAR
+    let INFIX_STAR_DIV_MOD_OP = tagOfToken (INFIX_STAR_DIV_MOD_OP "a")
+    let PERCENT_OP = tagOfToken (PERCENT_OP "a")
+    let INFIX_AT_HAT_OP = tagOfToken (INFIX_AT_HAT_OP "a")
+    let QMARK = tagOfToken QMARK
+    let COLON = tagOfToken COLON
+    let EQUALS = tagOfToken EQUALS
+    let SEMICOLON = tagOfToken SEMICOLON
+    let COMMA = tagOfToken COMMA
+    let DOT = tagOfToken DOT
+    let DOT_DOT = tagOfToken DOT_DOT
+    let INT32_DOT_DOT = tagOfToken (INT32_DOT_DOT(0, true))
+    let UNDERSCORE = tagOfToken UNDERSCORE
+    let BAR = tagOfToken BAR
+    let COLON_GREATER = tagOfToken COLON_GREATER
+    let COLON_QMARK_GREATER = tagOfToken COLON_QMARK_GREATER
+    let COLON_QMARK = tagOfToken COLON_QMARK
+    let INFIX_BAR_OP = tagOfToken (INFIX_BAR_OP "a")
+    let INFIX_COMPARE_OP = tagOfToken (INFIX_COMPARE_OP "a")
+    let COLON_COLON = tagOfToken COLON_COLON
+    let AMP_AMP = tagOfToken AMP_AMP
+    let PREFIX_OP = tagOfToken (PREFIX_OP "a")
+    let COLON_EQUALS = tagOfToken COLON_EQUALS
+    let BAR_BAR = tagOfToken BAR_BAR
+    let RARROW = tagOfToken RARROW
+    let QUOTE = tagOfToken QUOTE
+
            
 /// This corresponds to a token categorization originally used in Visual Studio 2003.
 /// 
 /// NOTE: This corresponds to a token categorization originally used in Visual Studio 2003 and the original Babel source code.
 /// It is not clear it is a primary logical classification that should be being used in the 
 /// more recent language service work.
-type TokenColorKind =
+type FSharpTokenColorKind =
       Default = 0
     | Text = 0
     | Keyword = 1
@@ -45,12 +92,12 @@ type TokenColorKind =
     | TypeName = 11
 #endif
 
-/// Categorize an action the editor should take in respons to a token, e.g. brace matching
+/// Categorize an action the editor should take in response to a token, e.g. brace matching
 /// 
 /// NOTE: This corresponds to a token categorization originally used in Visual Studio 2003 and the original Babel source code.
 /// It is not clear it is a primary logical classification that should be being used in the 
 /// more recent language service work.
-type TriggerClass =
+type FSharpTokenTriggerClass =
       None         = 0x00000000
     | MemberSelect = 0x00000001
     | MatchBraces  = 0x00000002 
@@ -66,7 +113,7 @@ type TriggerClass =
 /// NOTE: This corresponds to a token categorization originally used in Visual Studio 2003 and the original Babel source code.
 /// It is not clear it is a primary logical classification that should be being used in the 
 /// more recent language service work.
-type TokenCharKind = 
+type FSharpTokenCharKind = 
       Default     = 0x00000000
     | Text        = 0x00000000
     | Keyword     = 0x00000001
@@ -81,112 +128,15 @@ type TokenCharKind =
 
 
 /// Information about a particular token from the tokenizer
-type TokenInformation = {
+type FSharpTokenInfo = {
     LeftColumn:int;
     RightColumn:int;
-    ColorClass:TokenColorKind;
-    CharClass:TokenCharKind;
-    TriggerClass:TriggerClass;
+    ColorClass:FSharpTokenColorKind;
+    CharClass:FSharpTokenCharKind;
+    FSharpTokenTriggerClass:FSharpTokenTriggerClass;
     Tag:int
-    TokenName:string }
-
-//----------------------------------------------------------------------------
-// Flags
-//--------------------------------------------------------------------------
-
-module internal Flags = 
-#if DEBUG
-    let loggingTypes             = System.Environment.GetEnvironmentVariable("mFSharp_Logging")
-    let logging                  = not (String.IsNullOrEmpty(loggingTypes))
-    let initialLoggingGUITypes   = loggingTypes
-    let loggingGUI               = not (String.IsNullOrEmpty(System.Environment.GetEnvironmentVariable("mFSharp_LogToWinForm")))
-    let loggingStdOut            = not (String.IsNullOrEmpty(System.Environment.GetEnvironmentVariable("mFSharp_LogToStdOut")))
-#else
-    let loggingTypes             = ""
-    let logging                  = false
-    let initialLoggingGUITypes   = ""
-    let loggingGUI               = false
-    let loggingStdOut            = false
-#endif
-    let doInit = 
-        if logging && not loggingGUI  && not loggingStdOut then  
-            let logFile = ("c:\\fsharp\\log-m"+System.IO.Path.GetFileName(System.AppDomain.CurrentDomain.FriendlyName)+".log") 
-            let traceFile = ("c:\\fsharp\\trace-m"+System.IO.Path.GetFileName(System.AppDomain.CurrentDomain.FriendlyName)+".txt") 
-            try
-                let log = (File.CreateText logFile  :> TextWriter)
-                setDiagnosticsChannel(Some(log));
-                progress := true;
-            with e->
-                // Don't kill the language service just because we couldn't log.
-                System.Diagnostics.Debug.Assert(false, e.ToString())                
-                ()
-            if logging then 
-                dprintf "Opened log file %s for ML, config follows\n" logFile
-                dprintf "logging types = %s\n" loggingTypes
-            Trace.Log <- loggingTypes
-            Trace.Out <- 
-                try 
-                    new StreamWriter(traceFile,append=false,encoding=System.Text.Encoding.UTF8) :> TextWriter
-                with e -> 
-                    // Don't kill the language service just because we couldn't log.
-                    System.Diagnostics.Debug.Assert(false, e.ToString())                
-                    System.Console.Out 
-                    
-        elif loggingStdOut then 
-            Trace.Log <- initialLoggingGUITypes
-            Trace.Out <- System.Console.Out
-        elif loggingGUI then 
-            let f = new System.Windows.Forms.Form(Visible=true,TopMost=true,Width=600,Height=600)
-            let memoryText = new System.Windows.Forms.TextBox(Text = "?? Kb", Width = 200)
-            let memoryButton = new System.Windows.Forms.Button(Text = "GC and update Mem", Left = 200)
-            memoryButton.Click.AddHandler(fun _ _ -> 
-                            GC.Collect()
-                            GC.WaitForPendingFinalizers()
-                            memoryText.Text <- sprintf "%d Kb" (GC.GetTotalMemory(false) / 1024L)
-                        )
-            f.Controls.Add(memoryText)
-            f.Controls.Add(memoryButton)            
-            let rb = new System.Windows.Forms.RichTextBox(Dock=System.Windows.Forms.DockStyle.Fill, Font=new System.Drawing.Font("courier new",8.0f), Top = memoryButton.Height)
-            f.Controls.Add(rb)
-            rb.DoubleClick.Add(fun _ -> rb.Clear())
-            let lab = new System.Windows.Forms.Label(Dock=System.Windows.Forms.DockStyle.Top, Font=new System.Drawing.Font("courier new",8.0f))
-            f.Controls.Add(lab)
-            let tb = new System.Windows.Forms.TextBox(Text=initialLoggingGUITypes,Height=10,Multiline=false,Dock=System.Windows.Forms.DockStyle.Top, Font=new System.Drawing.Font("courier new",8.0f))
-            f.Controls.Add(tb)
-            tb.TextChanged.Add (fun _ -> Trace.Log <- tb.Text) 
-            
-            let log = 
-                let addTextOnGuiThread text = 
-                    if not rb.IsDisposed then 
-                        rb.AppendText(text); 
-                        if text.Contains "\n" then 
-                            rb.ScrollToCaret();
-                            if rb.TextLength > 200000 then 
-                               let s = rb.Text
-                               rb.Text <- s.[s.Length - 100000..s.Length-1]
-                let addText text = 
-                    if f.InvokeRequired then 
-                        f.BeginInvoke(new System.Windows.Forms.MethodInvoker(fun () -> addTextOnGuiThread text)) |> ignore
-                    else
-                        addTextOnGuiThread text
-                    
-                { new System.IO.TextWriter() with 
-                      member x.Write(c:char) = addText (string c)
-                      member x.Write(s:string) =  addText  s
-                      member x.Encoding = System.Text.Encoding.Unicode } 
-            setDiagnosticsChannel(Some(log));
-            Trace.Log <- if initialLoggingGUITypes <> null then initialLoggingGUITypes else ""
-            Trace.Out <- log
-        else 
-            // Would be nice to leave this at whatever channel was originally assigned.
-            // This currently defeats NUnit's ability to capture logging output.
-            setDiagnosticsChannel(None) (* VS does not support stderr! *)
-
-    //let stripFSharpCoreReferences   = not (String.IsNullOrEmpty(System.Environment.GetEnvironmentVariable("mFSharp_StripFSharpCoreReferences")))
-    let init() = doInit
-        
-open Flags
-
+    TokenName:string;
+    FullMatchedLength: int }
 
 
 //----------------------------------------------------------------------------
@@ -206,29 +156,29 @@ module internal TokenClassifications =
             if s.Length <= 0 then 
                 System.Diagnostics.Debug.Assert(false, "BUG:Received zero length IDENT token.")
                 // This is related to 4783. Recover by treating as lower case identifier.
-                (TokenColorKind.Identifier,TokenCharKind.Identifier,TriggerClass.None)  
+                (FSharpTokenColorKind.Identifier,FSharpTokenCharKind.Identifier,FSharpTokenTriggerClass.None)  
             else 
                 if System.Char.ToUpperInvariant s.[0] = s.[0] then
-                    (TokenColorKind.UpperIdentifier,TokenCharKind.Identifier,TriggerClass.None)
+                    (FSharpTokenColorKind.UpperIdentifier,FSharpTokenCharKind.Identifier,FSharpTokenTriggerClass.None)
                 else
-                    (TokenColorKind.Identifier,TokenCharKind.Identifier,TriggerClass.None)  
+                    (FSharpTokenColorKind.Identifier,FSharpTokenCharKind.Identifier,FSharpTokenTriggerClass.None)  
 
         // 'in' when used in a 'join' in a query expression
         | JOIN_IN ->
-                    (TokenColorKind.Identifier,TokenCharKind.Identifier,TriggerClass.None)  
+                    (FSharpTokenColorKind.Identifier,FSharpTokenCharKind.Identifier,FSharpTokenTriggerClass.None)  
         | DECIMAL _
         | BIGNUM _ | INT8 _  | UINT8 _ | INT16 _  | UINT16 _ | INT32 _ | UINT32 _ | INT64 _ | UINT64 _ 
         | UNATIVEINT _ | NATIVEINT _ | IEEE32 _ |  IEEE64 _
-          -> (TokenColorKind.Number,TokenCharKind.Literal,TriggerClass.None)
+          -> (FSharpTokenColorKind.Number,FSharpTokenCharKind.Literal,FSharpTokenTriggerClass.None)
 
         | INT32_DOT_DOT _ 
           // This will color the whole "1.." expression in a 'number' color 
           // (this isn't entirely correct, but it'll work for now - see bug 3727)
-          -> (TokenColorKind.Number,TokenCharKind.Operator,TriggerClass.None)
+          -> (FSharpTokenColorKind.Number,FSharpTokenCharKind.Operator,FSharpTokenTriggerClass.None)
         
         | INFIX_STAR_DIV_MOD_OP ("mod"  | "land" |  "lor" | "lxor")
         | INFIX_STAR_STAR_OP ("lsl" | "lsr" | "asr")
-          -> (TokenColorKind.Keyword,TokenCharKind.Keyword,TriggerClass.None)
+          -> (FSharpTokenColorKind.Keyword,FSharpTokenCharKind.Keyword,FSharpTokenTriggerClass.None)
 
         | LPAREN_STAR_RPAREN
         | DOLLAR | COLON_GREATER  | COLON_COLON  
@@ -237,7 +187,7 @@ module internal TokenClassifications =
         | QUOTE   | STAR  | HIGH_PRECEDENCE_TYAPP 
         | COLON    | COLON_EQUALS   | LARROW | EQUALS | RQUOTE_DOT _
         | MINUS | ADJACENT_PREFIX_OP _  
-          -> (TokenColorKind.Operator,TokenCharKind.Operator,TriggerClass.None)
+          -> (FSharpTokenColorKind.Operator,FSharpTokenCharKind.Operator,FSharpTokenTriggerClass.None)
 
         | INFIX_COMPARE_OP _ // This is a whole family: .< .> .= .!= .$
         | FUNKY_OPERATOR_NAME _ // This is another whole family, including: .[] and .()
@@ -247,49 +197,49 @@ module internal TokenClassifications =
         | INFIX_BAR_OP _
         | INFIX_STAR_DIV_MOD_OP _
         | INFIX_AMP_OP _ ->
-                (TokenColorKind.Operator,TokenCharKind.Operator,TriggerClass.None)
+                (FSharpTokenColorKind.Operator,FSharpTokenCharKind.Operator,FSharpTokenTriggerClass.None)
 
         | DOT_DOT
           -> 
-            (TokenColorKind.Operator,TokenCharKind.Operator,TriggerClass.MemberSelect)
+            (FSharpTokenColorKind.Operator,FSharpTokenCharKind.Operator,FSharpTokenTriggerClass.MemberSelect)
 
         | COMMA
-          -> (TokenColorKind.Text,TokenCharKind.Delimiter,TriggerClass.ParamNext)
+          -> (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.ParamNext)
               
         | DOT 
-          -> (TokenColorKind.Operator,TokenCharKind.Delimiter,TriggerClass.MemberSelect)
+          -> (FSharpTokenColorKind.Operator,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.MemberSelect)
               
         | BAR
-          -> (TokenColorKind.Text,TokenCharKind.Delimiter,TriggerClass.None (* TriggerClass.ChoiceSelect *))
+          -> (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.None (* FSharpTokenTriggerClass.ChoiceSelect *))
               
         | HASH | UNDERSCORE   
         | SEMICOLON    | SEMICOLON_SEMICOLON
-          -> (TokenColorKind.Text,TokenCharKind.Delimiter,TriggerClass.None)
+          -> (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.None)
 
         | LESS  _
-          -> (TokenColorKind.Operator,TokenCharKind.Operator,TriggerClass.ParamStart)  // for type provider static arguments
+          -> (FSharpTokenColorKind.Operator,FSharpTokenCharKind.Operator,FSharpTokenTriggerClass.ParamStart)  // for type provider static arguments
         | GREATER _ 
-          -> (TokenColorKind.Operator,TokenCharKind.Operator,TriggerClass.ParamEnd)    // for type provider static arguments
+          -> (FSharpTokenColorKind.Operator,FSharpTokenCharKind.Operator,FSharpTokenTriggerClass.ParamEnd)    // for type provider static arguments
               
         | LPAREN
           // We need 'ParamStart' to trigger the 'GetDeclarations' method to show param info automatically
           // this is needed even if we don't use MPF for determining information about params
-          -> (TokenColorKind.Text,TokenCharKind.Delimiter, TriggerClass.ParamStart ||| TriggerClass.MatchBraces)
+          -> (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter, FSharpTokenTriggerClass.ParamStart ||| FSharpTokenTriggerClass.MatchBraces)
               
         | RPAREN | RPAREN_COMING_SOON | RPAREN_IS_HERE
-          -> (TokenColorKind.Text,TokenCharKind.Delimiter, TriggerClass.ParamEnd ||| TriggerClass.MatchBraces)
+          -> (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter, FSharpTokenTriggerClass.ParamEnd ||| FSharpTokenTriggerClass.MatchBraces)
               
         | LBRACK_LESS  | LBRACE_LESS
-          -> (TokenColorKind.Text,TokenCharKind.Delimiter,TriggerClass.None )
+          -> (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.None )
           
         | LQUOTE _  | LBRACK  | LBRACE | LBRACK_BAR 
-          -> (TokenColorKind.Text,TokenCharKind.Delimiter,TriggerClass.MatchBraces )
+          -> (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.MatchBraces )
           
         | GREATER_RBRACE   | GREATER_RBRACK  | GREATER_BAR_RBRACK
-          -> (TokenColorKind.Text,TokenCharKind.Delimiter,TriggerClass.None )
+          -> (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.None )
 
         | RQUOTE _  | RBRACK  | RBRACE | RBRACE_COMING_SOON | RBRACE_IS_HERE | BAR_RBRACK   
-          -> (TokenColorKind.Text,TokenCharKind.Delimiter,TriggerClass.MatchBraces )
+          -> (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.MatchBraces )
               
         | PUBLIC | PRIVATE | INTERNAL | BASE | GLOBAL
         | CONSTRAINT | INSTANCE | DELEGATE | INHERIT|CONSTRUCTOR|DEFAULT|OVERRIDE|ABSTRACT|CLASS
@@ -304,38 +254,38 @@ module internal TokenClassifications =
         | HIGH_PRECEDENCE_PAREN_APP
         | HIGH_PRECEDENCE_BRACK_APP
         | TYPE_COMING_SOON | TYPE_IS_HERE | MODULE_COMING_SOON | MODULE_IS_HERE
-          -> (TokenColorKind.Keyword,TokenCharKind.Keyword,TriggerClass.None)
+          -> (FSharpTokenColorKind.Keyword,FSharpTokenCharKind.Keyword,FSharpTokenTriggerClass.None)
               
         | BEGIN  
-          -> (TokenColorKind.Keyword,TokenCharKind.Keyword,TriggerClass.None)
+          -> (FSharpTokenColorKind.Keyword,FSharpTokenCharKind.Keyword,FSharpTokenTriggerClass.None)
 
         | END 
-          -> (TokenColorKind.Keyword,TokenCharKind.Keyword,TriggerClass.None)
+          -> (FSharpTokenColorKind.Keyword,FSharpTokenCharKind.Keyword,FSharpTokenTriggerClass.None)
         | HASH_LIGHT _
         | HASH_LINE _
         | HASH_IF _
         | HASH_ELSE _
         | HASH_ENDIF _ -> 
-            (TokenColorKind.PreprocessorKeyword,TokenCharKind.WhiteSpace,TriggerClass.None)
+            (FSharpTokenColorKind.PreprocessorKeyword,FSharpTokenCharKind.WhiteSpace,FSharpTokenTriggerClass.None)
         | INACTIVECODE _ -> 
-            (TokenColorKind.InactiveCode,TokenCharKind.WhiteSpace,TriggerClass.None)
+            (FSharpTokenColorKind.InactiveCode,FSharpTokenCharKind.WhiteSpace,FSharpTokenTriggerClass.None)
           
 
         | LEX_FAILURE _
         | WHITESPACE _ -> 
-            (TokenColorKind.Default,TokenCharKind.WhiteSpace,TriggerClass.None)
+            (FSharpTokenColorKind.Default,FSharpTokenCharKind.WhiteSpace,FSharpTokenTriggerClass.None)
 
         | COMMENT _ -> 
-            (TokenColorKind.Comment,TokenCharKind.Comment,TriggerClass.None)
+            (FSharpTokenColorKind.Comment,FSharpTokenCharKind.Comment,FSharpTokenTriggerClass.None)
         | LINE_COMMENT _ -> 
-            (TokenColorKind.Comment,TokenCharKind.LineComment,TriggerClass.None)
+            (FSharpTokenColorKind.Comment,FSharpTokenCharKind.LineComment,FSharpTokenTriggerClass.None)
         | STRING_TEXT _ -> 
-            (TokenColorKind.String,TokenCharKind.String,TriggerClass.None)
+            (FSharpTokenColorKind.String,FSharpTokenCharKind.String,FSharpTokenTriggerClass.None)
         | KEYWORD_STRING _ -> 
-           (TokenColorKind.Keyword,TokenCharKind.Keyword,TriggerClass.None)
+           (FSharpTokenColorKind.Keyword,FSharpTokenCharKind.Keyword,FSharpTokenTriggerClass.None)
         | BYTEARRAY _ | STRING  _
         | CHAR _ (* bug://2863 asks to color 'char' as "string" *)
-          -> (TokenColorKind.String,TokenCharKind.String,TriggerClass.None)
+          -> (FSharpTokenColorKind.String,FSharpTokenCharKind.String,FSharpTokenTriggerClass.None)
         | EOF _ -> failwith "tokenInfo"
 
 module internal TestExpose = 
@@ -344,9 +294,9 @@ module internal TestExpose =
     //----------------------------------------------------------------------------
     // Lexer states encoded to/from integers
     //--------------------------------------------------------------------------
-type LexState = int64
+type FSharpTokenizerLexState = int64
 
-type ColorState =
+type FSharpTokenizerColorState =
     | Token = 1
     | IfDefSkip = 3
     | String = 4
@@ -385,7 +335,7 @@ module internal LexerStateEncoding =
     // Note that this will discard all lexcont state, including the ifdefStack.
     let revertToDefaultLexCont = LexCont.Token []
 
-    let resize32 (i:int32) : LexState = int64 i
+    let resize32 (i:int32) : FSharpTokenizerLexState = int64 i
 
     let lexstateNumBits = 4
     let ncommentsNumBits = 2
@@ -417,7 +367,7 @@ module internal LexerStateEncoding =
     let bitOfBool b = if b then 1 else 0
     let boolOfBit n = (n = 1L)
         
-    let encodeLexCont (colorState:ColorState) ncomments (b:pos) ifdefStack light = 
+    let encodeLexCont (colorState:FSharpTokenizerColorState) ncomments (b:pos) ifdefStack light = 
         let mutable ifdefStackCount = 0
         let mutable ifdefStackBits = 0
         for ifOrElse in ifdefStack do
@@ -435,7 +385,7 @@ module internal LexerStateEncoding =
         ||| ((resize32 ifdefStackCount <<< ifdefstackCountStart) &&& ifdefstackCountMask)
         ||| ((resize32 ifdefStackBits <<< ifdefstackStart) &&& ifdefstackMask)
     
-    let decodeLexCont (state:LexState) = 
+    let decodeLexCont (state:FSharpTokenizerLexState) = 
         let mutable ifDefs = []
         let ifdefStackCount = (int32) ((state &&& ifdefstackCountMask) >>> ifdefstackCountStart)
         if ifdefStackCount>0 then 
@@ -445,7 +395,7 @@ module internal LexerStateEncoding =
                 let mask = 1 <<< bit
                 let ifDef = (if ifdefStack &&& mask = 0 then IfDefIf else IfDefElse)
                 ifDefs<-(ifDef,range0)::ifDefs
-        enum (int32 ((state &&& lexstateMask)  >>> lexstateStart)),
+        enum (int32 ((state &&& lexstateMask)  >>> lexstateStart)),
         (int32) ((state &&& ncommentsMask) >>> ncommentsStart),
         pos.Decode (int32 ((state &&& startPosMask) >>> startPosStart)),
         ifDefs,
@@ -454,39 +404,39 @@ module internal LexerStateEncoding =
     let encodeLexInt lightSyntaxStatus (lexcont:LexerWhitespaceContinuation) = 
         let tag,n1,p1,ifd = 
             match lexcont with 
-            | LexCont.Token ifd                                       -> ColorState.Token,                     0L,         pos0,    ifd
-            | LexCont.IfDefSkip (ifd,n,m)                             -> ColorState.IfDefSkip,                 resize32 n, m.Start, ifd
-            | LexCont.EndLine(LexerEndlineContinuation.Skip(ifd,n,m)) -> ColorState.EndLineThenSkip,           resize32 n, m.Start, ifd
-            | LexCont.EndLine(LexerEndlineContinuation.Token(ifd))    -> ColorState.EndLineThenToken,          0L,         pos0,    ifd
-            | LexCont.String (ifd,m)                                  -> ColorState.String,                    0L,         m.Start, ifd
-            | LexCont.Comment (ifd,n,m)                               -> ColorState.Comment,                   resize32 n, m.Start, ifd
-            | LexCont.SingleLineComment (ifd,n,m)                     -> ColorState.SingleLineComment,         resize32 n, m.Start, ifd
-            | LexCont.StringInComment (ifd,n,m)                       -> ColorState.StringInComment,           resize32 n, m.Start, ifd
-            | LexCont.VerbatimStringInComment (ifd,n,m)               -> ColorState.VerbatimStringInComment,   resize32 n, m.Start, ifd
-            | LexCont.TripleQuoteStringInComment (ifd,n,m)            -> ColorState.TripleQuoteStringInComment,resize32 n, m.Start, ifd
-            | LexCont.MLOnly (ifd,m)                                  -> ColorState.CamlOnly,                  0L,         m.Start, ifd
-            | LexCont.VerbatimString (ifd,m)                          -> ColorState.VerbatimString,            0L,         m.Start, ifd
-            | LexCont.TripleQuoteString (ifd,m)                       -> ColorState.TripleQuoteString,         0L,         m.Start, ifd
+            | LexCont.Token ifd                                       -> FSharpTokenizerColorState.Token,                     0L,         pos0,    ifd
+            | LexCont.IfDefSkip (ifd,n,m)                             -> FSharpTokenizerColorState.IfDefSkip,                 resize32 n, m.Start, ifd
+            | LexCont.EndLine(LexerEndlineContinuation.Skip(ifd,n,m)) -> FSharpTokenizerColorState.EndLineThenSkip,           resize32 n, m.Start, ifd
+            | LexCont.EndLine(LexerEndlineContinuation.Token(ifd))    -> FSharpTokenizerColorState.EndLineThenToken,          0L,         pos0,    ifd
+            | LexCont.String (ifd,m)                                  -> FSharpTokenizerColorState.String,                    0L,         m.Start, ifd
+            | LexCont.Comment (ifd,n,m)                               -> FSharpTokenizerColorState.Comment,                   resize32 n, m.Start, ifd
+            | LexCont.SingleLineComment (ifd,n,m)                     -> FSharpTokenizerColorState.SingleLineComment,         resize32 n, m.Start, ifd
+            | LexCont.StringInComment (ifd,n,m)                       -> FSharpTokenizerColorState.StringInComment,           resize32 n, m.Start, ifd
+            | LexCont.VerbatimStringInComment (ifd,n,m)               -> FSharpTokenizerColorState.VerbatimStringInComment,   resize32 n, m.Start, ifd
+            | LexCont.TripleQuoteStringInComment (ifd,n,m)            -> FSharpTokenizerColorState.TripleQuoteStringInComment,resize32 n, m.Start, ifd
+            | LexCont.MLOnly (ifd,m)                                  -> FSharpTokenizerColorState.CamlOnly,                  0L,         m.Start, ifd
+            | LexCont.VerbatimString (ifd,m)                          -> FSharpTokenizerColorState.VerbatimString,            0L,         m.Start, ifd
+            | LexCont.TripleQuoteString (ifd,m)                       -> FSharpTokenizerColorState.TripleQuoteString,         0L,         m.Start, ifd
         encodeLexCont tag n1 p1 ifd lightSyntaxStatus
         
 
-    let decodeLexInt (state:LexState) = 
+    let decodeLexInt (state:FSharpTokenizerLexState) = 
         let tag,n1,p1,ifd,lightSyntaxStatusInital = decodeLexCont state 
         let lexcont = 
             match tag with 
-            |  ColorState.Token                      -> LexCont.Token ifd
-            |  ColorState.IfDefSkip                  -> LexCont.IfDefSkip (ifd,n1,mkRange "file" p1 p1)
-            |  ColorState.String                     -> LexCont.String (ifd,mkRange "file" p1 p1)
-            |  ColorState.Comment                    -> LexCont.Comment (ifd,n1,mkRange "file" p1 p1)
-            |  ColorState.SingleLineComment          -> LexCont.SingleLineComment (ifd,n1,mkRange "file" p1 p1)
-            |  ColorState.StringInComment            -> LexCont.StringInComment (ifd,n1,mkRange "file" p1 p1)
-            |  ColorState.VerbatimStringInComment    -> LexCont.VerbatimStringInComment (ifd,n1,mkRange "file" p1 p1)
-            |  ColorState.TripleQuoteStringInComment -> LexCont.TripleQuoteStringInComment (ifd,n1,mkRange "file" p1 p1)
-            |  ColorState.CamlOnly                   -> LexCont.MLOnly (ifd,mkRange "file" p1 p1)
-            |  ColorState.VerbatimString             -> LexCont.VerbatimString (ifd,mkRange "file" p1 p1)
-            |  ColorState.TripleQuoteString          -> LexCont.TripleQuoteString (ifd,mkRange "file" p1 p1)
-            |  ColorState.EndLineThenSkip            -> LexCont.EndLine(LexerEndlineContinuation.Skip(ifd,n1,mkRange "file" p1 p1))
-            |  ColorState.EndLineThenToken           -> LexCont.EndLine(LexerEndlineContinuation.Token(ifd))
+            |  FSharpTokenizerColorState.Token                      -> LexCont.Token ifd
+            |  FSharpTokenizerColorState.IfDefSkip                  -> LexCont.IfDefSkip (ifd,n1,mkRange "file" p1 p1)
+            |  FSharpTokenizerColorState.String                     -> LexCont.String (ifd,mkRange "file" p1 p1)
+            |  FSharpTokenizerColorState.Comment                    -> LexCont.Comment (ifd,n1,mkRange "file" p1 p1)
+            |  FSharpTokenizerColorState.SingleLineComment          -> LexCont.SingleLineComment (ifd,n1,mkRange "file" p1 p1)
+            |  FSharpTokenizerColorState.StringInComment            -> LexCont.StringInComment (ifd,n1,mkRange "file" p1 p1)
+            |  FSharpTokenizerColorState.VerbatimStringInComment    -> LexCont.VerbatimStringInComment (ifd,n1,mkRange "file" p1 p1)
+            |  FSharpTokenizerColorState.TripleQuoteStringInComment -> LexCont.TripleQuoteStringInComment (ifd,n1,mkRange "file" p1 p1)
+            |  FSharpTokenizerColorState.CamlOnly                   -> LexCont.MLOnly (ifd,mkRange "file" p1 p1)
+            |  FSharpTokenizerColorState.VerbatimString             -> LexCont.VerbatimString (ifd,mkRange "file" p1 p1)
+            |  FSharpTokenizerColorState.TripleQuoteString          -> LexCont.TripleQuoteString (ifd,mkRange "file" p1 p1)
+            |  FSharpTokenizerColorState.EndLineThenSkip            -> LexCont.EndLine(LexerEndlineContinuation.Skip(ifd,n1,mkRange "file" p1 p1))
+            |  FSharpTokenizerColorState.EndLineThenToken           -> LexCont.EndLine(LexerEndlineContinuation.Token(ifd))
             | _ -> LexCont.Token [] 
         lightSyntaxStatusInital,lexcont
 
@@ -525,24 +475,24 @@ type SingleLineTokenState =
 
 /// Split a line into tokens and attach information about the tokens. This information is used by Visual Studio.
 []
-type internal LineTokenizer(text:string, 
+type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, 
+                            maxLength: int option,
                             filename : string, 
                             lexArgsLightOn : lexargs,
                             lexArgsLightOff : lexargs
                             ) = 
 
     let skip = false   // don't skip whitespace in the lexer 
-    let lexbuf = UnicodeLexing.StringAsLexbuf text
     
     let mutable singleLineTokenState = SingleLineTokenState.BeforeHash
-    let fsx = Build.IsScript(filename)
+    let fsx = CompileOps.IsScript(filename)
 
     // ----------------------------------------------------------------------------------
     // This implements post-processing of #directive tokens - not very elegant, but it works...
     // We get the whole "   #if IDENT // .. .. " thing as a single token from the lexer,
     // so we need to split it into tokens that are used by VS for colorization
     
-    // Stack for tokens that are split during postrpocessing    
+    // Stack for tokens that are split during postpocessing    
     let mutable tokenStack = new Stack<_>()
     let delayToken tok = tokenStack.Push(tok)
 
@@ -604,7 +554,7 @@ type internal LineTokenizer(text:string,
 
     do resetLexbufPos filename lexbuf 
     
-    member x.ScanToken(lexintInitial) : Option * LexState = 
+    member x.ScanToken(lexintInitial) : Option * FSharpTokenizerLexState = 
         use unwindBP = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse)
         use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> DiscardErrorsLogger)
 
@@ -620,7 +570,10 @@ type internal LineTokenizer(text:string,
                 let leftp = lexbuf.StartPos 
                 let rightp = lexbuf.EndPos 
                 let leftc = leftp.Column 
-                let rightc = if rightp.Line > leftp.Line then text.Length else rightp.Column 
+                let rightc = 
+                    match maxLength with 
+                    | Some mx when rightp.Line > leftp.Line -> mx
+                    | _ -> rightp.Column 
                 let rightc = rightc - 1   
                 leftc,rightc
 
@@ -633,7 +586,7 @@ type internal LineTokenizer(text:string,
                   let leftc, rightc = ColumnsOfCurrentToken()
                   
                   // Splits tokens like ">." into multiple tokens - this duplicates behavior from the 'lexfilter'
-                  // which cannot be (easily) used from the langauge service. The rules here are not always valid,
+                  // which cannot be (easily) used from the language service. The rules here are not always valid,
                   // because sometimes token shouldn't be split. However it is just for colorization & 
                   // for VS (which needs to recognize when user types ".").
                   match token with
@@ -646,7 +599,7 @@ type internal LineTokenizer(text:string,
                   | RQUOTE_DOT (s,raw) -> 
                       delayToken(DOT, rightc, rightc)
                       false, (RQUOTE (s,raw), leftc, rightc - 1)
-                  | INFIX_COMPARE_OP (Lexfilter.TyparsCloseOp(greaters,afterOp) as opstr) -> 
+                  | INFIX_COMPARE_OP (LexFilter.TyparsCloseOp(greaters,afterOp) as opstr) -> 
                       match afterOp with
                       | None -> ()
                       | Some tok -> delayToken(tok, leftc + greaters.Length, rightc)
@@ -708,7 +661,15 @@ type internal LineTokenizer(text:string,
                     // If we're using token from cache, we don't move forward with lexing
                     if isCached then lexcontInitial else LexerStateEncoding.computeNextLexState token lexcontInitial 
                 let tokenTag = tagOfToken token 
-                let tokenData = {TokenName = token_to_string token; LeftColumn=leftc; RightColumn=rightc;ColorClass=colorClass;CharClass=charClass;TriggerClass=triggerClass;Tag=tokenTag} 
+                let fullMatchedLength = lexbuf.EndPos.AbsoluteOffset - lexbuf.StartPos.AbsoluteOffset 
+                let tokenData = { TokenName = token_to_string token; 
+                                  LeftColumn=leftc; 
+                                  RightColumn=rightc;
+                                  ColorClass=colorClass;
+                                  CharClass=charClass;
+                                  FSharpTokenTriggerClass=triggerClass;
+                                  Tag=tokenTag;
+                                  FullMatchedLength=fullMatchedLength} 
                 Some(tokenData), lexcontFinal, tokenTag
                 
         // Get the final lex int and color state                
@@ -749,7 +710,7 @@ type internal LineTokenizer(text:string,
                     | _,"nowarn" -> 
                         // Merge both tokens into one.
                         let lexcontFinal = if (isCached) then lexcontInitial else LexerStateEncoding.computeNextLexState token lexcontInitial 
-                        let tokenData = {tokenData with RightColumn=rightc;ColorClass=TokenColorKind.PreprocessorKeyword;CharClass=TokenCharKind.Keyword;TriggerClass=TriggerClass.None} 
+                        let tokenData = {tokenData with RightColumn=rightc;ColorClass=FSharpTokenColorKind.PreprocessorKeyword;CharClass=FSharpTokenCharKind.Keyword;FSharpTokenTriggerClass=FSharpTokenTriggerClass.None} 
                         let lexintFinal = FinalState(lexcontFinal)
                         Some(tokenData),lexintFinal
                     | _ -> tokenDataOption,lexintFinal
@@ -763,13 +724,30 @@ type internal LineTokenizer(text:string,
             
         tokenDataOption, lexintFinal
 
+    static member ColorStateOfLexState (lexState: FSharpTokenizerLexState) = 
+        let tag,_ncomments,_position,_ifdefStack,_lightSyntaxStatusInital = LexerStateEncoding.decodeLexCont lexState 
+        tag
+
+    static member LexStateOfColorState (colorState: FSharpTokenizerColorState) = 
+        let ncomments = 0L
+        let position = pos0 
+        let ifdefStack = []
+        let light = true
+        LexerStateEncoding.encodeLexCont colorState ncomments position ifdefStack light
+
 []
-type SourceTokenizer(defineConstants : string list, filename : string) =     
+type FSharpSourceTokenizer(defineConstants : string list, filename : string) =     
     let lexResourceManager = new Lexhelp.LexResourceManager() 
 
     let lexArgsLightOn = mkLexargs(filename,defineConstants,LightSyntaxStatus(true,false),lexResourceManager, ref [],DiscardErrorsLogger) 
     let lexArgsLightOff = mkLexargs(filename,defineConstants,LightSyntaxStatus(false,false),lexResourceManager, ref [],DiscardErrorsLogger) 
     
     member this.CreateLineTokenizer(lineText: string) = 
-        LineTokenizer(lineText, filename, lexArgsLightOn, lexArgsLightOff)
+        let lexbuf = UnicodeLexing.StringAsLexbuf lineText
+        FSharpLineTokenizer(lexbuf, Some lineText.Length, filename, lexArgsLightOn, lexArgsLightOff)
+
+    
+    member this.CreateBufferTokenizer(bufferFiller) = 
+        let lexbuf = UnicodeLexing.FunctionAsLexbuf bufferFiller
+        FSharpLineTokenizer(lexbuf, None, filename, lexArgsLightOn, lexArgsLightOff)
 
diff --git a/src/fsharp/vs/ServiceLexing.fsi b/src/fsharp/vs/ServiceLexing.fsi
old mode 100644
new mode 100755
index 10df6ed8ab9..786bcad0995
--- a/src/fsharp/vs/ServiceLexing.fsi
+++ b/src/fsharp/vs/ServiceLexing.fsi
@@ -1,25 +1,43 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
 //----------------------------------------------------------------------------
-// API to the compiler as an incremental service for lexing.
+// Copyright (c) 2002-2012 Microsoft Corporation. 
+//
+// This source code is subject to terms and conditions of the Apache License, Version 2.0. A 
+// copy of the license can be found in the License.html file at the root of this distribution. 
+// By using this source code in any fashion, you are agreeing to be bound 
+// by the terms of the Apache License, Version 2.0.
+//
+// You must not remove this notice, or any other, from this software.
 //----------------------------------------------------------------------------
 
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
+open System.Collections.Generic
 open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.Range
-open System.Collections.Generic
 
 /// Represents encoded information for the end-of-line continutation of lexing
-type internal LexState = int64
+type FSharpTokenizerLexState = int64
 
-/// A line/column pair
-type internal Position = int * int
-
-/// A start-position/end-position pair
-type internal Range = Position * Position
+/// Represents stable information for the state of the laxing engine at the end of a line
+type internal FSharpTokenizerColorState =
+    | Token = 1
+    | IfDefSkip = 3
+    | String = 4
+    | Comment = 5
+    | StringInComment = 6
+    | VerbatimStringInComment = 7
+    | CamlOnly = 8
+    | VerbatimString = 9
+    | SingleLineComment = 10
+    | EndLineThenSkip = 11
+    | EndLineThenToken = 12
+    | TripleQuoteString = 13
+    | TripleQuoteStringInComment = 14
+    | InitialState = 0 
+    
 
-type internal TokenColorKind =
+/// Gives an indicattion of the color class to assign to the token an IDE
+type internal FSharpTokenColorKind =
     | Default = 0
     | Text = 0
     | Keyword = 1
@@ -35,7 +53,8 @@ type internal TokenColorKind =
     | TypeName = 11
 #endif
     
-type internal TriggerClass =
+/// Gives an indication of what should happen when the token is typed in an IDE
+type internal FSharpTokenTriggerClass =
     | None         = 0x00000000
     | MemberSelect = 0x00000001
     | MatchBraces  = 0x00000002
@@ -45,7 +64,8 @@ type internal TriggerClass =
     | ParamNext    = 0x00000020
     | ParamEnd     = 0x00000040    
     
-type internal TokenCharKind = 
+/// Gives an indication of the class to assign to the characters of the token an IDE
+type internal FSharpTokenCharKind = 
     | Default     = 0x00000000
     | Text        = 0x00000000
     | Keyword     = 0x00000001
@@ -57,43 +77,140 @@ type internal TokenCharKind =
     | WhiteSpace  = 0x00000008
     | LineComment = 0x00000009
     | Comment     = 0x0000000A    
+
+/// Some of the values in the field FSharpTokenInfo.Tag
+module internal FSharpTokenTag = 
+    /// Indicates the token is an identifier
+    val Identifier: int
+    /// Indicates the token is a string
+    val String : int
+    /// Indicates the token is an identifier (synonym for FSharpTokenTag.Identifer)
+    val IDENT : int
+    /// Indicates the token is an string (synonym for FSharpTokenTag.String)
+    val STRING : int
+    /// Indicates the token is a `(`
+    val LPAREN : int
+    /// Indicates the token is a `)`
+    val RPAREN : int
+    /// Indicates the token is a `[`
+    val LBRACK : int
+    /// Indicates the token is a `]`
+    val RBRACK : int
+    /// Indicates the token is a `{`
+    val LBRACE : int
+    /// Indicates the token is a `}`
+    val RBRACE : int
+    /// Indicates the token is a `[<`
+    val LBRACK_LESS : int
+    /// Indicates the token is a `>]`
+    val GREATER_RBRACK : int
+    /// Indicates the token is a `<`
+    val LESS : int
+    /// Indicates the token is a `>`
+    val GREATER : int
+    /// Indicates the token is a `[|`
+    val LBRACK_BAR : int
+    /// Indicates the token is a `|]`
+    val BAR_RBRACK : int
+    /// Indicates the token is a `+` or `-`
+    val PLUS_MINUS_OP : int
+    /// Indicates the token is a `-`
+    val MINUS : int
+    /// Indicates the token is a `*`
+    val STAR : int
+    /// Indicates the token is a `%`
+    val INFIX_STAR_DIV_MOD_OP : int
+    /// Indicates the token is a `%`
+    val PERCENT_OP : int
+    /// Indicates the token is a `^`
+    val INFIX_AT_HAT_OP : int
+    /// Indicates the token is a `?`
+    val QMARK : int
+    /// Indicates the token is a `:`
+    val COLON : int
+    /// Indicates the token is a `=`
+    val EQUALS : int
+    /// Indicates the token is a `;`
+    val SEMICOLON : int
+    /// Indicates the token is a `,`
+    val COMMA : int
+    /// Indicates the token is a `.`
+    val DOT : int
+    /// Indicates the token is a `..`
+    val DOT_DOT : int
+    /// Indicates the token is a `..`
+    val INT32_DOT_DOT : int
+    /// Indicates the token is a `..`
+    val UNDERSCORE : int
+    /// Indicates the token is a `_`
+    val BAR : int
+    /// Indicates the token is a `:>`
+    val COLON_GREATER : int
+    /// Indicates the token is a `:?>`
+    val COLON_QMARK_GREATER : int
+    /// Indicates the token is a `:?`
+    val COLON_QMARK : int
+    /// Indicates the token is a `|`
+    val INFIX_BAR_OP : int
+    /// Indicates the token is a `|`
+    val INFIX_COMPARE_OP : int
+    /// Indicates the token is a `::`
+    val COLON_COLON : int
+    /// Indicates the token is a `@@`
+    val AMP_AMP : int
+    /// Indicates the token is a `~`
+    val PREFIX_OP : int
+    /// Indicates the token is a `:=`
+    val COLON_EQUALS : int
+    /// Indicates the token is a `||`
+    val BAR_BAR : int
+    /// Indicates the token is a `->`
+    val RARROW : int
+    /// Indicates the token is a `"`
+    val QUOTE : int
     
 /// Information about a particular token from the tokenizer
-type internal TokenInformation = 
+type internal FSharpTokenInfo = 
     { /// Left column of the token.
       LeftColumn:int
       /// Right column of the token.
       RightColumn:int
-      ColorClass:TokenColorKind
-      CharClass:TokenCharKind
+      ColorClass:FSharpTokenColorKind
+      /// Gives an indication of the class to assign to the token an IDE
+      CharClass:FSharpTokenCharKind
       /// Actions taken when the token is typed
-      TriggerClass:TriggerClass
+      FSharpTokenTriggerClass:FSharpTokenTriggerClass
       /// The tag is an integer identifier for the token
       Tag:int
       /// Provides additional information about the token
-      TokenName:string }
+      TokenName:string;
+      /// The full length consumed by this match, including delayed tokens (which can be ignored in naive lexers)
+      FullMatchedLength: int }
 
 /// Object to tokenize a line of F# source code, starting with the given lexState.  The lexState should be 0 for
 /// the first line of text. Returns an array of ranges of the text and two enumerations categorizing the
-/// tokens and characters covered by that range, i.e. TokenColorKind and TokenCharKind.  The enumerations
+/// tokens and characters covered by that range, i.e. FSharpTokenColorKind and FSharpTokenCharKind.  The enumerations
 /// are somewhat adhoc but useful enough to give good colorization options to the user in an IDE.
 ///
 /// A new lexState is also returned.  An IDE-plugin should in general cache the lexState 
 /// values for each line of the edited code.
 [] 
-type internal LineTokenizer =
+type internal FSharpLineTokenizer =
     /// Scan one token from the line
-    member ScanToken : lexState:LexState -> TokenInformation option * LexState
+    member ScanToken : lexState:FSharpTokenizerLexState -> FSharpTokenInfo option * FSharpTokenizerLexState
+    static member ColorStateOfLexState : FSharpTokenizerLexState -> FSharpTokenizerColorState
+    static member LexStateOfColorState : FSharpTokenizerColorState -> FSharpTokenizerLexState
+    
 
 /// Tokenizer for a source file. Holds some expensive-to-compute resources at the scope of the file.
 []
-type internal SourceTokenizer =
-    new : conditionalDefines:string list * fileName:string -> SourceTokenizer
-    member CreateLineTokenizer : lineText:string -> LineTokenizer
+type internal FSharpSourceTokenizer =
+    new : conditionalDefines:string list * fileName:string -> FSharpSourceTokenizer
+    member CreateLineTokenizer : lineText:string -> FSharpLineTokenizer
+    member CreateBufferTokenizer : bufferFiller:(char[] * int * int -> int) -> FSharpLineTokenizer
     
 
 module internal TestExpose =     
-    val TokenInfo                                    : Parser.token -> (TokenColorKind * TokenCharKind * TriggerClass) 
+    val TokenInfo                                    : Parser.token -> (FSharpTokenColorKind * FSharpTokenCharKind * FSharpTokenTriggerClass) 
+
 
-module internal Flags =
-    val init : unit -> unit
\ No newline at end of file
diff --git a/src/fsharp/vs/ServiceNavigation.fs b/src/fsharp/vs/ServiceNavigation.fs
old mode 100644
new mode 100755
index 4d36f24fb32..1ae8527e7d3
--- a/src/fsharp/vs/ServiceNavigation.fs
+++ b/src/fsharp/vs/ServiceNavigation.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 //----------------------------------------------------------------------------
 // Open up the compiler as an incremental service for parsing,
@@ -8,15 +8,12 @@
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
 open Microsoft.FSharp.Compiler 
-open Internal.Utilities.Debug
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.Ast
+open Microsoft.FSharp.Compiler.SourceCodeServices.ItemDescriptionIcons 
 
-//----------------------------------------------------------------------------
-// Navigation items. 
-//--------------------------------------------------------------------------
-
-type DeclarationItemKind =
+/// Represents the differnt kinds of items that can appear in the navigation bar
+type FSharpNavigationDeclarationItemKind =
     | NamespaceDecl
     | ModuleFileDecl
     | ExnDecl
@@ -29,60 +26,57 @@ type DeclarationItemKind =
 
 /// Represents an item to be displayed in the navigation bar
 []
-type DeclarationItem(uniqueName : string, name : string, kind : DeclarationItemKind, glyph : int, range : range, bodyRange : range, singleTopLevel:bool) = 
+type FSharpNavigationDeclarationItem(uniqueName: string, name: string, kind: FSharpNavigationDeclarationItemKind, glyph: int, range: range, bodyRange: range, singleTopLevel:bool) = 
     
-    let range_of_m (m:range) = ((m.StartColumn, m.StartLine), (m.EndColumn, m.EndLine))
     member x.bodyRange = bodyRange
     
     member x.UniqueName = uniqueName
     member x.Name = name
     member x.Glyph = glyph
     member x.Kind = kind
-    member x.Range = range_of_m range
-    member x.BodyRange = range_of_m bodyRange 
+    member x.Range = range
+    member x.BodyRange = bodyRange 
     member x.IsSingleTopLevel = singleTopLevel
-    member x.WithUniqueName(uniqueName : string) =
-      DeclarationItem(uniqueName, name, kind, glyph, range, bodyRange, singleTopLevel)
-    static member Create(name : string, kind, glyph : int, range : range, bodyRange : range, singleTopLevel:bool) = 
-      DeclarationItem("", name, kind, glyph, range, bodyRange, singleTopLevel)
+    member x.WithUniqueName(uniqueName: string) =
+      FSharpNavigationDeclarationItem(uniqueName, name, kind, glyph, range, bodyRange, singleTopLevel)
+    static member Create(name: string, kind, glyph: int, range: range, bodyRange: range, singleTopLevel:bool) = 
+      FSharpNavigationDeclarationItem("", name, kind, glyph, range, bodyRange, singleTopLevel)
 
 /// Represents top-level declarations (that should be in the type drop-down)
 /// with nested declarations (that can be shown in the member drop-down)
 []
-type TopLevelDeclaration = 
-    { Declaration : DeclarationItem
-      Nested : DeclarationItem[] }
+type FSharpNavigationTopLevelDeclaration = 
+    { Declaration: FSharpNavigationDeclarationItem
+      Nested: FSharpNavigationDeclarationItem[] }
       
 /// Represents result of 'GetNavigationItems' operation - this contains
 /// all the members and currently selected indices. First level correspond to
 /// types & modules and second level are methods etc.
 []
-type NavigationItems(declarations:TopLevelDeclaration[]) =
+type FSharpNavigationItems(declarations:FSharpNavigationTopLevelDeclaration[]) =
     member x.Declarations = declarations
 
-open ItemDescriptionIcons 
-
 module NavigationImpl =
 
-    let union_ranges_checked r1 r2 = if r1 = range.Zero then r2 elif r2 = range.Zero then r1 else unionRanges r1 r2
+    let unionRangesChecked r1 r2 = if r1 = range.Zero then r2 elif r2 = range.Zero then r1 else unionRanges r1 r2
     
-    let range_of_decls' f decls = 
-      match (decls |> List.map (f >> (fun (d:DeclarationItem) -> d.bodyRange))) with 
-      | hd::tl -> tl |> List.fold (union_ranges_checked) hd
+    let rangeOfDecls2 f decls = 
+      match (decls |> List.map (f >> (fun (d:FSharpNavigationDeclarationItem) -> d.bodyRange))) with 
+      | hd::tl -> tl |> List.fold (unionRangesChecked) hd
       | [] -> range.Zero
     
-    let range_of_decls = range_of_decls' fst
+    let rangeOfDecls = rangeOfDecls2 fst
 
     let moduleRange (idm:range) others = 
-      union_ranges_checked idm.EndRange (range_of_decls' (fun (a, _, _) -> a) others)
+      unionRangesChecked idm.EndRange (rangeOfDecls2 (fun (a, _, _) -> a) others)
     
-    let fldspec_range fldspec =
+    let fldspecRange fldspec =
       match fldspec with
-      | UnionCaseFields(flds) -> flds |> List.fold (fun st (Field(_, _, _, _, _, _, _, m)) -> union_ranges_checked m st) range.Zero
+      | UnionCaseFields(flds) -> flds |> List.fold (fun st (Field(_, _, _, _, _, _, _, m)) -> unionRangesChecked m st) range.Zero
       | UnionCaseFullType(ty, _) -> ty.Range
       
     let bodyRange mb decls =
-      union_ranges_checked (range_of_decls decls) mb
+      unionRangesChecked (rangeOfDecls decls) mb
           
     /// Get information for implementation file        
     let getNavigationFromImplFile (modules:SynModuleOrNamespace list) =
@@ -100,20 +94,20 @@ module NavigationImpl =
         // Create declaration (for the left dropdown)                
         let createDeclLid(baseName, lid, kind, baseGlyph, m, bodym, nested) =
             let name = (if baseName <> "" then baseName + "." else "") + (textOfLid lid)
-            DeclarationItem.Create
+            FSharpNavigationDeclarationItem.Create
               (name, kind, baseGlyph * 6, m, bodym, false), (addItemName name), nested
             
         let createDecl(baseName, (id:Ident), kind, baseGlyph, m, bodym, nested) =
             let name = (if baseName <> "" then baseName + "." else "") + (id.idText)
-            DeclarationItem.Create
+            FSharpNavigationDeclarationItem.Create
               (name, kind, baseGlyph * 6, m, bodym, false), (addItemName name), nested
          
         // Create member-kind-of-thing for the right dropdown
         let createMemberLid(lid, kind, baseGlyph, m) =
-            DeclarationItem.Create(textOfLid lid, kind, baseGlyph * 6, m, m, false), (addItemName(textOfLid lid))
+            FSharpNavigationDeclarationItem.Create(textOfLid lid, kind, baseGlyph * 6, m, m, false), (addItemName(textOfLid lid))
 
         let createMember((id:Ident), kind, baseGlyph, m) =
-            DeclarationItem.Create(id.idText, kind, baseGlyph * 6, m, m, false), (addItemName(id.idText))
+            FSharpNavigationDeclarationItem.Create(id.idText, kind, baseGlyph * 6, m, m, false), (addItemName(id.idText))
             
 
         // Process let-binding
@@ -149,14 +143,14 @@ module NavigationImpl =
                 // F# class declaration
                 let members = processMembers membDefns |> snd
                 let nested = members@topMembers
-                ([ createDeclLid(baseName, lid, TypeDecl, iIconGroupClass, m, bodyRange mb nested, nested) ] : ((DeclarationItem * int * _) list))
+                ([ createDeclLid(baseName, lid, TypeDecl, iIconGroupClass, m, bodyRange mb nested, nested) ]: ((FSharpNavigationDeclarationItem * int * _) list))
             | SynTypeDefnRepr.Simple(simple, _) ->
                 // F# type declaration
                 match simple with
                 | SynTypeDefnSimpleRepr.Union(_, cases, mb) ->
                     let cases = 
                         [ for (UnionCase(_, id, fldspec, _, _, _)) in cases -> 
-                            createMember(id, OtherDecl, iIconGroupValueType, unionRanges (fldspec_range fldspec) id.idRange) ]
+                            createMember(id, OtherDecl, iIconGroupValueType, unionRanges (fldspecRange fldspec) id.idRange) ]
                     let nested = cases@topMembers              
                     [ createDeclLid(baseName, lid, TypeDecl, iIconGroupUnion, m, bodyRange mb nested, nested) ]
                 | SynTypeDefnSimpleRepr.Enum(cases, mb) -> 
@@ -181,7 +175,7 @@ module NavigationImpl =
                 | _ -> [] 
                   
         // Returns class-members for the right dropdown                  
-        and processMembers members : (range * list) = 
+        and processMembers members: (range * list) = 
             let members = members |> List.map (fun memb ->
                (memb.Range,
                 match memb with
@@ -197,7 +191,7 @@ module NavigationImpl =
                 | SynMemberDefn.Interface(_, Some(membs), _) ->
                     processMembers membs |> snd
                 | _ -> []  )) 
-            ((members |> Seq.map fst |> Seq.fold union_ranges_checked range.Zero),
+            ((members |> Seq.map fst |> Seq.fold unionRangesChecked range.Zero),
              (members |> List.map snd |> List.concat))
 
         // Process declarations in a module that belong to the right drop-down (let bindings)
@@ -207,7 +201,7 @@ module NavigationImpl =
 
         // Process declarations nested in a module that should be displayed in the left dropdown
         // (such as type declarations, nested modules etc.)                            
-        let rec processTopLevelDeclarations(baseName, decls) = decls |> List.collect (function
+        let rec processFSharpNavigationTopLevelDeclarations(baseName, decls) = decls |> List.collect (function
             | SynModuleDecl.ModuleAbbrev(id, lid, m) ->
                 [ createDecl(baseName, id, ModuleDecl, iIconGroupModule, m, rangeOfLid lid, []) ]
                 
@@ -217,15 +211,15 @@ module NavigationImpl =
                 let newBaseName = (if (baseName = "") then "" else baseName+".") + (textOfLid lid)
                 
                 // Get nested modules and types (for the left dropdown)
-                let other = processTopLevelDeclarations(newBaseName, decls)
-                createDeclLid(baseName, lid, ModuleDecl, iIconGroupModule, m, union_ranges_checked (range_of_decls nested) (moduleRange (rangeOfLid lid) other), nested)::other
+                let other = processFSharpNavigationTopLevelDeclarations(newBaseName, decls)
+                createDeclLid(baseName, lid, ModuleDecl, iIconGroupModule, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid lid) other), nested)::other
                   
             | SynModuleDecl.Types(tydefs, _) -> tydefs |> List.collect (processTycon baseName)                                    
                             
             | SynModuleDecl.Exception(ExceptionDefn(ExceptionDefnRepr(_, (UnionCase(_, id, fldspec, _, _, _)), _, _, _, _), membDefns, _), m) ->
-                // Exception declaraton
+                // Exception declaration
                 let nested = processMembers membDefns |> snd
-                [ createDecl(baseName, id, ExnDecl, iIconGroupException, m, fldspec_range fldspec, nested) ] 
+                [ createDecl(baseName, id, ExnDecl, iIconGroupException, m, fldspecRange fldspec, nested) ] 
             | _ -> [] )            
                   
         // Collect all the items  
@@ -237,14 +231,14 @@ module NavigationImpl =
                 // Find let bindings (for the right dropdown)
                 let nested = processNestedDeclarations(decls)
                 // Get nested modules and types (for the left dropdown)
-                let other = processTopLevelDeclarations(baseName, decls)
+                let other = processFSharpNavigationTopLevelDeclarations(baseName, decls)
                 
                 // Create explicitly - it can be 'single top level' thing that is hidden
                 let decl =
-                    DeclarationItem.Create
+                    FSharpNavigationDeclarationItem.Create
                         (textOfLid id, (if isModule then ModuleFileDecl else NamespaceDecl),
                             iIconGroupModule * 6, m, 
-                            union_ranges_checked (range_of_decls nested) (moduleRange (rangeOfLid id) other), 
+                            unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid id) other), 
                             singleTopLevel), (addItemName(textOfLid id)), nested
                 decl::other )
                   
@@ -256,6 +250,7 @@ module NavigationImpl =
                 nest |> Array.sortInPlaceWith (fun a b -> compare a.Name b.Name)
                 { Declaration = d.WithUniqueName(uniqueName d.Name idx); Nested = nest } )                  
         items |> Array.sortInPlaceWith (fun a b -> compare a.Declaration.Name b.Declaration.Name)
-        new NavigationItems(items)
+        new FSharpNavigationItems(items)
+
+    let empty = new FSharpNavigationItems([| |])
 
-    let empty = new NavigationItems([| |])
diff --git a/src/fsharp/vs/ServiceNavigation.fsi b/src/fsharp/vs/ServiceNavigation.fsi
old mode 100644
new mode 100755
index c69f14a2982..bb38167d86a
--- a/src/fsharp/vs/ServiceNavigation.fsi
+++ b/src/fsharp/vs/ServiceNavigation.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 //----------------------------------------------------------------------------
 // API to the compiler as an incremental service for parsing,
@@ -9,7 +9,8 @@ namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
 open Microsoft.FSharp.Compiler 
 
-type internal DeclarationItemKind =
+/// Indicates a kind of item to show in an F# navigation bar
+type internal FSharpNavigationDeclarationItemKind =
     | NamespaceDecl
     | ModuleFileDecl
     | ExnDecl
@@ -22,30 +23,31 @@ type internal DeclarationItemKind =
 
 /// Represents an item to be displayed in the navigation bar
 []
-type internal DeclarationItem = 
+type internal FSharpNavigationDeclarationItem = 
     member Name : string
     member UniqueName : string
     member Glyph : int
-    member Kind : DeclarationItemKind
-    member Range : Range
-    member BodyRange : Range
+    member Kind : FSharpNavigationDeclarationItemKind
+    member Range : Range.range
+    member BodyRange : Range.range
     member IsSingleTopLevel : bool
 
 /// Represents top-level declarations (that should be in the type drop-down)
 /// with nested declarations (that can be shown in the member drop-down)
 []
-type internal TopLevelDeclaration = 
-    { Declaration : DeclarationItem
-      Nested : DeclarationItem[] }
+type internal FSharpNavigationTopLevelDeclaration = 
+    { Declaration : FSharpNavigationDeclarationItem
+      Nested : FSharpNavigationDeclarationItem[] }
       
 /// Represents result of 'GetNavigationItems' operation - this contains
 /// all the members and currently selected indices. First level correspond to
 /// types & modules and second level are methods etc.
 []
-type internal NavigationItems =
-    member Declarations : TopLevelDeclaration[]
+type internal FSharpNavigationItems =
+    member Declarations : FSharpNavigationTopLevelDeclaration[]
 
 // implementation details used by other code in the compiler    
 module internal NavigationImpl =
-    val internal getNavigationFromImplFile : Ast.SynModuleOrNamespace list -> NavigationItems
-    val internal empty : NavigationItems
+    val internal getNavigationFromImplFile : Ast.SynModuleOrNamespace list -> FSharpNavigationItems
+    val internal empty : FSharpNavigationItems
+
diff --git a/src/fsharp/vs/ServiceParamInfoLocations.fs b/src/fsharp/vs/ServiceParamInfoLocations.fs
old mode 100644
new mode 100755
index b98fc71f5a6..c837b038677
--- a/src/fsharp/vs/ServiceParamInfoLocations.fs
+++ b/src/fsharp/vs/ServiceParamInfoLocations.fs
@@ -1,9 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-//----------------------------------------------------------------------------
-// Open up the compiler as an incremental service for parsing,
-// type checking and intellisense-like environment-reporting.
-//--------------------------------------------------------------------------
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
@@ -12,8 +7,15 @@ open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.Ast
 
 []
-type internal NoteworthyParamInfoLocations(longId : string list, longIdStartLocation : int*int, longIdEndLocation : int*int, openParenLocation : int*int, 
-                                           tupleEndLocations : (int*int)[], isThereACloseParen : bool, namedParamNames : string[]) =
+type FSharpNoteworthyParamInfoLocations(longId : string list, 
+                                        longIdRange: range,
+                                        openParenLocation : pos, 
+                                        tupleEndLocations : pos list, 
+                                        isThereACloseParen : bool, 
+                                        namedParamNames : string list) =
+
+    let tupleEndLocations = Array.ofList tupleEndLocations
+    let namedParamNames = Array.ofList namedParamNames
     let namedParamNames =
         if (tupleEndLocations.Length = namedParamNames.Length) then
             namedParamNames
@@ -25,13 +27,14 @@ type internal NoteworthyParamInfoLocations(longId : string list, longIdStartLoca
             assert(tupleEndLocations.Length = namedParamNames.Length + 1)
             [| yield! namedParamNames; yield null |]  // "null" is representation of a non-named param
     member this.LongId = longId
-    member this.LongIdStartLocation = longIdStartLocation
-    member this.LongIdEndLocation = longIdEndLocation
+    member this.LongIdStartLocation = longIdRange.Start
+    member this.LongIdEndLocation = longIdRange.End
     member this.OpenParenLocation = openParenLocation
     member this.TupleEndLocations = tupleEndLocations
     member this.IsThereACloseParen = isThereACloseParen
     member this.NamedParamNames = namedParamNames
 
+[]
 module internal NoteworthyParamInfoLocationsImpl =
 
     let isStaticArg a =
@@ -40,136 +43,126 @@ module internal NoteworthyParamInfoLocationsImpl =
         | SynType.LongIdent _ -> true // NOTE: this is not a static constant, but it is a prefix of incomplete code, e.g. "TP<42,Arg3" is a prefix of "TP<42,Arg3=6>" and Arg3 shows up as a LongId
         | _ -> false
 
-    let traverseInput(line,col,parseTree) : NoteworthyParamInfoLocations option =
-        let pos = Pos.fromVS line col  // line was 0-based, need 1-based
+    let rec digOutIdentFromApp synExpr =
+        // we found it, dig out ident
+        match synExpr with
+        | SynExpr.Ident(id) -> Some ([id.idText], id.idRange)
+        | SynExpr.LongIdent(_, LongIdentWithDots(lid,_), _, lidRange) -> Some (lid |> List.map textOfId, lidRange)
+        | SynExpr.DotGet(_expr, _dotm, LongIdentWithDots(lid,_), range) -> Some (lid |> List.map textOfId, range)
+        | SynExpr.TypeApp(synExpr, _, _synTypeList, _commas, _, _, _range) -> digOutIdentFromApp synExpr 
+        | _ -> None
 
-        let rec digOutIdentStartEndFromAnApp synExpr =
-            // we found it, dig out ident
-            match synExpr with
-            | SynExpr.Ident(id) ->
-                let r = [id.idText], [(id.idRange.StartLine, id.idRange.StartColumn+1); (id.idRange.EndLine, id.idRange.EndColumn+1)] // +1 because col are 0-based, but want 1-based
-                Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Dug out ident at range %+A from %+A" r synExpr)
-                Some r
-            | SynExpr.LongIdent(_, LongIdentWithDots(lid,_), _, lidRange) -> 
-                let r = (lid |> List.map (fun id -> id.idText)), [(lidRange.StartLine, lidRange.StartColumn+1); (lidRange.EndLine, lidRange.EndColumn+1)] // +1 because col are 0-based, but want 1-based
-                Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Dug out ident at range %+A from %+A" r synExpr)
-                Some r
-            | SynExpr.DotGet(_expr, _dotm, LongIdentWithDots(lid,_), range) -> 
-                let r = (lid |> List.map (fun id -> id.idText)), [(range.StartLine, range.StartColumn+1); (range.EndLine, range.EndColumn+1)] // +1 because col are 0-based, but want 1-based
-                Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Dug out ident at range %+A from %+A" r synExpr)
-                Some r
-            | SynExpr.TypeApp(synExpr, _, _synTypeList, _commas, _, _, _range) -> // TODO?
-                match digOutIdentStartEndFromAnApp synExpr with
-                | Some(_lid, [(_sl,_sc); (_el,_ec)]) as r->
-                    r  // Note: we record the ident-end after the ident but before the typeargs, e.g. $ not ^ in "foo$^("
-                | x -> 
-                    ignore(x)
-                    None
-            | x ->
-                ignore(x)
-                None
+    let digOutIdentFromStaticArg synType =
+        match synType with 
+        | SynType.StaticConstantNamed(SynType.LongIdent(LongIdentWithDots([id],_)),_,_) -> id.idText 
+        | SynType.LongIdent(LongIdentWithDots([id],_)) -> id.idText // NOTE: again, not a static constant, but may be a prefix of a Named in incomplete code
+        | _ -> null 
 
-        let getNamedParamName e =
-            match e with
-            // f(x=4)
-            | SynExpr.App(ExprAtomicFlag.NonAtomic, _,
-                          SynExpr.App(ExprAtomicFlag.NonAtomic, true,
-                                      SynExpr.Ident op, 
-                                      SynExpr.Ident n, 
-                                      _range),
-                          _, _) when op.idText="op_Equality" -> n.idText
-            // f(?x=4)
-            | SynExpr.App(ExprAtomicFlag.NonAtomic, _,
-                          SynExpr.App(ExprAtomicFlag.NonAtomic, true,
-                                      SynExpr.Ident op, 
-                                      SynExpr.LongIdent(true(*isOptional*),LongIdentWithDots([n],_),_ref,_lidrange), _range), 
-                          _, _) when op.idText="op_Equality" -> n.idText
-            | _ -> null
+    let getNamedParamName e =
+        match e with
+        // f(x=4)
+        | SynExpr.App(ExprAtomicFlag.NonAtomic, _,
+                        SynExpr.App(ExprAtomicFlag.NonAtomic, true,
+                                    SynExpr.Ident op, 
+                                    SynExpr.Ident n, 
+                                    _range),
+                        _, _) when op.idText="op_Equality" -> n.idText
+        // f(?x=4)
+        | SynExpr.App(ExprAtomicFlag.NonAtomic, _,
+                        SynExpr.App(ExprAtomicFlag.NonAtomic, true,
+                                    SynExpr.Ident op, 
+                                    SynExpr.LongIdent(true(*isOptional*),LongIdentWithDots([n],_),_ref,_lidrange), _range), 
+                        _, _) when op.idText="op_Equality" -> n.idText
+        | _ -> null
 
-        let rec astFindNoteworthyParamInfoLocationsSynExprExactParen traverseSynExpr expr =
-            // This method returns a tuple, where the second element is
-            //     Some(cache)    if the implementation called 'traverseSynExpr expr', then 'cache' is the result of that call
-            //     None           otherwise
-            // so that callers can avoid recomputing 'traverseSynExpr expr' if it's already been done.  This is very important for perf, 
-            // see bug 345385.
-            let handleSingleArg(synExpr, parenRange, rpRangeOpt : _ option) =
-                let inner = traverseSynExpr synExpr
-                match inner with
-                | None ->
-                    if AstTraversal.rangeContainsPosEdgesExclusive parenRange pos then
-                        let r = (parenRange.StartLine, parenRange.StartColumn+1), 
-                                    [parenRange.EndLine, parenRange.EndColumn+1, getNamedParamName synExpr],  // +1 because col are 0-based, but want 1-based
-                                    rpRangeOpt.IsSome
-                        Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found single arg paren range %+A from %+A" r expr)
-                        Some r, None
-                    else
-                        None, None
-                | _ -> None, None
+    let getTypeName(synType) =
+        match synType with
+        | SynType.LongIdent(LongIdentWithDots(ids,_)) -> ids |> List.map textOfId
+        | _ -> [""] // TODO type name for other cases, see also unit test named "ParameterInfo.LocationOfParams.AfterQuicklyTyping.CallConstructorViaLongId.Bug94333"
 
-            match expr with 
-            | SynExprParen((SynExpr.Tuple(synExprList, commaRanges, _tupleRange) as synExpr), _lpRange, rpRangeOpt, parenRange) -> // tuple argument
-                let inner = traverseSynExpr synExpr
-                match inner with
-                | None ->
-                    if AstTraversal.rangeContainsPosEdgesExclusive parenRange pos then
-                        let r = (parenRange.StartLine, parenRange.StartColumn+1), 
-                                  ((synExprList,commaRanges@[parenRange]) ||> List.map2 (fun e c -> c.EndLine, c.EndColumn+1, getNamedParamName e)),  // +1 because col are 0-based, but want 1-based
-                                  rpRangeOpt.IsSome
-                        Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found paren tuple ranges %+A from %+A" r expr)
-                        Some r, None
-                    else
-                        None, None
-                | _ -> None, None
-            | SynExprParen(SynExprParen(SynExpr.Tuple(_,_,_),_,_,_) as synExpr, _, rpRangeOpt, parenRange) -> // f((x,y)) is special, single tuple arg
-                handleSingleArg(synExpr,parenRange,rpRangeOpt)
-            | SynExprParen(SynExprParen(_,_,_,_) as synExpr, _, _, _parenRange) -> // dig into multiple parens
-                let r,_cacheOpt = astFindNoteworthyParamInfoLocationsSynExprExactParen traverseSynExpr synExpr
-                r, None
-            | SynExprParen(synExpr, _lpRange, rpRangeOpt, parenRange) -> // single argument
-                handleSingleArg(synExpr,parenRange,rpRangeOpt)
-            | SynExpr.ArbitraryAfterError(_debugStr, range) -> // single argument when e.g. after open paren you hit EOF
-                if AstTraversal.rangeContainsPosEdgesExclusive range pos then
-                    let r = (range.StartLine, range.StartColumn+1), [range.EndLine, range.EndColumn+1, null], false  // +1 because col are 0-based, but want 1-based
-                    Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found ArbitraryAfterError range %+A from %+A" r expr)
+    // This method returns a tuple, where the second element is
+    //     Some(cache)    if the implementation called 'traverseSynExpr expr', then 'cache' is the result of that call
+    //     None           otherwise
+    // so that callers can avoid recomputing 'traverseSynExpr expr' if it's already been done.  This is very important for perf, 
+    // see bug 345385.
+    let rec astFindNoteworthyParamInfoLocationsSynExprExactParen traverseSynExpr pos expr =
+        let handleSingleArg(synExpr, parenRange, rpRangeOpt : _ option) =
+            let inner = traverseSynExpr synExpr
+            match inner with
+            | None ->
+                if AstTraversal.rangeContainsPosEdgesExclusive parenRange pos then
+                    let r = parenRange.Start, [parenRange.End, getNamedParamName synExpr], rpRangeOpt.IsSome
+                    Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found single arg paren range %+A from %+A" r expr)
                     Some r, None
                 else
                     None, None
-            | SynExpr.Const(SynConst.Unit, unitRange) ->
-                if AstTraversal.rangeContainsPosEdgesExclusive unitRange pos then
-                    let r = (unitRange.StartLine, unitRange.StartColumn+1), [unitRange.EndLine, unitRange.EndColumn+1, null], true  // +1 because col are 0-based, but want 1-based
-                    Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found unit range %+A from %+A" r expr)
+            | _ -> None, None
+
+        match expr with 
+        | SynExprParen((SynExpr.Tuple(synExprList, commaRanges, _tupleRange) as synExpr), _lpRange, rpRangeOpt, parenRange) -> // tuple argument
+            let inner = traverseSynExpr synExpr
+            match inner with
+            | None ->
+                if AstTraversal.rangeContainsPosEdgesExclusive parenRange pos then
+                    let r = parenRange.Start, ((synExprList,commaRanges@[parenRange]) ||> List.map2 (fun e c -> c.End, getNamedParamName e)), rpRangeOpt.IsSome
+                    Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found paren tuple ranges %+A from %+A" r expr)
                     Some r, None
                 else
                     None, None
-            | e -> 
-                let inner = traverseSynExpr e
-                match inner with
-                | None ->
-                    if AstTraversal.rangeContainsPosEdgesExclusive e.Range pos then
-                        // any other expression doesn't start with parens, so if it was the target of an App, then it must be a single argument e.g. "f x"
-                        let r = (e.Range.StartLine, e.Range.StartColumn+1), [e.Range.EndLine, e.Range.EndColumn+1, null], false  // +1 because col are 0-based, but want 1-based
-                        Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found non-parenthesized single arg range %+A from %+A" r expr)
-                        Some r, Some inner
-                    else
-                        None, Some inner
-                | _ -> None, Some inner
+            | _ -> None, None
+
+        | SynExprParen(SynExprParen(SynExpr.Tuple(_,_,_),_,_,_) as synExpr, _, rpRangeOpt, parenRange) -> // f((x,y)) is special, single tuple arg
+            handleSingleArg(synExpr,parenRange,rpRangeOpt)
 
-        let getTypeName(synType) =
-            match synType with
-            | SynType.LongIdent(LongIdentWithDots(ids,_)) -> ids |> List.map (fun id -> id.idText)
-            | _ -> [""] // TODO type name for other cases, see also unit test named "ParameterInfo.LocationOfParams.AfterQuicklyTyping.CallConstructorViaLongId.Bug94333"
+        // dig into multiple parens
+        | SynExprParen(SynExprParen(_,_,_,_) as synExpr, _, _, _parenRange) -> 
+            let r,_cacheOpt = astFindNoteworthyParamInfoLocationsSynExprExactParen traverseSynExpr pos synExpr
+            r, None
 
-        AstTraversal.Traverse(line,col,parseTree, { new AstTraversal.AstVisitorBase<_>() with
+        | SynExprParen(synExpr, _lpRange, rpRangeOpt, parenRange) -> // single argument
+            handleSingleArg(synExpr,parenRange,rpRangeOpt)
+
+        | SynExpr.ArbitraryAfterError(_debugStr, range) -> // single argument when e.g. after open paren you hit EOF
+            if AstTraversal.rangeContainsPosEdgesExclusive range pos then
+                let r = range.Start, [range.End, null], false  
+                Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found ArbitraryAfterError range %+A from %+A" r expr)
+                Some r, None
+            else
+                None, None
+
+        | SynExpr.Const(SynConst.Unit, unitRange) ->
+            if AstTraversal.rangeContainsPosEdgesExclusive unitRange pos then
+                let r = unitRange.Start, [unitRange.End, null], true 
+                Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found unit range %+A from %+A" r expr)
+                Some r, None
+            else
+                None, None
+
+        | e -> 
+            let inner = traverseSynExpr e
+            match inner with
+            | None ->
+                if AstTraversal.rangeContainsPosEdgesExclusive e.Range pos then
+                    // any other expression doesn't start with parens, so if it was the target of an App, then it must be a single argument e.g. "f x"
+                    let r = e.Range.Start, [e.Range.End, null], false
+                    Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found non-parenthesized single arg range %+A from %+A" r expr)
+                    Some r, Some inner
+                else
+                    None, Some inner
+            | _ -> None, Some inner
+
+    let traverseInput(pos,parseTree) : FSharpNoteworthyParamInfoLocations option =
+
+        AstTraversal.Traverse(pos,parseTree, { new AstTraversal.AstVisitorBase<_>() with
         member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) =
             let expr = expr // fix debug locals
             match expr with
             | SynExpr.New(_, synType, synExpr, _range) -> // TODO walk SynType
-                let constrArgsResult,cacheOpt = astFindNoteworthyParamInfoLocationsSynExprExactParen traverseSynExpr synExpr
+                let constrArgsResult,cacheOpt = astFindNoteworthyParamInfoLocationsSynExprExactParen traverseSynExpr pos synExpr
                 match constrArgsResult,cacheOpt with
                 | Some(parenLoc,args,isThereACloseParen), _ ->
                     let typename = getTypeName synType
-                    let r = NoteworthyParamInfoLocations(typename, (synType.Range.StartLine, synType.Range.StartColumn+1), (synType.Range.EndLine, synType.Range.EndColumn+1), // +1 because col are 0-based, but want 1-based
-                                                         parenLoc, args |> Seq.map (fun (l,c,_n) -> l,c) |> Seq.toArray, isThereACloseParen, args |> Seq.map (fun (_l,_c,n) -> n) |> Seq.toArray)
+                    let r = FSharpNoteworthyParamInfoLocations(typename, synType.Range, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)
                     Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found 'new' call with ranges %+A from %+A" r expr)
                     Some(r)
                 | None, Some(cache) ->
@@ -181,21 +174,20 @@ module internal NoteworthyParamInfoLocationsImpl =
                 match fResult with
                 | Some(_) -> fResult
                 | _ ->
-                    let xResult,cacheOpt = astFindNoteworthyParamInfoLocationsSynExprExactParen traverseSynExpr synExpr2
+                    let xResult,cacheOpt = astFindNoteworthyParamInfoLocationsSynExprExactParen traverseSynExpr pos synExpr2
                     match xResult,cacheOpt with
                     | Some(parenLoc,args,isThereACloseParen),_ ->
                         // we found it, dig out ident
-                        match digOutIdentStartEndFromAnApp synExpr with
-                        | Some(lid,[lidStart; lidEnd]) -> 
-                            assert(isInfix = (parenLoc < lidEnd))
+                        match digOutIdentFromApp synExpr with
+                        | Some(lid,lidRange) -> 
+                            assert(isInfix = (posLt parenLoc lidRange.End))
                             if isInfix then
                                 // This seems to be an infix operator, since the start of the argument is a position earlier than the end of the long-id being applied to it.
                                 // For now, we don't support infix operators.
                                 Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found apparent infix operator, ignoring dug-out ident from %+A" expr)
                                 None
                             else
-                                let r = NoteworthyParamInfoLocations(lid, lidStart, lidEnd, parenLoc, args |> Seq.map (fun (l,c,_n) -> l,c) |> Seq.toArray, 
-                                                                     isThereACloseParen, args |> Seq.map (fun (_l,_c,n) -> n) |> Seq.toArray)
+                                let r = FSharpNoteworthyParamInfoLocations(lid, lidRange, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)
                                 Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found app with ranges %+A from %+A" r expr)
                                 Some r
                         | x ->
@@ -203,84 +195,71 @@ module internal NoteworthyParamInfoLocationsImpl =
                             None
                     | None, Some(cache) -> cache
                     | _ -> traverseSynExpr synExpr2
+
             | SynExpr.TypeApp(synExpr, openm, tyArgs, commas, closemOpt, _, wholem) as seta ->
                 match traverseSynExpr synExpr with
                 | Some _ as r -> r
                 | None -> 
                     let typeArgsm = mkRange openm.FileName openm.Start wholem.End 
                     if AstTraversal.rangeContainsPosEdgesExclusive typeArgsm pos && tyArgs |> List.forall isStaticArg then
-                        // +1s because col are 0-based, but want 1-based
-                        let r = NoteworthyParamInfoLocations(["dummy"], // TODO synExpr, but LongId?
-                                                             (synExpr.Range.StartLine, synExpr.Range.StartColumn+1),
-                                                             (synExpr.Range.EndLine, synExpr.Range.EndColumn+1), 
-                                                             (openm.StartLine, openm.StartColumn+1), 
-                                                             commas |> Seq.map (fun c -> c.EndLine, c.EndColumn+1) 
-                                                                    |> (fun cs -> Seq.append cs [(wholem.EndLine, wholem.EndColumn+1)] )
-                                                                    |> Seq.toArray, 
-                                                             Option.isSome closemOpt, 
-                                                             tyArgs |> Seq.map (function 
-                                                                              | SynType.StaticConstantNamed(SynType.LongIdent(LongIdentWithDots([id],_)),_,_) -> id.idText 
-                                                                              | SynType.LongIdent(LongIdentWithDots([id],_)) -> id.idText // NOTE: again, not a static constant, but may be a prefix of a Named in incomplete code
-                                                                              | _ -> null
-                                                                              ) |> Seq.toArray)
+                        let r = FSharpNoteworthyParamInfoLocations(["dummy"], // TODO synExpr, but LongId?
+                                                             synExpr.Range, 
+                                                             openm.Start, 
+                                                             [ for c in commas -> c.End
+                                                               yield wholem.End ], 
+                                                             closemOpt.IsSome, 
+                                                             tyArgs |> List.map digOutIdentFromStaticArg)
                         Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found SynExpr.TypeApp with ranges %+A from %+A" r seta)
                         Some r
                     else
                         None
+
             | _ -> defaultTraverse expr
+
         member this.VisitTypeAbbrev(tyAbbrevRhs,_m) =
             match tyAbbrevRhs with
             | SynType.App(SynType.LongIdent(LongIdentWithDots(lid,_) as lidwd), Some(openm), args, commas, closemOpt, _pf, wholem) ->
                 let lidm = lidwd.Range
                 let betweenTheBrackets = mkRange wholem.FileName openm.Start wholem.End
                 if AstTraversal.rangeContainsPosEdgesExclusive betweenTheBrackets pos && args |> List.forall isStaticArg then
-                    // +1s because col are 0-based, but want 1-based
-                    let r = NoteworthyParamInfoLocations(lid |> List.map (fun id -> id.idText), 
-                                                            (lidm.StartLine, lidm.StartColumn+1),
-                                                            (lidm.EndLine, lidm.EndColumn+1), 
-                                                            (openm.StartLine, openm.StartColumn+1), 
-                                                            commas |> Seq.map (fun c -> c.EndLine, c.EndColumn+1) 
-                                                                |> (fun cs -> Seq.append cs [(wholem.EndLine, wholem.EndColumn+1)] )
-                                                                |> Seq.toArray, 
-                                                            Option.isSome closemOpt, 
-                                                            args |> Seq.map (function 
-                                                                            | SynType.StaticConstantNamed(SynType.LongIdent(LongIdentWithDots([id],_)),_,_) -> id.idText 
-                                                                            | SynType.LongIdent(LongIdentWithDots([id],_)) -> id.idText // NOTE: again, not a static constant, but may be a prefix of a Named in incomplete code
-                                                                            | _ -> null
-                                                                            ) |> Seq.toArray)
+                    let r = FSharpNoteworthyParamInfoLocations(lid |> List.map textOfId, lidm, openm.Start, 
+                                                            [ for c in commas -> c.End
+                                                              yield wholem.End ], 
+                                                            closemOpt.IsSome, 
+                                                            args |> List.map digOutIdentFromStaticArg)
                     Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found type abbrev ty-app with ranges %+A from %+A" r tyAbbrevRhs)
                     Some r
                 else
                     None
             | _ ->
                 None
+
         member this.VisitImplicitInherit(defaultTraverse, ty, expr, m) =
             match defaultTraverse expr with
             | Some _ as r -> r
             | None ->
                 let inheritm = mkRange m.FileName m.Start m.End 
                 if AstTraversal.rangeContainsPosEdgesExclusive inheritm pos then
-                    // inherit ty(expr)    ---   treate it like an application (constructor call)
-                    let xResult,_cacheOpt = astFindNoteworthyParamInfoLocationsSynExprExactParen defaultTraverse expr
+                    // inherit ty(expr)    ---   treat it like an application (constructor call)
+                    let xResult,_cacheOpt = astFindNoteworthyParamInfoLocationsSynExprExactParen defaultTraverse pos expr
                     match xResult with
                     | Some(parenLoc,args,isThereACloseParen) ->
                         // we found it, dig out ident
                         let typename = getTypeName ty
-                        let r = NoteworthyParamInfoLocations(typename, (ty.Range.StartLine, ty.Range.StartColumn+1), (ty.Range.EndLine, ty.Range.EndColumn+1), // +1 because col are 0-based, but want 1-based
-                                                             parenLoc, args |> Seq.map (fun (l,c,_n) -> l,c) |> Seq.toArray, 
-                                                             isThereACloseParen, args |> Seq.map (fun (_l,_c,n) -> n) |> Seq.toArray)
+                        let r = FSharpNoteworthyParamInfoLocations(typename, ty.Range, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)
                         Trace.PrintLine("LanguageServiceParamInfo", fun () -> sprintf "Found app with ranges %+A from %+A" r expr)
                         Some r
                     | _ -> None
                 else None
         })
 
-    let FindNoteworthyParamInfoLocations(line,col,parseTree) =
-        match traverseInput(line,col,parseTree) with
-        | Some(nwpl) as r-> 
+type FSharpNoteworthyParamInfoLocations with 
+    static member Find(pos,parseTree) =
+        match traverseInput(pos,parseTree) with
+        | Some nwpl as r -> 
 #if DEBUG
             let ranges = nwpl.LongIdStartLocation :: nwpl.LongIdEndLocation :: nwpl.OpenParenLocation :: (nwpl.TupleEndLocations |> Array.toList)
-            let sorted = ranges |> Seq.sort |> Seq.toList
+            let sorted = ranges |> List.sortWith (fun a b -> posOrder.Compare(a,b)) |> Seq.toList
             assert(ranges = sorted)
 #else
             ignore nwpl
diff --git a/src/fsharp/vs/ServiceParamInfoLocations.fsi b/src/fsharp/vs/ServiceParamInfoLocations.fsi
old mode 100644
new mode 100755
index 5efbc20c928..2e1b60aeb98
--- a/src/fsharp/vs/ServiceParamInfoLocations.fsi
+++ b/src/fsharp/vs/ServiceParamInfoLocations.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 //----------------------------------------------------------------------------
 // API to the compiler as an incremental service for parsing,
@@ -8,17 +8,17 @@
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
 open Microsoft.FSharp.Compiler 
+open Microsoft.FSharp.Compiler.Range
 
 []
-type internal NoteworthyParamInfoLocations =
+type internal FSharpNoteworthyParamInfoLocations =
     member LongId : string list
-    member LongIdStartLocation : int * int
-    member LongIdEndLocation : int * int
-    member OpenParenLocation : int * int
-    member TupleEndLocations : (int * int)[]  // locations of commas and close parenthesis (or, last char of last arg, if no final close parenthesis)
+    member LongIdStartLocation : pos
+    member LongIdEndLocation : pos
+    member OpenParenLocation : pos
+    member TupleEndLocations : pos[]  // locations of commas and close parenthesis (or, last char of last arg, if no final close parenthesis)
     member IsThereACloseParen : bool   // false if either this is a call without parens "f x" or the parser recovered as in "f(x,y"
     member NamedParamNames : string[]  // null, or a name if an actual named parameter; f(0,a=4,?b=None) would be [|null;"a";"b"|]
 
-// implementation details used by other code in the compiler    
-module internal NoteworthyParamInfoLocationsImpl =
-    val internal FindNoteworthyParamInfoLocations : int * int * Ast.ParsedInput -> NoteworthyParamInfoLocations option
+    static member Find : pos * Ast.ParsedInput -> FSharpNoteworthyParamInfoLocations option
+
diff --git a/src/fsharp/vs/ServiceParseTreeWalk.fs b/src/fsharp/vs/ServiceParseTreeWalk.fs
old mode 100644
new mode 100755
index 14aa6eda811..5ea90cec877
--- a/src/fsharp/vs/ServiceParseTreeWalk.fs
+++ b/src/fsharp/vs/ServiceParseTreeWalk.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 //----------------------------------------------------------------------------
 // Open up the compiler as an incremental service for parsing,
@@ -7,14 +7,12 @@
 
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
-open Internal.Utilities
-open System
-open System.Collections.Generic
- 
 open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.Ast
+ 
 
+/// A range of utility functions to assist with traversing an AST
 module internal AstTraversal =
     // treat ranges as though they are half-open: [,)
     let rangeContainsPosLeftEdgeInclusive (m1:range) p =
@@ -80,7 +78,7 @@ module internal AstTraversal =
     let dive node range project =
         range,(fun() -> project node)
 
-    let pick pos _line _col (outerRange:range) (_debugObj:obj) (diveResults:list) =
+    let pick pos (outerRange:range) (_debugObj:obj) (diveResults:list) =
         match diveResults with
         | [] -> None
         | _ ->
@@ -123,16 +121,15 @@ module internal AstTraversal =
         | _ -> 
 #if DEBUG
             assert(false)
-            failwithf "multiple disjoint AST node ranges claimed to contain (%d,%d) from %+A" _line _col _debugObj
+            failwithf "multiple disjoint AST node ranges claimed to contain (%A) from %+A" pos _debugObj
 #else
             None
 #endif
 
     /// traverse an implementation file walking all the way down to SynExpr or TypeAbbrev at a particular location
     ///
-    let internal Traverse(line, col, parseTree, visitor:AstVisitorBase<'T>) =
-        let pos = Pos.fromVS line col  // line was 0-based, need 1-based
-        let pick x = pick pos line col x
+    let (*internal*) Traverse(pos:pos, parseTree, visitor:AstVisitorBase<'T>) =
+        let pick x = pick pos x
         let rec traverseSynModuleDecl path (decl:SynModuleDecl) =
             let pick = pick decl.Range
             let defaultTraverse m = 
diff --git a/src/fsharp/vs/ServiceUntypedParse.fs b/src/fsharp/vs/ServiceUntypedParse.fs
old mode 100644
new mode 100755
index b4d790c6823..41be8d2e465
--- a/src/fsharp/vs/ServiceUntypedParse.fs
+++ b/src/fsharp/vs/ServiceUntypedParse.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 //----------------------------------------------------------------------------
 // Open up the compiler as an incremental service for parsing,
@@ -13,19 +13,20 @@ open System.Collections.Generic
  
 open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library  
 open Microsoft.FSharp.Compiler 
-open Internal.Utilities.Debug
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.Ast
 open Microsoft.FSharp.Compiler.ErrorLogger
-open Microsoft.FSharp.Compiler.Build
+open Microsoft.FSharp.Compiler.CompileOps
 open Microsoft.FSharp.Compiler.Lib
 
+open Internal.Utilities.Debug
+
 /// Methods for dealing with F# sources files.
 module internal SourceFile =
     /// Source file extensions
-    let private compilableExtensions = Build.sigSuffixes @ Build.implSuffixes @ Build.scriptSuffixes
+    let private compilableExtensions = CompileOps.FSharpSigFileSuffixes @ CompileOps.FSharpImplFileSuffixes @ CompileOps.FSharpScriptFileSuffixes
     /// Single file projects extensions
-    let private singleFileProjectExtensions = Build.scriptSuffixes
+    let private singleFileProjectExtensions = CompileOps.FSharpScriptFileSuffixes
     /// Whether or not this file is compilable
     let IsCompilable file =
         let ext = Path.GetExtension(file)
@@ -40,9 +41,9 @@ module internal SourceFileImpl =
         let ext = Path.GetExtension(file)
         0 = String.Compare(".fsi",ext,StringComparison.OrdinalIgnoreCase)
 
-    /// Additonal #defines that should be in place when editing a file in a file editor such as VS.
+    /// Additional #defines that should be in place when editing a file in a file editor such as VS.
     let AdditionalDefinesForUseInEditor(filename) =
-        if Build.IsScript(filename) then ["INTERACTIVE";"EDITING"] // This is still used by the foreground parse
+        if CompileOps.IsScript(filename) then ["INTERACTIVE";"EDITING"] // This is still used by the foreground parse
         else ["COMPILED";"EDITING"]
            
 type CompletionPath = string list * string option // plid * residue
@@ -52,17 +53,17 @@ type InheritanceOrigin =
     | Interface
     | Unknown
 
-type internal InheritanceContext = 
+type InheritanceContext = 
     | Class
     | Interface
     | Unknown
 
-type internal RecordContext =
+type RecordContext =
     | CopyOnUpdate of range * CompletionPath // range of copy-expr + current field
     | Constructor of string // typename
     | New of CompletionPath
 
-type internal CompletionContext = 
+type CompletionContext = 
     // completion context cannot be determined due to errors
     | Invalid
     // completing something after the inherit keyword
@@ -75,38 +76,21 @@ type internal CompletionContext =
     | ParameterList of pos * HashSet
 
 //----------------------------------------------------------------------------
-// Untyped scope
+// FSharpParseFileResults
 //----------------------------------------------------------------------------
 
-[]
-type internal UntypedParseResults = 
-  { // Error infos
-    Errors : ErrorInfo[]
-    // Untyped AST
-    Input : ParsedInput option
-    // Do not report errors from the type checker
-    ParseHadErrors : bool
-    /// When these files change then the build is invalid
-    DependencyFiles : string list
-    }
-
 []
-type internal UntypedParseInfo(parsed:UntypedParseResults) = 
-
-    member scope.ParseTree =
-        match parsed with
-        | { Input=x } -> x
-
-    member scope.Results = parsed
-
-    member scope.FindNoteworthyParamInfoLocations(line,col) = 
-        match parsed with
-        | { Input=Some(input) } -> 
-            // Why don't we traverse the AST under a syncop?  We don't need to, because the AST is an _immutable_ DU of DUs of ints and strings and whatnot.  And a SyncOp really does slow it down in practice.
-            //let result = ref None
-            //syncop (fun () -> result := Some(AstHelpers.FindNoteworthyParamInfoLocations(line,col,input)))
-            //Option.get !result
-            NoteworthyParamInfoLocationsImpl.FindNoteworthyParamInfoLocations(line,col,input)
+type FSharpParseFileResults(errors : FSharpErrorInfo[], input : Ast.ParsedInput option, parseHadErrors : bool, dependencyFiles : string list) = 
+
+    member scope.Errors = errors
+
+    member scope.ParseHadErrors = parseHadErrors
+
+    member scope.ParseTree = input
+
+    member scope.FindNoteworthyParamInfoLocations(pos) = 
+        match input with
+        | Some(input) -> FSharpNoteworthyParamInfoLocations.Find(pos,input)
         | _ -> None
     
     /// Get declared items and the selected item at the specified location
@@ -115,7 +99,7 @@ type internal UntypedParseInfo(parsed:UntypedParseResults) =
             Range.range0 
             (fun () -> 
                 use t = Trace.Call("CompilerServices", "GetNavigationItems", fun _ -> "")
-                match parsed.Input with
+                match input with
                 | Some(ParsedInput.ImplFile(ParsedImplFileInput(_modname,_isScript,_qualName,_pragmas,_hashDirectives,modules,_isLastCompiland))) ->
                     NavigationImpl.getNavigationFromImplFile modules 
                 | Some(ParsedInput.SigFile(ParsedSigFileInput(_modname,_qualName,_pragmas,_hashDirectives,_modules))) ->
@@ -124,15 +108,13 @@ type internal UntypedParseInfo(parsed:UntypedParseResults) =
                     NavigationImpl.empty )
             (fun _ -> NavigationImpl.empty)   
             
-    member private scope.ValidateBreakpointLocationImpl((line,col)) =
+    member private scope.ValidateBreakpointLocationImpl(pos) =
 
         
-        let pos = Pos.fromVS line col
-        
         // Process let-binding
         let findBreakPoints allowSameLine = 
             let checkRange m = [ if rangeContainsPos m pos || (allowSameLine && m.StartLine = pos.Line) then 
-                                     yield Range.toVS m ]
+                                     yield m ]
             let walkBindSeqPt sp = [ match sp with SequencePointAtBinding m -> yield! checkRange m | _ -> () ]
             let walkForSeqPt sp = [ match sp with SequencePointAtForLoop m -> yield! checkRange m | _ -> () ]
             let walkWhileSeqPt sp = [ match sp with SequencePointAtWhileLoop m -> yield! checkRange m | _ -> () ]
@@ -219,8 +201,10 @@ type internal UntypedParseInfo(parsed:UntypedParseResults) =
                   | SynExpr.Tuple (es,_,_) -> 
                       yield! walkExprs es
 
-                  | SynExpr.Record (_,_,fs,_) -> 
-                    
+                  | SynExpr.Record (_,copyExprOpt,fs,_) ->
+                      match copyExprOpt with
+                      | Some (e,_) -> yield! walkExpr true e
+                      | None -> ()
                       yield! walkExprs (List.map (fun (_, v, _) -> v) fs |> List.choose id)
 
                   | SynExpr.ObjExpr (_,_,bs,is,_,_) -> 
@@ -351,7 +335,7 @@ type internal UntypedParseInfo(parsed:UntypedParseResults) =
             let walkImplFile (modules:SynModuleOrNamespace list) =
                 [ for x in modules do yield! walkModule x ]
                      
-            match parsed.Input with
+            match input with
             | Some(ParsedInput.ImplFile(ParsedImplFileInput(_,_,_,_,_,modules,_))) -> walkImplFile modules 
             | _ -> []
  
@@ -369,11 +353,10 @@ type internal UntypedParseInfo(parsed:UntypedParseResults) =
             (fun _msg -> None)   
             
     /// When these files appear or disappear the configuration for the current project is invalidated.
-    member scope.DependencyFiles() : string list =
-        parsed.DependencyFiles
+    member scope.DependencyFiles = dependencyFiles
                     
     member scope.FileName =
-      match parsed.Input with
+      match input with
       | Some(ParsedInput.ImplFile(ParsedImplFileInput(modname, _, _, _, _, _, _))) 
       | Some(ParsedInput.SigFile(ParsedSigFileInput(modname, _, _, _, _))) -> modname
       | _ -> ""
@@ -384,23 +367,19 @@ type internal UntypedParseInfo(parsed:UntypedParseResults) =
         // This does not need to be run on the background thread
         scope.GetNavigationItemsImpl()
 
-    member scope.ValidateBreakpointLocation(pos:Position) =
+    member scope.ValidateBreakpointLocation(pos) =
         use t = Trace.Call("SyncOp","ValidateBreakpointLocation", fun _->"")
         // This does not need to be run on the background thread
         scope.ValidateBreakpointLocationImpl(pos)
 
-module internal UntypedParseInfoImpl =
+module UntypedParseImpl =
     
     let emptyStringSet = HashSet()
 
-    let GetUntypedParseResults (upi : UntypedParseInfo) = upi.Results
-
-    let GetRangeOfExprLeftOfDot(line,col,parseTreeOpt) =
+    let GetRangeOfExprLeftOfDot(pos:pos,parseTreeOpt) =
         match parseTreeOpt with 
         | None -> None 
         | Some(parseTree) ->
-        let pos = Pos.fromVS line col  // line was 0-based, need 1-based
-        let ResultOfRange range = Range.toVS range
         let CheckLongIdent(longIdent:LongIdent) =
             // find the longest prefix before the "pos" dot
             let mutable r = (List.head longIdent).idRange 
@@ -411,29 +390,29 @@ module internal UntypedParseInfoImpl =
                     couldBeBeforeFront <- false
             couldBeBeforeFront, r
 
-        AstTraversal.Traverse(line,col,parseTree, { new AstTraversal.AstVisitorBase<_>() with
+        AstTraversal.Traverse(pos,parseTree, { new AstTraversal.AstVisitorBase<_>() with
         member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) =
             let expr = expr // fix debugger locals
             match expr with
             | SynExpr.LongIdent(_, LongIdentWithDots(longIdent,_), _altNameRefCell, _range) -> 
                 let _,r = CheckLongIdent(longIdent)
-                Some(ResultOfRange r)
+                Some(r)
             | SynExpr.LongIdentSet(LongIdentWithDots(longIdent,_), synExpr, _range) -> 
                 if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then
                     traverseSynExpr synExpr
                 else
                     let _,r = CheckLongIdent(longIdent)
-                    Some(ResultOfRange r)
+                    Some(r)
             | SynExpr.DotGet(synExpr, _dotm, LongIdentWithDots(longIdent,_), _range) -> 
                 if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then
                     traverseSynExpr synExpr
                 else
                     let inFront,r = CheckLongIdent(longIdent)
                     if inFront then
-                        Some(ResultOfRange synExpr.Range)
+                        Some(synExpr.Range)
                     else
                         // see comment below for SynExpr.DotSet
-                        Some(ResultOfRange (unionRanges synExpr.Range r))
+                        Some((unionRanges synExpr.Range r))
             | SynExpr.DotSet(synExpr, LongIdentWithDots(longIdent,_), synExpr2, _range) ->
                 if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then
                     traverseSynExpr synExpr
@@ -442,14 +421,14 @@ module internal UntypedParseInfoImpl =
                 else
                     let inFront,r = CheckLongIdent(longIdent)
                     if inFront then
-                        Some(ResultOfRange synExpr.Range)
+                        Some(synExpr.Range)
                     else
                         // f(0).X.Y.Z
                         //       ^
                         //      -   r has this value
                         // ----     synExpr.Range has this value
                         // ------   we want this value
-                        Some(ResultOfRange (unionRanges synExpr.Range r))
+                        Some((unionRanges synExpr.Range r))
             | SynExpr.DotNamedIndexedPropertySet(synExpr, LongIdentWithDots(longIdent,_), synExpr2, synExpr3, _range) ->  
                 if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then
                     traverseSynExpr synExpr
@@ -460,19 +439,19 @@ module internal UntypedParseInfoImpl =
                 else
                     let inFront,r = CheckLongIdent(longIdent)
                     if inFront then
-                        Some(ResultOfRange synExpr.Range)
+                        Some(synExpr.Range)
                     else
-                        Some(ResultOfRange (unionRanges synExpr.Range r))
+                        Some((unionRanges synExpr.Range r))
             | SynExpr.DiscardAfterMissingQualificationAfterDot(synExpr, _range) ->  // get this for e.g. "bar()."
                 if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then
                     traverseSynExpr synExpr
                 else
-                    Some(ResultOfRange synExpr.Range) 
+                    Some(synExpr.Range) 
             | SynExpr.FromParseError(synExpr, range) -> 
                 if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then
                     traverseSynExpr synExpr
                 else
-                    Some(ResultOfRange range) 
+                    Some(range) 
             | SynExpr.App(ExprAtomicFlag.NonAtomic, true, (SynExpr.Ident(ident)), rhs, _) 
                 when ident.idText = "op_ArrayLookup" 
                      && not(AstTraversal.rangeContainsPosLeftEdgeInclusive rhs.Range pos) ->
@@ -480,17 +459,16 @@ module internal UntypedParseInfoImpl =
                 | None ->
                     // (expr).(expr) is an ML-deprecated array lookup, but we want intellisense on the dot
                     // also want it for e.g. [|arr|].(0)
-                    Some(ResultOfRange expr.Range) 
+                    Some(expr.Range) 
                 | x -> x  // we found the answer deeper somewhere in the lhs
             | _ -> defaultTraverse expr
         })
     
     /// searches for the expression island suitable for the evaluation by the debugger
-    let TryFindExpressionIslandInPosition(line,col,parseTreeOpt) = 
+    let TryFindExpressionIslandInPosition(pos:pos,parseTreeOpt) = 
         match parseTreeOpt with 
         | None -> None 
         | Some(parseTree) ->
-            let pos = Pos.fromVS line col  // line was 0-based, need 1-based
             let getLidParts (lid : LongIdent) = 
                 lid 
                 |> Seq.takeWhile (fun i -> posGeq pos i.idRange.Start)
@@ -529,7 +507,7 @@ module internal UntypedParseInfoImpl =
                             | _ -> defaultTraverse(expr)
                         else
                             None }
-            AstTraversal.Traverse(line, col, parseTree, walker)
+            AstTraversal.Traverse(pos, parseTree, walker)
 
     // Given a cursor position here:
     //    f(x)   .   iden
@@ -543,13 +521,12 @@ module internal UntypedParseInfoImpl =
     //      ^
     // would return None
     // TODO would be great to unify this with GetRangeOfExprLeftOfDot above, if possible, as they are similar
-    let TryFindExpressionASTLeftOfDotLeftOfCursor(line,col,parseTreeOpt) =
+    let TryFindExpressionASTLeftOfDotLeftOfCursor(pos,parseTreeOpt) =
         match parseTreeOpt with 
         | None -> None 
         | Some(parseTree) ->
         let dive x = AstTraversal.dive x
-        let pos = Pos.fromVS line col  // line was 0-based, need 1-based
-        let pick x = AstTraversal.pick pos line col x
+        let pick x = AstTraversal.pick pos x
         let walker = 
             { new AstTraversal.AstVisitorBase<_>() with
                 member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) =
@@ -628,14 +605,14 @@ module internal UntypedParseInfoImpl =
                                 Some(lhs.Range.End, false)
                             | x -> x  // we found the answer deeper somewhere in the lhs
                         | _ -> defaultTraverse(expr) }
-        AstTraversal.Traverse(line, col, parseTree, walker)
+        AstTraversal.Traverse(pos, parseTree, walker)
     
     type TS = AstTraversal.TraverseStep
 
     /// try to determine completion context for the given pair (row, columns)
-    let TryGetCompletionContext (line : int, col : int, untypedParseInfoOpt : UntypedParseInfo option) : CompletionContext option = 
+    let TryGetCompletionContext (pos, untypedParseOpt: FSharpParseFileResults option) : CompletionContext option = 
         let parsedInputOpt =
-            match untypedParseInfoOpt with
+            match untypedParseOpt with
             | Some upi -> upi.ParseTree
             | None -> None
 
@@ -643,8 +620,6 @@ module internal UntypedParseInfoImpl =
         | None -> None
         | Some pt -> 
         
-        let pos = Pos.fromVS line col  // line was 0-based, need 1-based
-        
         let parseLid (LongIdentWithDots(lid, dots)) =            
             let rec collect plid (parts : Ident list) (dots : range list) = 
                 match parts, dots with
@@ -656,7 +631,7 @@ module internal UntypedParseInfoImpl =
                         let residue = if s.Length <> 0 then Some s else None
                         Some(plid, residue)
                     elif posGt x.idRange.Start pos then
-                        // can happen if caret is placed after dot but before the exising identifier A. $ B
+                        // can happen if caret is placed after dot but before the existing identifier A. $ B
                         // return accumulated plid with no residue
                         Some (plid, None)
                     else
@@ -891,4 +866,5 @@ module internal UntypedParseInfoImpl =
                             | Some (completionPath) -> getCompletionContextForInheritSynMember (componentInfo, typeDefnKind, completionPath)
                             | None -> Some (CompletionContext.Invalid) // A $ .B -> no completion list
                         | _ -> None }
-        AstTraversal.Traverse(line, col, pt, walker)
\ No newline at end of file
+        AstTraversal.Traverse(pos, pt, walker)
+
diff --git a/src/fsharp/vs/ServiceUntypedParse.fsi b/src/fsharp/vs/ServiceUntypedParse.fsi
old mode 100644
new mode 100755
index 8466d7927cc..3133f6b5a22
--- a/src/fsharp/vs/ServiceUntypedParse.fsi
+++ b/src/fsharp/vs/ServiceUntypedParse.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 //----------------------------------------------------------------------------
 // API to the compiler as an incremental service for parsing,
@@ -7,43 +7,47 @@
 
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
+open System.Collections.Generic
 open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.ErrorLogger
-open System.Collections.Generic
-
-// implementation details used by other code in the compiler    
-[]
-type internal UntypedParseResults = 
-  { // Error infos
-    Errors : ErrorInfo[]
-    // Untyped AST
-    Input : Ast.ParsedInput option
-    // Do not report errors from the type checker
-    ParseHadErrors : bool
-    // When these files change then the build is invalid
-    DependencyFiles : string list
-    }
 
 []
-type internal UntypedParseInfo = 
-    member internal ParseTree : Ast.ParsedInput option
+/// Represents the results of parsing an F# file
+type internal FSharpParseFileResults = 
+
+    /// The syntax tree resulting from the parse
+    member ParseTree : Ast.ParsedInput option
+
     /// Notable parse info for ParameterInfo at a given location
-    member internal FindNoteworthyParamInfoLocations : line:int * col:int -> NoteworthyParamInfoLocations option
+    member FindNoteworthyParamInfoLocations : pos:pos -> FSharpNoteworthyParamInfoLocations option
+
     /// Name of the file for which this information were created
-    member internal FileName                       : string
+    member FileName                       : string
+
     /// Get declared items and the selected item at the specified location
-    member internal GetNavigationItems             : unit -> NavigationItems
+    member GetNavigationItems             : unit -> FSharpNavigationItems
+
     /// Return the inner-most range associated with a possible breakpoint location
-    member internal ValidateBreakpointLocation : Position -> Range option
+    member ValidateBreakpointLocation : pos:pos -> range option
+
     /// When these files change then the build is invalid
-    member internal DependencyFiles : unit -> string list
-    internal new : parsed:UntypedParseResults -> UntypedParseInfo
+    member DependencyFiles : string list
+
+    /// Get the errors and warnings for the parse
+    member Errors : FSharpErrorInfo[]
+
+    /// Indicates if any errors occured during the parse
+    member ParseHadErrors : bool
+
+    internal new : errors : FSharpErrorInfo[] * input : Ast.ParsedInput option * parseHadErrors : bool * dependencyFiles : string list -> FSharpParseFileResults
 
 /// Information about F# source file names
 module internal SourceFile =
+
    /// Whether or not this file is compilable
    val IsCompilable : string -> bool
+
    /// Whether or not this file should be a single-file project
    val MustBeSingleFileProject : string -> bool
 
@@ -72,15 +76,15 @@ type internal CompletionContext =
     | ParameterList of pos * HashSet
 
 // implementation details used by other code in the compiler    
-module internal UntypedParseInfoImpl =
+module internal UntypedParseImpl =
     open Microsoft.FSharp.Compiler.Ast
-    val GetUntypedParseResults : UntypedParseInfo -> UntypedParseResults
-    val TryFindExpressionASTLeftOfDotLeftOfCursor : int * int * ParsedInput option -> (pos * bool) option
-    val GetRangeOfExprLeftOfDot : int * int * ParsedInput option -> ((int*int) * (int*int)) option
-    val TryFindExpressionIslandInPosition : int * int * ParsedInput option -> string option
-    val TryGetCompletionContext : int * int * UntypedParseInfo option -> CompletionContext option
+    val TryFindExpressionASTLeftOfDotLeftOfCursor : pos * ParsedInput option -> (pos * bool) option
+    val GetRangeOfExprLeftOfDot : pos  * ParsedInput option -> range option
+    val TryFindExpressionIslandInPosition : pos * ParsedInput option -> string option
+    val TryGetCompletionContext : pos * FSharpParseFileResults option -> CompletionContext option
 
 // implementation details used by other code in the compiler    
 module internal SourceFileImpl =
     val IsInterfaceFile : string -> bool 
     val AdditionalDefinesForUseInEditor : string -> string list
+
diff --git a/src/fsharp/vs/SimpleServices.fs b/src/fsharp/vs/SimpleServices.fs
deleted file mode 100644
index 19ade96b3eb..00000000000
--- a/src/fsharp/vs/SimpleServices.fs
+++ /dev/null
@@ -1,251 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if SILVERLIGHT
-namespace Microsoft.FSharp.Compiler.Interactive
-
-module Runner = 
-
-    type public InteractiveConsole(argv:string[],reader:System.IO.TextReader, writer:System.IO.TextWriter, error:System.IO.TextWriter) =
-        do
-            Microsoft.FSharp.Core.Printf.setWriter writer
-            Microsoft.FSharp.Core.Printf.setError error
-        let session = Microsoft.FSharp.Compiler.Interactive.Shell.FsiEvaluationSession(argv, reader, writer, error)
-        member x.Run() = session.Run()
-        member x.Interrupt() = session.Interrupt()
-#endif
-
-namespace Microsoft.FSharp.Compiler.SimpleSourceCodeServices
-
-    open System
-    open System.IO
-    open System.Text
-    open Microsoft.FSharp.Compiler.SourceCodeServices
-    open Microsoft.FSharp.Compiler.Driver
-    open Microsoft.FSharp.Compiler
-    open Microsoft.FSharp.Compiler.ErrorLogger
-
-    []
-    module private Utils =
-
-        let buildFormatComment (xmlCommentRetriever: string * string -> string) cmt (sb: StringBuilder) =
-            match cmt with
-            | XmlCommentText(s) -> sb.AppendLine(s) |> ignore
-            | XmlCommentSignature(file, signature) ->
-                let comment = xmlCommentRetriever (file, signature)
-                if (not (comment.Equals(null))) && comment.Length > 0 then sb.AppendLine(comment) |> ignore
-            | XmlCommentNone -> ()
-
-        let buildFormatElement isSingle el (sb: StringBuilder) xmlCommentRetriever =
-            match el with
-            | DataTipElementNone -> ()
-            | DataTipElement(it, comment) ->
-                sb.AppendLine(it) |> buildFormatComment xmlCommentRetriever comment
-            | DataTipElementGroup(items) ->
-                let items, msg =
-                  if items.Length > 10 then
-                    (items |> Seq.take 10 |> List.ofSeq),
-                      sprintf "   (+%d other overloads)" (items.Length - 10)
-                  else items, null
-                if isSingle && items.Length > 1 then
-                  sb.AppendLine("Multiple overloads") |> ignore
-                for (it, comment) in items do
-                  sb.AppendLine(it) |> buildFormatComment xmlCommentRetriever comment
-                if msg <> null then sb.AppendFormat(msg) |> ignore
-            | DataTipElementCompositionError(err) ->
-                sb.Append("Composition error: " + err) |> ignore
-
-        // Convert DataTipText to string
-        let formatTip tip xmlCommentRetriever =
-            let commentRetriever = defaultArg xmlCommentRetriever (fun _ -> "")
-            let sb = new StringBuilder()
-            match tip with
-            | DataTipText([single]) -> buildFormatElement true single sb commentRetriever
-            | DataTipText(its) -> for item in its do buildFormatElement false item sb commentRetriever
-            sb.ToString().Trim('\n', '\r')
-
-    /// Represents a declaration returned by GetDeclarations
-    type Declaration internal (name: string, description: unit -> string) = 
-        /// Get the name of a declaration
-        member x.Name = name
-        /// Compute the description for a declaration
-        member x.GetDescription() = description()
-
-    /// Represents the results of type checking
-    type TypeCheckResults internal (info: Microsoft.FSharp.Compiler.SourceCodeServices.UntypedParseInfo,
-                                    results:Microsoft.FSharp.Compiler.SourceCodeServices.TypeCheckResults,
-                                    source: string[]) = 
-
-        let identToken = Microsoft.FSharp.Compiler.Parser.tagOfToken (Microsoft.FSharp.Compiler.Parser.IDENT "")
-        let hasChangedSinceLastTypeCheck _ = false
-
-        /// Return the errors resulting from the type-checking
-        member x.Errors = results.Errors
-
-        /// Get the declarations at the given code location.
-        member x.GetDeclarations(line, col, names, residue, ?xmlCommentRetriever) =
-            async { let! items = results.GetDeclarations(Some info, (line, col), source.[line], (names, residue), hasChangedSinceLastTypeCheck)
-                    return [| for i in items.Items -> Declaration(i.Name, (fun () -> formatTip i.DescriptionText xmlCommentRetriever)) |] }
-
-        member x.GetRawDeclarations(line, col, names, residue, formatter:DataTipText->string[]) =
-            async { let! items = results.GetDeclarations(Some info, (line, col), source.[line], (names, residue), hasChangedSinceLastTypeCheck)
-                    return [| for i in items.Items -> i.Name, (fun() -> formatter i.DescriptionText), i.Glyph |] }
-
-        /// Get the Visual Studio F1-help keyword for the item at the given position
-        member x.GetF1Keyword(line, col, names) =
-            results.GetF1Keyword((line, col), source.[line], names)
-
-        /// Get the data tip text at the given position
-        member x.GetDataTipText(line, col, names, ?xmlCommentRetriever) =
-            let tip = results.GetDataTipText((line, col), source.[line], names, identToken)
-            formatTip tip xmlCommentRetriever
-
-        member x.GetRawDataTipText(line, col, names) =
-            results.GetDataTipText((line, col), source.[line], names, identToken)
-
-        /// Get the location of the declaration at the given position
-        member x.GetDeclarationLocation(line: int, col: int, names, isDecl) =
-            results.GetDeclarationLocation((line, col), source.[line], names, identToken, isDecl)
-
-        /// Get the full type checking results 
-        member x.FullResults = results
-
-    /// Provides simple services for checking and compiling F# scripts
-    type public SimpleSourceCodeServices() =
-
-        let checker = InteractiveChecker.Create(NotifyFileTypeCheckStateIsDirty(fun _ -> ()))
-        let fileversion = 0
-        let loadTime = DateTime.Now
- 
-        /// Tokenize a single line, returning token information and a tokenization state represented by an integer
-        member x.TokenizeLine (line: string, state: int64) : TokenInformation[] * int64 = 
-            let tokenizer = SourceTokenizer([], "example.fsx")
-            let lineTokenizer = tokenizer.CreateLineTokenizer line
-            let state = ref (None, state)
-            let tokens = 
-                [| while (state := lineTokenizer.ScanToken (snd !state); (fst !state).IsSome) do
-                       yield (fst !state).Value |]
-            tokens, snd !state 
-
-        /// Tokenize an entire file, line by line
-        member x.TokenizeFile (source: string) : TokenInformation[][] = 
-            let lines = source.Split('\n')
-            let tokens = 
-                [| let state = ref 0L
-                   for line in lines do 
-                         let tokens, n = x.TokenizeLine(line, !state) 
-                         state := n; 
-                         yield tokens |]
-            tokens
-
-        /// Return information about matching braces in a single file.
-        member x.MatchBraces (filename, source: string) : (Range * Range) [] = 
-            let options = checker.GetCheckOptionsFromScriptRoot(filename, source, loadTime)
-            checker.MatchBraces(filename, source,  options)
-
-        /// For errors, quick info, goto-definition, declaration list intellisense, method overload intellisense
-        member x.TypeCheckScript (filename:string,source:string,otherFlags:string[]) = 
-            let options = checker.GetCheckOptionsFromScriptRoot(filename, source, loadTime, otherFlags)
-            checker.StartBackgroundCompile options
-            // wait for the antecedent to appear
-            checker.WaitForBackgroundCompile()
-            // do an untyped parse
-            let info = checker.UntypedParse(filename, source, options)
-            // do an typecheck
-            let textSnapshotInfo = "" // TODO
-            let typedInfo = checker.TypeCheckSource(info, filename, fileversion, source, options, IsResultObsolete (fun _ -> false), textSnapshotInfo)
-            // return the info
-            match typedInfo with 
-            | NoAntecedant -> invalidOp "no antecedant"
-            | Aborted -> invalidOp "aborted"
-            | TypeCheckSucceeded res -> TypeCheckResults(info, res, source.Split('\n'))
-
-        /// Compile using the given flags.  Source files names are resolved via the FileSystem API. The output file must be given by a -o flag. 
-        member x.Compile (argv: string[])  = 
-            let errors = ResizeArray<_>()
-
-            let errorSink warn exn = 
-                let mainError,relatedErrors = Build.SplitRelatedErrors exn 
-                let oneError trim e = errors.Add(ErrorInfo.CreateFromException (e, warn, trim, Range.range0))
-                oneError false mainError
-                List.iter (oneError true) relatedErrors
-
-            let errorLogger = 
-                { new ErrorLogger("CompileAPI") with 
-                    member x.WarnSinkImpl(exn) = errorSink true exn
-                    member x.ErrorSinkImpl(exn) = errorSink false exn
-                    member x.ErrorCount = errors |> Seq.filter (fun e -> e.Severity = Severity.Error) |> Seq.length }
-
-            let createErrorLogger _ =  errorLogger
-      
-            let result = 
-                use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse)            
-                use unwindEL_2 = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger)
-                let exiter = { new Exiter with member x.Exit n = raise StopProcessing }
-                try 
-                    mainCompile (argv, true, exiter, createErrorLogger); 
-                    0
-                with e -> 
-                    stopProcessingRecovery e Range.range0
-                    1
-        
-            errors.ToArray(), result
-
-        /// Compiles to a dynamic assembly usinng the given flags.  Any source files names 
-        /// are resolved via the FileSystem API. An output file name must be given by a -o flag, but this will not
-        /// be written - instead a dynamic assembly will be created and loaded.
-        ///
-        /// If the 'execute' parameter is given the entry points for the code are executed and 
-        /// the given TextWriters are used for the stdout and stderr streams respectively. In this 
-        /// case, a global setting is modified during the execution.
-        member x.CompileToDynamicAssembly (otherFlags: string[], execute: (TextWriter * TextWriter) option)  = 
-            match execute with
-            | Some (writer,error) -> 
-#if SILVERLIGHT
-                Microsoft.FSharp.Core.Printf.setWriter writer
-                Microsoft.FSharp.Core.Printf.setError error
-#else
-                System.Console.SetOut writer
-                System.Console.SetError error
-#endif
-            | None -> ()
-            let tcImportsRef = ref None
-            let res = ref None
-            tcImportsCapture <- Some (fun tcImports -> tcImportsRef := Some tcImports)
-            dynamicAssemblyCreator <- 
-                Some (fun (_tcConfig,ilGlobals,_errorLogger,outfile,_pdbfile,ilxMainModule,_signingInfo) ->
-                    let assemblyBuilder = System.AppDomain.CurrentDomain.DefineDynamicAssembly(System.Reflection.AssemblyName(System.IO.Path.GetFileNameWithoutExtension outfile),System.Reflection.Emit.AssemblyBuilderAccess.Run)
-                    let debugInfo = false
-                    let moduleBuilder = assemblyBuilder.DefineDynamicModule("IncrementalModule",debugInfo)     
-                    let _emEnv,execs = 
-                        Microsoft.FSharp.Compiler.AbstractIL.ILRuntimeWriter.emitModuleFragment 
-                            (ilGlobals ,
-                             Microsoft.FSharp.Compiler.AbstractIL.ILRuntimeWriter.emEnv0,
-                             assemblyBuilder,moduleBuilder,
-                             ilxMainModule,
-                             debugInfo,
-                             (fun s -> 
-                                 match tcImportsRef.Value.Value.TryFindExistingFullyQualifiedPathFromAssemblyRef s with 
-                                 | Some res -> Some (Choice1Of2 res)
-                                 | None -> None))
-                    if execute.IsSome then 
-                        for exec in execs do 
-                            match exec() with 
-                            | None -> ()
-                            | Some exn -> raise exn
-                    for resource in ilxMainModule.Resources.AsList do 
-                        if Build.IsReflectedDefinitionsResource resource then 
-                            Quotations.Expr.RegisterReflectedDefinitions(assemblyBuilder, moduleBuilder.Name, resource.Bytes);
-                    res := Some assemblyBuilder)
-            
-
-            try 
-                let errorsAndWarnings, result = x.Compile otherFlags
-                let assemblyOpt = 
-                    match res.Value with 
-                    | None -> None
-                    | Some a ->  Some (a :> System.Reflection.Assembly)
-                errorsAndWarnings, result, assemblyOpt
-            finally
-                tcImportsCapture <- None
-                dynamicAssemblyCreator <- None
-
diff --git a/src/fsharp/vs/Symbols.fs b/src/fsharp/vs/Symbols.fs
new file mode 100644
index 00000000000..932e6c6db8b
--- /dev/null
+++ b/src/fsharp/vs/Symbols.fs
@@ -0,0 +1,2126 @@
+// Copyright (c) Microsoft Corpration, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+namespace Microsoft.FSharp.Compiler.SourceCodeServices
+
+open System.IO
+open System.Collections.Generic
+open System.Reflection
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
+open Microsoft.FSharp.Compiler.AbstractIL.IL
+open Microsoft.FSharp.Compiler.Infos
+open Microsoft.FSharp.Compiler.Range
+open Microsoft.FSharp.Compiler.Ast
+open Microsoft.FSharp.Compiler.CompileOps
+open Microsoft.FSharp.Compiler.Tast
+open Microsoft.FSharp.Compiler.NameResolution
+open Microsoft.FSharp.Compiler.TcGlobals
+open Microsoft.FSharp.Compiler.Lib
+open Microsoft.FSharp.Compiler.Tastops
+open Microsoft.FSharp.Compiler.TastPickle
+open Microsoft.FSharp.Compiler.PrettyNaming
+open Internal.Utilities
+
+[]
+module Impl = 
+    let protect f = 
+       ErrorLogger.protectAssemblyExplorationF  
+         (fun (asmName,path) -> invalidOp (sprintf "The entity or value '%s' does not exist or is in an unresolved assembly. You may need to add a reference to assembly '%s'" path asmName))
+         f
+
+    let makeReadOnlyCollection (arr : seq<'T>) = 
+        System.Collections.ObjectModel.ReadOnlyCollection<_>(Seq.toArray arr) :> IList<_>
+
+    let makeXmlDoc (XmlDoc x) = makeReadOnlyCollection (x)
+    
+    let rescopeEntity optViewedCcu (entity : Entity) = 
+        match optViewedCcu with 
+        | None -> mkLocalEntityRef entity
+        | Some viewedCcu -> 
+        match tryRescopeEntity viewedCcu entity with
+        | None -> mkLocalEntityRef entity
+        | Some eref -> eref
+
+    let entityIsUnresolved(entity:EntityRef) = 
+        match entity with
+        | ERefNonLocal(NonLocalEntityRef(ccu, _)) -> 
+            ccu.IsUnresolvedReference && entity.TryDeref.IsNone
+        | _ -> false
+
+    let checkEntityIsResolved(entity:EntityRef) = 
+        if entityIsUnresolved(entity) then 
+            let poorQualifiedName =
+                if entity.nlr.AssemblyName = "mscorlib" then 
+                    entity.nlr.DisplayName + ", mscorlib"
+                else 
+                    entity.nlr.DisplayName + ", " + entity.nlr.Ccu.AssemblyName
+            invalidOp (sprintf "The entity '%s' does not exist or is in an unresolved assembly." poorQualifiedName)
+
+    /// Checking accessibility that arise from different compilations needs more care - this is a duplicate of the F# compiler code for this case
+    let checkForCrossProjectAccessibility (thisCcu2:CcuThunk, ad2) (thisCcu1, taccess1) = 
+        match ad2 with 
+        | AccessibleFrom(cpaths2,_) ->
+            let nameOfScoRef (thisCcu:CcuThunk) scoref = 
+                match scoref with 
+                | ILScopeRef.Local -> thisCcu.AssemblyName 
+                | ILScopeRef.Assembly aref -> aref.Name 
+                | ILScopeRef.Module mref -> mref.Name
+            let canAccessCompPathFromCrossProject (CompPath(scoref1,cpath1)) (CompPath(scoref2,cpath2)) =
+                let rec loop p1 p2  = 
+                    match p1,p2 with 
+                    | (a1,k1)::rest1, (a2,k2)::rest2 -> (a1=a2) && (k1=k2) && loop rest1 rest2
+                    | [],_ -> true 
+                    | _ -> false // cpath1 is longer
+                loop cpath1 cpath2 &&
+                nameOfScoRef thisCcu1 scoref1 = nameOfScoRef thisCcu2 scoref2
+            let canAccessFromCrossProject (TAccess x1) cpath2 = x1 |> List.forall (fun cpath1 -> canAccessCompPathFromCrossProject cpath1 cpath2)
+            cpaths2 |> List.exists (canAccessFromCrossProject taccess1) 
+        | _ -> true // otherwise use the normal check
+
+
+    /// Convert an IL member accessibility into an F# accessibility
+    let getApproxFSharpAccessibilityOfMember (declaringEntity: EntityRef) (ilAccess : ILMemberAccess) = 
+        match ilAccess with 
+        | ILMemberAccess.FamilyAndAssembly 
+        | ILMemberAccess.Assembly -> 
+            taccessPrivate  (CompPath(declaringEntity.CompilationPath.ILScopeRef,[]))
+
+        | ILMemberAccess.CompilerControlled
+        | ILMemberAccess.Private ->
+            taccessPrivate  declaringEntity.CompilationPath
+
+        // This is an approximation - the thing may actually be nested in a private class, in which case it is not actually "public"
+        | ILMemberAccess.Public
+        // This is an approximation - the thing is actually "protected", but F# accessibilities can't express "protected", so we report it as "public"
+        | ILMemberAccess.FamilyOrAssembly
+        | ILMemberAccess.Family ->
+            taccessPublic 
+
+    /// Convert an IL type definition accessibility into an F# accessibility
+    let getApproxFSharpAccessibilityOfEntity (entity: EntityRef) = 
+        match metadataOfTycon entity.Deref with 
+        | ProvidedTypeMetadata _info -> 
+            // This is an approximation - for generative type providers some type definitions can be private.
+            taccessPublic
+
+        | ILTypeMetadata (_,td) -> 
+            match td.Access with 
+            | ILTypeDefAccess.Public 
+            | ILTypeDefAccess.Nested ILMemberAccess.Public -> taccessPublic 
+            | ILTypeDefAccess.Private  -> taccessPrivate  (CompPath(entity.CompilationPath.ILScopeRef,[]))
+            | ILTypeDefAccess.Nested nested -> getApproxFSharpAccessibilityOfMember entity nested
+
+        | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> 
+            entity.Accessibility
+
+    let getLiteralValue = function
+        | Some lv  ->
+            match lv with
+            | Const.Bool    v -> Some(box v)
+            | Const.SByte   v -> Some(box v)
+            | Const.Byte    v -> Some(box v)
+            | Const.Int16   v -> Some(box v)
+            | Const.UInt16  v -> Some(box v)
+            | Const.Int32   v -> Some(box v)
+            | Const.UInt32  v -> Some(box v)
+            | Const.Int64   v -> Some(box v)
+            | Const.UInt64  v -> Some(box v)
+            | Const.IntPtr  v -> Some(box v)
+            | Const.UIntPtr v -> Some(box v)
+            | Const.Single  v -> Some(box v)
+            | Const.Double  v -> Some(box v)
+            | Const.Char    v -> Some(box v)
+            | Const.String  v -> Some(box v)
+            | Const.Decimal v -> Some(box v)
+            | Const.Unit
+            | Const.Zero      -> None
+        | None -> None
+            
+
+    type cenv(g:TcGlobals, thisCcu: CcuThunk , tcImports: TcImports) = 
+        let amapV = tcImports.GetImportMap()
+        let infoReaderV = InfoReader(g, amapV)
+        member __.g = g
+        member __.amap = amapV
+        member __.thisCcu = thisCcu
+        member __.infoReader = infoReaderV
+        member __.tcImports = tcImports
+
+    let getXmlDocSigForEntity (cenv: cenv) (ent:EntityRef)=
+        match ItemDescriptionsImpl.GetXmlDocSigOfEntityRef cenv.infoReader ent.Range ent with
+        | Some (_, docsig) -> docsig
+        | _ -> ""
+
+type FSharpDisplayContext(denv: TcGlobals -> DisplayEnv) = 
+    member x.Contents(g) = denv(g)
+    static member Empty = FSharpDisplayContext(fun g -> DisplayEnv.Empty(g))
+
+
+// delay the realization of 'item' in case it is unresolved
+type FSharpSymbol(cenv:cenv, item: (unit -> Item), access: (FSharpSymbol -> CcuThunk -> AccessorDomain -> bool)) =
+
+    member x.Assembly = 
+        let ccu = defaultArg (ItemDescriptionsImpl.ccuOfItem cenv.g x.Item) cenv.thisCcu 
+        FSharpAssembly(cenv,  ccu)
+
+    member x.IsAccessible(rights: FSharpAccessibilityRights) = access x rights.ThisCcu rights.Contents
+
+    member x.FullName = ItemDescriptionsImpl.FullNameOfItem cenv.g x.Item 
+
+    member x.DeclarationLocation = ItemDescriptionsImpl.rangeOfItem cenv.g None x.Item
+
+    member x.ImplementationLocation = ItemDescriptionsImpl.rangeOfItem cenv.g (Some(false)) x.Item
+
+    member x.SignatureLocation = ItemDescriptionsImpl.rangeOfItem cenv.g (Some(true)) x.Item
+
+    member x.IsEffectivelySameAs(y:FSharpSymbol) = 
+        x.Equals(y) || ItemsAreEffectivelyEqual cenv.g x.Item y.Item
+
+    member internal x.Item = item()
+
+    member x.DisplayName = item().DisplayName
+
+    // This is actually overridden in all cases below. However some symbols are still just of type FSharpSymbol,
+    // see 'FSharpSymbol.Create' further below.
+    override x.Equals(other : obj) =
+        box x === other ||
+        match other with
+        |   :? FSharpSymbol as otherSymbol -> ItemsAreEffectivelyEqual cenv.g x.Item otherSymbol.Item
+        |   _ -> false
+
+    override x.GetHashCode() = hash x.ImplementationLocation  
+
+    override x.ToString() = "symbol " + (try item().DisplayName with _ -> "?")
+
+
+and FSharpEntity(cenv:cenv, entity:EntityRef) = 
+    inherit FSharpSymbol(cenv,  
+                         (fun () -> 
+                              checkEntityIsResolved(entity); 
+                              if entity.IsModule then Item.ModuleOrNamespaces [entity] 
+                              else Item.UnqualifiedType [entity]), 
+                         (fun _this thisCcu2 ad -> 
+                             checkForCrossProjectAccessibility (thisCcu2, ad) (cenv.thisCcu, getApproxFSharpAccessibilityOfEntity entity)) 
+                             // && AccessibilityLogic.IsEntityAccessible cenv.amap range0 ad entity)
+                             )
+
+    // If an entity is in an assembly not available to us in the resolution set,
+    // we generally return "false" from predicates like IsClass, since we know
+    // nothing about that type.
+    let isResolvedAndFSharp() = 
+        match entity with
+        | ERefNonLocal(NonLocalEntityRef(ccu, _)) -> not ccu.IsUnresolvedReference && ccu.IsFSharp
+        | _ -> cenv.thisCcu.IsFSharp
+
+    let isUnresolved() = entityIsUnresolved entity
+    let isResolved() = not (isUnresolved())
+    let checkIsResolved() = checkEntityIsResolved entity
+
+    member __.Entity = entity
+        
+    member __.LogicalName = 
+        checkIsResolved()
+        entity.LogicalName 
+
+    member __.CompiledName = 
+        checkIsResolved()
+        entity.CompiledName 
+
+    member __.DisplayName = 
+        checkIsResolved()
+        if entity.IsModuleOrNamespace then entity.DemangledModuleOrNamespaceName
+        else entity.DisplayName 
+
+    member __.AccessPath  = 
+        checkIsResolved()
+        match entity.CompilationPathOpt with 
+        | None -> "global" 
+        | Some (CompPath(_,[])) -> "global" 
+        | Some cp -> buildAccessPath (Some cp)
+    
+    member __.Namespace  = 
+        checkIsResolved()
+        match entity.CompilationPathOpt with 
+        | None -> None
+        | Some (CompPath(_,[])) -> None
+        | Some cp when cp.AccessPath |> List.forall (function (_,ModuleOrNamespaceKind.Namespace) -> true | _  -> false) -> 
+            Some (buildAccessPath (Some cp))
+        | Some _ -> None
+
+    member x.QualifiedName = 
+        checkIsResolved()
+        let fail() = invalidOp (sprintf "the type '%s' does not have a qualified name" x.LogicalName)
+        if entity.IsTypeAbbrev || entity.IsProvidedErasedTycon || entity.IsNamespace then fail()
+        match entity.CompiledRepresentation with 
+        | CompiledTypeRepr.ILAsmNamed(tref,_,_) -> tref.QualifiedName
+        | CompiledTypeRepr.ILAsmOpen _ -> fail()
+        
+    member x.FullName = 
+        checkIsResolved()
+        match x.TryFullName with 
+        | None -> invalidOp (sprintf "the type '%s' does not have a qualified name" x.LogicalName)
+        | Some nm -> nm
+    
+    member x.TryFullName = 
+        if isUnresolved() then None
+        elif entity.IsTypeAbbrev || entity.IsProvidedErasedTycon then None
+        elif entity.IsNamespace  then Some entity.DemangledModuleOrNamespaceName 
+        else
+            match entity.CompiledRepresentation with 
+            | CompiledTypeRepr.ILAsmNamed(tref,_,_) -> Some tref.FullName
+            | CompiledTypeRepr.ILAsmOpen _ -> None   
+
+    member __.DeclarationLocation = 
+        checkIsResolved()
+        entity.Range
+
+    member x.GenericParameters = 
+        checkIsResolved()
+        entity.TyparsNoRange |> List.map (fun tp -> FSharpGenericParameter(cenv,  tp)) |> List.toArray |> makeReadOnlyCollection
+
+    member __.IsMeasure = 
+        isResolvedAndFSharp() && (entity.TypeOrMeasureKind = TyparKind.Measure)
+
+    member __.IsFSharpModule = 
+        isResolvedAndFSharp() && entity.IsModule
+
+    member __.HasFSharpModuleSuffix = 
+        isResolvedAndFSharp() && 
+        entity.IsModule && 
+        (entity.ModuleOrNamespaceType.ModuleOrNamespaceKind = ModuleOrNamespaceKind.FSharpModuleWithSuffix)
+
+    member __.IsValueType  = 
+        isResolved() &&
+        entity.IsStructOrEnumTycon 
+
+    member x.IsArrayType  = 
+        isResolved() &&
+        isArrayTyconRef cenv.g entity
+
+    member __.IsProvided  = 
+        isResolved() &&
+        entity.IsProvided
+
+    member __.IsProvidedAndErased  = 
+        isResolved() &&
+        entity.IsProvidedErasedTycon
+
+    member __.IsStaticInstantiation  = 
+        isResolved() &&
+        entity.IsStaticInstantiationTycon
+
+    member __.IsProvidedAndGenerated  = 
+        isResolved() &&
+        entity.IsProvidedGeneratedTycon
+
+    member __.IsClass = 
+        isResolved() &&
+        match metadataOfTycon entity.Deref with 
+        | ProvidedTypeMetadata info -> info.IsClass
+        | ILTypeMetadata (_,td) -> (td.tdKind = ILTypeDefKind.Class)
+        | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> entity.Deref.IsFSharpClassTycon
+
+    member __.IsByRef = 
+        isResolved() &&
+        tyconRefEq cenv.g cenv.g.byref_tcr entity
+
+    member __.IsOpaque = 
+        isResolved() &&
+        entity.IsHiddenReprTycon
+
+    member __.IsInterface = 
+        isResolved() &&
+        isInterfaceTyconRef entity
+
+    member __.IsDelegate = 
+        isResolved() &&
+        match metadataOfTycon entity.Deref with 
+        | ProvidedTypeMetadata info -> info.IsDelegate ()
+        | ILTypeMetadata (_,td) -> (td.tdKind = ILTypeDefKind.Delegate)
+        | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> entity.IsFSharpDelegateTycon
+
+    member __.IsEnum = 
+        isResolved() &&
+        entity.IsEnumTycon
+    
+    member __.IsFSharpExceptionDeclaration = 
+        isResolvedAndFSharp() && entity.IsExceptionDecl
+
+    member __.IsUnresolved = 
+        isUnresolved()
+
+    member __.IsFSharp = 
+        isResolvedAndFSharp()
+
+    member __.IsFSharpAbbreviation = 
+        isResolvedAndFSharp() && entity.IsTypeAbbrev 
+
+    member __.IsFSharpRecord = 
+        isResolvedAndFSharp() && entity.IsRecordTycon
+
+    member __.IsFSharpUnion = 
+        isResolvedAndFSharp() && entity.IsUnionTycon
+
+    member __.HasAssemblyCodeRepresentation = 
+        isResolvedAndFSharp() && (entity.IsAsmReprTycon || entity.IsMeasureableReprTycon)
+
+    member __.FSharpDelegateSignature =
+        checkIsResolved()
+        match entity.TypeReprInfo with 
+        | TFsObjModelRepr r when entity.IsFSharpDelegateTycon -> 
+            match r.fsobjmodel_kind with 
+            | TTyconDelegate ss -> FSharpDelegateSignature(cenv,  ss)
+            | _ -> invalidOp "not a delegate type"
+        | _ -> invalidOp "not a delegate type"
+      
+
+    member __.Accessibility = 
+        if isUnresolved() then FSharpAccessibility(taccessPublic) else
+
+        FSharpAccessibility(getApproxFSharpAccessibilityOfEntity entity) 
+
+    member __.RepresentationAccessibility = 
+        if isUnresolved() then FSharpAccessibility(taccessPublic) else
+        FSharpAccessibility(entity.TypeReprAccessibility)
+
+    member x.DeclaredInterfaces = 
+        if isUnresolved() then makeReadOnlyCollection [] else
+        [ for ty in GetImmediateInterfacesOfType SkipUnrefInterfaces.Yes cenv.g cenv.amap range0 (generalizedTyconRef entity) do 
+             yield FSharpType(cenv,  ty) ]
+        |> makeReadOnlyCollection
+
+    member x.AllInterfaces = 
+        if isUnresolved() then makeReadOnlyCollection [] else
+        [ for ty in AllInterfacesOfType  cenv.g cenv.amap range0 AllowMultiIntfInstantiations.Yes (generalizedTyconRef entity) do 
+             yield FSharpType(cenv,  ty) ]
+        |> makeReadOnlyCollection
+
+    member x.BaseType = 
+        checkIsResolved()        
+        GetSuperTypeOfType cenv.g cenv.amap range0 (generalizedTyconRef entity) 
+        |> Option.map (fun ty -> FSharpType(cenv,  ty)) 
+        
+    member __.UsesPrefixDisplay = 
+        if isUnresolved() then true else
+        not (isResolvedAndFSharp()) || entity.Deref.IsPrefixDisplay
+
+    member x.IsNamespace =  entity.IsNamespace
+    member x.MembersOrValues =  x.MembersFunctionsAndValues
+    member x.MembersFunctionsAndValues = 
+      if isUnresolved() then makeReadOnlyCollection[] else
+      protect <| fun () -> 
+        ([ let _, entityTy = generalizeTyconRef entity
+           if x.IsFSharpAbbreviation then 
+               ()
+           elif x.IsFSharp then 
+               // For F# code we emit methods members in declaration order
+               for v in entity.MembersOfFSharpTyconSorted do 
+                 // Ignore members representing the generated .cctor
+                 if not v.Deref.IsClassConstructor then 
+                     let fsMeth = FSMeth (cenv.g, entityTy, v, None)
+                     let item = 
+                         if fsMeth.IsConstructor then  Item.CtorGroup (fsMeth.DisplayName, [fsMeth])                          
+                         else Item.MethodGroup (fsMeth.DisplayName, [fsMeth])
+                     yield FSharpMemberOrFunctionOrValue(cenv,  M fsMeth, item) 
+           else
+               for minfo in GetImmediateIntrinsicMethInfosOfType (None, AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 entityTy do
+                    yield FSharpMemberOrFunctionOrValue(cenv,  M minfo, Item.MethodGroup (minfo.DisplayName,[minfo]))
+           let props = GetImmediateIntrinsicPropInfosOfType (None, AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 entityTy 
+           let events = cenv.infoReader.GetImmediateIntrinsicEventsOfType (None, AccessibleFromSomeFSharpCode, range0, entityTy)
+           for pinfo in props do
+                yield FSharpMemberOrFunctionOrValue(cenv, P pinfo, Item.Property (pinfo.PropertyName,[pinfo]))
+           for einfo in events do
+                yield FSharpMemberOrFunctionOrValue(cenv, E einfo, Item.Event einfo)
+
+           // Emit the values, functions and F#-declared extension members in a module
+           for v in entity.ModuleOrNamespaceType.AllValsAndMembers do
+               if v.IsExtensionMember then
+
+                   // For F#-declared extension members, yield a value-backed member and a property info if possible
+                   let vref = mkNestedValRef entity v
+                   yield FSharpMemberOrFunctionOrValue(cenv,  V vref, Item.Value vref) 
+                   match v.MemberInfo.Value.MemberFlags.MemberKind, v.ApparentParent with
+                   | MemberKind.PropertyGet, Parent p -> 
+                        let pinfo = FSProp(cenv.g, generalizedTyconRef p, Some vref, None)
+                        yield FSharpMemberOrFunctionOrValue(cenv,  P pinfo, Item.Property (pinfo.PropertyName, [pinfo]))
+                   | MemberKind.PropertySet, Parent p -> 
+                        let pinfo = FSProp(cenv.g, generalizedTyconRef p, None, Some vref)
+                        yield FSharpMemberOrFunctionOrValue(cenv,  P pinfo, Item.Property (pinfo.PropertyName, [pinfo]))
+                   | _ -> ()
+
+               elif not v.IsMember then
+                   let vref = mkNestedValRef entity v
+                   yield FSharpMemberOrFunctionOrValue(cenv,  V vref, Item.Value vref) ]  
+         |> makeReadOnlyCollection)
+ 
+    member __.XmlDocSig = 
+        checkIsResolved()
+        getXmlDocSigForEntity cenv entity
+ 
+    member __.XmlDoc = 
+        if isUnresolved() then XmlDoc.Empty  |> makeXmlDoc else
+        entity.XmlDoc |> makeXmlDoc
+
+    member x.StaticParameters = 
+        match entity.TypeReprInfo with 
+        | TProvidedTypeExtensionPoint info -> 
+            let m = x.DeclarationLocation
+            let typeBeforeArguments = info.ProvidedType 
+            let staticParameters = typeBeforeArguments.PApplyWithProvider((fun (typeBeforeArguments,provider) -> typeBeforeArguments.GetStaticParameters(provider)), range=m) 
+            let staticParameters = staticParameters.PApplyArray(id, "GetStaticParameters", m)
+            [| for p in staticParameters -> FSharpStaticParameter(cenv,  p, m) |]
+        | _ -> [| |]
+      |> makeReadOnlyCollection
+
+    member __.NestedEntities = 
+        if isUnresolved() then makeReadOnlyCollection[] else
+        entity.ModuleOrNamespaceType.AllEntities 
+        |> QueueList.toList
+        |> List.map (fun x -> FSharpEntity(cenv,  entity.NestedTyconRef x))
+        |> makeReadOnlyCollection
+
+    member x.UnionCases = 
+        if isUnresolved() then makeReadOnlyCollection[] else
+        entity.UnionCasesAsRefList
+        |> List.map (fun x -> FSharpUnionCase(cenv,  x)) 
+        |> makeReadOnlyCollection
+
+    member x.RecordFields = x.FSharpFields
+    member x.FSharpFields =
+        if isUnresolved() then makeReadOnlyCollection[] else
+
+        entity.AllFieldsAsList
+        |> List.map (fun x -> FSharpField(cenv,  mkRecdFieldRef entity x.Name))
+        |> makeReadOnlyCollection
+
+    member x.AbbreviatedType   = 
+        checkIsResolved()
+
+        match entity.TypeAbbrev with
+        | None -> invalidOp "not a type abbreviation"
+        | Some ty -> FSharpType(cenv,  ty)
+
+    member __.Attributes = 
+        if isUnresolved() then makeReadOnlyCollection[] else
+        AttributeChecking.GetAttribInfosOfEntity cenv.g cenv.amap range0 entity
+        |> List.map (fun a -> FSharpAttribute(cenv,  a))
+        |> makeReadOnlyCollection
+
+    override x.Equals(other : obj) =
+        box x === other ||
+        match other with
+        |   :? FSharpEntity as otherEntity -> tyconRefEq cenv.g entity otherEntity.Entity
+        |   _ -> false
+
+    override x.GetHashCode() =
+        checkIsResolved()
+        ((hash entity.Stamp) <<< 1) + 1
+
+    override x.ToString() = x.CompiledName
+
+and FSharpUnionCase(cenv, v: UnionCaseRef) =
+    inherit FSharpSymbol (cenv,   
+                          (fun () -> 
+                               checkEntityIsResolved v.TyconRef
+                               Item.UnionCase(UnionCaseInfo(generalizeTypars v.TyconRef.TyparsNoRange,v),false)),
+                          (fun _this thisCcu2 ad -> 
+                               checkForCrossProjectAccessibility (thisCcu2, ad) (cenv.thisCcu, v.UnionCase.Accessibility)) 
+                               //&& AccessibilityLogic.IsUnionCaseAccessible cenv.amap range0 ad v)
+                               )
+
+
+    let isUnresolved() = 
+        entityIsUnresolved v.TyconRef || v.TryUnionCase.IsNone 
+    let checkIsResolved() = 
+        checkEntityIsResolved v.TyconRef
+        if v.TryUnionCase.IsNone then 
+            invalidOp (sprintf "The union case '%s' could not be found in the target type" v.CaseName)
+
+    member __.IsUnresolved = 
+        isUnresolved()
+
+    member __.Name = 
+        checkIsResolved()
+        v.UnionCase.DisplayName
+
+    member __.DeclarationLocation = 
+        checkIsResolved()
+        v.Range
+
+    member __.UnionCaseFields = 
+        if isUnresolved() then makeReadOnlyCollection [] else
+        v.UnionCase.RecdFields |> List.mapi (fun i _ ->  FSharpField(cenv,  FSharpFieldData.Union (v, i))) |> List.toArray |> makeReadOnlyCollection
+
+    member __.ReturnType = 
+        checkIsResolved()
+        FSharpType(cenv,  v.ReturnType)
+
+    member __.CompiledName = 
+        checkIsResolved()
+        v.UnionCase.CompiledName
+
+    member __.XmlDocSig = 
+        checkIsResolved()
+        let unionCase = UnionCaseInfo(generalizeTypars v.TyconRef.TyparsNoRange,v)
+        match ItemDescriptionsImpl.GetXmlDocSigOfUnionCaseInfo unionCase with
+        | Some (_, docsig) -> docsig
+        | _ -> ""
+
+    member __.XmlDoc = 
+        if isUnresolved() then XmlDoc.Empty  |> makeXmlDoc else
+        v.UnionCase.XmlDoc |> makeXmlDoc
+
+    member __.Attributes = 
+        if isUnresolved() then makeReadOnlyCollection [] else
+        v.Attribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a))) |> makeReadOnlyCollection
+
+    member __.Accessibility =  
+        if isUnresolved() then FSharpAccessibility(taccessPublic) else
+        FSharpAccessibility(v.UnionCase.Accessibility)
+
+    member private x.V = v
+    override x.Equals(other : obj) =
+        box x === other ||
+        match other with
+        |   :? FSharpUnionCase as uc -> v === uc.V
+        |   _ -> false
+    
+    override x.GetHashCode() = hash v.CaseName
+
+    override x.ToString() = x.CompiledName
+
+
+and FSharpFieldData = 
+    | ILField of TcGlobals * ILFieldInfo
+    | RecdOrClass of RecdFieldRef
+    | Union of UnionCaseRef * int
+    member x.TryRecdField =
+        match x with 
+        | RecdOrClass v -> v.RecdField |> Choice1Of2
+        | Union (v,n) -> v.FieldByIndex(n) |> Choice1Of2
+        | ILField (_,f) -> f |> Choice2Of2
+    member x.DeclaringTyconRef =
+        match x with 
+        | RecdOrClass v -> v.TyconRef
+        | Union (v,_) -> v.TyconRef
+        | ILField (g,f) -> tcrefOfAppTy g f.EnclosingType
+
+and FSharpField(cenv, d: FSharpFieldData)  =
+    inherit FSharpSymbol (cenv,  
+                          (fun () -> 
+                                match d with 
+                                | RecdOrClass v -> 
+                                    checkEntityIsResolved v.TyconRef
+                                    Item.RecdField(RecdFieldInfo(generalizeTypars v.TyconRef.TyparsNoRange,v))
+                                | Union (v,_) -> 
+                                    // This is not correct: there is no "Item" for a named union case field
+                                    Item.UnionCase(UnionCaseInfo(generalizeTypars v.TyconRef.TyparsNoRange,v),false)
+                                | ILField (_, f) -> 
+                                    Item.ILField(f)),
+                          (fun this thisCcu2 ad -> 
+                                checkForCrossProjectAccessibility (thisCcu2, ad) (cenv.thisCcu, (this :?> FSharpField).Accessibility.Contents)) 
+                                //&&
+                                //match d with 
+                                //| Recd v -> AccessibilityLogic.IsRecdFieldAccessible cenv.amap range0 ad v
+                                //| Union (v,_) -> AccessibilityLogic.IsUnionCaseAccessible cenv.amap range0 ad v)
+                                )
+
+    let isUnresolved() = 
+        entityIsUnresolved d.DeclaringTyconRef ||
+        match d with 
+        | RecdOrClass v ->  v.TryRecdField.IsNone 
+        | Union (v,_) -> v.TryUnionCase.IsNone 
+        | ILField _ -> false
+
+    let checkIsResolved() = 
+        checkEntityIsResolved d.DeclaringTyconRef
+        match d with 
+        | RecdOrClass v -> 
+            if v.TryRecdField.IsNone then 
+                invalidOp (sprintf "The record field '%s' could not be found in the target type" v.FieldName)
+        | Union (v,_) -> 
+            if v.TryUnionCase.IsNone then 
+                invalidOp (sprintf "The union case '%s' could not be found in the target type" v.CaseName)
+        | ILField _ -> ()
+
+    new (cenv, ucref, n) = FSharpField(cenv, FSharpFieldData.Union(ucref,n))
+    new (cenv, rfref) = FSharpField(cenv, FSharpFieldData.RecdOrClass(rfref))
+
+    member __.DeclaringEntity = 
+        FSharpEntity(cenv, d.DeclaringTyconRef)
+
+    member __.IsUnresolved = 
+        isUnresolved()
+
+    member __.IsMutable = 
+        if isUnresolved() then false else 
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.IsMutable
+        | Choice2Of2 f -> not f.IsInitOnly && f.LiteralValue.IsNone
+
+    member __.IsLiteral = 
+        if isUnresolved() then false else 
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.LiteralValue.IsSome
+        | Choice2Of2 f -> f.LiteralValue.IsSome
+
+    member __.LiteralValue = 
+        if isUnresolved() then None else 
+        match d.TryRecdField with 
+        | Choice1Of2 r -> getLiteralValue r.LiteralValue
+        | Choice2Of2 f -> f.LiteralValue |> Option.map AbstractIL.ILRuntimeWriter.convFieldInit 
+
+    member __.IsVolatile = 
+        if isUnresolved() then false else 
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.IsVolatile
+        | Choice2Of2 _ -> false // F# doesn't actually respect "volatile" from other assemblies in any case
+
+    member __.IsDefaultValue = 
+        if isUnresolved() then false else 
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.IsZeroInit
+        | Choice2Of2 _ -> false 
+
+    member __.XmlDocSig = 
+        checkIsResolved()
+        let xmlsig =
+            match d with 
+            | RecdOrClass v -> 
+                let recd = RecdFieldInfo(generalizeTypars v.TyconRef.TyparsNoRange,v)
+                ItemDescriptionsImpl.GetXmlDocSigOfRecdFieldInfo recd
+            | Union (v,_) -> 
+                let unionCase = UnionCaseInfo(generalizeTypars v.TyconRef.TyparsNoRange,v)
+                ItemDescriptionsImpl.GetXmlDocSigOfUnionCaseInfo unionCase
+            | ILField (_,f) -> 
+                ItemDescriptionsImpl.GetXmlDocSigOfILFieldInfo cenv.infoReader range0 f
+        match xmlsig with
+        | Some (_, docsig) -> docsig
+        | _ -> ""
+
+    member __.XmlDoc = 
+        if isUnresolved() then XmlDoc.Empty  |> makeXmlDoc else
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.XmlDoc 
+        | Choice2Of2 _ -> XmlDoc.Empty
+        |> makeXmlDoc
+
+    member __.FieldType = 
+        checkIsResolved()
+        let fty = 
+            match d.TryRecdField with 
+            | Choice1Of2 r -> r.FormalType
+            | Choice2Of2 f -> f.FieldType(cenv.amap, range0)
+        FSharpType(cenv,  fty)
+
+    member __.IsStatic = 
+        if isUnresolved() then false else 
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.IsStatic
+        | Choice2Of2 f -> f.IsStatic
+
+    member __.Name = 
+        checkIsResolved()
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.Name
+        | Choice2Of2 f -> f.FieldName
+
+    member __.IsCompilerGenerated = 
+        if isUnresolved() then false else 
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.IsCompilerGenerated
+        | Choice2Of2 _ -> false
+
+    member __.DeclarationLocation = 
+        checkIsResolved()
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.Range
+        | Choice2Of2 _ -> range0
+
+    member __.FieldAttributes = 
+        if isUnresolved() then makeReadOnlyCollection [] else 
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.FieldAttribs |> List.map (fun a -> FSharpAttribute(cenv,  AttribInfo.FSAttribInfo(cenv.g, a))) 
+        | Choice2Of2 _ -> [] 
+        |> makeReadOnlyCollection
+
+    member __.PropertyAttributes = 
+        if isUnresolved() then makeReadOnlyCollection [] else 
+        match d.TryRecdField with 
+        | Choice1Of2 r -> r.PropertyAttribs |> List.map (fun a -> FSharpAttribute(cenv,  AttribInfo.FSAttribInfo(cenv.g, a))) 
+        | Choice2Of2 _ -> [] 
+        |> makeReadOnlyCollection
+
+    member __.Accessibility : FSharpAccessibility =  
+        if isUnresolved() then FSharpAccessibility(taccessPublic) else 
+        let access = 
+            match d.TryRecdField with 
+            | Choice1Of2 r -> r.Accessibility
+            | Choice2Of2 _ -> taccessPublic
+        FSharpAccessibility(access) 
+
+    member private x.V = d
+    override x.Equals(other : obj) =
+        box x === other ||
+        match other with
+        |   :? FSharpField as uc -> 
+            match d, uc.V with 
+            | RecdOrClass r1, RecdOrClass r2 -> recdFieldRefOrder.Compare(r1, r2) = 0
+            | Union (u1,n1), Union (u2,n2) -> cenv.g.unionCaseRefEq u1 u2 && n1 = n2
+            | _ -> false
+        |   _ -> false
+
+    override x.GetHashCode() = hash x.Name
+    override x.ToString() = "field " + x.Name
+
+and FSharpAccessibility(a:Accessibility, ?isProtected) = 
+    let isProtected = defaultArg isProtected  false
+
+    let isInternalCompPath x = 
+        match x with 
+        | CompPath(ILScopeRef.Local,[]) -> true 
+        | _ -> false
+
+    let (|Public|Internal|Private|) (TAccess p) = 
+        match p with 
+        | [] -> Public 
+        | _ when List.forall isInternalCompPath p  -> Internal 
+        | _ -> Private
+
+    member __.IsPublic = not isProtected && match a with Public -> true | _ -> false
+
+    member __.IsPrivate = not isProtected && match a with Private -> true | _ -> false
+
+    member __.IsInternal = not isProtected && match a with Internal -> true | _ -> false
+
+    member __.IsProtected = isProtected
+
+    member __.Contents = a
+
+    override x.ToString() = stringOfAccess a
+
+and [] FSharpAccessibilityRights(thisCcu: CcuThunk, ad:Infos.AccessorDomain) =
+    member internal __.ThisCcu = thisCcu
+    member internal __.Contents = ad
+
+
+and FSharpActivePatternCase(cenv, apinfo: PrettyNaming.ActivePatternInfo, typ, n, valOpt: ValRef option, item) = 
+
+    inherit FSharpSymbol (cenv,  
+                          (fun () -> item),
+                          (fun _ _ _ -> true))
+
+    member __.Name = apinfo.ActiveTags.[n]
+
+    member __.DeclarationLocation = snd apinfo.ActiveTagsWithRanges.[n]
+
+    member __.Group = FSharpActivePatternGroup(cenv, apinfo, typ, valOpt)
+
+    member __.XmlDoc = 
+        defaultArg (valOpt |> Option.map (fun vref -> vref.XmlDoc)) XmlDoc.Empty
+        |> makeXmlDoc
+
+    member __.XmlDocSig = 
+        let xmlsig = 
+            match valOpt with
+            | Some valref -> ItemDescriptionsImpl.GetXmlDocSigOfValRef cenv.g valref
+            | None -> None
+        match xmlsig with
+        | Some (_, docsig) -> docsig
+        | _ -> ""
+
+and FSharpActivePatternGroup(cenv, apinfo:PrettyNaming.ActivePatternInfo, typ, valOpt) =
+    
+    member __.Names = makeReadOnlyCollection apinfo.Names
+
+    member __.IsTotal = apinfo.IsTotal
+
+    member __.OverallType = FSharpType(cenv, typ)
+
+    member __.EnclosingEntity = 
+        valOpt 
+        |> Option.bind (fun vref -> 
+            match vref.ActualParent with 
+            | ParentNone -> None
+            | Parent p -> Some (FSharpEntity(cenv,  p)))
+
+and FSharpGenericParameter(cenv, v:Typar) = 
+
+    inherit FSharpSymbol (cenv,  
+                          (fun () -> Item.TypeVar(v.Name, v)),
+                          (fun _ _ _ad -> true))
+    member __.Name = v.DisplayName
+    member __.DeclarationLocation = v.Range
+    member __.IsCompilerGenerated = v.IsCompilerGenerated
+       
+    member __.IsMeasure = (v.Kind = TyparKind.Measure)
+    member __.XmlDoc = v.Data.typar_xmldoc |> makeXmlDoc
+    member __.IsSolveAtCompileTime = (v.StaticReq = TyparStaticReq.HeadTypeStaticReq)
+    member __.Attributes = 
+         // INCOMPLETENESS: If the type parameter comes from .NET then the .NET metadata for the type parameter
+         // has been lost (it is not accesible via Typar).  So we can't easily report the attributes in this 
+         // case.
+         v.Attribs |> List.map (fun a -> FSharpAttribute(cenv,  AttribInfo.FSAttribInfo(cenv.g, a))) |> makeReadOnlyCollection
+    member __.Constraints = v.Constraints |> List.map (fun a -> FSharpGenericParameterConstraint(cenv, a)) |> makeReadOnlyCollection
+    
+    member internal x.V = v
+
+    override x.Equals(other : obj) =
+        box x === other ||
+        match other with
+        |   :? FSharpGenericParameter as p -> typarRefEq v p.V
+        |   _ -> false
+
+    override x.GetHashCode() = (hash v.Stamp)
+
+    override x.ToString() = "generic parameter " + x.Name
+
+and FSharpDelegateSignature(cenv, info : SlotSig) = 
+
+    member __.DelegateArguments = 
+        info.FormalParams.Head
+        |> List.map (fun (TSlotParam(nm, ty, _, _, _, _)) -> nm, FSharpType(cenv,  ty))
+        |> makeReadOnlyCollection
+
+    member __.DelegateReturnType = 
+        match info.FormalReturnType with
+        | None -> FSharpType(cenv,  cenv.g.unit_ty)
+        | Some ty -> FSharpType(cenv,  ty)
+    override x.ToString() = ""
+
+and FSharpAbstractParameter(cenv, info : SlotParam) =
+
+    member __.Name =    
+        let (TSlotParam(name, _, _, _, _, _)) = info
+        name
+
+    member __.Type = FSharpType(cenv, info.Type)
+
+    member __.IsInArg =
+        let (TSlotParam(_, _, isIn, _, _, _)) = info
+        isIn
+
+    member __.IsOutArg =
+        let (TSlotParam(_, _, _, isOut, _, _)) = info
+        isOut
+
+    member __.IsOptionalArg =
+        let (TSlotParam(_, _, _, _, isOptional, _)) = info
+        isOptional
+
+    member __.Attributes =
+        let (TSlotParam(_, _, _, _, _, attribs)) = info
+        attribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a)))
+        |> makeReadOnlyCollection
+
+and FSharpAbstractSignature(cenv, info : SlotSig) =
+
+    member __.AbstractArguments = 
+        info.FormalParams
+        |> List.map (List.map (fun p -> FSharpAbstractParameter(cenv, p)) >> makeReadOnlyCollection)
+        |> makeReadOnlyCollection
+
+    member __.AbstractReturnType = 
+        match info.FormalReturnType with
+        | None -> FSharpType(cenv,  cenv.g.unit_ty)
+        | Some ty -> FSharpType(cenv,  ty)
+
+    member __.DeclaringTypeGenericParameters =
+        info.ClassTypars 
+        |> List.map (fun t -> FSharpGenericParameter(cenv, t))
+        |> makeReadOnlyCollection
+        
+    member __.MethodGenericParameters =
+        info.MethodTypars 
+        |> List.map (fun t -> FSharpGenericParameter(cenv, t))
+        |> makeReadOnlyCollection
+
+    member __.Name = info.Name 
+    
+    member __.DeclaringType = FSharpType(cenv, info.ImplementedType)
+
+and FSharpGenericParameterMemberConstraint(cenv, info : TraitConstraintInfo) = 
+    let (TTrait(tys,nm,flags,atys,rty,_)) = info 
+    member __.MemberSources = 
+        tys   |> List.map (fun ty -> FSharpType(cenv,  ty)) |> makeReadOnlyCollection
+
+    member __.MemberName = nm
+
+    member __.MemberIsStatic = not flags.IsInstance
+
+    member __.MemberArgumentTypes = atys   |> List.map (fun ty -> FSharpType(cenv,  ty)) |> makeReadOnlyCollection
+
+    member x.MemberReturnType =
+        match rty with 
+        | None -> FSharpType(cenv,  cenv.g.unit_ty) 
+        | Some ty -> FSharpType(cenv,  ty) 
+    override x.ToString() = ""
+
+
+and FSharpGenericParameterDelegateConstraint(cenv, tupledArgTyp: TType, rty: TType) = 
+    member __.DelegateTupledArgumentType = FSharpType(cenv,  tupledArgTyp)
+    member __.DelegateReturnType =  FSharpType(cenv,  rty)
+    override x.ToString() = ""
+
+and FSharpGenericParameterDefaultsToConstraint(cenv, pri:int, ty:TType) = 
+    member __.DefaultsToPriority = pri 
+    member __.DefaultsToTarget = FSharpType(cenv,  ty) 
+    override x.ToString() = ""
+
+and FSharpGenericParameterConstraint(cenv, cx : TyparConstraint) = 
+
+    member __.IsCoercesToConstraint = 
+        match cx with 
+        | TyparConstraint.CoercesTo _ -> true 
+        | _ -> false
+
+    member __.CoercesToTarget = 
+        match cx with 
+        | TyparConstraint.CoercesTo(ty,_) -> FSharpType(cenv,  ty) 
+        | _ -> invalidOp "not a coerces-to constraint"
+
+    member __.IsDefaultsToConstraint = 
+        match cx with 
+        | TyparConstraint.DefaultsTo _ -> true 
+        | _ -> false
+
+    member __.DefaultsToConstraintData = 
+        match cx with 
+        | TyparConstraint.DefaultsTo(pri, ty, _) ->  FSharpGenericParameterDefaultsToConstraint(cenv,  pri, ty) 
+        | _ -> invalidOp "not a 'defaults-to' constraint"
+
+    member __.IsSupportsNullConstraint  = match cx with TyparConstraint.SupportsNull _ -> true | _ -> false
+
+    member __.IsMemberConstraint = 
+        match cx with 
+        | TyparConstraint.MayResolveMember _ -> true 
+        | _ -> false
+
+    member __.MemberConstraintData =  
+        match cx with 
+        | TyparConstraint.MayResolveMember(info, _) ->  FSharpGenericParameterMemberConstraint(cenv,  info) 
+        | _ -> invalidOp "not a member constraint"
+
+    member __.IsNonNullableValueTypeConstraint = 
+        match cx with 
+        | TyparConstraint.IsNonNullableStruct _ -> true 
+        | _ -> false
+    
+    member __.IsReferenceTypeConstraint  = 
+        match cx with 
+        | TyparConstraint.IsReferenceType _ -> true 
+        | _ -> false
+
+    member __.IsSimpleChoiceConstraint = 
+        match cx with 
+        | TyparConstraint.SimpleChoice _ -> true 
+        | _ -> false
+
+    member __.SimpleChoices = 
+        match cx with 
+        | TyparConstraint.SimpleChoice (tys,_) -> 
+            tys   |> List.map (fun ty -> FSharpType(cenv,  ty)) |> makeReadOnlyCollection
+        | _ -> invalidOp "incorrect constraint kind"
+
+    member __.IsRequiresDefaultConstructorConstraint  = 
+        match cx with 
+        | TyparConstraint.RequiresDefaultConstructor _ -> true 
+        | _ -> false
+
+    member __.IsEnumConstraint = 
+        match cx with 
+        | TyparConstraint.IsEnum _ -> true 
+        | _ -> false
+
+    member __.EnumConstraintTarget = 
+        match cx with 
+        | TyparConstraint.IsEnum(ty,_) -> FSharpType(cenv,  ty)
+        | _ -> invalidOp "incorrect constraint kind"
+    
+    member __.IsComparisonConstraint = 
+        match cx with 
+        | TyparConstraint.SupportsComparison _ -> true 
+        | _ -> false
+
+    member __.IsEqualityConstraint = 
+        match cx with 
+        | TyparConstraint.SupportsEquality _ -> true 
+        | _ -> false
+
+    member __.IsUnmanagedConstraint = 
+        match cx with 
+        | TyparConstraint.IsUnmanaged _ -> true 
+        | _ -> false
+
+    member __.IsDelegateConstraint = 
+        match cx with 
+        | TyparConstraint.IsDelegate _ -> true 
+        | _ -> false
+
+    member __.DelegateConstraintData =  
+        match cx with 
+        | TyparConstraint.IsDelegate(ty1,ty2, _) ->  FSharpGenericParameterDelegateConstraint(cenv,  ty1, ty2) 
+        | _ -> invalidOp "not a delegate constraint"
+
+    override x.ToString() = ""
+
+and FSharpInlineAnnotation = 
+   | PseudoValue
+   | AlwaysInline 
+   | OptionalInline 
+   | NeverInline 
+
+and FSharpMemberOrValData = 
+    | E of EventInfo
+    | P of PropInfo
+    | M of MethInfo
+    | V of ValRef
+
+and FSharpMemberOrVal = FSharpMemberOrFunctionOrValue
+
+and FSharpMemberFunctionOrValue =  FSharpMemberOrFunctionOrValue
+
+and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = 
+
+    inherit FSharpSymbol(cenv,  
+                         (fun () -> item),
+                         (fun this thisCcu2 ad -> 
+                              let this = this :?> FSharpMemberOrFunctionOrValue 
+                              checkForCrossProjectAccessibility (thisCcu2, ad) (cenv.thisCcu, this.Accessibility.Contents)) 
+                              //&& 
+                              //match d with 
+                              //| E e -> 
+                              //    match e with 
+                              //    | EventInfo.ILEvent (_,e) -> AccessibilityLogic.IsILEventInfoAccessible g cenv.amap range0 ad e
+                              //    | EventInfo.FSEvent (_,_,vref,_) ->  AccessibilityLogic.IsValAccessible ad vref
+                              //    | _ -> true
+                              //| M m -> AccessibilityLogic.IsMethInfoAccessible cenv.amap range0 ad m
+                              //| P p -> AccessibilityLogic.IsPropInfoAccessible g cenv.amap range0 ad p
+                              //| V v -> AccessibilityLogic.IsValAccessible ad v
+                          )
+
+    let fsharpInfo() = 
+        match d with 
+        | M m -> m.ArbitraryValRef 
+        | P p -> p.ArbitraryValRef 
+        | E e -> e.ArbitraryValRef 
+        | V v -> Some v
+    
+    let isUnresolved() = 
+        match fsharpInfo() with 
+        | None -> false
+        | Some v -> v.TryDeref.IsNone
+
+    let checkIsResolved() = 
+        if isUnresolved() then 
+            let v = (fsharpInfo()).Value
+            let nm = (match v with VRefNonLocal n -> n.ItemKey.PartialKey.LogicalName | _ -> "")
+            invalidOp (sprintf "The value or member '%s' does not exist or is in an unresolved assembly." nm)
+
+    let mkMethSym minfo = FSharpMemberOrFunctionOrValue(cenv, M minfo, Item.MethodGroup (minfo.DisplayName,[minfo]))
+    let mkEventSym einfo = FSharpMemberOrFunctionOrValue(cenv, E einfo, Item.Event einfo)
+
+    new (cenv, vref) = FSharpMemberFunctionOrValue(cenv, V vref, Item.Value vref)
+    new (cenv, minfo) =  FSharpMemberFunctionOrValue(cenv, M minfo, Item.MethodGroup(minfo.LogicalName, [minfo]))
+
+    member __.IsUnresolved = 
+        isUnresolved()
+
+    member __.DeclarationLocationOpt = 
+        checkIsResolved()
+        match fsharpInfo() with 
+        | Some v -> Some v.Range
+        | None -> base.DeclarationLocation 
+
+    member x.Overloads matchParameterNumber =
+        checkIsResolved()
+        match d with
+        | M m ->
+            match item with
+            | Item.MethodGroup (_name, methodInfos) ->
+                let methods =
+                    if matchParameterNumber then
+                        methodInfos
+                        |> List.filter (fun methodInfo -> not (methodInfo.NumArgs = m.NumArgs) )
+                    else methodInfos
+                methods
+                |> List.map (fun mi -> FSharpMemberOrFunctionOrValue(cenv, M mi, item))
+                |> makeReadOnlyCollection
+                |> Some
+            | _ -> None
+        | _ -> None
+
+    member x.DeclarationLocation = 
+        checkIsResolved()
+        match x.DeclarationLocationOpt with 
+        | Some v -> v
+        | None -> failwith "DeclarationLocation property not available"
+
+    member __.LogicalEnclosingEntity = 
+        checkIsResolved()
+        match d with 
+        | E m -> FSharpEntity(cenv,  tcrefOfAppTy cenv.g m.EnclosingType)
+        | P m -> FSharpEntity(cenv,  tcrefOfAppTy cenv.g m.EnclosingType)
+        | M m -> FSharpEntity(cenv,  tcrefOfAppTy cenv.g m.EnclosingType)
+        | V v -> 
+        match v.ApparentParent with 
+        | ParentNone -> invalidOp "the value or member doesn't have a logical parent" 
+        | Parent p -> FSharpEntity(cenv,  p)
+
+    member x.GenericParameters = 
+        checkIsResolved()
+        let tps = 
+            match d with 
+            | E _ -> []
+            | P _ -> []
+            | M m -> m.FormalMethodTypars
+            | V v -> v.Typars 
+        tps |> List.map (fun tp -> FSharpGenericParameter(cenv,  tp)) |> List.toArray |> makeReadOnlyCollection
+
+    member x.FullType = 
+        checkIsResolved()
+        let ty = 
+            match d with 
+            | E e -> e.GetDelegateType(cenv.amap,range0)
+            | P p -> p.GetPropertyType(cenv.amap,range0)
+            | M m -> 
+                let rty = m.GetFSharpReturnTy(cenv.amap,range0,m.FormalMethodInst)
+                let argtysl = m.GetParamTypes(cenv.amap,range0,m.FormalMethodInst) 
+                mkIteratedFunTy (List.map (mkTupledTy cenv.g) argtysl) rty
+            | V v -> v.TauType
+        FSharpType(cenv,  ty)
+
+    member __.HasGetterMethod =
+        if isUnresolved() then false
+        else
+            match d with 
+            | P m -> m.HasGetter
+            | E _
+            | M _
+            | V _ -> false
+
+    member __.GetterMethod =
+        checkIsResolved()
+        match d with 
+        | P m -> mkMethSym m.GetterMethod
+        | E _ | M _ | V _ -> invalidOp "the value or member doesn't have an associated getter method" 
+
+    member __.EventAddMethod =
+        checkIsResolved()
+        match d with 
+        | E e -> mkMethSym (e.GetAddMethod())
+        | P _ | M _  | V _ -> invalidOp "the value or member doesn't have an associated add method" 
+
+    member __.EventRemoveMethod =
+        checkIsResolved()
+        match d with 
+        | E e -> mkMethSym (e.GetRemoveMethod())
+        | P _ | M _  | V _ -> invalidOp "the value or member doesn't have an associated remove method" 
+
+    member __.EventDelegateType =
+        checkIsResolved()
+        match d with 
+        | E e -> FSharpType(cenv, e.GetDelegateType(cenv.amap,range0))
+        | P _ | M _  | V _ -> invalidOp "the value or member doesn't have an associated event delegate type" 
+
+    member __.EventIsStandard =
+        checkIsResolved()
+        match d with 
+        | E e -> 
+            let dty = e.GetDelegateType(cenv.amap,range0)
+            TryDestStandardDelegateTyp cenv.infoReader range0 AccessibleFromSomewhere dty |> isSome
+        | P _ | M _  | V _ -> invalidOp "the value or member is not an event" 
+
+    member __.HasSetterMethod =
+        if isUnresolved() then false
+        else
+            match d with 
+            | P m -> m.HasSetter
+            | E _
+            | M _
+            | V _ -> false
+
+    member __.SetterMethod =
+        checkIsResolved()
+        match d with 
+        | P m -> mkMethSym m.SetterMethod
+        | E _ | M _ | V _ -> invalidOp "the value or member doesn't have an associated setter method" 
+
+    member __.EnclosingEntity = 
+        checkIsResolved()
+        match d with 
+        | E m -> FSharpEntity(cenv,  tcrefOfAppTy cenv.g m.EnclosingType)
+        | P m -> FSharpEntity(cenv,  tcrefOfAppTy cenv.g m.EnclosingType)
+        | M m -> FSharpEntity(cenv,  m.DeclaringEntityRef)
+        | V v -> 
+        match v.ActualParent with 
+        | ParentNone -> invalidOp "the value or member doesn't have an enclosing entity" 
+        | Parent p -> FSharpEntity(cenv,  p)
+
+    member __.IsCompilerGenerated = 
+        if isUnresolved() then false else 
+        match fsharpInfo() with 
+        | None -> false
+        | Some v -> 
+        v.IsCompilerGenerated
+
+    member __.InlineAnnotation = 
+        if isUnresolved() then FSharpInlineAnnotation.OptionalInline else 
+        match fsharpInfo() with 
+        | None -> FSharpInlineAnnotation.OptionalInline
+        | Some v -> 
+        match v.InlineInfo with 
+        | ValInline.PseudoVal -> FSharpInlineAnnotation.PseudoValue
+        | ValInline.Always -> FSharpInlineAnnotation.AlwaysInline
+        | ValInline.Optional -> FSharpInlineAnnotation.OptionalInline
+        | ValInline.Never -> FSharpInlineAnnotation.NeverInline
+
+    member __.IsMutable = 
+        if isUnresolved() then false else 
+        match d with 
+        | M _ | P _ |  E _ -> false
+        | V v -> v.IsMutable
+
+    member __.IsModuleValueOrMember = 
+        if isUnresolved() then false else 
+        match d with 
+        | M _ | P _ | E _ -> true
+        | V v -> v.IsMember || v.IsModuleBinding
+
+    member __.IsMember = 
+        if isUnresolved() then false else 
+        match d with 
+        | M _ | P _ | E _ -> true
+        | V v -> v.IsMember 
+    
+    member __.IsDispatchSlot = 
+        if isUnresolved() then false else 
+        match d with 
+        | E e -> e.GetAddMethod().IsDispatchSlot
+        | P p -> p.IsDispatchSlot
+        | M m -> m.IsDispatchSlot
+        | V v -> v.IsDispatchSlot
+
+    member x.IsProperty = 
+        match d with 
+        | P _ -> true
+        | _ -> false
+
+    member x.IsEvent = 
+        match d with 
+        | E _ -> true
+        | _ -> false
+
+    member x.EventForFSharpProperty = 
+        match d with 
+        | P p when p.IsFSharpEventProperty  ->
+            let minfos1 = GetImmediateIntrinsicMethInfosOfType (Some("add_"+p.PropertyName),AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 p.EnclosingType 
+            let minfos2 = GetImmediateIntrinsicMethInfosOfType (Some("remove_"+p.PropertyName),AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 p.EnclosingType
+            match  minfos1,minfos2 with 
+            | [addMeth],[removeMeth] -> 
+                match addMeth.ArbitraryValRef, removeMeth.ArbitraryValRef with 
+                | Some addVal, Some removeVal -> Some (mkEventSym (FSEvent(cenv.g, p, addVal, removeVal)))
+                | _ -> None
+            | _ -> None
+        | _ -> None
+
+    member __.IsEventAddMethod = 
+        if isUnresolved() then false else 
+        match d with 
+        | M m when m.LogicalName.StartsWith("add_") -> 
+            let eventName = m.LogicalName.[4..]
+            let entityTy = generalizedTyconRef m.DeclaringEntityRef
+            nonNil (cenv.infoReader.GetImmediateIntrinsicEventsOfType (Some eventName, AccessibleFromSomeFSharpCode, range0, entityTy)) ||
+            match GetImmediateIntrinsicPropInfosOfType(Some eventName, AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 (generalizedTyconRef m.DeclaringEntityRef) with 
+            | pinfo :: _  -> pinfo.IsFSharpEventProperty
+            | _ -> false
+
+        | _ -> false
+
+    member __.IsEventRemoveMethod = 
+        if isUnresolved() then false else 
+        match d with 
+        | M m when m.LogicalName.StartsWith("remove_") -> 
+            let eventName = m.LogicalName.[7..]
+            let entityTy = generalizedTyconRef m.DeclaringEntityRef
+            nonNil (cenv.infoReader.GetImmediateIntrinsicEventsOfType (Some eventName, AccessibleFromSomeFSharpCode, range0, entityTy)) ||
+            match GetImmediateIntrinsicPropInfosOfType(Some eventName, AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 (generalizedTyconRef m.DeclaringEntityRef) with 
+            | pinfo :: _ -> pinfo.IsFSharpEventProperty
+            | _ -> false
+        | _ -> false
+
+    member x.IsGetterMethod =  
+        if isUnresolved() then false else 
+        x.IsPropertyGetterMethod ||
+        match fsharpInfo() with 
+        | None -> false
+        | Some v -> 
+        match v.MemberInfo with 
+        | None -> false 
+        | Some memInfo -> memInfo.MemberFlags.MemberKind = MemberKind.PropertyGet
+
+    member x.IsSetterMethod =  
+        if isUnresolved() then false else 
+        x.IsPropertySetterMethod ||
+        match fsharpInfo() with 
+        | None -> false
+        | Some v -> 
+        match v.MemberInfo with 
+        | None -> false 
+        | Some memInfo -> memInfo.MemberFlags.MemberKind = MemberKind.PropertySet
+
+    member __.IsPropertyGetterMethod = 
+        if isUnresolved() then false else 
+        match d with 
+        | M m when m.LogicalName.StartsWith("get_") -> 
+            let propName = PrettyNaming.ChopPropertyName(m.LogicalName) 
+            nonNil (GetImmediateIntrinsicPropInfosOfType(Some propName, AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 (generalizedTyconRef m.DeclaringEntityRef))
+        | V v -> 
+            match v.MemberInfo with 
+            | None -> false 
+            | Some memInfo -> memInfo.MemberFlags.MemberKind = MemberKind.PropertyGet
+        | _ -> false
+
+    member __.IsPropertySetterMethod = 
+        if isUnresolved() then false else 
+        match d with 
+        // Look for a matching property with the right name. 
+        | M m when m.LogicalName.StartsWith("set_") -> 
+            let propName = PrettyNaming.ChopPropertyName(m.LogicalName) 
+            nonNil (GetImmediateIntrinsicPropInfosOfType(Some propName, AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 (generalizedTyconRef m.DeclaringEntityRef))
+        | V v -> 
+            match v.MemberInfo with 
+            | None -> false 
+            | Some memInfo -> memInfo.MemberFlags.MemberKind = MemberKind.PropertySet
+        | _ -> false
+
+    member __.IsInstanceMember = 
+        if isUnresolved() then false else 
+        match d with 
+        | E e -> not e.IsStatic
+        | P p -> not p.IsStatic
+        | M m -> m.IsInstance
+        | V v -> v.IsInstanceMember
+
+    member v.IsInstanceMemberInCompiledCode = 
+        if isUnresolved() then false else 
+        v.IsInstanceMember &&
+        match d with 
+        | E e -> match e.ArbitraryValRef with Some vref -> ValRefIsCompiledAsInstanceMember cenv.g vref | None -> true
+        | P p -> match p.ArbitraryValRef with Some vref -> ValRefIsCompiledAsInstanceMember cenv.g vref | None -> true
+        | M m -> match m.ArbitraryValRef with Some vref -> ValRefIsCompiledAsInstanceMember cenv.g vref | None -> true
+        | V vref -> ValRefIsCompiledAsInstanceMember cenv.g vref 
+
+    member __.IsExtensionMember = 
+        if isUnresolved() then false else 
+        match d with 
+        | E e -> e.GetAddMethod().IsExtensionMember
+        | P p -> p.IsExtensionMember
+        | M m -> m.IsExtensionMember
+        | V v -> v.IsExtensionMember
+
+    member this.IsOverrideOrExplicitMember = this.IsOverrideOrExplicitInterfaceImplementation
+    member __.IsOverrideOrExplicitInterfaceImplementation =
+        if isUnresolved() then false else 
+        match d with 
+        | E e -> e.GetAddMethod().IsDefiniteFSharpOverride
+        | P p -> p.IsDefiniteFSharpOverride
+        | M m -> m.IsDefiniteFSharpOverride
+        | V v -> 
+            v.MemberInfo.IsSome && v.IsDefiniteFSharpOverrideMember
+
+    member __.IsExplicitInterfaceImplementation =
+        if isUnresolved() then false else 
+        match d with 
+        | E e -> e.GetAddMethod().IsFSharpExplicitInterfaceImplementation
+        | P p -> p.IsFSharpExplicitInterfaceImplementation
+        | M m -> m.IsFSharpExplicitInterfaceImplementation
+        | V v -> v.IsFSharpExplicitInterfaceImplementation cenv.g
+
+    member __.ImplementedAbstractSignatures =
+        checkIsResolved()
+        let sigs =
+            match d with
+            | E e -> e.GetAddMethod().ImplementedSlotSignatures
+            | P p -> p.ImplementedSlotSignatures
+            | M m -> m.ImplementedSlotSignatures
+            | V v -> v.ImplementedSlotSignatures
+        sigs |> List.map (fun s -> FSharpAbstractSignature (cenv, s))
+        |> makeReadOnlyCollection
+
+    member __.IsImplicitConstructor = 
+        if isUnresolved() then false else 
+        match fsharpInfo() with 
+        | None -> false
+        | Some v -> v.IsIncrClassConstructor
+    
+    member __.IsTypeFunction = 
+        if isUnresolved() then false else 
+        match fsharpInfo() with 
+        | None -> false
+        | Some v -> v.IsTypeFunction
+
+    member __.IsActivePattern =  
+        if isUnresolved() then false else 
+        match fsharpInfo() with 
+        | Some v -> PrettyNaming.ActivePatternInfoOfValName v.CoreDisplayName v.Range |> isSome
+        | None -> false
+
+    member x.CompiledName = 
+        checkIsResolved()
+        match fsharpInfo() with 
+        | Some v -> v.CompiledName
+        | None -> x.LogicalName
+
+    member __.LogicalName = 
+        checkIsResolved()
+        match d with 
+        | E e -> e.EventName
+        | P p -> p.PropertyName
+        | M m -> m.LogicalName
+        | V v -> v.LogicalName
+
+    member __.DisplayName = 
+        checkIsResolved()
+        match d with 
+        | E e -> e.EventName
+        | P p -> p.PropertyName
+        | M m -> m.DisplayName
+        | V v -> v.DisplayName
+
+    member __.XmlDocSig = 
+        checkIsResolved()
+ 
+        match d with 
+        | E e ->
+            let range = defaultArg __.DeclarationLocationOpt range0
+            match ItemDescriptionsImpl.GetXmlDocSigOfEvent cenv.infoReader range e with
+            | Some (_, docsig) -> docsig
+            | _ -> ""
+        | P p ->
+            let range = defaultArg __.DeclarationLocationOpt range0
+            match ItemDescriptionsImpl.GetXmlDocSigOfProp cenv.infoReader range p with
+            | Some (_, docsig) -> docsig
+            | _ -> ""
+        | M m -> 
+            let range = defaultArg __.DeclarationLocationOpt range0
+            match ItemDescriptionsImpl.GetXmlDocSigOfMethInfo cenv.infoReader range m with
+            | Some (_, docsig) -> docsig
+            | _ -> ""
+        | V v ->
+            match v.ActualParent with 
+            | Parent entityRef -> 
+                match ItemDescriptionsImpl.GetXmlDocSigOfScopedValRef cenv.g entityRef v with
+                | Some (_, docsig) -> docsig
+                | _ -> ""
+            | ParentNone -> "" 
+
+    member __.XmlDoc = 
+        if isUnresolved() then XmlDoc.Empty  |> makeXmlDoc else
+        match d with 
+        | E e -> e.XmlDoc |> makeXmlDoc
+        | P p -> p.XmlDoc |> makeXmlDoc
+        | M m -> m.XmlDoc |> makeXmlDoc
+        | V v -> v.XmlDoc |> makeXmlDoc
+
+    member x.CurriedParameterGroups = 
+        checkIsResolved()
+        match d with 
+        | P p -> 
+            
+            [ [ for (ParamData(isParamArrayArg,isOutArg,optArgInfo,nmOpt,_reflArgInfo,pty)) in p.GetParamDatas(cenv.amap,range0) do 
+                // INCOMPLETENESS: Attribs is empty here, so we can't look at attributes for
+                // either .NET or F# parameters
+                let argInfo : ArgReprInfo = { Name=nmOpt; Attribs= [] }
+                yield FSharpParameter(cenv, pty, argInfo, x.DeclarationLocationOpt, isParamArrayArg, isOutArg, optArgInfo.IsOptional) ] 
+               |> makeReadOnlyCollection  ]
+           |> makeReadOnlyCollection
+
+        | E _ ->  []  |> makeReadOnlyCollection
+        | M m -> 
+            [ for argtys in m.GetParamDatas(cenv.amap,range0,m.FormalMethodInst) do 
+                 yield
+                   [ for (ParamData(isParamArrayArg,isOutArg,optArgInfo,nmOpt,_reflArgInfo,pty)) in argtys do 
+                // INCOMPLETENESS: Attribs is empty here, so we can't look at attributes for
+                // either .NET or F# parameters
+                        let argInfo : ArgReprInfo = { Name=nmOpt; Attribs= [] }
+                        yield FSharpParameter(cenv,  pty, argInfo, x.DeclarationLocationOpt, isParamArrayArg, isOutArg, optArgInfo.IsOptional) ] 
+                   |> makeReadOnlyCollection ]
+             |> makeReadOnlyCollection
+
+        | V v -> 
+        match v.ValReprInfo with 
+        | None ->
+            let _, tau = v.TypeScheme
+            if isFunTy cenv.g tau then
+                let argtysl, _typ = stripFunTy cenv.g tau
+                [ for typ in argtysl do
+                    let allArguments =
+                        if isTupleTy cenv.g typ
+                        then tryDestTupleTy cenv.g typ
+                        else [typ]
+                    yield
+                      allArguments
+                      |> List.map (fun arg -> FSharpParameter(cenv,  arg, { Name=None; Attribs= [] }, x.DeclarationLocationOpt, false, false, false))
+                      |> makeReadOnlyCollection ]
+                |> makeReadOnlyCollection
+            else makeReadOnlyCollection []
+        | Some (ValReprInfo(_typars,curriedArgInfos,_retInfo)) -> 
+            let tau = v.TauType
+            let argtysl,_ = GetTopTauTypeInFSharpForm cenv.g curriedArgInfos tau range0
+            let argtysl = if v.IsInstanceMember then argtysl.Tail else argtysl
+            [ for argtys in argtysl do 
+                 yield 
+                   [ for argty, argInfo in argtys do 
+                        let isParamArrayArg = HasFSharpAttribute cenv.g cenv.g.attrib_ParamArrayAttribute argInfo.Attribs
+                        let isOutArg = HasFSharpAttribute cenv.g cenv.g.attrib_OutAttribute argInfo.Attribs && isByrefTy cenv.g argty
+                        let isOptionalArg = HasFSharpAttribute cenv.g cenv.g.attrib_OptionalArgumentAttribute argInfo.Attribs
+                        yield FSharpParameter(cenv,  argty, argInfo, x.DeclarationLocationOpt, isParamArrayArg, isOutArg, isOptionalArg) ] 
+                   |> makeReadOnlyCollection ]
+             |> makeReadOnlyCollection
+
+    member x.ReturnParameter = 
+        checkIsResolved()
+        match d with 
+        | E e -> 
+                // INCOMPLETENESS: Attribs is empty here, so we can't look at return attributes for .NET or F# methods
+            let retInfo : ArgReprInfo = { Name=None; Attribs= [] }
+            let rty = 
+                try PropTypOfEventInfo cenv.infoReader range0 AccessibleFromSomewhere e
+                with _ -> 
+                    // For non-standard events, just use the delegate type as the ReturnParameter type
+                    e.GetDelegateType(cenv.amap,range0)
+
+            FSharpParameter(cenv,  rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false) 
+
+        | P p -> 
+                // INCOMPLETENESS: Attribs is empty here, so we can't look at return attributes for .NET or F# methods
+            let retInfo : ArgReprInfo = { Name=None; Attribs= [] }
+            let rty = p.GetPropertyType(cenv.amap,range0)
+            FSharpParameter(cenv,  rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false) 
+        | M m -> 
+                // INCOMPLETENESS: Attribs is empty here, so we can't look at return attributes for .NET or F# methods
+            let retInfo : ArgReprInfo = { Name=None; Attribs= [] }
+            let rty = m.GetFSharpReturnTy(cenv.amap,range0,m.FormalMethodInst)
+            FSharpParameter(cenv,  rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false) 
+        | V v -> 
+        match v.ValReprInfo with 
+        | None ->
+            let _, tau = v.TypeScheme
+            let _argtysl, rty = stripFunTy cenv.g tau
+            let empty : ArgReprInfo  = { Name=None; Attribs= [] }
+            FSharpParameter(cenv,  rty, empty, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false)
+        | Some (ValReprInfo(_typars,argInfos,retInfo)) -> 
+            let tau = v.TauType
+            let _c,rty = GetTopTauTypeInFSharpForm cenv.g argInfos tau range0
+            FSharpParameter(cenv,  rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false) 
+
+
+    member __.Attributes = 
+        if isUnresolved() then makeReadOnlyCollection [] else 
+        let m = range0
+        match d with 
+        | E einfo -> 
+            AttributeChecking.GetAttribInfosOfEvent cenv.amap m einfo |> List.map (fun a -> FSharpAttribute(cenv,  a))
+        | P pinfo -> 
+            AttributeChecking.GetAttribInfosOfProp cenv.amap m pinfo |> List.map (fun a -> FSharpAttribute(cenv,  a))
+        | M minfo -> 
+            AttributeChecking.GetAttribInfosOfMethod cenv.amap m minfo |> List.map (fun a -> FSharpAttribute(cenv,  a))
+        | V v -> 
+            v.Attribs |> List.map (fun a -> FSharpAttribute(cenv,  AttribInfo.FSAttribInfo(cenv.g, a))) 
+     |> makeReadOnlyCollection
+     
+    /// Is this "base" in "base.M(...)"
+    member __.IsBaseValue =
+        if isUnresolved() then false else
+        match d with
+        | M _ | P _ | E _ -> false
+        | V v -> v.BaseOrThisInfo = BaseVal
+
+    /// Is this the "x" in "type C() as x = ..."
+    member __.IsConstructorThisValue =
+        if isUnresolved() then false else
+        match d with
+        | M _ | P _ | E _ -> false
+        | V v -> v.BaseOrThisInfo = CtorThisVal
+
+    /// Is this the "x" in "member x.M = ..."
+    member __.IsMemberThisValue =
+        if isUnresolved() then false else
+        match d with
+        | M _ | P _ | E _ -> false
+        | V v -> v.BaseOrThisInfo = MemberThisVal
+
+    /// Is this a [] value, and if so what value? (may be null)
+    member __.LiteralValue =
+        if isUnresolved() then None else
+        match d with
+        | M _ | P _ | E _ -> None
+        | V v -> getLiteralValue v.LiteralValue
+
+      /// How visible is this? 
+    member this.Accessibility : FSharpAccessibility  = 
+        if isUnresolved() then FSharpAccessibility(taccessPublic) else 
+        match fsharpInfo() with 
+        | Some v -> FSharpAccessibility(v.Accessibility)
+        | None ->  
+        
+        // Note, returning "public" is wrong for IL members that are private
+        match d with 
+        | E e ->  
+            // For IL events, we get an approximate accessiblity that at least reports "internal" as "internal" and "private" as "private"
+            let access = 
+                match e with 
+                | ILEvent (_,x) -> 
+                    let ilAccess = AccessibilityLogic.GetILAccessOfILEventInfo x
+                    getApproxFSharpAccessibilityOfMember this.EnclosingEntity.Entity  ilAccess
+                | _ -> taccessPublic
+
+            FSharpAccessibility(access)
+
+        | P p ->  
+            // For IL  properties, we get an approximate accessiblity that at least reports "internal" as "internal" and "private" as "private"
+            let access = 
+                match p with 
+                | ILProp (_,x) -> 
+                    let ilAccess = AccessibilityLogic.GetILAccessOfILPropInfo x
+                    getApproxFSharpAccessibilityOfMember this.EnclosingEntity.Entity  ilAccess
+                | _ -> taccessPublic
+
+            FSharpAccessibility(access)
+
+        | M m ->  
+
+            // For IL  methods, we get an approximate accessiblity that at least reports "internal" as "internal" and "private" as "private"
+            let access = 
+                match m with 
+                | ILMeth (_,x,_) -> getApproxFSharpAccessibilityOfMember x.DeclaringTyconRef x.RawMetadata.Access 
+                | _ -> taccessPublic
+
+            FSharpAccessibility(access,isProtected=m.IsProtectedAccessiblity)
+
+        | V v -> FSharpAccessibility(v.Accessibility)
+
+    member x.Data = d
+
+    override x.Equals(other : obj) =
+        box x === other ||
+        match other with
+        |   :? FSharpMemberOrFunctionOrValue as other ->
+            match d, other.Data with 
+            | E evt1, E evt2 -> EventInfo.EventInfosUseIdenticalDefintions evt1 evt2 
+            | P p1, P p2 ->  PropInfo.PropInfosUseIdenticalDefinitions p1 p2
+            | M m1, M m2 ->  MethInfo.MethInfosUseIdenticalDefinitions m1 m2
+            | V v1, V v2 -> valRefEq cenv.g v1 v2
+            | _ -> false
+        |   _ -> false
+
+    override x.GetHashCode() = hash (box x.LogicalName)
+    override x.ToString() = 
+        try  
+            let prefix = (if x.IsEvent then "event " elif x.IsProperty then "property " elif x.IsMember then "member " else "val ") 
+            prefix + x.LogicalName 
+        with _  -> "??"
+
+
+and FSharpType(cenv, typ:TType) =
+
+    let isUnresolved() = 
+       ErrorLogger.protectAssemblyExploration true <| fun () -> 
+        match stripTyparEqns typ with 
+        | TType_app (tcref,_) -> FSharpEntity(cenv,  tcref).IsUnresolved
+        | TType_measure (MeasureCon tcref) ->  FSharpEntity(cenv,  tcref).IsUnresolved
+        | TType_measure (MeasureProd _) ->  FSharpEntity(cenv,  cenv.g.measureproduct_tcr).IsUnresolved 
+        | TType_measure MeasureOne ->  FSharpEntity(cenv,  cenv.g.measureone_tcr).IsUnresolved 
+        | TType_measure (MeasureInv _) ->  FSharpEntity(cenv,  cenv.g.measureinverse_tcr).IsUnresolved 
+        | _ -> false
+    
+    let isResolved() = not (isUnresolved())
+
+    new (g, thisCcu, tcImports, typ) = FSharpType(cenv(g,thisCcu,tcImports), typ)
+
+    member __.IsUnresolved = isUnresolved()
+
+    member __.HasTypeDefinition = 
+       isResolved() &&
+       protect <| fun () -> 
+         match stripTyparEqns typ with 
+         | TType_app _ | TType_measure (MeasureCon _ | MeasureProd _ | MeasureInv _ | MeasureOne _) -> true 
+         | _ -> false
+
+    member __.IsTupleType = 
+       isResolved() &&
+       protect <| fun () -> 
+        match stripTyparEqns typ with 
+        | TType_tuple _ -> true 
+        | _ -> false
+
+    member x.IsNamedType = x.HasTypeDefinition
+    member x.NamedEntity = x.TypeDefinition
+
+    member __.TypeDefinition = 
+       protect <| fun () -> 
+        match stripTyparEqns typ with 
+        | TType_app (tcref,_) -> FSharpEntity(cenv,  tcref) 
+        | TType_measure (MeasureCon tcref) ->  FSharpEntity(cenv,  tcref) 
+        | TType_measure (MeasureProd _) ->  FSharpEntity(cenv,  cenv.g.measureproduct_tcr) 
+        | TType_measure MeasureOne ->  FSharpEntity(cenv,  cenv.g.measureone_tcr) 
+        | TType_measure (MeasureInv _) ->  FSharpEntity(cenv,  cenv.g.measureinverse_tcr) 
+        | _ -> invalidOp "not a named type"
+
+    member __.GenericArguments = 
+       protect <| fun () -> 
+        match stripTyparEqns typ with 
+        | TType_app (_,tyargs) 
+        | TType_tuple (tyargs) -> (tyargs |> List.map (fun ty -> FSharpType(cenv,  ty)) |> makeReadOnlyCollection) 
+        | TType_fun(d,r) -> [| FSharpType(cenv,  d); FSharpType(cenv,  r) |] |> makeReadOnlyCollection
+        | TType_measure (MeasureCon _) ->  [| |] |> makeReadOnlyCollection
+        | TType_measure (MeasureProd (t1,t2)) ->  [| FSharpType(cenv,  TType_measure t1); FSharpType(cenv,  TType_measure t2) |] |> makeReadOnlyCollection
+        | TType_measure MeasureOne ->  [| |] |> makeReadOnlyCollection
+        | TType_measure (MeasureInv t1) ->  [| FSharpType(cenv,  TType_measure t1) |] |> makeReadOnlyCollection
+        | _ -> invalidOp "not a named type"
+
+(*
+    member __.ProvidedArguments = 
+        let typeName, argNamesAndValues = 
+            try 
+                PrettyNaming.demangleProvidedTypeName typeLogicalName 
+            with PrettyNaming.InvalidMangledStaticArg piece -> 
+                error(Error(FSComp.SR.etProvidedTypeReferenceInvalidText(piece),range0)) 
+*)
+
+    member typ.IsAbbreviation = 
+       isResolved() && typ.HasTypeDefinition && typ.TypeDefinition.IsFSharpAbbreviation
+
+    member __.AbbreviatedType = 
+       protect <| fun () -> FSharpType(cenv,  stripTyEqns cenv.g typ)
+
+    member __.IsFunctionType = 
+       isResolved() &&
+       protect <| fun () -> 
+        match stripTyparEqns typ with 
+        | TType_fun _ -> true 
+        | _ -> false
+
+    member __.IsGenericParameter = 
+       protect <| fun () -> 
+        match stripTyparEqns typ with 
+        | TType_var _ -> true 
+        | TType_measure (MeasureVar _) -> true 
+        | _ -> false
+
+    member __.GenericParameter = 
+       protect <| fun () -> 
+        match stripTyparEqns typ with 
+        | TType_var tp 
+        | TType_measure (MeasureVar tp) -> 
+            FSharpGenericParameter (cenv,  tp)
+        | _ -> invalidOp "not a generic parameter type"
+
+    member x.AllInterfaces = 
+        if isUnresolved() then makeReadOnlyCollection [] else
+        [ for ty in AllInterfacesOfType  cenv.g cenv.amap range0 AllowMultiIntfInstantiations.Yes typ do 
+             yield FSharpType(cenv, ty) ]
+        |> makeReadOnlyCollection
+
+    member x.BaseType = 
+        GetSuperTypeOfType cenv.g cenv.amap range0 typ
+        |> Option.map (fun ty -> FSharpType(cenv, ty)) 
+
+    member x.Instantiate(instantiation:(FSharpGenericParameter * FSharpType) list) = 
+        let typI = instType (instantiation |> List.map (fun (tyv,typ) -> tyv.V, typ.V)) typ
+        FSharpType(cenv, typI)
+
+    member private x.V = typ
+    member private x.cenv = cenv
+
+    member private typ.AdjustType(t) = 
+        FSharpType(typ.cenv, t)
+
+    override x.Equals(other : obj) =
+        box x === other ||
+        match other with
+        |   :? FSharpType as t -> typeEquiv cenv.g typ t.V
+        |   _ -> false
+
+    override x.GetHashCode() = hash x
+
+    member x.Format(denv: FSharpDisplayContext) = 
+       protect <| fun () -> 
+        NicePrint.prettyStringOfTyNoCx (denv.Contents cenv.g) typ 
+
+    override x.ToString() = 
+       protect <| fun () -> 
+        "type " + NicePrint.prettyStringOfTyNoCx (DisplayEnv.Empty(cenv.g)) typ 
+
+    static member Prettify(typ: FSharpType) = 
+        let t = PrettyTypes.PrettifyTypes1 typ.cenv.g typ.V  |> p23
+        typ.AdjustType t
+
+    static member Prettify(typs: IList) = 
+        let xs = typs |> List.ofSeq
+        match xs with 
+        | [] -> []
+        | h :: _ -> 
+            let cenv = h.cenv
+            let prettyTyps = PrettyTypes.PrettifyTypesN cenv.g [ for t in xs -> t.V ] |> p23
+            (xs, prettyTyps) ||> List.map2 (fun p pty -> p.AdjustType(pty))
+        |> makeReadOnlyCollection
+
+    static member Prettify(parameter: FSharpParameter) = 
+        let prettyTyp = parameter.V |> PrettyTypes.PrettifyTypes1 parameter.cenv.g |> p23
+        parameter.AdjustType(prettyTyp)
+
+    static member Prettify(parameters: IList) = 
+        let parameters = parameters |> List.ofSeq
+        match parameters with 
+        | [] -> []
+        | h :: _ -> 
+            let cenv = h.cenv
+            let prettyTyps = parameters |> List.map (fun p -> p.V) |> PrettyTypes.PrettifyTypesN cenv.g |> p23
+            (parameters, prettyTyps) ||> List.map2 (fun p pty -> p.AdjustType(pty))
+        |> makeReadOnlyCollection
+
+    static member Prettify(parameters: IList>) = 
+        let xs = parameters |> List.ofSeq |> List.map List.ofSeq
+        let hOpt = xs |> List.tryPick (function h :: _ -> Some h | _ -> None) 
+        match hOpt with 
+        | None -> xs
+        | Some h -> 
+            let cenv = h.cenv
+            let prettyTyps = xs |> List.mapSquared (fun p -> p.V) |> PrettyTypes.PrettifyTypesNN cenv.g |> p23
+            (xs, prettyTyps) ||> List.map2 (List.map2 (fun p pty -> p.AdjustType(pty)))
+        |> List.map makeReadOnlyCollection |> makeReadOnlyCollection
+
+    static member Prettify(parameters: IList>, returnParameter: FSharpParameter) = 
+        let xs = parameters |> List.ofSeq |> List.map List.ofSeq
+        let cenv = returnParameter.cenv
+        let prettyTyps, prettyRetTy = xs |> List.mapSquared (fun p -> p.V) |> (fun tys -> PrettyTypes.PrettifyTypesNN1 cenv.g (tys,returnParameter.V) )|> p23
+        let ps = (xs, prettyTyps) ||> List.map2 (List.map2 (fun p pty -> p.AdjustType(pty))) |> List.map makeReadOnlyCollection |> makeReadOnlyCollection
+        ps, returnParameter.AdjustType(prettyRetTy)
+
+and FSharpAttribute(cenv: cenv, attrib: AttribInfo) = 
+
+    let rec resolveArgObj (arg: obj) =
+        match arg with
+        | :? TType as t -> box (FSharpType(cenv, t)) 
+        | :? (obj[]) as a -> a |> Array.map resolveArgObj |> box
+        | _ -> arg
+
+    member __.AttributeType =  
+        FSharpEntity(cenv,  attrib.TyconRef)
+
+    member __.IsUnresolved = entityIsUnresolved(attrib.TyconRef)
+
+    member __.ConstructorArguments = 
+        attrib.ConstructorArguments 
+        |> List.map (fun (ty, obj) -> FSharpType(cenv, ty), resolveArgObj obj)
+        |> makeReadOnlyCollection
+
+    member __.NamedArguments = 
+        attrib.NamedArguments 
+        |> List.map (fun (ty, nm, isField, obj) -> FSharpType(cenv, ty), nm, isField, resolveArgObj obj)
+        |> makeReadOnlyCollection
+
+    member __.Format(denv: FSharpDisplayContext) = 
+        protect <| fun () -> 
+            match attrib with
+            | AttribInfo.FSAttribInfo(g, attrib) ->
+                NicePrint.stringOfFSAttrib (denv.Contents g) attrib
+            | AttribInfo.ILAttribInfo (g, _, _scoref, cattr, _) -> 
+                let parms, _args = decodeILAttribData g.ilg cattr 
+                NicePrint.stringOfILAttrib (denv.Contents g) (cattr.Method.EnclosingType, parms)
+
+    override __.ToString() = 
+        if entityIsUnresolved attrib.TyconRef then "attribute ???" else "attribute " + attrib.TyconRef.CompiledName + "(...)" 
+    
+and FSharpStaticParameter(cenv,  sp: Tainted< ExtensionTyping.ProvidedParameterInfo >, m) = 
+    inherit FSharpSymbol(cenv,  
+                         (fun () -> 
+                              protect <| fun () -> 
+                                let spKind = Import.ImportProvidedType cenv.amap m (sp.PApply((fun x -> x.ParameterType), m))
+                                let nm = sp.PUntaint((fun p -> p.Name), m)
+                                Item.ArgName((mkSynId m nm, spKind, None))),
+                         (fun _ _ _ -> true))
+
+    member __.Name = 
+        protect <| fun () -> 
+            sp.PUntaint((fun p -> p.Name), m)
+
+    member __.DeclarationLocation = m
+
+    member __.Kind = 
+        protect <| fun () -> 
+            let typ = Import.ImportProvidedType cenv.amap m (sp.PApply((fun x -> x.ParameterType), m))
+            FSharpType(cenv,  typ)
+
+    member __.IsOptional = 
+        protect <| fun () -> sp.PUntaint((fun x -> x.IsOptional), m)
+
+    member __.HasDefaultValue = 
+        protect <| fun () -> sp.PUntaint((fun x -> x.HasDefaultValue), m)
+
+    member __.DefaultValue = 
+        protect <| fun () -> sp.PUntaint((fun x -> x.RawDefaultValue), m)
+
+    override x.Equals(other : obj) =
+        box x === other || 
+        match other with
+        |   :? FSharpStaticParameter as p -> x.Name = p.Name && x.DeclarationLocation = p.DeclarationLocation
+        |   _ -> false
+
+    override x.GetHashCode() = hash x.Name
+    override x.ToString() = 
+        "static parameter " + x.Name 
+
+and FSharpParameter(cenv, typ:TType, topArgInfo:ArgReprInfo, mOpt, isParamArrayArg, isOutArg, isOptionalArg) = 
+    inherit FSharpSymbol(cenv,  
+                         (fun () -> 
+                            let m = match mOpt with Some m  -> m | None -> range0
+                            Item.ArgName((match topArgInfo.Name with None -> mkSynId m "" | Some v -> v), typ, None)),
+                         (fun _ _ _ -> true))
+    let attribs = topArgInfo.Attribs
+    let idOpt = topArgInfo.Name
+    let m = match mOpt with Some m  -> m | None -> range0
+    member __.Name = match idOpt with None -> None | Some v -> Some v.idText
+    member __.cenv : cenv = cenv
+    member __.AdjustType(t) = FSharpParameter(cenv, t, topArgInfo, mOpt, isParamArrayArg, isOutArg, isOptionalArg)
+    member __.Type : FSharpType = FSharpType(cenv,  typ)
+    member __.V = typ
+    member __.DeclarationLocation = match idOpt with None -> m | Some v -> v.idRange
+    member __.Attributes = 
+        attribs |> List.map (fun a -> FSharpAttribute(cenv,  AttribInfo.FSAttribInfo(cenv.g, a))) |> makeReadOnlyCollection
+    member __.IsParamArrayArg = isParamArrayArg
+    member __.IsOutArg = isOutArg
+    member __.IsOptionalArg = isOptionalArg
+    
+    member private x.ValReprInfo = topArgInfo
+
+    override x.Equals(other : obj) =
+        box x === other || 
+        match other with
+        |   :? FSharpParameter as p -> x.Name = p.Name && x.DeclarationLocation = p.DeclarationLocation
+        |   _ -> false
+
+    override x.GetHashCode() = hash (box topArgInfo)
+    override x.ToString() = 
+        "parameter " + (match x.Name with None -> " s)
+
+and FSharpAssemblySignature private (cenv, topAttribs: TypeChecker.TopAttribs option, optViewedCcu: CcuThunk option, mtyp: ModuleOrNamespaceType) = 
+
+    // Assembly signature for a referenced/linked assembly
+    new (cenv, ccu: CcuThunk) = FSharpAssemblySignature((if ccu.IsUnresolvedReference then cenv else (new cenv(cenv.g, ccu, cenv.tcImports))), None, Some ccu, ccu.Contents.ModuleOrNamespaceType)
+    
+    // Assembly signature for an assembly produced via type-checking.
+    new (g, thisCcu, tcImports, topAttribs, mtyp) = FSharpAssemblySignature(cenv(g, thisCcu, tcImports), topAttribs, None, mtyp)
+
+    member __.Entities = 
+
+        let rec loop (rmtyp : ModuleOrNamespaceType) = 
+            [| for entity in rmtyp.AllEntities do
+                   if entity.IsNamespace then 
+                       yield! loop entity.ModuleOrNamespaceType
+                   else 
+                       let entityRef = rescopeEntity optViewedCcu entity 
+                       yield FSharpEntity(cenv,  entityRef) |]
+        
+        loop mtyp |> makeReadOnlyCollection
+
+    member __.Attributes =
+        match topAttribs with
+        | None -> makeReadOnlyCollection []
+        | Some tA ->
+            tA.assemblyAttrs
+            |> List.map (fun a -> FSharpAttribute(cenv,  AttribInfo.FSAttribInfo(cenv.g, a))) |> makeReadOnlyCollection
+
+    override x.ToString() = ""
+
+and FSharpAssembly internal (cenv, ccu: CcuThunk) = 
+
+    new (g, tcImports, ccu) = FSharpAssembly(cenv(g, ccu, tcImports), ccu)
+
+    member __.RawCcuThunk = ccu
+    member __.QualifiedName = match ccu.QualifiedName with None -> "" | Some s -> s
+    member __.CodeLocation = ccu.SourceCodeDirectory
+    member __.FileName = ccu.FileName
+    member __.SimpleName = ccu.AssemblyName 
+    member __.IsProviderGenerated = ccu.IsProviderGenerated
+    member __.Contents = FSharpAssemblySignature(cenv, ccu)
+                 
+    override x.ToString() = x.QualifiedName
+
+type FSharpSymbol with 
+    // TODO: there are several cases where we may need to report more interesting
+    // symbol information below. By default we return a vanilla symbol.
+    static member Create(g, thisCcu, tcImports,  item) : FSharpSymbol = 
+        FSharpSymbol.Create (cenv(g,thisCcu,tcImports), item)
+
+    static member Create(cenv,  item) : FSharpSymbol = 
+        let dflt() = FSharpSymbol(cenv,  (fun () -> item), (fun _ _ _ -> true)) 
+        match item with 
+        | Item.Value v -> FSharpMemberOrFunctionOrValue(cenv,  V v, item) :> _
+        | Item.UnionCase (uinfo,_) -> FSharpUnionCase(cenv,  uinfo.UnionCaseRef) :> _
+        | Item.ExnCase tcref -> FSharpEntity(cenv,  tcref) :>_
+        | Item.RecdField rfinfo -> FSharpField(cenv,  RecdOrClass rfinfo.RecdFieldRef) :> _
+
+        | Item.ILField finfo -> FSharpField(cenv,  ILField (cenv.g, finfo)) :> _
+        
+        | Item.Event einfo -> 
+            FSharpMemberOrFunctionOrValue(cenv,  E einfo, item) :> _
+            
+        | Item.Property(_,pinfo :: _) -> 
+            FSharpMemberOrFunctionOrValue(cenv,  P pinfo, item) :> _
+            
+        | Item.MethodGroup(_,minfo :: _) -> 
+            FSharpMemberOrFunctionOrValue(cenv,  M minfo, item) :> _
+
+        | Item.CtorGroup(_,cinfo :: _) -> 
+            FSharpMemberOrFunctionOrValue(cenv,  M cinfo, item) :> _
+
+        | Item.DelegateCtor (AbbrevOrAppTy tcref) -> 
+            FSharpEntity(cenv,  tcref) :>_ 
+
+        | Item.UnqualifiedType(tcref :: _)  
+        | Item.Types(_,AbbrevOrAppTy tcref :: _) -> 
+            FSharpEntity(cenv,  tcref) :>_  
+
+        | Item.ModuleOrNamespaces(modref :: _) ->  
+            FSharpEntity(cenv,  modref) :> _
+
+        | Item.SetterArg (_id, item) -> FSharpSymbol.Create(cenv,  item)
+
+        | Item.CustomOperation (_customOpName,_, Some minfo) -> 
+            FSharpMemberOrFunctionOrValue(cenv,  M minfo, item) :> _
+
+        | Item.CustomBuilder (_,vref) -> 
+            FSharpMemberOrFunctionOrValue(cenv,  V vref, item) :> _
+
+        | Item.TypeVar (_, tp) ->
+             FSharpGenericParameter(cenv,  tp) :> _
+
+        | Item.ActivePatternCase apref -> 
+             FSharpActivePatternCase(cenv,  apref.ActivePatternInfo, apref.ActivePatternVal.Type, apref.CaseIndex, Some apref.ActivePatternVal, item) :> _
+
+        | Item.ActivePatternResult (apinfo, typ, n, _) ->
+             FSharpActivePatternCase(cenv,  apinfo, typ, n, None, item) :> _
+
+        | Item.ArgName(id,ty,_)  ->
+             FSharpParameter(cenv,  ty, {Attribs=[]; Name=Some id}, Some id.idRange, isParamArrayArg=false, isOutArg=false, isOptionalArg=false) :> _
+
+        // TODO: the following don't currently return any interesting subtype
+        | Item.ImplicitOp _
+        | Item.ILField _ 
+        | Item.FakeInterfaceCtor _
+        | Item.NewDef _ -> dflt()
+        // These cases cover unreachable cases
+        | Item.CustomOperation (_, _, None) 
+        | Item.UnqualifiedType []
+        | Item.ModuleOrNamespaces []
+        | Item.Property (_,[])
+        | Item.MethodGroup (_,[])
+        | Item.CtorGroup (_,[])
+        // These cases cover misc. corned cases (non-symbol types)
+        | Item.Types _
+        | Item.DelegateCtor _  -> dflt()
+
+
diff --git a/src/fsharp/vs/Symbols.fsi b/src/fsharp/vs/Symbols.fsi
new file mode 100644
index 00000000000..6e9f9400448
--- /dev/null
+++ b/src/fsharp/vs/Symbols.fsi
@@ -0,0 +1,914 @@
+//----------------------------------------------------------------------------
+// Copyright (c) 2002-2012 Microsoft Corporation. 
+//
+// This source code is subject to terms and conditions of the Apache License, Version 2.0. A 
+// copy of the license can be found in the License.html file at the root of this distribution. 
+// By using this source code in any fashion, you are agreeing to be bound 
+// by the terms of the Apache License, Version 2.0.
+//
+// You must not remove this notice, or any other, from this software.
+//----------------------------------------------------------------------------
+
+namespace Microsoft.FSharp.Compiler.SourceCodeServices
+
+open System.Collections.Generic
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.TcGlobals
+open Microsoft.FSharp.Compiler.Tast
+open Microsoft.FSharp.Compiler.Range
+open Microsoft.FSharp.Compiler.CompileOps
+
+module internal Impl = 
+    type internal cenv = 
+        new : TcGlobals * thisCcu:CcuThunk * tcImports: TcImports -> cenv
+        member amap: Import.ImportMap
+        member g: TcGlobals
+
+/// Represents the information needed to format types and other information in a style
+/// suitable for use in F# source text at a particular source location.
+///
+/// Acquired via GetDisplayEnvAtLocationAlternate and simialr methods. May be passed 
+/// to the Format method on FSharpType and other methods.
+type [] internal FSharpDisplayContext = 
+    internal new : denv: (TcGlobals -> Tastops.DisplayEnv) -> FSharpDisplayContext
+    static member Empty: FSharpDisplayContext
+
+/// Represents a symbol in checked F# source code or a compiled .NET component. 
+///
+/// The subtype of the symbol may reveal further information and can be one of FSharpEntity, FSharpUnionCase
+/// FSharpField, FSharpGenericParameter, FSharpStaticParameter, FSharpMemberOrFunctionOrValue, FSharpParameter,
+/// or FSharpActivePatternCase.
+type [] internal FSharpSymbol = 
+    /// Internal use only. 
+    static member internal Create : g:TcGlobals * thisCcu: CcuThunk * tcImports: TcImports * item:NameResolution.Item -> FSharpSymbol
+
+    /// Computes if the symbol is accessible for the given accessibilty rights
+    member IsAccessible: FSharpAccessibilityRights -> bool
+        
+    member internal Item: NameResolution.Item
+        
+    /// Get the assembly declaring this symbol
+    member Assembly: FSharpAssembly 
+
+    /// Get a textual representation of the full name of the symbol. The text returned for some symbols
+    /// may not be a valid identifier path in F# code, but rather a human-readable representation of the symbol.
+    member FullName: string
+
+    /// Get the declaration location for the symbol
+    member DeclarationLocation: range option
+
+    /// Gets the short display name for the symbol
+    member DisplayName: string
+
+    /// Get the implementation location for the symbol if it was declared in a signature that has an implementation
+    member ImplementationLocation: range option
+
+    /// Get the signature location for the symbol if it was declared in an implementation
+    member SignatureLocation: range option
+
+    /// Return true if two symbols are effectively the same when referred to in F# source code text.  
+    /// This sees through signatures (a symbol in a signature will be considered effectively the same as 
+    /// the matching symbol in an implementation).  In addition, other equivalances are applied
+    /// when the same F# source text implies the same declaration name - for example, constructors 
+    /// are considered to be effectively the same symbol as the corresponding type definition.
+    ///
+    /// This is the relation used by GetUsesOfSymbol and GetUsesOfSymbolInFile.
+    member IsEffectivelySameAs : other: FSharpSymbol -> bool
+
+
+
+/// Represents an assembly as seen by the F# language
+and [] internal FSharpAssembly = 
+
+    internal new : tcGlobals: TcGlobals * tcImports: TcImports * ccu: CcuThunk -> FSharpAssembly
+
+    /// The qualified name of the assembly
+    member QualifiedName: string 
+    
+    /// The contents of the this assembly 
+    member Contents:  FSharpAssemblySignature
+
+    /// The file name for the assembly, if any
+    member FileName : string option
+
+    /// The simple name for the assembly
+    member SimpleName : string 
+
+    /// Indicates if the assembly was generated by a type provider and is due for static linking
+    member IsProviderGenerated : bool
+
+
+/// Represents an inferred signature of part of an assembly as seen by the F# language
+and [] internal FSharpAssemblySignature = 
+
+    internal new : tcGlobals: TcGlobals * thisCcu: CcuThunk * tcImports: TcImports * topAttribs: TypeChecker.TopAttribs option * contents: ModuleOrNamespaceType -> FSharpAssemblySignature
+
+    /// The (non-nested) module and type definitions in this signature
+    member Entities:  IList
+
+    /// Get the declared attributes for the assembly.
+    /// Only available when parsing an entire project. 
+    member Attributes: IList     
+
+
+/// A subtype of FSharpSymbol that represents a type definition or module as seen by the F# language
+and [] internal FSharpEntity = 
+    inherit FSharpSymbol
+    
+    internal new : Impl.cenv * EntityRef -> FSharpEntity
+
+    //   /// Return the FSharpEntity corresponding to a .NET type
+    // static member FromType : System.Type -> FSharpEntity
+
+    /// Get the name of the type or module, possibly with `n mangling  
+    member LogicalName: string
+
+    /// Get the compiled name of the type or module, possibly with `n mangling. This is identical to LogicalName
+    /// unless the CompiledName attribute is used.
+    member CompiledName: string
+
+    /// Get the name of the type or module as displayed in F# code
+    member DisplayName: string
+
+    /// Get the path used to address the entity (e.g. "Namespace.Module1.NestedModule2"). Gives
+    /// "global" for items not in a namespace.
+    member AccessPath: string 
+
+    /// Get the namespace containing the type or module, if any. Use 'None' for item not in a namespace.
+    member Namespace: string option
+
+    /// Get the fully qualified name of the type or module
+    member QualifiedName: string 
+
+    /// Get the full name of the type or module
+    member FullName: string 
+
+    /// Get the full name of the type or module if it is available
+    member TryFullName: string option
+
+    /// Get the declaration location for the type constructor 
+    member DeclarationLocation: range 
+
+    /// Indicates if the entity is a measure, type or exception abbreviation
+    member IsFSharpAbbreviation   : bool
+
+    /// Indicates if the entity is record type
+    member IsFSharpRecord   : bool
+
+    /// Indicates if the entity is union type
+    member IsFSharpUnion   : bool
+
+    /// Indicates if the entity is a struct or enum
+    member IsValueType : bool
+
+    /// Indicates if the entity is an array type
+    member IsArrayType : bool
+
+    /// Indicates if the entity is a 'fake' symbol related to a static instantiation of a type provider
+    member IsStaticInstantiation : bool
+
+    /// Indicates if the entity is a provided type
+    member IsProvided : bool
+
+    /// Indicates if the entity is an erased provided type
+    member IsProvidedAndErased : bool
+
+    /// Indicates if the entity is a generated provided type
+    member IsProvidedAndGenerated : bool
+
+    /// Indicates if the entity is an F# module definition
+    member IsFSharpModule: bool 
+
+    /// Get the generic parameters, possibly including unit-of-measure parameters
+    member GenericParameters: IList
+
+    /// Get the static parameters for a provided type
+    member StaticParameters: IList
+
+    /// Indicates that a module is compiled to a class with the given mangled name. The mangling is reversed during lookup 
+    member HasFSharpModuleSuffix : bool
+
+    /// Indicates if the entity is a measure definition
+    member IsMeasure: bool
+
+    /// Indicates an F# exception declaration
+    member IsFSharpExceptionDeclaration: bool 
+
+    /// Indicates if this is a reference to something in an F#-compiled assembly
+    member IsFSharp : bool
+
+    /// Indicates if the entity is in an unresolved assembly 
+    member IsUnresolved : bool
+
+    /// Indicates if the entity is a class type definition
+    member IsClass : bool
+
+    /// Indicates if is the 'byref<_>' type definition used for byref types in F#-compiled assemblies
+    member IsByRef : bool
+
+    /// Indicates if the entity is a type definitio for a reference type where the implementation details are hidden by a signature
+    member IsOpaque : bool
+
+    /// Indicates if the entity is an enum type definition
+    member IsEnum : bool
+
+    /// Indicates if the entity is a delegate type definition
+    member IsDelegate : bool
+
+    /// Indicates if the entity is an interface type definition
+    member IsInterface : bool
+
+    /// Indicates if the entity is a part of a namespace path
+    member IsNamespace : bool
+
+    /// Get the in-memory XML documentation for the entity, used when code is checked in-memory
+    member XmlDoc: IList
+
+      /// Get the XML documentation signature for the entity, used for .xml file lookup for compiled code
+    member XmlDocSig: string
+
+    /// Indicates if the type is implemented through a mapping to IL assembly code. This is only
+    /// true for types in FSharp.Core.dll
+    member HasAssemblyCodeRepresentation: bool 
+
+    /// Indicates if the type prefers the "tycon" syntax for display etc. 
+    member UsesPrefixDisplay: bool                   
+
+    /// Get the declared attributes for the type 
+    member Attributes: IList     
+
+    /// Get the declared interface implementations
+    member DeclaredInterfaces : IList  
+
+    /// Get all the interface implementations, by walking the type hierarchy
+    member AllInterfaces : IList  
+
+    /// Get the base type, if any 
+    member BaseType : FSharpType option
+
+    /// Get the properties, events and methods of a type definitions, or the functions and values of a module
+    member MembersFunctionsAndValues : IList
+
+    /// Get the modules and types defined in a module, or the nested types of a type
+    member NestedEntities : IList
+
+    /// Get the fields of a record, class, struct or enum from the perspective of the F# language.
+    /// This includes static fields, the 'val' bindings in classes and structs, and the value definitions in enums.
+    /// For classes, the list may include compiler generated fields implied by the use of primary constructors.
+    member FSharpFields : IList
+
+    /// Get the type abbreviated by an F# type abbreviation
+    member AbbreviatedType   : FSharpType 
+
+    /// Get the cases of a union type
+    member UnionCases : IList
+
+
+    /// Indicates if the type is a delegate with the given Invoke signature 
+    member FSharpDelegateSignature : FSharpDelegateSignature
+
+      /// Get the declared accessibility of the type
+    member Accessibility: FSharpAccessibility 
+
+      /// Get the declared accessibility of the representation, not taking signatures into account 
+    member RepresentationAccessibility: FSharpAccessibility
+
+/// Represents a delegate signature in an F# symbol
+and [] internal FSharpDelegateSignature =
+    /// Get the argument types of the delegate signature
+    member DelegateArguments : IList
+
+    /// Get the return type of the delegate signature
+    member DelegateReturnType : FSharpType
+
+/// Represents a parameter in an abstract method of a class or interface
+and [] internal FSharpAbstractParameter =
+
+    /// The optional name of the parameter
+    member Name : string option
+    
+    /// The declared or inferred type of the parameter
+    member Type : FSharpType
+
+    /// Indicate this is an in argument
+    member IsInArg : bool
+
+    /// Indicate this is an out argument
+    member IsOutArg : bool
+
+    /// Indicate this is an optional argument
+    member IsOptionalArg : bool
+
+    /// The declared attributes of the parameter 
+    member Attributes : IList     
+
+/// Represents the signature of an abstract slot of a class or interface 
+and [] internal FSharpAbstractSignature =
+    internal new : Impl.cenv * SlotSig -> FSharpAbstractSignature
+
+    /// Get the arguments of the abstract slot
+    member AbstractArguments : IList>
+
+    /// Get the return type of the abstract slot
+    member AbstractReturnType : FSharpType
+
+    /// Get the generic arguments of the type defining the abstract slot
+    member DeclaringTypeGenericParameters : IList
+        
+    /// Get the generic arguments of the abstract slot
+    member MethodGenericParameters : IList
+
+    /// Get the name of the abstract slot
+    member Name : string
+    
+    /// Get the declaring type of the abstract slot
+    member DeclaringType : FSharpType
+
+/// A subtype of FSharpSymbol that represents a union case as seen by the F# language
+and [] internal FSharpUnionCase =
+    inherit FSharpSymbol
+    internal new : Impl.cenv * UnionCaseRef -> FSharpUnionCase
+
+    /// Get the name of the union case 
+    member Name: string 
+
+    /// Get the range of the name of the case 
+    member DeclarationLocation : range
+
+    /// Get the data carried by the case. 
+    member UnionCaseFields: IList
+
+    /// Get the type constructed by the case. Normally exactly the type of the enclosing type, sometimes an abbreviation of it 
+    member ReturnType: FSharpType
+
+    /// Get the name of the case in generated IL code 
+    member CompiledName: string
+
+    /// Get the in-memory XML documentation for the union case, used when code is checked in-memory
+    member XmlDoc: IList
+
+    /// Get the XML documentation signature for .xml file lookup for the union case, used for .xml file lookup for compiled code 
+    member XmlDocSig: string
+
+    ///  Indicates if the declared visibility of the union constructor, not taking signatures into account 
+    member Accessibility: FSharpAccessibility 
+
+    /// Get the attributes for the case, attached to the generated static method to make instances of the case 
+    member Attributes: IList
+
+    /// Indicates if the union case is for a type in an unresolved assembly 
+    member IsUnresolved : bool
+
+
+/// A subtype of FSharpSymbol that represents a record or union case field as seen by the F# language
+and [] internal FSharpField =
+
+    inherit FSharpSymbol
+    internal new : Impl.cenv * RecdFieldRef -> FSharpField
+    internal new : Impl.cenv * UnionCaseRef * int -> FSharpField
+
+    /// Get the declaring entity of this field
+    member DeclaringEntity: FSharpEntity
+
+    /// Indicates if the field is declared 'static'
+    member IsMutable: bool
+
+    /// Indicates if the field has a literal value
+    member IsLiteral: bool
+
+    /// Indicates if the field is declared volatile 
+    member IsVolatile: bool
+
+    /// Indicates if the field declared is declared 'DefaultValue' 
+    member IsDefaultValue: bool
+
+    /// Indicates a static field 
+    member IsStatic: bool
+
+    /// Indicates a compiler generated field, not visible to Intellisense or name resolution 
+    member IsCompilerGenerated: bool
+
+    /// Get the in-memory XML documentation for the field, used when code is checked in-memory
+    member XmlDoc: IList
+
+    /// Get the XML documentation signature for .xml file lookup for the field, used for .xml file lookup for compiled code
+    member XmlDocSig: string
+
+    /// Get the type of the field, w.r.t. the generic parameters of the enclosing type constructor 
+    member FieldType: FSharpType
+
+    /// Get the declaration location of the field 
+    member DeclarationLocation: range
+
+    /// Get the attributes attached to generated property 
+    member PropertyAttributes: IList 
+
+    /// Get the attributes attached to generated field 
+    member FieldAttributes: IList 
+
+    /// Get the name of the field 
+    member Name : string
+
+      /// Get the default initialization info, for static literals 
+    member LiteralValue: obj option
+
+      ///  Indicates if the declared visibility of the field, not taking signatures into account 
+    member Accessibility: FSharpAccessibility 
+
+    /// Indicates if the record field is for a type in an unresolved assembly 
+    member IsUnresolved : bool
+
+/// Represents the rights of a compilation to access symbols
+and [] internal FSharpAccessibilityRights =
+    internal new : CcuThunk * Infos.AccessorDomain -> FSharpAccessibilityRights
+    member internal Contents : Infos.AccessorDomain
+
+/// Indicates the accessibility of a symbol, as seen by the F# language
+and [] internal FSharpAccessibility = 
+    /// Indicates the symbol has public accessibility
+    member IsPublic : bool
+
+    /// Indicates the symbol has private accessibility
+    member IsPrivate : bool
+
+    /// Indicates the symbol has internal accessibility
+    member IsInternal : bool
+
+/// A subtype of FSharpSymbol that represents a generic parameter for an FSharpSymbol
+and [] internal FSharpGenericParameter = 
+
+    inherit FSharpSymbol
+    internal new : Impl.cenv * Typar -> FSharpGenericParameter
+
+    /// Get the name of the generic parameter 
+    member Name: string
+
+    /// Get the range of the generic parameter 
+    member DeclarationLocation : range 
+       
+    /// Indicates if this is a measure variable
+    member IsMeasure : bool
+
+    /// Get the in-memory XML documentation for the type parameter, used when code is checked in-memory
+    member XmlDoc : IList
+       
+    /// Indicates if this is a statically resolved type variable
+    member IsSolveAtCompileTime : bool 
+
+    /// Indicates if this is a compiler generated type parameter
+    member IsCompilerGenerated : bool 
+
+    /// Get the declared attributes of the type parameter. 
+    member Attributes: IList                      
+       
+    /// Get the declared or inferred constraints for the type parameter
+    member Constraints: IList 
+
+/// A subtype of FSharpSymbol that represents a static parameter to an F# type provider
+and [] internal FSharpStaticParameter = 
+
+    inherit FSharpSymbol
+
+    /// Get the name of the static parameter 
+    member Name: string
+
+    /// Get the declaration location of the static parameter 
+    member DeclarationLocation : range 
+       
+    /// Get the kind of the static parameter
+    member Kind : FSharpType
+
+    /// Get the default value for the static parameter
+    member DefaultValue : obj
+
+    /// Indicates if the static parameter is optional
+    member IsOptional : bool
+
+
+/// Represents further information about a member constraint on a generic type parameter
+and [] 
+    FSharpGenericParameterMemberConstraint = 
+
+    /// Get the types that may be used to satisfy the constraint
+    member MemberSources : IList
+
+    /// Get the name of the method required by the constraint
+    member MemberName : string 
+
+    /// Indicates if the the method required by the constraint must be static
+    member MemberIsStatic : bool
+
+    /// Get the argument types of the method required by the constraint
+    member MemberArgumentTypes : IList
+
+    /// Get the return type of the method required by the constraint
+    member MemberReturnType : FSharpType 
+
+/// Represents further information about a delegate constraint on a generic type parameter
+and [] internal FSharpGenericParameterDelegateConstraint = 
+
+    /// Get the tupled argument type required by the constraint
+    member DelegateTupledArgumentType : FSharpType
+
+    /// Get the return type required by the constraint
+    member DelegateReturnType : FSharpType 
+
+/// Represents further information about a 'defaults to' constraint on a generic type parameter
+and [] internal FSharpGenericParameterDefaultsToConstraint = 
+
+    /// Get the priority off the 'defaults to' constraint
+    member DefaultsToPriority : int
+
+    /// Get the default type associated with the 'defaults to' constraint
+    member DefaultsToTarget : FSharpType
+
+/// Represents a constraint on a generic type parameter
+and [] internal FSharpGenericParameterConstraint = 
+    /// Indicates a constraint that a type is a subtype of the given type 
+    member IsCoercesToConstraint : bool
+
+    /// Gets further information about a coerces-to constraint
+    member CoercesToTarget : FSharpType 
+
+    /// Indicates a default value for an inference type variable should it be netiher generalized nor solved 
+    member IsDefaultsToConstraint : bool
+
+    /// Gets further information about a defaults-to constraint
+    member DefaultsToConstraintData : FSharpGenericParameterDefaultsToConstraint
+
+    /// Indicates a constraint that a type has a 'null' value 
+    member IsSupportsNullConstraint  : bool
+
+    /// Indicates a constraint that a type supports F# generic comparison
+    member IsComparisonConstraint  : bool
+
+    /// Indicates a constraint that a type supports F# generic equality
+    member IsEqualityConstraint  : bool
+
+    /// Indicates a constraint that a type is an unmanaged type
+    member IsUnmanagedConstraint  : bool
+
+    /// Indicates a constraint that a type has a member with the given signature 
+    member IsMemberConstraint : bool
+
+    /// Gets further information about a member constraint
+    member MemberConstraintData : FSharpGenericParameterMemberConstraint
+
+    /// Indicates a constraint that a type is a non-Nullable value type 
+    member IsNonNullableValueTypeConstraint : bool
+    
+    /// Indicates a constraint that a type is a reference type 
+    member IsReferenceTypeConstraint  : bool
+
+    /// Indicates a constraint that is a type is a simple choice between one of the given ground types. Used by printf format strings.
+    member IsSimpleChoiceConstraint : bool
+
+    /// Gets further information about a choice constraint
+    member SimpleChoices : IList
+
+    /// Indicates a constraint that a type has a parameterless constructor 
+    member IsRequiresDefaultConstructorConstraint  : bool
+
+    /// Indicates a constraint that a type is an enum with the given underlying 
+    member IsEnumConstraint : bool
+
+    /// Gets further information about an enumeration constraint
+    member EnumConstraintTarget : FSharpType 
+    
+    /// Indicates a constraint that a type is a delegate from the given tuple of args to the given return type 
+    member IsDelegateConstraint : bool
+
+    /// Gets further information about a delegate constraint
+    member DelegateConstraintData : FSharpGenericParameterDelegateConstraint
+
+
+and [] internal FSharpInlineAnnotation = 
+   /// Indictes the value is inlined and compiled code for the function does not exist
+   | PseudoValue
+   /// Indictes the value is inlined but compiled code for the function still exists, e.g. to satisfy interfaces on objects, but that it is also always inlined 
+   | AlwaysInline 
+   /// Indictes the value is optionally inlined 
+   | OptionalInline 
+   /// Indictes the value is never inlined 
+   | NeverInline 
+
+/// A subtype of F# symbol that represents an F# method, property, event, function or value, including extension members.
+and [] internal FSharpMemberOrFunctionOrValue = 
+
+    inherit FSharpSymbol
+    internal new : Impl.cenv * ValRef -> FSharpMemberOrFunctionOrValue
+    internal new : Impl.cenv * Infos.MethInfo -> FSharpMemberOrFunctionOrValue
+
+    /// Indicates if the member, function or value is in an unresolved assembly 
+    member IsUnresolved : bool
+
+    /// Get the enclosing entity for the definition
+    member EnclosingEntity : FSharpEntity
+    
+    /// Get the declaration location of the member, function or value
+    member DeclarationLocation: range
+    
+    /// Get the typars of the member, function or value
+    member GenericParameters: IList
+
+    /// Get the full type of the member, function or value when used as a first class value
+    member FullType: FSharpType
+
+    /// Indicates if this is a compiler generated value
+    member IsCompilerGenerated : bool
+
+    /// Get a result indicating if this is a must-inline value
+    member InlineAnnotation : FSharpInlineAnnotation
+
+    /// Indicates if this is a mutable value
+    member IsMutable : bool
+
+    /// Indicates if this is a module or member value
+    member IsModuleValueOrMember : bool
+
+    /// Indicates if this is an extension member?
+    member IsExtensionMember : bool
+
+    /// Indicates if this is an 'override', 'default' or an explicit implementation of an interface member
+    member IsOverrideOrExplicitInterfaceImplementation : bool
+
+    /// Indicates if this is an explicit implementation of an interface member
+    member IsExplicitInterfaceImplementation : bool
+
+    /// Gets the list of the abstract slot signatures implemented by the member
+    member ImplementedAbstractSignatures : IList
+
+    /// Indicates if this is a member, including extension members?
+    member IsMember : bool
+
+    /// Indicates if this is a property member
+    member IsProperty : bool
+
+    /// Indicates if this is a property and there exists an associated getter method
+    member HasGetterMethod : bool
+
+    /// Get an associated getter method of the property
+    member GetterMethod : FSharpMemberOrFunctionOrValue
+
+    /// Indicates if this is a property and there exists an associated setter method
+    member HasSetterMethod : bool
+
+    /// Get an associated setter method of the property
+    member SetterMethod : FSharpMemberOrFunctionOrValue
+
+    /// Get an associated add method of an event
+    member EventAddMethod : FSharpMemberOrFunctionOrValue
+
+    /// Get an associated remove method of an event
+    member EventRemoveMethod : FSharpMemberOrFunctionOrValue
+
+    /// Get an associated delegate type of an event
+    member EventDelegateType : FSharpType
+
+    /// Indicate if an event can be considered to be a property for the F# type system of type IEvent or IDelegateEvent. 
+    /// In this case ReturnParameter will have a type corresponding to the property type.  For 
+    /// non-standard events, ReturnParameter will have a type corresponding to the delegate type.
+    member EventIsStandard: bool
+
+    /// Indicates if this is an event member
+    member IsEvent : bool
+
+    /// Gets the event symbol implied by the use of a property,
+    /// for the case where the property is actually an F#-declared CLIEvent.
+    /// 
+    /// Uses of F#-declared events are considered to be properties as far as the language specification 
+    /// and this API are concerned.  
+    member EventForFSharpProperty : FSharpMemberOrFunctionOrValue option
+
+    /// Indicates if this is an abstract member?
+    member IsDispatchSlot : bool
+
+    /// Indicates if this is a getter method for a property, or a use of a property in getter mode
+    member IsPropertyGetterMethod: bool 
+
+    /// Indicates if this is a setter method for a property, or a use of a property in setter mode
+    member IsPropertySetterMethod: bool 
+
+    /// Indicates if this is an add method for an event
+    member IsEventAddMethod: bool 
+
+    /// Indicates if this is a remove method for an event
+    member IsEventRemoveMethod: bool 
+
+    /// Indicates if this is an instance member, when seen from F#?
+    member IsInstanceMember : bool 
+    
+    /// Indicates if this is an instance member in compiled code. 
+    ///
+    /// Explanatory note: some members such as IsNone and IsSome on types with UseNullAsTrueValue appear 
+    /// as instance members in F# code but are compiled as static members.
+    member IsInstanceMemberInCompiledCode : bool 
+    
+    /// Indicates if this is an implicit constructor?
+    member IsImplicitConstructor : bool
+    
+    /// Indicates if this is an F# type function
+    member IsTypeFunction : bool
+
+    /// Indicates if this value or member is an F# active pattern
+    member IsActivePattern : bool
+      
+    /// Get the member name in compiled code
+    member CompiledName: string
+
+    /// Get the logical name of the member
+    member LogicalName: string
+
+    /// Get the logical enclosing entity, which for an extension member is type being extended
+    member LogicalEnclosingEntity: FSharpEntity
+
+    /// Get the name as presented in F# error messages and documentation
+    member DisplayName : string
+
+    member CurriedParameterGroups : IList>
+
+    /// Gets the overloads for the current method
+    /// matchParameterNumber indicates whether to filter the overloads to match the number of parameters in the current symbol
+    member Overloads : bool -> IList option
+
+    member ReturnParameter : FSharpParameter
+
+    /// Custom attributes attached to the value. These contain references to other values (i.e. constructors in types). Mutable to fixup  
+    /// these value references after copying a colelction of values. 
+    member Attributes: IList
+
+    /// Get the in-memory XML documentation for the value, used when code is checked in-memory
+    member XmlDoc: IList
+
+    /// XML documentation signature for the value, used for .xml file lookup for compiled code
+    member XmlDocSig: string
+
+    /// Indicates if this is "base" in "base.M(...)"
+    member IsBaseValue : bool
+
+    /// Indicates if this is the "x" in "type C() as x = ..."
+    member IsConstructorThisValue : bool
+
+    /// Indicates if this is the "x" in "member x.M = ..."
+    member IsMemberThisValue : bool
+
+    /// Indicates if this is a [] value, and if so what value? (may be null)
+    member LiteralValue : obj option
+
+    /// Get the accessibility information for the member, function or value
+    member Accessibility : FSharpAccessibility
+
+
+/// A subtype of FSharpSymbol that represents a parameter 
+and [] internal FSharpParameter =
+    inherit FSharpSymbol
+
+    /// The optional name of the parameter 
+    member Name: string option
+
+    /// The declaration location of the parameter 
+    member DeclarationLocation : range 
+
+    /// The declared or inferred type of the parameter 
+    member Type : FSharpType 
+
+    /// The declared attributes of the parameter 
+    member Attributes: IList
+
+    /// Indicate this is a param array argument
+    member IsParamArrayArg: bool
+
+    /// Indicate this is an out argument
+    member IsOutArg: bool
+
+    /// Indicate this is an optional argument
+    member IsOptionalArg: bool
+
+
+/// A subtype of FSharpSymbol that represents a single case within an active pattern
+and [] internal FSharpActivePatternCase =
+    inherit FSharpSymbol
+
+    /// The name of the active pattern case 
+    member Name: string 
+
+    /// The location of declaration of the active pattern case 
+    member DeclarationLocation : range 
+
+    /// The group of active pattern cases this belongs to
+    member Group : FSharpActivePatternGroup
+
+    /// Get the in-memory XML documentation for the active pattern case, used when code is checked in-memory
+    member XmlDoc: IList
+
+      /// XML documentation signature for the active pattern case, used for .xml file lookup for compiled code
+    member XmlDocSig: string
+
+/// Represents all cases within an active pattern
+and [] internal FSharpActivePatternGroup =
+    /// The names of the active pattern cases
+    member Names: IList 
+
+    /// Indicate this is a total active pattern
+    member IsTotal : bool 
+
+    /// Get the type indicating signature of the active pattern
+    member OverallType : FSharpType
+
+    /// Try to get the enclosing entity of the active pattern
+    member EnclosingEntity : FSharpEntity option
+
+and [] internal FSharpType =
+    /// Internal use only. Create a ground type.
+    internal new : g:TcGlobals * thisCcu: CcuThunk * tcImports: TcImports * typ:TType -> FSharpType
+    internal new : Impl.cenv * typ:TType -> FSharpType
+
+    /// Indicates this is a named type in an unresolved assembly 
+    member IsUnresolved : bool
+
+    /// Indicates this is an abbreviation for another type
+    member IsAbbreviation : bool
+
+    /// Get the type for which this is an abbreviation
+    member AbbreviatedType : FSharpType
+
+    /// Indicates if the type is constructed using a named entity, including array and byref types
+    member HasTypeDefinition : bool
+
+    /// Get the type definition for a type 
+    member TypeDefinition : FSharpEntity 
+
+    /// Get the generic arguments for a tuple type, a function type or a type constructed using a named entity
+    member GenericArguments : IList
+    
+    /// Indicates if the type is a tuple type. The GenericArguments property returns the elements of the tuple type.
+    member IsTupleType : bool
+
+    /// Indicates if the type is a function type. The GenericArguments property returns the domain and range of the function type.
+    member IsFunctionType : bool
+
+    /// Indicates if the type is a variable type, whether declared, generalized or an inference type parameter  
+    member IsGenericParameter : bool
+
+    /// Get the generic parameter data for a generic parameter type
+    member GenericParameter : FSharpGenericParameter
+
+    /// Format the type using the rules of the given display context
+    member Format : context: FSharpDisplayContext -> string
+
+    /// Instantiate generic type parameters in a type
+    member Instantiate : (FSharpGenericParameter * FSharpType) list -> FSharpType
+
+    /// Get all the interface implementations, by walking the type hierarchy, taking into account the instantiation of this type
+    /// if it is an instantiation of a generic type.
+    member AllInterfaces : IList  
+
+    /// Get the base type, if any, taking into account the instantiation of this type
+    /// if it is an instantiation of a generic type.
+    member BaseType : FSharpType option
+
+    /// Adjust the type by removing any occurrences of type inference variables, replacing them
+    /// systematically with lower-case type inference variables such as 'a.
+    static member Prettify : typ:FSharpType -> FSharpType
+
+    /// Adjust a group of types by removing any occurrences of type inference variables, replacing them
+    /// systematically with lower-case type inference variables such as 'a.
+    static member Prettify : types: IList -> IList
+
+    /// Adjust the type in a single parameter by removing any occurrences of type inference variables, replacing them
+    /// systematically with lower-case type inference variables such as 'a.
+    static member Prettify : parameter: FSharpParameter -> FSharpParameter 
+
+    /// Adjust the types in a group of parameters by removing any occurrences of type inference variables, replacing them
+    /// systematically with lower-case type inference variables such as 'a.
+    static member Prettify : parameters: IList -> IList
+
+    /// Adjust the types in a group of curried parameters by removing any occurrences of type inference variables, replacing them
+    /// systematically with lower-case type inference variables such as 'a.
+    static member Prettify : parameters: IList> -> IList>
+
+    /// Adjust the types in a group of curried parameters and return type by removing any occurrences of type inference variables, replacing them
+    /// systematically with lower-case type inference variables such as 'a.
+    static member Prettify : parameters: IList> * returnParameter: FSharpParameter -> IList> * FSharpParameter
+
+
+/// Represents a custom attribute attached to F# source code or a compiler .NET component
+and [] internal FSharpAttribute = 
+        
+    /// The type of the attribute
+    member AttributeType : FSharpEntity
+
+    /// The arguments to the constructor for the attribute
+    member ConstructorArguments : IList
+
+    /// The named arguments for the attribute
+    member NamedArguments : IList
+
+    /// Indicates if the attribute type is in an unresolved assembly 
+    member IsUnresolved : bool
+
+    /// Format the attribute using the rules of the given display context
+    member Format : context: FSharpDisplayContext -> string
+
+
+
diff --git a/src/fsharp/vs/service.fs b/src/fsharp/vs/service.fs
old mode 100644
new mode 100755
index a343858a15b..fab79549efd
--- a/src/fsharp/vs/service.fs
+++ b/src/fsharp/vs/service.fs
@@ -1,36 +1,34 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 // Open up the compiler as an incremental service for parsing,
 // type checking and intellisense-like environment-reporting.
 
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
 
-open Internal.Utilities
 open System
 open System.IO
 open System.Text
 open System.Threading
+open System.Runtime
 open System.Collections.Generic
- 
+open System.Security.Permissions
+
 open Microsoft.FSharp.Core.Printf
+open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.AbstractIL
 open Microsoft.FSharp.Compiler.AbstractIL.Internal  
 open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library  
-open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.MSBuildResolver
 open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
 open Microsoft.FSharp.Compiler.PrettyNaming
-open Internal.Utilities.Collections
-open Internal.Utilities.Debug
-open System.Security.Permissions
 
-open Microsoft.FSharp.Compiler.Env 
+open Microsoft.FSharp.Compiler.TcGlobals 
 open Microsoft.FSharp.Compiler.Parser
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.Ast
 open Microsoft.FSharp.Compiler.ErrorLogger
 open Microsoft.FSharp.Compiler.Lexhelp
-open Microsoft.FSharp.Compiler.Build
+open Microsoft.FSharp.Compiler.CompileOps
 open Microsoft.FSharp.Compiler.Tast
 open Microsoft.FSharp.Compiler.Tastops
 open Microsoft.FSharp.Compiler.Tastops.DebugPrint
@@ -39,31 +37,35 @@ open Microsoft.FSharp.Compiler.AbstractIL.IL
 open Microsoft.FSharp.Compiler.Layout
 open Microsoft.FSharp.Compiler.TypeChecker
 open Microsoft.FSharp.Compiler.Infos
-open Microsoft.FSharp.Compiler.Nameres
+open Microsoft.FSharp.Compiler.NameResolution
+open Internal.Utilities.Collections
+open Internal.Utilities.Debug
+open Internal.Utilities
 open Internal.Utilities.StructuredFormat
-open ItemDescriptionIcons 
-open ItemDescriptionsImpl 
+open Microsoft.FSharp.Compiler.SourceCodeServices.ItemDescriptionsImpl 
 
 []
 module EnvMisc =
-    let GetEnvInteger e dflt = match System.Environment.GetEnvironmentVariable(e) with null -> dflt | t -> try int t with _ -> dflt
-    let buildCacheSize   = GetEnvInteger "mFSharp_BuildCacheSize" 3
-    let recentForgroundTypeCheckLookupSize = GetEnvInteger "mFSharp_RecentForegroundTypeCheckCacheSize" 5
-    let braceMatchCacheSize = GetEnvInteger "mFSharp_BraceMatchCacheSize" 5
-    let untypedCheckMruSize = GetEnvInteger "mFSharp_UntypedCheckMruCacheSize" 2
-    let maxTypeCheckErrorsOutOfProjectContext = GetEnvInteger "mFSharp_MaxErrorsOutOfProjectContext" 3
-
+    let getToolTipTextSize = GetEnvInteger "FCS_RecentForegroundTypeCheckCacheSize" 5
+    let maxTypeCheckErrorsOutOfProjectContext = GetEnvInteger "FCS_MaxErrorsOutOfProjectContext" 3
+    let braceMatchCacheSize = GetEnvInteger "FCS_BraceMatchCacheSize" 5
+    let parseFileInProjectCacheSize = GetEnvInteger "FCS_ParseFileInProjectCacheSize" 2
+    let incrementalTypeCheckCacheSize = GetEnvInteger "FCS_IncrementalTypeCheckCacheSize" 5
 
+    let projectCacheSizeDefault   = GetEnvInteger "FCS_ProjectCacheSizeDefault" 3
+    let frameworkTcImportsCacheStrongSize = GetEnvInteger "FCS_frameworkTcImportsCacheStrongSizeDefault" 8
+    let maxMBDefault =  GetEnvInteger "FCS_MaxMB" 1000000 // a million MB = 1TB = disabled
+    //let maxMBDefault = GetEnvInteger "FCS_maxMB" (if sizeof = 4 then 1700 else 3400)
 
 //----------------------------------------------------------------------------
 // Methods
 //--------------------------------------------------------------------------
 
-type Param = 
-    { Name: string
-      CanonicalTypeTextForSorting: string
-      Display: string
-      Description: string }
+[]
+type FSharpMethodGroupItemParameter(name: string, canonicalTypeTextForSorting: string, display: string) = 
+    member __.ParameterName = name
+    member __.CanonicalTypeTextForSorting = canonicalTypeTextForSorting
+    member __.Display = display
 
 /// Format parameters for Intellisense completion
 module internal Params = 
@@ -76,22 +78,24 @@ module internal Params =
         NicePrint.stringOfTy denv strippedType
 
     let ParamOfRecdField g denv f =
-        { Name = f.rfield_id.idText
-          CanonicalTypeTextForSorting = printCanonicalizedTypeName g denv f.rfield_type
-          Display = NicePrint.prettyStringOfTy denv f.rfield_type
-          Description = "" }
+        FSharpMethodGroupItemParameter(
+          name = f.rfield_id.idText,
+          canonicalTypeTextForSorting = printCanonicalizedTypeName g denv f.rfield_type,
+          display = NicePrint.prettyStringOfTy denv f.rfield_type)
     
     let ParamOfUnionCaseField g denv isGenerated (i : int) f = 
         let initial = ParamOfRecdField g denv f
-        if isGenerated i f then initial
-        else
-        { initial with Display = NicePrint.stringOfParamData denv (ParamData(false, false, NotOptional, Some initial.Name, ReflectedArgInfo.None, f.rfield_type)) }
+        let display = if isGenerated i f then initial.Display else NicePrint.stringOfParamData denv (ParamData(false, false, NotOptional, Some f.rfield_id, ReflectedArgInfo.None, f.rfield_type)) 
+        FSharpMethodGroupItemParameter(
+          name=initial.ParameterName, 
+          canonicalTypeTextForSorting=initial.CanonicalTypeTextForSorting, 
+          display=display)
 
     let ParamOfParamData g denv (ParamData(_isParamArrayArg, _isOutArg, _optArgInfo, nmOpt, _reflArgInfo, pty) as paramData) =
-        { Name = match nmOpt with None -> "" | Some pn -> pn
-          CanonicalTypeTextForSorting = printCanonicalizedTypeName g denv pty
-          Display = NicePrint.stringOfParamData denv paramData
-          Description = "" }
+        FSharpMethodGroupItemParameter(
+          name = (match nmOpt with None -> "" | Some pn -> pn.idText),
+          canonicalTypeTextForSorting = printCanonicalizedTypeName g denv pty,
+          display = NicePrint.stringOfParamData denv paramData)
 
     // TODO this code is similar to NicePrint.fs:formatParamDataToBuffer, refactor or figure out why different?
     let ParamsOfParamDatas g denv (paramDatas:ParamData list) rty = 
@@ -101,7 +105,8 @@ module internal Params =
                 let isOptArg = optArgInfo.IsOptional
                 match nmOpt, isOptArg, tryDestOptionTy denv.g pty with 
                 // Layout an optional argument 
-                | Some(nm), true, ptyOpt -> 
+                | Some id, true, ptyOpt -> 
+                    let nm = id.idText
                     // detect parameter type, if ptyOpt is None - this is .NET style optional argument
                     let pty = defaultArg ptyOpt pty
                     nm, (sprintf "?%s:" nm),  pty
@@ -109,7 +114,8 @@ module internal Params =
                 | None, _,_ -> 
                     "", "", pty
                 // Layout a named argument 
-                | Some nm,_,_ -> 
+                | Some id,_,_ -> 
+                    let nm = id.idText
                     let prefix = 
                         if isParamArrayArg then 
                             sprintf "%s %s: " (NicePrint.PrintUtilities.layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute |> showL) nm 
@@ -120,19 +126,21 @@ module internal Params =
         let paramTypeAndRetLs,_ = NicePrint.layoutPrettifiedTypes denv (paramTypes@[rty])
         let paramTypeLs,_ = List.frontAndBack  paramTypeAndRetLs
         (paramNames,paramPrefixes,(paramTypes,paramTypeLs)||>List.zip) |||> List.map3 (fun nm paramPrefix (tau,tyL) -> 
-            { Name = nm
-              CanonicalTypeTextForSorting = printCanonicalizedTypeName g denv tau
-              Display = paramPrefix+(showL tyL)
-              Description = "" })
+            FSharpMethodGroupItemParameter(
+              name = nm,
+              canonicalTypeTextForSorting = printCanonicalizedTypeName g denv tau,
+              display = paramPrefix+(showL tyL)
+            ))
 
     let ParamsOfTypes g denv args rtau = 
         let ptausL, _ = NicePrint.layoutPrettifiedTypes denv (args@[rtau]) 
         let argsL,_ = List.frontAndBack ptausL 
         let mkParam (tau,tyL) =
-            { Name = ""
-              CanonicalTypeTextForSorting = printCanonicalizedTypeName g denv tau
-              Display =  Layout.showL tyL
-              Description = "" }
+            FSharpMethodGroupItemParameter(
+              name = "",
+              canonicalTypeTextForSorting = printCanonicalizedTypeName g denv tau,
+              display =  Layout.showL tyL
+            )
         (args,argsL) ||> List.zip |> List.map mkParam
 
 #if EXTENSIONTYPING
@@ -237,25 +245,24 @@ module internal Params =
                     let spKind = NicePrint.stringOfTy denv typ
                     let spName = sp.PUntaint((fun sp -> sp.Name), m)
                     let spOpt = sp.PUntaint((fun sp -> sp.IsOptional), m)
-                    { Name = spName
-                      CanonicalTypeTextForSorting = spKind
-                      Display = sprintf "%s%s: %s" (if spOpt then "?" else "") spName spKind
-                      Description = "" })
+                    FSharpMethodGroupItemParameter(
+                      name = spName,
+                      canonicalTypeTextForSorting = spKind,
+                      display = sprintf "%s%s: %s" (if spOpt then "?" else "") spName spKind))
                 |> Array.toList 
 #endif
         |  _ -> []
 
 
 /// A single method for Intellisense completion
-[]
+[]
 // Note: instances of this type do not hold any references to any compiler resources.
-type internal Method = 
-    { 
-        Description: DataTipText
-        Type: string
-        Parameters: Param[]
-        IsStaticArguments: bool    // is this not really a method, but actually a static arguments list, like TP<42,"foo"> ?
-    }
+type FSharpMethodGroupItem(description: FSharpToolTipText, typeText: string, parameters: FSharpMethodGroupItemParameter[], isStaticArguments: bool) = 
+    member __.Description = description
+    member __.TypeText = typeText
+    member __.Parameters = parameters
+    // is this not really a method, but actually a static arguments list, like TP<42,"foo"> ?
+    member __.IsStaticArguments = isStaticArguments
 
 
 /// A table of methods for Intellisense completion
@@ -263,28 +270,39 @@ type internal Method =
 // Note: this type does not hold any strong references to any compiler resources, nor does evaluating any of the properties execute any
 // code on the compiler thread.  
 []
-type MethodOverloads( name: string, unsortedMethods: Method[] ) = 
+type FSharpMethodGroup( name: string, unsortedMethods: FSharpMethodGroupItem[] ) = 
     // BUG 413009 : [ParameterInfo] takes about 3 seconds to move from one overload parameter to another
     // cache allows to avoid recomputing parameterinfo for the same item
+#if FX_ATLEAST_40
     static let methodOverloadsCache = System.Runtime.CompilerServices.ConditionalWeakTable()
+#endif
 
     let methods = 
         unsortedMethods 
         // Methods with zero arguments show up here as taking a single argument of type 'unit'.  Patch them now to appear as having zero arguments.
-        |> Array.map (fun ({Parameters=parms} as meth) -> if parms.Length = 1 && parms.[0].CanonicalTypeTextForSorting="Microsoft.FSharp.Core.Unit" then {meth with Parameters=[||]} else meth)
+        |> Array.map (fun meth -> 
+            let parms = meth.Parameters
+            if parms.Length = 1 && parms.[0].CanonicalTypeTextForSorting="Microsoft.FSharp.Core.Unit" then 
+                FSharpMethodGroupItem(meth.Description,meth.TypeText,[||],meth.IsStaticArguments) 
+            else 
+                meth)
         // Fix the order of methods, to be stable for unit testing.
-        |> Array.sortBy (fun {Parameters=parms} -> parms.Length, (parms |> Array.map (fun p -> p.CanonicalTypeTextForSorting)))
-    member x.Name = name
+        |> Array.sortBy (fun meth -> 
+            let parms = meth.Parameters
+            parms.Length, (parms |> Array.map (fun p -> p.CanonicalTypeTextForSorting)))
+    member x.MethodName = name
     member x.Methods = methods
 
     static member Create(infoReader:InfoReader,m,denv,items:Item list) = 
         let g = infoReader.g
-        if isNil items then new MethodOverloads("", [| |]) else
-        let name = items.Head.DisplayName g 
+        if isNil items then new FSharpMethodGroup("", [| |]) else
+        let name = items.Head.DisplayName 
         let getOverloadsForItem item =
+#if FX_ATLEAST_40
             match methodOverloadsCache.TryGetValue item with
             | true, overloads -> overloads
             | false, _ ->
+#endif
                 let items =
                     match item with 
                     | Item.MethodGroup(nm,minfos) -> List.map (fun minfo -> Item.MethodGroup(nm,[minfo])) minfos 
@@ -315,23 +333,26 @@ type MethodOverloads( name: string, unsortedMethods: Method[] ) =
 
                 let methods = 
                     items |> Array.ofList |> Array.map (fun item -> 
-                        { Description= DataTipText [FormatDescriptionOfItem true infoReader m denv item]
-                          Type= (FormatReturnTypeOfItem infoReader m denv item)
-                          Parameters = Array.ofList (Params.ParamsOfItem infoReader m denv item) 
-                          IsStaticArguments = match item with | Item.Types _ -> true | _ -> false
-                          })
+                        FSharpMethodGroupItem(
+                          description=FSharpToolTipText [FormatDescriptionOfItem true infoReader m denv item],
+                          typeText= (FormatReturnTypeOfItem infoReader m denv item),
+                          parameters = Array.ofList (Params.ParamsOfItem infoReader m denv item),
+                          isStaticArguments = (match item with | Item.Types _ -> true | _ -> false)
+                        ))
+#if FX_ATLEAST_40
                 methodOverloadsCache.Add(item, methods)
+#endif
                 methods
         let methods = [| for item in items do yield! getOverloadsForItem item |]
 
-        new MethodOverloads(name, methods)
+        new FSharpMethodGroup(name, methods)
 
 //----------------------------------------------------------------------------
 // Scopes. 
 //--------------------------------------------------------------------------
 
 []
-type internal FindDeclFailureReason = 
+type (*internal*) FSharpFindDeclFailureReason = 
     // generic reason: no particular information about error
     | Unknown
     // source code file is not available
@@ -341,12 +362,11 @@ type internal FindDeclFailureReason =
     // trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute
     | ProvidedMember of string
 
-[]
-type internal FindDeclResult = 
+type FSharpFindDeclResult = 
     /// declaration not found + reason
-    | DeclNotFound of FindDeclFailureReason
-    /// found declaration; return (position-in-file, name-of-file)
-    | DeclFound of Position * string
+    | DeclNotFound of FSharpFindDeclFailureReason
+    /// found declaration
+    | DeclFound of range
 
 
 /// This type is used to describe what was found during the name resolution.
@@ -373,19 +393,28 @@ type GetPreciseCompletionListFromExprTypingsResult =
     | Some of (Item list * DisplayEnv * range)
 
 type Names = string list 
-type NamesWithResidue = Names * string 
-
-[]
-type CapturedNameResolution(p:pos, i:Item, io:ItemOccurence, de:DisplayEnv, nre:Nameres.NameResolutionEnv, ad:AccessorDomain, m:range) =
-    member this.Pos = p
-    member this.Item = i
-    member this.ItemOccurence = io
-    member this.DisplayEnv = de
-    member this.NameResolutionEnv = nre
-    member this.AccessorDomain = ad
-    member this.Range = m
-    member this.DebugToString() = 
-        sprintf "%A: %+A" (p.Line, p.Column) i
+
+[]
+type FSharpSymbolUse(g:TcGlobals, denv: DisplayEnv, symbol:FSharpSymbol, itemOcc, range: range) = 
+    member __.Symbol  = symbol
+    member __.DisplayContext  = FSharpDisplayContext(fun _ -> denv)
+    member x.IsDefinition = x.IsFromDefinition
+    member __.IsFromDefinition = (match itemOcc with ItemOccurence.Binding -> true | _ -> false)
+    member __.IsFromPattern = (match itemOcc with ItemOccurence.Pattern -> true | _ -> false)
+    member __.IsFromType = (match itemOcc with ItemOccurence.UseInType -> true | _ -> false)
+    member __.IsFromAttribute = (match itemOcc with ItemOccurence.UseInAttribute -> true | _ -> false)
+    member __.IsFromDispatchSlotImplementation = (match itemOcc with ItemOccurence.Implemented -> true | _ -> false)
+    member __.IsFromComputationExpression = 
+        match symbol.Item, itemOcc with 
+        // 'seq' in 'seq { ... }' gets colored as keywords
+        | (Item.Value vref), ItemOccurence.Use when valRefEq g g.seq_vref vref ->  true
+        // custom builders, custom operations get colored as keywords
+        | (Item.CustomBuilder _ | Item.CustomOperation _), ItemOccurence.Use ->  true
+        | _ -> false
+
+    member __.FileName = range.FileName
+    member __.Range = Range.toZ range
+    member __.RangeAlternate = range
 
 // A scope represents everything we get back from the typecheck of a file.
 // It acts like an in-memory database about the file.
@@ -393,38 +422,26 @@ type CapturedNameResolution(p:pos, i:Item, io:ItemOccurence, de:DisplayEnv, nre:
 // scope object on the floor and make a new one.
 []
 type TypeCheckInfo
-          (/// Information corresponding to miscellaneous command-line options (--define, etc).
-           _sTcConfig: Build.TcConfig,
-           g: Env.TcGlobals,
-           /// AssemblyName -> IL-Module 
-           amap: Import.ImportMap,
-           /// project directory, or directory containing the file that generated this scope if no project directory given 
-           sProjectDir: string ,
-           sFile:string,
-           /// Name resolution environments for every interesting region in the file. These regions may
-           /// overlap, in which case the smallest region applicable should be used.
-           sEnvs: ResizeArray,
-           /// This is a name resolution environment to use if no better match can be found.
-           sFallback:Nameres.NameResolutionEnv,
-           /// Information of exact types found for expressions, that can be to the left of a dot.
-           /// Also for exact name resolutions
-           /// pos -- line and column
-           /// typ - the inferred type for an expression
-           /// Item -- named item
-           /// DisplayEnv -- information about printing. For example, should redundant keywords be hidden?
-           /// NameResolutionEnv -- naming environment--for example, currently open namespaces.
-           /// range -- the starting and ending position      
-           capturedExprTypings: ResizeArray<(pos * TType * DisplayEnv * Nameres.NameResolutionEnv * AccessorDomain * range)>,
-           capturedNameResolutions: ResizeArray<(pos * Item * ItemOccurence * DisplayEnv * Nameres.NameResolutionEnv * AccessorDomain * range)>,
-           capturedResolutionsWithMethodGroups: ResizeArray<(pos * Item * ItemOccurence * DisplayEnv * Nameres.NameResolutionEnv * AccessorDomain * range)>,
+          (// Information corresponding to miscellaneous command-line options (--define, etc).
+           _sTcConfig: TcConfig,
+           g: TcGlobals,
+           // The signature of the assembly being checked, up to and including the current file
+           ccuSig: ModuleOrNamespaceType,
+           thisCcu: CcuThunk,
+           tcImports: TcImports,
+           tcAccessRights: AccessorDomain,
+           projectFileName: string ,
+           mainInputFileName: string ,
+           sResolutions: TcResolutions,
+           sSymbolUses: TcSymbolUses,
+           // This is a name resolution environment to use if no better match can be found.
+           sFallback: NameResolutionEnv,
            loadClosure : LoadClosure option,
-           syncop:(unit->unit)->unit,
+           reactorOps : IReactorOperations,
            checkAlive : (unit -> bool),
-           textSnapshotInfo:obj) = 
-
-    let capturedNameResolutions = capturedNameResolutions |> ResizeArray.map (fun (a,b,c,d,e,f,g) -> new CapturedNameResolution(a,b,c,d,e,f,g))
-    let capturedResolutionsWithMethodGroups = capturedResolutionsWithMethodGroups  |> ResizeArray.map (fun (a,b,c,d,e,f,g) -> new CapturedNameResolution(a,b,c,d,e,f,g))
+           textSnapshotInfo:obj option) = 
 
+    let textSnapshotInfo = defaultArg textSnapshotInfo null
     let (|CNR|) (cnr:CapturedNameResolution) =
         (cnr.Pos, cnr.Item, cnr.ItemOccurence, cnr.DisplayEnv, cnr.NameResolutionEnv, cnr.AccessorDomain, cnr.Range)
 
@@ -433,10 +450,11 @@ type TypeCheckInfo
     // Is not keyed on 'Names' collection because this is invariant for the current position in 
     // this unchanged file. Keyed on lineStr though to prevent a change to the currently line
     // being available against a stale scope.
-    let getDataTipTextCache = AgedLookup(recentForgroundTypeCheckLookupSize,areSame=(fun (x,y) -> x = y))
+    let getToolTipTextCache = AgedLookup(getToolTipTextSize,areSame=(fun (x,y) -> x = y))
     
+    let amap = tcImports.GetImportMap()
     let infoReader = new InfoReader(g,amap)
-    let ncenv = new NameResolver(g,amap,infoReader,Nameres.FakeInstantiationGenerator)
+    let ncenv = new NameResolver(g,amap,infoReader,NameResolution.FakeInstantiationGenerator)
     
     /// Find the most precise naming environment for the given line and column
     let GetBestEnvForPos cursorPos  =
@@ -444,8 +462,7 @@ type TypeCheckInfo
         let bestSoFar = ref None
 
         // Find the most deeply nested enclosing scope that contains given position
-        sEnvs |> ResizeArray.iter (fun (possm,env,ad) -> 
-            Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "Examining range %s for strict inclusion\n" (stringOfRange possm))
+        sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> 
             if rangeContainsPos possm cursorPos then
                 match !bestSoFar with 
                 | Some (bestm,_,_) -> 
@@ -456,10 +473,6 @@ type TypeCheckInfo
 
         let mostDeeplyNestedEnclosingScope = !bestSoFar 
         
-        match mostDeeplyNestedEnclosingScope with 
-        | Some (m,_,_) -> Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "Strict Inclusion found env for range %s\n" (stringOfRange m))
-        | None ->Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "Strict Inclusion found no environment, cursorPos = %s\n" (stringOfPos cursorPos))
-        
         // Look for better subtrees on the r.h.s. of the subtree to the left of where we are 
         // Should really go all the way down the r.h.s. of the subtree to the left of where we are 
         // This is all needed when the index is floating free in the area just after the environment we really want to capture 
@@ -468,7 +481,7 @@ type TypeCheckInfo
 
         let bestAlmostIncludedSoFar = ref None 
 
-        sEnvs |> ResizeArray.iter (fun (possm,env,ad) -> 
+        sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> 
             // take only ranges that strictly do not include cursorPos (all ranges that touch cursorPos were processed during 'Strict Inclusion' part)
             if rangeBeforePos possm cursorPos && not (posEq possm.End cursorPos) then 
                 let contained = 
@@ -486,28 +499,26 @@ type TypeCheckInfo
         
         let resEnv = 
             match !bestAlmostIncludedSoFar with 
-            | Some (m,env,ad) -> 
-                Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "Chose refined-rightmost env covering range %s\n" (stringOfRange m))
+            | Some (_m,env,ad) -> 
                 env,ad
             | None -> 
                 match mostDeeplyNestedEnclosingScope with 
-                | Some (m,env,ad) -> 
-                    Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "Chose refined env covering range %s\n" (stringOfRange m))
+                | Some (_m,env,ad) -> 
                     env,ad
                 | None -> 
-                    Trace.PrintLine("CompilerServicesVerbose", fun () -> "Using fallback global env\n")
                     (sFallback,AccessibleFromSomeFSharpCode)
-        let pm = mkRange sFile cursorPos cursorPos 
+        let pm = mkRange mainInputFileName cursorPos cursorPos 
 
         resEnv,pm
 
     /// The items that come back from ResolveCompletionsInType are a bit
     /// noisy. Filter a few things out.
     ///
-    /// e.g. prefer types to constructors for DataTipText 
+    /// e.g. prefer types to constructors for FSharpToolTipText 
     let FilterItemsForCtors filterCtors items = 
         let items = items |> List.filter (function (Item.CtorGroup _) when filterCtors = ResolveTypeNamesToTypeRefs -> false | _ -> true) 
         items
+        
     
     // Filter items to show only valid & return Some if there are any
     let ReturnItemsOfType items g denv (m:range) filterCtors hasTextChangedSinceLastTypecheck f =
@@ -519,7 +530,7 @@ type TypeCheckInfo
 
         if nonNil items then
             Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: Results in %d items!\n" items.Length)
-            if hasTextChangedSinceLastTypecheck(textSnapshotInfo, Range.toVS m) then
+            if hasTextChangedSinceLastTypecheck(textSnapshotInfo, m) then
                 NameResResult.TypecheckStaleAndTextChanged // typecheck is stale, wait for second-chance IntelliSense to bring up right result
             else
                 f(items, denv, m) 
@@ -529,18 +540,17 @@ type TypeCheckInfo
         Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: endOfNamesPos = %s\n" (stringOfPos endOfNamesPos))
 
         let quals = 
-            (match resolveOverloads with ResolveOverloads.Yes ->  capturedNameResolutions | ResolveOverloads.No -> capturedResolutionsWithMethodGroups)
-            |> ResizeArray.filter (fun cnr -> 
-                Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "Checking position %s = %s\n" (stringOfPos endOfNamesPos) (stringOfPos cnr.Pos))
-                posEq cnr.Pos endOfNamesPos)
-        Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: Found %d relevant quals\n" quals.Count)
+            (match resolveOverloads with ResolveOverloads.Yes -> sResolutions.CapturedNameResolutions | ResolveOverloads.No -> sResolutions.CapturedMethodGroupResolutions)
+            |> ResizeArray.filter (fun cnr ->  posEq cnr.Pos endOfNamesPos)
         
         quals
 
     /// Looks at the exact name resolutions that occurred during type checking
     /// If 'membersByResidue' is specified, we look for members of the item obtained 
     /// from the name resolution and filter them by the specified residue (?)
-    let GetPreciseItemsFromNameResolution(endOfNamesPos, membersByResidue, filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck) = 
+    let GetPreciseItemsFromNameResolution(line, colAtEndOfNames, membersByResidue, filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck) = 
+        let endOfNamesPos = mkPos line colAtEndOfNames
+
         Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: endOfNamesPos = %s\n" (stringOfPos endOfNamesPos))
         // Logic below expects the list to be in reverse order of resolution
         let items = GetCapturedNameResolutions endOfNamesPos resolveOverloads |> ResizeArray.toList |> List.rev
@@ -553,7 +563,7 @@ type TypeCheckInfo
             let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad true typ 
             ReturnItemsOfType items g denv m filterCtors hasTextChangedSinceLastTypecheck NameResResult.Members 
         
-        // Value reference from the name resolution. Primarilly to disallow "let x.$ = 1"
+        // Value reference from the name resolution. Primarily to disallow "let x.$ = 1"
         // In most of the cases, value references can be obtained from expression typings or from environment,
         // so we wouldn't have to handle values here. However, if we have something like:
         //   let varA = "string"
@@ -576,7 +586,7 @@ type TypeCheckInfo
                     // check that type of value is the same or subtype of tcref
                     // yes - allow access to protected members
                     // no - strip ability to access protected members
-                    if Microsoft.FSharp.Compiler.Typrelns.TypeFeasiblySubsumesType 0 g amap m tcref Microsoft.FSharp.Compiler.Typrelns.CanCoerce ty then
+                    if Microsoft.FSharp.Compiler.TypeRelations.TypeFeasiblySubsumesType 0 g amap m tcref Microsoft.FSharp.Compiler.TypeRelations.CanCoerce ty then
                         ad
                     else
                         AccessibleFrom(paths, None)
@@ -587,7 +597,6 @@ type TypeCheckInfo
         
         // No residue, so the items are the full resolution of the name
         | CNR(_,_,_,denv,_,_,m) :: _, None -> 
-            Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: No residue, precise results found\n")
             let items = items |> List.map (fun (CNR(_,item,_,_,_,_,_)) -> item) 
                               // "into" is special magic syntax, not an identifier or a library call.  It is part of capturedNameResolutions as an 
                               // implementation detail of syntax coloring, but we should not report name resolution results for it, to prevent spurious QuickInfo.
@@ -595,16 +604,13 @@ type TypeCheckInfo
             ReturnItemsOfType items g denv m filterCtors hasTextChangedSinceLastTypecheck NameResResult.Members
         | _ , _ -> NameResResult.Empty
     
-    let GetPreciseItemsFromNameResolutionVS(line,colAtEndOfNames,membersByResidue,filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck) = 
-        GetPreciseItemsFromNameResolution(Pos.fromVS line colAtEndOfNames, membersByResidue, filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck)
-
     let CollectParameters (methods: MethInfo list) amap m: Item list = 
         methods
         |> List.collect (fun meth ->
             match meth.GetParamDatas(amap, m, meth.FormalMethodInst) with
             | x::_ -> x |> List.choose(fun (ParamData(_isParamArray, _isOut, _optArgInfo, name, _, ty)) -> 
                 match name with
-                | Some n -> Some (Item.ArgName(Ident(n, m), ty, Some (ArgumentContainer.Method meth)))
+                | Some n -> Some (Item.ArgName(n, ty, Some (ArgumentContainer.Method meth)))
                 | None -> None
                 )
             | _ -> []
@@ -638,7 +644,7 @@ type TypeCheckInfo
     /// finds captured typing for the given position
     let GetExprTypingForPosition(endOfExprPos) = 
         let quals = 
-            capturedExprTypings 
+            sResolutions.CapturedExpressionTypings 
             |> Seq.filter (fun (pos,typ,denv,_,_,_) -> 
                     // We only want expression types that end at the particular position in the file we are looking at.
                     let isLocationWeCareAbout = posEq pos endOfExprPos
@@ -646,7 +652,6 @@ type TypeCheckInfo
                     // but you almost never want to do this in practice, and we choose not to offer up any intellisense for 
                     // F# function types.
                     let isFunction = isFunTy denv.g typ
-                    Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseCompletionListFromExprTypings: isFunction=%A, isLocationWeCareAbout=%A\n" isFunction isLocationWeCareAbout)
                     isLocationWeCareAbout && not isFunction)
             |> Seq.toArray
 
@@ -670,15 +675,13 @@ type TypeCheckInfo
                                             posEq r.Start rq.Start)
         match bestQual with
         | Some (_,typ,denv,_nenv,ad,m) when isRecdTy denv.g typ ->
-            let items = Nameres.ResolveRecordOrClassFieldsOfType ncenv m ad typ false
+            let items = NameResolution.ResolveRecordOrClassFieldsOfType ncenv m ad typ false
             Some (items, denv, m)
         | _ -> None
 
     /// Looks at the exact expression types at the position to the left of the 
     /// residue then the source when it was typechecked.
-    let GetPreciseCompletionListFromExprTypings(untypedParseInfo:UntypedParseInfo, line, colAtEndOfNames, filterCtors, hasTextChangedSinceLastTypecheck: (obj * Range -> bool)) = 
-        let endOfExprPos = Pos.fromVS line colAtEndOfNames
-        Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseCompletionListFromExprTypings: line = %d, colAtEndOfNames = %d, endOfExprPos = %s\n" line colAtEndOfNames (stringOfPos endOfExprPos))
+    let GetPreciseCompletionListFromExprTypings(parseResults:FSharpParseFileResults, endOfExprPos, filterCtors, hasTextChangedSinceLastTypecheck: (obj * range -> bool)) = 
         
         let thereWereSomeQuals, quals = GetExprTypingForPosition(endOfExprPos)
 
@@ -690,10 +693,10 @@ type TypeCheckInfo
                 GetPreciseCompletionListFromExprTypingsResult.None
         | _ ->
             let bestQual, textChanged = 
-                match UntypedParseInfoImpl.GetUntypedParseResults untypedParseInfo with
-                | { Input=Some(input) } -> 
-                    match UntypedParseInfoImpl.GetRangeOfExprLeftOfDot(line,colAtEndOfNames,Some(input)) with   // TODO we say "colAtEndOfNames" everywhere, but that's not really a good name ("foo  .  $" hit Ctrl-Space at $)
-                    | Some( ((sl,sc),_) as exprRange) ->
+                match parseResults.ParseTree with
+                | Some(input) -> 
+                    match UntypedParseImpl.GetRangeOfExprLeftOfDot(endOfExprPos,Some(input)) with   // TODO we say "colAtEndOfNames" everywhere, but that's not really a good name ("foo  .  $" hit Ctrl-Space at $)
+                    | Some( exprRange) ->
                         if hasTextChangedSinceLastTypecheck(textSnapshotInfo, exprRange) then
                             None, true // typecheck is stale, wait for second-chance IntelliSense to bring up right result
                         else
@@ -704,12 +707,12 @@ type TypeCheckInfo
                             let qual = 
                                 quals |> Array.tryFind (fun (_,_,_,_,_,r) -> 
                                                             ignore(r)  // for breakpoint
-                                                            posEq (Pos.fromVS sl sc) r.Start)
+                                                            posEq exprRange.Start r.Start)
                             qual, false
                     | None -> 
                         // TODO In theory I think we should never get to this code path; it would be nice to add an assert.
                         // In practice, we do get here in some weird cases like "2.0 .. 3.0" and hitting Ctrl-Space in between the two dots of the range operator.
-                        // I wasn't able to track down what was happening in those werid cases, not worth worrying about, it doesn't manifest as a product bug or anything.
+                        // I wasn't able to track down what was happening in those weird cases, not worth worrying about, it doesn't manifest as a product bug or anything.
                         None, false
                 | _ -> None, false
 
@@ -717,7 +720,6 @@ type TypeCheckInfo
             | Some bestQual ->
                 let (_,typ,denv,nenv,ad,m) = bestQual 
                 let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad false typ 
-                Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseCompletionListFromExprTypings: Results in %d items!\n" items.Length)
                 let items = items |> RemoveDuplicateItems g
                 let items = items |> RemoveExplicitlySuppressed g
                 let items = items |> FilterItemsForCtors filterCtors 
@@ -727,23 +729,19 @@ type TypeCheckInfo
                 else GetPreciseCompletionListFromExprTypingsResult.None
 
     /// Find items in the best naming environment.
-    let GetEnvironmentLookupResolutions(line,colAtEndOfNamesAndResidue,plid,filterCtors,showObsolete) = 
-        Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetEnvironmentLookupResolutions: line = %d, colAtEndOfNamesAndResidue = %d, plid = %+A, showObsolete = %b\n" line colAtEndOfNamesAndResidue plid showObsolete)
-        let cursorPos = Pos.fromVS line colAtEndOfNamesAndResidue
+    let GetEnvironmentLookupResolutions(cursorPos,plid,filterCtors,showObsolete) = 
         let (nenv,ad),m = GetBestEnvForPos cursorPos
-        let items = Nameres.ResolvePartialLongIdent ncenv nenv (ConstraintSolver.IsApplicableMethApprox g amap m) m ad plid showObsolete
+        let items = NameResolution.ResolvePartialLongIdent ncenv nenv (ConstraintSolver.IsApplicableMethApprox g amap m) m ad plid showObsolete
         let items = items |> RemoveDuplicateItems g 
         let items = items |> RemoveExplicitlySuppressed g
         let items = items |> FilterItemsForCtors filterCtors 
          
-        Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetEnvironmentLookupResolutions: found %d item groups by looking up long identifier chain in environment\n" (List.length items))
         items, nenv.DisplayEnv, m 
 
     /// Find record fields in the best naming environment.
-    let GetClassOrRecordFieldsEnvironmentLookupResolutions(line,colAtEndOfNamesAndResidue, plid, (_residue : string option)) = 
-        let cursorPos = Pos.fromVS line colAtEndOfNamesAndResidue
+    let GetClassOrRecordFieldsEnvironmentLookupResolutions(cursorPos, plid, (_residue : string option)) = 
         let (nenv, ad),m = GetBestEnvForPos cursorPos
-        let items = Nameres.ResolvePartialLongIdentToClassOrRecdFields ncenv nenv m ad plid false
+        let items = NameResolution.ResolvePartialLongIdentToClassOrRecdFields ncenv nenv m ad plid false
         let items = items |> RemoveDuplicateItems g 
         let items = items |> RemoveExplicitlySuppressed g
         items, nenv.DisplayEnv,m 
@@ -756,9 +754,8 @@ type TypeCheckInfo
     //
     // The overall aim is to resolve as accurately as possible based on what we know from type inference
     
-    let GetDeclItemsForNamesAtPosition(untypedParseInfoOpt : UntypedParseInfo option,
-                                       origLongIdentOpt: string list option, residueOpt, line, lineStr:string, colAtEndOfNamesAndResidue, filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck: (obj * Range -> bool)) = 
-        use t = Trace.Call("CompilerServices","GetDeclItemsForNamesAtPosition", fun _->sprintf " plid=%+A residueOpt=%+A line=%d colAtEndOfNames=%d" origLongIdentOpt (residueOpt:option) line colAtEndOfNamesAndResidue)
+    let GetDeclItemsForNamesAtPosition(parseResultsOpt : FSharpParseFileResults option,
+                                       origLongIdentOpt: string list option, residueOpt:string option, line:int, lineStr:string, colAtEndOfNamesAndResidue, filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck: (obj * range -> bool)) = 
 
         let GetBaseClassCandidates (denv : DisplayEnv) = function
             | Item.ModuleOrNamespaces _ -> true
@@ -780,8 +777,7 @@ type TypeCheckInfo
             // Return only items with the specified name
             let filterDeclItemsByResidue residue (items: Item list) = 
                 items |> List.filter (fun item -> 
-                    let n1 =  item.DisplayName g 
-                    Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "\nn1 = <<<%s>>>\nn2 = <<<%s>>>\n" n1 residue)
+                    let n1 =  item.DisplayName 
                     if not (f denv item) then false
                     else
                         match item with
@@ -790,7 +786,6 @@ type TypeCheckInfo
             
             // Are we looking for items with precisely the given name?
             if nonNil items && exactMatchResidue.IsSome then
-                Trace.PrintLine("CompilerServices", fun _ -> sprintf "looking through %d items before filtering by residue\n" (List.length items))       
                 let items = items |> filterDeclItemsByResidue exactMatchResidue.Value
                 if nonNil items then Some(items,denv,m) else None        
             else 
@@ -806,9 +801,9 @@ type TypeCheckInfo
             | atStart when atStart = 0 -> 0
             | otherwise -> otherwise - 1
 
-        let FindInEnv(plid, showObsolete) = GetEnvironmentLookupResolutions(line,loc,plid,filterCtors, showObsolete) 
+        let FindInEnv(plid, showObsolete) = GetEnvironmentLookupResolutions(mkPos line loc,plid,filterCtors, showObsolete) 
 
-        let FindRecordFieldsInEnv(plid, residue) = GetClassOrRecordFieldsEnvironmentLookupResolutions(line, loc, plid, residue)
+        let FindRecordFieldsInEnv(plid, residue) = GetClassOrRecordFieldsEnvironmentLookupResolutions(mkPos line loc, plid, residue)
 
         let getDeclaredItems isInRangeOperator =
             let findFirstNonWsPos i = 
@@ -833,19 +828,23 @@ type TypeCheckInfo
             // This is based on position (i.e. colAtEndOfNamesAndResidue). This is not used if a residueOpt is given.
             let nameResItems = 
                 match residueOpt with 
-                | None -> GetPreciseItemsFromNameResolutionVS(line, colAtEndOfNamesAndResidue, None, filterCtors,resolveOverloads, hasTextChangedSinceLastTypecheck)
+                | None -> GetPreciseItemsFromNameResolution(line, colAtEndOfNamesAndResidue, None, filterCtors,resolveOverloads, hasTextChangedSinceLastTypecheck)
                 | Some residue ->
                     // deals with cases when we have spaces between dot and\or identifier, like A  . $
                     // if this is our case - then wen need to locate end position of the name skipping whitespaces
                     // this allows us to handle cases like: let x . $ = 1 
 
                     // colAtEndOfNamesAndResidue is 1-based so at first we need to convert it to 0-based 
+                    //
+                    // TODO: this code would be a lot simpler if we just passed in colAtEndOfNames in 
+                    // the first place. colAtEndOfNamesAndResidue serves no purpose. The cracking below is
+                    // inaccurate and incomplete in any case since it only works on a single line.
                     match findFirstNonWsPos (colAtEndOfNamesAndResidue - 1) with
                     | Some p when lineStr.[p] = '.' ->
                         match findFirstNonWsPos (p - 1) with
                         | Some colAtEndOfNames ->                 
                             let colAtEndOfNames = colAtEndOfNames + 1 // convert 0-based to 1-based
-                            GetPreciseItemsFromNameResolutionVS(line, colAtEndOfNames, Some(residue), filterCtors,resolveOverloads, hasTextChangedSinceLastTypecheck)
+                            GetPreciseItemsFromNameResolution(line, colAtEndOfNames, Some(residue), filterCtors,resolveOverloads, hasTextChangedSinceLastTypecheck)
                         | None -> NameResResult.Empty
                     | _ -> NameResResult.Empty        
         
@@ -882,7 +881,7 @@ type TypeCheckInfo
                 // Try to use the type of the expression on the left to help generate a completion list
                 let mutable thereIsADotInvolved = false
                 let qualItems = 
-                    match untypedParseInfoOpt with
+                    match parseResultsOpt with
                     | None -> 
                         // Note, you will get here if the 'reason' is not CompleteWord/MemberSelect/DisplayMemberList, as those are currently the 
                         // only reasons we do a sync parse to have the most precise and likely-to-be-correct-and-up-to-date info.  So for example,
@@ -893,14 +892,14 @@ type TypeCheckInfo
                     | Some(upi) -> 
 
     // See ServiceUntypedParse - GetRangeOfExprLeftOfDot and TryFindExpressionASTLeftOfDotLeftOfCursor are similar, but different, can we refactor commonality?
-    //                match UntypedParseInfoImpl.GetRangeOfExprLeftOfDot(line,colAtEndOfNamesAndResidue,upi.ParseTree) with
+    //                match UntypedParseImpl.GetRangeOfExprLeftOfDot(line,colAtEndOfNamesAndResidue,upi.ParseTree) with
     //                | Some((_,_),(el,ec)) ->
     //                    thereIsADotInvolved <- true
     //                    GetPreciseCompletionListFromExprTypings(upi, el-1, ec, filterCtors)
-                    match UntypedParseInfoImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(line,colAtEndOfNamesAndResidue,upi.ParseTree) with
+                    match UntypedParseImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(mkPos line colAtEndOfNamesAndResidue,upi.ParseTree) with
                     | Some(pos,_) ->
                         thereIsADotInvolved <- true
-                        GetPreciseCompletionListFromExprTypings(upi, pos.Line-1, pos.Column, filterCtors, hasTextChangedSinceLastTypecheck)
+                        GetPreciseCompletionListFromExprTypings(upi, pos, filterCtors, hasTextChangedSinceLastTypecheck)
                     | None -> 
                         // Can get here in a case like: if "f xxx yyy" is legal, and we do "f xxx y"
                         // We have no interest in expression typings, those are only useful for dot-completion.  We want to fallback
@@ -951,7 +950,7 @@ type TypeCheckInfo
                 
                 | _ -> None
 
-        match UntypedParseInfoImpl.TryGetCompletionContext(line, colAtEndOfNamesAndResidue, untypedParseInfoOpt) with
+        match UntypedParseImpl.TryGetCompletionContext(mkPos line colAtEndOfNamesAndResidue, parseResultsOpt) with
         | Some CompletionContext.Invalid -> None
         | Some (CompletionContext.Inherit(InheritanceContext.Class, (plid, _))) ->
             FindInEnv(plid, false) 
@@ -985,12 +984,147 @@ type TypeCheckInfo
                     items 
                     |> RemoveDuplicateItems g
                     |> RemoveExplicitlySuppressed g
-                    |> List.filter (fun m -> not (fields.Contains (m.DisplayName g)))
+                    |> List.filter (fun m -> not (fields.Contains m.DisplayName))
                 match declaredItems with
                 | None -> Some (items, denv, m)
                 | Some (declItems, declaredDisplayEnv, declaredRange) -> Some (filtered @ declItems, declaredDisplayEnv, declaredRange)
             | _ -> declaredItems
         | cc ->
+#if OLD
+
+        
+        // are last two chars (except whitespaces) = ".."
+        let isLikeRangeOp = 
+            match findFirstNonWsPos (colAtEndOfNamesAndResidue - 1) with
+            | Some x when x >= 1 && lineStr.[x] = '.' && lineStr.[x - 1] = '.' -> true
+            | _ -> false
+
+        // if last two chars are .. and we are not in range operator context - no completion
+        if isLikeRangeOp && not (cc = Some (CompletionContext.RangeOperator)) then None
+        else
+                                    
+        // Try to use the exact results of name resolution during type checking to generate the results
+        // This is based on position (i.e. colAtEndOfNamesAndResidue). 
+        let nameResItems = 
+            match residueOpt with 
+            | None -> GetPreciseItemsFromNameResolution(line, colAtEndOfNamesAndResidue, None, filterCtors,resolveOverloads, hasTextChangedSinceLastTypecheck)
+            | Some residue ->
+                // deals with cases when we have spaces between dot and\or identifier, like A  . $
+                // if this is our case - then wen need to locate end position of the name skipping whitespaces
+                // this allows us to handle cases like: let x . $ = 1 
+
+                // colAtEndOfNamesAndResidue is 1-based so at first we need to convert it to 0-based 
+                //
+                // TODO: this code would be a lot simpler if we just passed in colAtEndOfNames in 
+                // the first place. colAtEndOfNamesAndResidue serves no purpose. The cracking below is
+                // inaccurate and incomplete in any case since it only works on a single line.
+                match findFirstNonWsPos (colAtEndOfNamesAndResidue - 1) with
+                | Some p when lineStr.[p] = '.' ->
+                    match findFirstNonWsPos (p - 1) with
+                    | Some colAtEndOfNames ->                 
+                        let colAtEndOfNames = colAtEndOfNames + 1 // convert 0-based to 1-based
+                        GetPreciseItemsFromNameResolution(line, colAtEndOfNames, Some(residue), filterCtors,resolveOverloads, hasTextChangedSinceLastTypecheck)
+                    | None -> NameResResult.Empty
+                | _ -> NameResResult.Empty        
+        
+        // Normalize to form A.B.C.D where D is the residue. It may be empty for "A.B.C."
+        // residueOpt = Some when we are looking for the exact match
+        let plid, exactMatchResidueOpt = 
+            match origLongIdentOpt, residueOpt with
+            | None, _ -> [], None
+            | Some(origLongIdent), Some _ -> origLongIdent, None
+            | Some(origLongIdent), None ->
+                assert (nonNil origLongIdent)
+                // note: as above, this happens when we are called for "precise" resolution - (F1 keyword, data tip etc..)
+                let plid, residue = List.frontAndBack origLongIdent
+                plid, Some residue
+                
+        /// Post-filter items to make sure they have precisely the right name
+        /// This also checks that there are some remaining results 
+        let (|FilterRelevantItems|_|) orig =
+            FilterRelevantItemsBy exactMatchResidueOpt (fun _ _ -> true) orig
+
+        match nameResItems with            
+        | NameResResult.TypecheckStaleAndTextChanged -> None // second-chance intellisense will try again
+        | NameResResult.Cancel(denv,m) -> Some([], denv, m)
+        | NameResResult.Members(FilterRelevantItems(items)) -> 
+            Some items
+        | _ ->
+        
+        match origLongIdentOpt with
+        | None -> None
+        | Some _ -> 
+
+            // Try to use the type of the expression on the left to help generate a completion list
+            let mutable thereIsADotInvolved = false
+            let qualItems = 
+                match parseResultsOpt with
+                | None -> 
+                    // Note, you will get here if the 'reason' is not CompleteWord/MemberSelect/DisplayMemberList, as those are currently the 
+                    // only reasons we do a sync parse to have the most precise and likely-to-be-correct-and-up-to-date info.  So for example,
+                    // if you do QuickInfo hovering over A in "f(x).A()", you will only get a tip if typechecking has a name-resolution recorded
+                    // for A, not if merely we know the capturedExpressionTyping of f(x) and you very recently typed ".A()" - in that case, 
+                    // you won't won't get a tip until the typechecking catches back up.
+                    GetPreciseCompletionListFromExprTypingsResult.None
+                | Some(upi) -> 
+
+// See ServiceUntypedParse - GetRangeOfExprLeftOfDot and TryFindExpressionASTLeftOfDotLeftOfCursor are similar, but different, can we refactor commonality?
+//                match UntypedParseImpl.GetRangeOfExprLeftOfDot(line,colAtEndOfNamesAndResidue,upi.ParseTree) with
+//                | Some((_,_),(el,ec)) ->
+//                    thereIsADotInvolved <- true
+//                    GetPreciseCompletionListFromExprTypings(upi, el-1, ec, filterCtors)
+                match UntypedParseImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(mkPos line colAtEndOfNamesAndResidue,upi.ParseTree) with
+                | Some(pos,_) ->
+                    thereIsADotInvolved <- true
+                    GetPreciseCompletionListFromExprTypings(upi, pos, filterCtors, hasTextChangedSinceLastTypecheck)
+                | None -> 
+                    // Can get here in a case like: if "f xxx yyy" is legal, and we do "f xxx y"
+                    // We have no interest in expression typings, those are only useful for dot-completion.  We want to fallback
+                    // to "Use an environment lookup as the last resort" below
+                    GetPreciseCompletionListFromExprTypingsResult.None
+
+            match qualItems,thereIsADotInvolved with            
+            | GetPreciseCompletionListFromExprTypingsResult.Some(FilterRelevantItems(items)), _
+                    // Initially we only use the expression typings when looking up, e.g. (expr).Nam or (expr).Name1.Nam
+                    // These come through as an empty plid and residue "". Otherwise we try an environment lookup
+                    // and then return to the qualItems. This is because the expression typings are a little inaccurate, primarily because
+                    // it appears we're getting some typings recorded for non-atomic expressions like "f x"
+                    when (match plid with [] -> true | _ -> false)  -> 
+                Some items
+            | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseThereWereTypeErrors, _ ->
+                // There was an error, e.g. we have "." and there is an error determining the type of   
+                // In this case, we don't want any of the fallback logic, rather, we want to produce zero results.
+                None
+            | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseTypecheckIsStaleAndTextChanged, _ ->         
+                // we want to report no result and let second-chance intellisense kick in
+                None
+            | _, true when (match plid with [] -> true | _ -> false)  -> 
+                // If the user just pressed '.' after an _expression_ (not a plid), it is never right to show environment-lookup top-level completions.
+                // The user might by typing quickly, and the LS didn't have an expression type right before the dot yet.
+                // Second-chance intellisense will bring up the correct list in a moment.
+                None
+            | _ ->         
+            // Use an environment lookup as the last resort
+
+            let envItems =  FindInEnv(plid, residueOpt.IsSome)
+            match nameResItems, envItems, qualItems with            
+            
+            // First, use unfiltered name resolution items, if they're not empty
+            | NameResResult.Members(items, denv, m), _, _ when nonNil items -> 
+                Some(items, denv, m)                
+            
+            // If we have nonempty items from environment that were resolved from a type, then use them... 
+            // (that's better than the next case - here we'd return 'int' as a type)
+            | _, FilterRelevantItems(items, denv, m), _ when nonNil items ->
+                Some(items, denv, m)
+
+            // Try again with the qualItems
+            | _, _, GetPreciseCompletionListFromExprTypingsResult.Some(FilterRelevantItems(items)) ->
+                Some(items)
+                
+            | _ -> None
+
+#endif
             getDeclaredItems (match cc with Some (CompletionContext.RangeOperator) -> true | _ -> false)
 
     // Return 'false' if this is not a completion item valid in an interface file.
@@ -999,8 +1133,8 @@ type TypeCheckInfo
         | Item.Types _ | Item.ModuleOrNamespaces _ -> true
         | _ -> false
 
-    let filterIntellisenseCompletionsBasedOnParseContext untypedParseInfoOpt line col items = 
-        match untypedParseInfoOpt with
+    let filterIntellisenseCompletionsBasedOnParseContext parseResultsOpt (pos:pos) items = 
+        match parseResultsOpt with
         | None -> items
         | Some t ->
             // visitor to see if we are in an "open" declaration in the parse tree
@@ -1015,33 +1149,100 @@ type TypeCheckInfo
                                         //     [ defaultTraverse decl }
-            match AstTraversal.Traverse(line, col, t, visitor) with
+            match AstTraversal.Traverse(pos, t, visitor) with
             | None -> items
             | Some _ ->
                 items |> List.filter (function | Item.ModuleOrNamespaces _ -> true | _ -> false)
 
-    member x.GetDeclarations (untypedParseInfoOpt:UntypedParseInfo option, line, lineStr, colAtEndOfNames, (names,residue):NamesWithResidue, hasTextChangedSinceLastTypecheck: (obj * Range -> bool)) : DeclarationSet =
-        use t = Trace.Call("CompilerServices","GetDeclarations", fun _->sprintf " line=%+A,colAtEndOfNames=%+A,names=%+A" line colAtEndOfNames names)
-        let isInterfaceFile = SourceFileImpl.IsInterfaceFile sFile
+    member x.GetDeclarations (parseResultsOpt:FSharpParseFileResults option, line, lineStr, colAtEndOfNamesAndResidue, qualifyingNames, partialName, hasTextChangedSinceLastTypecheck) =
+        let isInterfaceFile = SourceFileImpl.IsInterfaceFile mainInputFileName
         ErrorScope.Protect 
             Range.range0 
             (fun () -> 
-                match GetDeclItemsForNamesAtPosition(untypedParseInfoOpt, Some names, Some residue, line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, ResolveOverloads.Yes, hasTextChangedSinceLastTypecheck) with
-                | None -> DeclarationSet.Empty  
+                match GetDeclItemsForNamesAtPosition(parseResultsOpt, Some qualifyingNames, Some partialName, line, lineStr, colAtEndOfNamesAndResidue, ResolveTypeNamesToCtors, ResolveOverloads.Yes, hasTextChangedSinceLastTypecheck) with
+                | None -> FSharpDeclarationListInfo.Empty  
                 | Some(items,denv,m) -> 
-                    let items = items |> filterIntellisenseCompletionsBasedOnParseContext (untypedParseInfoOpt |> Option.bind (fun x -> x.ParseTree)) line colAtEndOfNames 
+                    let items = items |> filterIntellisenseCompletionsBasedOnParseContext (parseResultsOpt |> Option.bind (fun x -> x.ParseTree)) (mkPos line colAtEndOfNamesAndResidue)
+                    let items = if isInterfaceFile then items |> List.filter IsValidSignatureFileItem else items
+                    FSharpDeclarationListInfo.Create(infoReader,m,denv,items,reactorOps,checkAlive))
+            (fun msg -> FSharpDeclarationListInfo.Error msg)
+
+    member x.GetDeclarationListSymbols (parseResultsOpt:FSharpParseFileResults option, line, lineStr, colAtEndOfNamesAndResidue, qualifyingNames, partialName, hasTextChangedSinceLastTypecheck) =
+        let isInterfaceFile = SourceFileImpl.IsInterfaceFile mainInputFileName
+        ErrorScope.Protect 
+            Range.range0 
+            (fun () -> 
+                match GetDeclItemsForNamesAtPosition(parseResultsOpt, Some qualifyingNames, Some partialName, line, lineStr, colAtEndOfNamesAndResidue, ResolveTypeNamesToCtors, ResolveOverloads.Yes, hasTextChangedSinceLastTypecheck) with
+                | None -> List.Empty  
+                | Some(items,_denv,_m) -> 
+                    let items = items |> filterIntellisenseCompletionsBasedOnParseContext (parseResultsOpt |> Option.bind (fun x -> x.ParseTree)) (mkPos line colAtEndOfNamesAndResidue)
                     let items = if isInterfaceFile then items |> List.filter IsValidSignatureFileItem else items
-                    DeclarationSet.Create(infoReader,m,denv,items,syncop,checkAlive))
-            (fun msg -> DeclarationSet.Error msg)
+
+                    //do filtering like Declarationset
+                    let items = items |> RemoveExplicitlySuppressed g
+                    
+                    // Sort by name. For things with the same name, 
+                    //     - show types with fewer generic parameters first
+                    //     - show types before over other related items - they usually have very useful XmlDocs 
+                    let items = 
+                        items |> List.sortBy (fun d -> 
+                            let n = 
+                                match d with  
+                                | Item.Types (_,(TType_app(tcref,_) :: _)) -> 1 + tcref.TyparsNoRange.Length
+                                // Put delegate ctors after types, sorted by #typars. RemoveDuplicateItems will remove FakeInterfaceCtor and DelegateCtor if an earlier type is also reported with this name
+                                | Item.FakeInterfaceCtor (TType_app(tcref,_)) 
+                                | Item.DelegateCtor (TType_app(tcref,_)) -> 1000 + tcref.TyparsNoRange.Length
+                                // Put type ctors after types, sorted by #typars. RemoveDuplicateItems will remove DefaultStructCtors if a type is also reported with this name
+                                | Item.CtorGroup (_, (cinfo :: _)) -> 1000 + 10 * (tcrefOfAppTy g cinfo.EnclosingType).TyparsNoRange.Length 
+                                | _ -> 0
+                            (d.DisplayName,n))
+
+                    // Remove all duplicates. We've put the types first, so this removes the DelegateCtor and DefaultStructCtor's.
+                    let items = items |> RemoveDuplicateItems g
+
+                    if verbose then dprintf "service.ml: mkDecls: %d found groups after filtering\n" (List.length items); 
+
+                    // Group by display name
+                    let items = items |> List.groupBy (fun d -> d.DisplayName) 
+
+                    // Filter out operators (and list)
+                    let items = 
+                        // Check whether this item looks like an operator.
+                        let isOpItem(nm,item) = 
+                            match item with 
+                            | [Item.Value _]
+                            | [Item.MethodGroup(_,[_])] -> 
+                                (IsOpName nm) && nm.[0]='(' && nm.[nm.Length-1]=')'
+                            | [Item.UnionCase _] -> IsOpName nm
+                            | _ -> false              
+
+                        let isFSharpList nm = (nm = "[]") // list shows up as a Type and a UnionCase, only such entity with a symbolic name, but want to filter out of intellisense
+
+                        items |> List.filter (fun (nm,items) -> not (isOpItem(nm,items)) && not(isFSharpList nm)) 
+
+
+                    let items = 
+                        // Filter out duplicate names
+                        items |> List.map (fun (_nm,itemsWithSameName) -> 
+                            match itemsWithSameName with
+                            | [] -> failwith "Unexpected empty bag"
+                            | items ->
+                                items 
+                                |> List.map (fun item -> let symbol = FSharpSymbol.Create(g, thisCcu, tcImports, item)
+                                                         FSharpSymbolUse(g, _denv, symbol, ItemOccurence.Use, _m)))
+
+                    //end filtering
+                    items)
+            (fun _msg -> [])
             
-    member scope.GetReferenceResolutionDataTipText(line,col) : DataTipText = 
-        let pos = Pos.fromVS line col
+    member scope.GetReferenceResolutionToolTipText(line,col) = 
+        let pos = mkPos line col
         let lineIfExists(append) =
             if not(String.IsNullOrEmpty(append)) then append.Trim([|' '|])+"\n"
             else ""     
@@ -1064,7 +1265,7 @@ type TypeCheckInfo
             match matches with 
             | resolved::_ // Take the first seen
             | [resolved] -> 
-                let originalReferenceName = match resolved.originalReference with AssemblyReference (_,nm) -> nm
+                let originalReferenceName = resolved.originalReference.Text
                 let resolvedPath = // Don't show the resolved path if it is identical to what was referenced.
                     if originalReferenceName = resolved.resolvedPath then String.Empty
                     else resolved.resolvedPath
@@ -1096,40 +1297,38 @@ type TypeCheckInfo
                         lineIfExists(resolvedPath)
                         + lineIfExists(resolved.fusionName)  
                                                   
-                DataTipText [DataTipElement(tip.TrimEnd([|'\n'|]) ,XmlCommentNone)]
+                FSharpToolTipText [FSharpToolTipElement.Single(tip.TrimEnd([|'\n'|]) ,FSharpXmlDoc.None)]
 
-            | [] -> DataTipText []
+            | [] -> FSharpToolTipText []
                                     
         ErrorScope.Protect 
             Range.range0 
             dataTipOfReferences
-            (fun err -> DataTipText [DataTipElementCompositionError err])
+            (fun err -> FSharpToolTipText [FSharpToolTipElement.CompositionError err])
 
-    // GetDataTipText: return the "pop up" (or "Quick Info") text given a certain context.
-    member x.GetDataTipText line lineStr colAtEndOfNames names : DataTipText  = 
-        use t = Trace.Call("CompilerServices","GetDataTipText", fun _->sprintf " line=%+A,idx=%+A,names=%+A" line colAtEndOfNames names)
+    // GetToolTipText: return the "pop up" (or "Quick Info") text given a certain context.
+    member x.GetToolTipText line lineStr colAtEndOfNames names = 
         
         let Compute() = 
             ErrorScope.Protect 
                 Range.range0 
                 (fun () -> 
                     match GetDeclItemsForNamesAtPosition(None,Some(names),None,line,lineStr,colAtEndOfNames,ResolveTypeNamesToCtors,ResolveOverloads.Yes,fun _ -> false) with
-                    | None -> DataTipText []
+                    | None -> FSharpToolTipText []
                     | Some(items,denv,m) ->
-                         DataTipText(items |> List.map (FormatDescriptionOfItem false infoReader m denv )))
-                (fun err -> DataTipText [DataTipElementCompositionError err])
+                         FSharpToolTipText(items |> List.map (FormatDescriptionOfItem false infoReader m denv )))
+                (fun err -> FSharpToolTipText [FSharpToolTipElement.CompositionError err])
                
         // See devdiv bug 646520 for rationale behind truncating and caching these quick infos (they can be big!)
         let key = line,colAtEndOfNames,lineStr
-        match getDataTipTextCache.TryGet key with 
+        match getToolTipTextCache.TryGet key with 
         | Some res -> res
         | None ->
              let res = Compute()
-             getDataTipTextCache.Put(key,res)
+             getToolTipTextCache.Put(key,res)
              res
 
     member x.GetF1Keyword (line, lineStr, colAtEndOfNames, names) : string option =
-       use t = Trace.Call("CompilerServices","GetF1Keyword", fun _->sprintf " line=%+A,idx=%+A,names=%+A" line colAtEndOfNames names) 
        ErrorScope.Protect
             Range.range0
             (fun () ->
@@ -1160,23 +1359,53 @@ type TypeCheckInfo
             )    
             (fun _ -> None)
 
-    member scope.GetMethods (line, lineStr, colAtEndOfNames, namesOpt) : MethodOverloads =
+    member scope.GetMethods (line, lineStr, colAtEndOfNames, namesOpt) =
         ErrorScope.Protect 
             Range.range0 
             (fun () -> 
-                use t = Trace.Call("CompilerServices", "GetMethods", fun _ -> sprintf "line = %d, idx = %d, names = %+A" line colAtEndOfNames namesOpt)
                 match GetDeclItemsForNamesAtPosition(None,namesOpt,None,line,lineStr,colAtEndOfNames,ResolveTypeNamesToCtors,ResolveOverloads.No, fun _ -> false) with
-                | None -> MethodOverloads("",[| |])
-                | Some(items,denv,m) -> MethodOverloads.Create(infoReader,m,denv,items))
+                | None -> FSharpMethodGroup("",[| |])
+                | Some(items,denv,m) -> FSharpMethodGroup.Create(infoReader,m,denv,items))
             (fun msg -> 
-                MethodOverloads(msg,[| |]))
+                FSharpMethodGroup(msg,[| |]))
+
+    member scope.GetMethodsAsSymbols (line, lineStr, colAtEndOfNames, names) =
+        match GetDeclItemsForNamesAtPosition (None,Some(names), None, line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, ResolveOverloads.No, fun _ -> false) with
+        | None | Some ([], _, _) -> None
+        | Some (items, denv, m) ->
+            let allItems =
+                items
+                |> List.collect (fun item ->
+                    match item with 
+                    | Item.MethodGroup(nm,minfos) -> minfos |> List.map (fun minfo -> Item.MethodGroup(nm,[minfo]))  
+                    | Item.CtorGroup(nm,cinfos) -> cinfos |> List.map (fun minfo -> Item.CtorGroup(nm,[minfo])) 
+                    | Item.FakeInterfaceCtor _
+                    | Item.DelegateCtor _ -> [item]
+                    | Item.NewDef _ 
+                    | Item.ILField _ -> []
+                    | Item.Event _ -> []
+                    | Item.RecdField(rfinfo) -> if isFunction g rfinfo.FieldType then [item] else []
+                    | Item.Value v -> if isFunction g v.Type then [item] else []
+                    | Item.UnionCase(ucr,_) -> if not ucr.UnionCase.IsNullary then [item] else []
+                    | Item.ExnCase(ecr) -> if recdFieldsOfExnDefRef ecr |> nonNil then [item] else []
+                    | Item.Property(_,pinfos) -> 
+                        let pinfo = List.head pinfos 
+                        if pinfo.IsIndexer then [item] else []
+#if EXTENSIONTYPING
+                    | Params.ItemIsTypeWithStaticArguments g _ -> [item] // we pretend that provided-types-with-static-args are method-like in order to get ParamInfo for them
+#endif
+                    | Item.CustomOperation(_name, _helpText, _minfo) -> [item]
+                    | Item.TypeVar _ -> []
+                    | Item.CustomBuilder _ -> []
+                    | _ -> [] )
 
-    member scope.GetDeclarationLocation (line : int, lineStr : string, idx : int, names : Names, tag : tokenId, isDecl : bool) : FindDeclResult =
-      match tag with
-      | TOKEN_IDENT -> 
-          match GetDeclItemsForNamesAtPosition (None,Some(names), None, line, lineStr, idx, ResolveTypeNamesToCtors,ResolveOverloads.Yes, fun _ -> false) with
+            let symbols = allItems |> List.map (fun item -> FSharpSymbol.Create(g, thisCcu, tcImports, item))
+            Some (symbols, denv, m)
+
+    member scope.GetDeclarationLocation (line, lineStr, colAtEndOfNames, names, preferFlag) =
+          match GetDeclItemsForNamesAtPosition (None,Some(names), None, line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors,ResolveOverloads.Yes, fun _ -> false) with
           | None
-          | Some ([], _, _) -> FindDeclResult.DeclNotFound FindDeclFailureReason.Unknown
+          | Some ([], _, _) -> FSharpFindDeclResult.DeclNotFound FSharpFindDeclFailureReason.Unknown
           | Some (item :: _ , _, _) -> 
 
               // For IL-based entities, switch to a different item. This is because
@@ -1195,62 +1424,113 @@ type TypeCheckInfo
               let fail defaultReason = 
                   match item with            
 #if EXTENSIONTYPING
-                  | Params.ItemIsTypeWithStaticArguments g (tcref) -> FindDeclResult.DeclNotFound (FindDeclFailureReason.ProvidedType(tcref.DisplayName))
+                  | Params.ItemIsTypeWithStaticArguments g (tcref) -> FSharpFindDeclResult.DeclNotFound (FSharpFindDeclFailureReason.ProvidedType(tcref.DisplayName))
                   | Item.CtorGroup(name, ProvidedMeth(_)::_)
                   | Item.MethodGroup(name, ProvidedMeth(_)::_)
-                  | Item.Property(name, ProvidedProp(_)::_) -> FindDeclResult.DeclNotFound (FindDeclFailureReason.ProvidedMember(name))
-                  | Item.Event(ProvidedEvent(_) as e) -> FindDeclResult.DeclNotFound (FindDeclFailureReason.ProvidedMember(e.EventName))
-                  | Item.ILField(ProvidedField(_) as f) -> FindDeclResult.DeclNotFound (FindDeclFailureReason.ProvidedMember(f.FieldName))
+                  | Item.Property(name, ProvidedProp(_)::_) -> FSharpFindDeclResult.DeclNotFound (FSharpFindDeclFailureReason.ProvidedMember(name))
+                  | Item.Event(ProvidedEvent(_) as e) -> FSharpFindDeclResult.DeclNotFound (FSharpFindDeclFailureReason.ProvidedMember(e.EventName))
+                  | Item.ILField(ProvidedField(_) as f) -> FSharpFindDeclResult.DeclNotFound (FSharpFindDeclFailureReason.ProvidedMember(f.FieldName))
 #endif
-                  | _ -> FindDeclResult.DeclNotFound defaultReason
+                  | _ -> FSharpFindDeclResult.DeclNotFound defaultReason
 
-              match rangeOfItem g isDecl item with
-              | None   -> fail FindDeclFailureReason.Unknown 
+              match rangeOfItem g preferFlag item with
+              | None   -> fail FSharpFindDeclFailureReason.Unknown 
               | Some itemRange -> 
 
-                  let filename = fileNameOfItem g (Some sProjectDir) itemRange item
+                  let projectDir = Filename.directoryName (if projectFileName = "" then mainInputFileName else projectFileName)
+                  let filename = fileNameOfItem g (Some projectDir) itemRange item
                   if FileSystem.SafeExists filename then 
-                      FindDeclResult.DeclFound ((itemRange.StartLine - 1, itemRange.StartColumn), filename)
+                      FSharpFindDeclResult.DeclFound (mkRange filename itemRange.Start itemRange.End)
                   else 
-                      fail FindDeclFailureReason.NoSourceCode // provided items may have TypeProviderDefinitionLocationAttribute that binds them to some location
+                      fail FSharpFindDeclFailureReason.NoSourceCode // provided items may have TypeProviderDefinitionLocationAttribute that binds them to some location
+
+    member scope.GetSymbolUseAtLocation (line, lineStr, colAtEndOfNames, names) =
+        match GetDeclItemsForNamesAtPosition (None,Some(names), None, line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, ResolveOverloads.Yes, fun _ -> false) with
+        | None | Some ([], _, _) -> None
+        | Some (item :: _ , denv, m) -> 
+            let symbol = FSharpSymbol.Create(g, thisCcu, tcImports, item)
+            Some (symbol, denv, m)
+
+    member scope.PartialAssemblySignature() = FSharpAssemblySignature(g, thisCcu, tcImports, None, ccuSig)
 
-      | _ -> FindDeclResult.DeclNotFound FindDeclFailureReason.Unknown
+    member scope.AccessRights =  tcAccessRights
 
+    member scope.GetReferencedAssemblies() = 
+        [ for x in tcImports.GetImportedAssemblies() do 
+                yield FSharpAssembly(g, tcImports, x.FSharpViewOfMetadata) ]
+
+    // Not, this does not have to be a SyncOp, it can be called from any thread
+    member scope.GetFormatSpecifierLocations() = 
+         sSymbolUses.GetFormatSpecifierLocations() 
 
     // Not, this does not have to be a SyncOp, it can be called from any thread
     member scope.GetExtraColorizations() = 
-         [| for cnr in capturedNameResolutions do  
+         [| for cnr in sResolutions.CapturedNameResolutions do  
                match cnr with 
-               /// 'seq' in 'seq { ... }' gets colored as keywords
+               // 'seq' in 'seq { ... }' gets colored as keywords
                | CNR(_, (Item.Value vref), ItemOccurence.Use, _, _, _, m) when valRefEq g g.seq_vref vref -> 
-                   yield ((Pos.toVS m.Start, Pos.toVS m.End), TokenColorKind.Keyword) 
-               /// custom builders, custom operations get colored as keywords
+                   yield (m, FSharpTokenColorKind.Keyword) 
+               // custom builders, custom operations get colored as keywords
                | CNR(_, (Item.CustomBuilder _ | Item.CustomOperation _), ItemOccurence.Use, _, _, _, m) -> 
-                   yield ((Pos.toVS m.Start, Pos.toVS m.End), TokenColorKind.Keyword) 
+                   yield (m, FSharpTokenColorKind.Keyword) 
 #if COLORIZE_TYPES
-               /// types get colored as types when they occur in syntactic types or custom attributes
-               /// typevariables get colored as types when they occur in syntactic types custom builders, custom operations get colored as keywords
+               // types get colored as types when they occur in syntactic types or custom attributes
+               // typevariables get colored as types when they occur in syntactic types custom builders, custom operations get colored as keywords
                | CNR(_, (Item.TypeVar  _ | Item.Types _ | Item.UnqualifiedType _) , (ItemOccurence.UseInType | ItemOccurence.UseInAttribute), _, _, _, m) -> 
-                   yield ((Pos.toVS m.Start, Pos.toVS m.End), TokenColorKind.TypeName) 
+                   yield (m, FSharpTokenColorKind.TypeName) 
 #endif
                | _ -> () 
            |]
+    member x.ScopeResolutions = sResolutions
+    member x.ScopeSymbolUses = sSymbolUses
+    member x.TcGlobals = g
+    member x.TcImports = tcImports
+    member x.CcuSig = ccuSig
+    member x.ThisCcu = thisCcu
 
 module internal Parser = 
 
-    /// Error handler for parsing & type checking
+        // We'll need number of lines for adjusting error messages at EOF
+    let GetFileInfoForLastLineErrors (source: string) = 
+        // number of lines in the source file
+        let lastLine = (source |> Seq.sumBy (fun c -> if c = '\n' then 1 else 0)) + 1
+        // length of the last line
+        let lastLineLength = source.Length - source.LastIndexOf("\n",StringComparison.Ordinal) - 1
+        lastLine, lastLineLength
+         
+    let ReportError (tcConfig:TcConfig, allErrors, mainInputFileName, fileInfo, (exn, sev)) = 
+        [ let warn = (sev = FSharpErrorSeverity.Warning) && not (ReportWarningAsError (tcConfig.globalWarnLevel, tcConfig.specificWarnOff, tcConfig.specificWarnOn, tcConfig.specificWarnAsError, tcConfig.specificWarnAsWarn, tcConfig.globalWarnAsError) exn)                
+          if (not warn || ReportWarning (tcConfig.globalWarnLevel, tcConfig.specificWarnOff, tcConfig.specificWarnOn) exn) then 
+            let oneError trim exn = 
+                [ // We use the first line of the file as a fallbackRange for reporting unexpected errors.
+                  // Not ideal, but it's hard to see what else to do.
+                  let fallbackRange = rangeN mainInputFileName 1
+                  let ei = FSharpErrorInfo.CreateFromExceptionAndAdjustEof(exn,warn,trim,fallbackRange,fileInfo)
+                  if allErrors || (ei.FileName=mainInputFileName) || (ei.FileName=Microsoft.FSharp.Compiler.TcGlobals.DummyFileNameForRangesWithoutASpecificLocation) then
+                      yield ei ]
+                      
+            let mainError,relatedErrors = SplitRelatedErrors exn 
+            yield! oneError false mainError
+            for e in relatedErrors do 
+                yield! oneError true e ]
+
+    let CreateErrorInfos (tcConfig:TcConfig, allErrors, mainInputFileName, errors) = 
+        let fileInfo = (Int32.MaxValue, Int32.MaxValue)
+        [| for (exn,warn) in errors do 
+              yield! ReportError (tcConfig, allErrors, mainInputFileName, fileInfo, (exn, warn)) |]
+                            
+
+    /// Error handler for parsing & type checking while processing a single file
     type ErrorHandler(reportErrors, mainInputFileName, tcConfig: TcConfig, source: string) =
         let mutable tcConfig = tcConfig
         let errorsAndWarningsCollector = new ResizeArray<_>()
         let mutable errorCount = 0
          
         // We'll need number of lines for adjusting error messages at EOF
-        let fileInfo = 
-            (source |> Seq.sumBy (fun c -> if c = '\n' then 1 else 0), // number of lines in the source file
-                source.Length - source.LastIndexOf("\n",StringComparison.Ordinal) - 1)             // length of the last line
+        let fileInfo = GetFileInfoForLastLineErrors source
          
         // This function gets called whenever an error happens during parsing or checking
-        let errorSink warn (exn:PhasedError) = 
+        let errorSink sev (exn:PhasedError) = 
             // Sanity check here. The phase of an error should be in a phase known to the language service.
             let exn =
                 if not(exn.IsPhaseInCompile()) then
@@ -1261,22 +1541,11 @@ module internal Parser =
                 else exn
             if reportErrors then 
                 let report exn = 
-                    let warn = warn && not (ReportWarningAsError tcConfig.globalWarnLevel tcConfig.specificWarnOff tcConfig.specificWarnOn tcConfig.specificWarnAsError tcConfig.specificWarnAsWarn tcConfig.globalWarnAsError exn)                
-                    if (not warn || ReportWarning tcConfig.globalWarnLevel tcConfig.specificWarnOff tcConfig.specificWarnOn exn) then 
-                        let oneError trim exn = 
-                            // We use the first line of the file as a fallbackRange for reporting unexpected errors.
-                            // Not ideal, but it's hard to see what else to do.
-                            let fallbackRange = rangeN mainInputFileName 1
-                            let ei = ErrorInfo.CreateFromExceptionAndAdjustEof(exn,warn,trim,fallbackRange,fileInfo)
-                            if (ei.FileName=mainInputFileName) || (ei.FileName=Microsoft.FSharp.Compiler.Env.DummyFileNameForRangesWithoutASpecificLocation) then
-                                Trace.PrintLine("UntypedParseAux", fun _ -> sprintf "Reporting one error: %s\n" (ei.ToString()))
-                                errorsAndWarningsCollector.Add ei
-                                if not warn then 
-                                    errorCount <- errorCount + 1
+                    for ei in ReportError (tcConfig, false, mainInputFileName, fileInfo, (exn, sev)) do
+                        errorsAndWarningsCollector.Add ei
+                        if sev = FSharpErrorSeverity.Error then 
+                            errorCount <- errorCount + 1
                       
-                        let mainError,relatedErrors = Build.SplitRelatedErrors exn 
-                        oneError false mainError
-                        List.iter (oneError true) relatedErrors
                 match exn with
 #if EXTENSIONTYPING
                 | {Exception = (:? TypeProviderError as tpe)} ->
@@ -1289,8 +1558,8 @@ module internal Parser =
       
         let errorLogger = 
             { new ErrorLogger("ErrorHandler") with 
-                member x.WarnSinkImpl exn = errorSink true exn
-                member x.ErrorSinkImpl exn = errorSink false exn
+                member x.WarnSinkImpl exn = errorSink FSharpErrorSeverity.Warning exn
+                member x.ErrorSinkImpl exn = errorSink FSharpErrorSeverity.Error exn
                 member x.ErrorCount = errorCount }
       
       
@@ -1301,34 +1570,19 @@ module internal Parser =
         member x.TcConfig with set tc = tcConfig <- tc
         member x.AnyErrors = errorCount > 0
 
-    /// Report an unexpect (bug) exception.
-    let ReportUnexpectedException exn = 
-        match exn with
-        | WrappedError(wrappedExn,_) ->
-            System.Diagnostics.Debug.Assert(false, sprintf "Bug seen in service-level request. Underlying wrapped exception was %s\n"  (wrappedExn.ToString()))
-            Trace.PrintLine("CompilerServices", fun _ -> sprintf "Underlying wrapped exception was %s\n" (wrappedExn.ToString()))
-        | _ -> ()
-        System.Diagnostics.Debug.Assert(false, sprintf "Bug seen in service-level request: %s\n"  (exn.ToString()))
-        Trace.PrintLine("CompilerServices", fun _ -> sprintf "Unexpected error %s\n" (exn.ToString()))
-                
-
-    /// ParseSource builds all the information necessary to report errors, match braces and build scopes 
-    let ParseSource (source: string, matchBracesOnly: bool, reportErrors: bool, mainInputFileName: string, projectSourceFiles: string list, tcConfig: TcConfig) =
 
-      try 
-          Trace.PrintLine("CompilerServices", fun _ -> sprintf "Service.parseSource %s, matchBraces = %b, reportErrors = %b" mainInputFileName matchBracesOnly reportErrors)
+    /// ParseOneFile builds all the information necessary to report errors, match braces and build scopes 
+    ///
+    /// projectSourceFiles is only used to compute isLastCompiland, and is ignored if Build.IsScript(mainInputFileName)  is true.
+    let ParseOneFile (source: string, matchBracesOnly: bool, reportErrors: bool, mainInputFileName: string, projectSourceFiles: string list, tcConfig: TcConfig) =
 
           // Initialize the error handler 
           let errHandler = new ErrorHandler(reportErrors, mainInputFileName, tcConfig, source)
 
-          // Very old comment: This helps reason=MethodTip to work. reason=MethodTip 
-          // calls with only partial text.  Preumably adding this causes the final EndParameters 
-          // call to refer to a different line than the StartParameters call we're really interested in 
-          // Or something like that.  
           let source = source + "\n\n\n"
           let lexbuf = UnicodeLexing.StringAsLexbuf source
 
-          // Colelctor for parens matching
+          // Collector for parens matching
           let matchPairRef = new ResizeArray<_>()
 
           use unwindEL = PushErrorLoggerPhaseUntilUnwind(fun _oldLogger -> errHandler.ErrorLogger)
@@ -1357,7 +1611,7 @@ module internal Parser =
               Lexhelp.usingLexbufForParsing (lexbuf, mainInputFileName) (fun lexbuf -> 
                   try 
                     let skip = true
-                    let tokenizer = Lexfilter.LexFilter (lightSyntaxStatus, tcConfig.compilingFslib, Lexer.token lexargs skip, lexbuf)
+                    let tokenizer = LexFilter.LexFilter (lightSyntaxStatus, tcConfig.compilingFslib, Lexer.token lexargs skip, lexbuf)
                     let lexfun = tokenizer.Lexer
                     if matchBracesOnly then 
                         // Quick bracket matching parse  
@@ -1379,7 +1633,7 @@ module internal Parser =
                             match lexfun lexbuf,stack with 
                             | tok2,((tok1,m1) :: stack') when parenTokensBalance tok1 tok2-> 
                                 if matchBracesOnly then 
-                                    matchPairRef.Add (Range.toVS m1, Range.toVS lexbuf.LexemeRange)
+                                    matchPairRef.Add (m1, lexbuf.LexemeRange)
                                 matchBraces stack'
                             | ((LPAREN | LBRACE | LBRACK | LBRACK_BAR | LQUOTE _ | LBRACK_LESS) as tok),_ -> matchBraces ((tok,lexbuf.LexemeRange) :: stack)
                             | (EOF _ | LEX_FAILURE _),_ -> ()
@@ -1391,77 +1645,28 @@ module internal Parser =
                         let isLastCompiland = 
                             tcConfig.target.IsExe && 
                             projectSourceFiles.Length >= 1 && 
-                            System.String.Compare(List.last projectSourceFiles,mainInputFileName,StringComparison.CurrentCultureIgnoreCase)=0
-                        let isLastCompiland = isLastCompiland || Build.IsScript(mainInputFileName)  
+                            System.String.Compare(projectSourceFiles.[projectSourceFiles.Length-1],mainInputFileName,StringComparison.CurrentCultureIgnoreCase)=0
+                        let isLastCompiland = isLastCompiland || CompileOps.IsScript(mainInputFileName)  
 
                         let parseResult = ParseInput(lexfun,errHandler.ErrorLogger,lexbuf,None,mainInputFileName,isLastCompiland)
                         Some parseResult
                   with e -> 
-                    Trace.PrintLine("CompilerServices", fun _ -> sprintf "Could not recover from errors while parsing: %s\n" (e.ToString()))
                     errHandler.ErrorLogger.ErrorR(e)
                     None)
                 
-          Trace.PrintLine("CompilerServices", fun _ -> sprintf "#errors = %d\n" errHandler.CollectedErrorsAndWarnings.Length)
 
           errHandler.CollectedErrorsAndWarnings,
           matchPairRef.ToArray(),
           parseResult,
           errHandler.AnyErrors
-      with exn -> 
-          ReportUnexpectedException exn
-          reraise()
-
-    /// An accumulator for the results being emitted into the tcSink.
-    type TcResultsSinkImpl() =
-        let capturedEnvs = new ResizeArray<_>(100)
-        let capturedExprTypings = new ResizeArray<_>(100)
-        let capturedNameResolutions = new ResizeArray<_>(100)
-        let capturedNameResolutionIdentifiers = 
-            new HashSet( { new IEqualityComparer<_> with 
-                                            member __.GetHashCode((p:pos,i)) = p.Line + 101 * p.Column + hash i
-                                            member __.Equals((p1,i1),(p2,i2)) = posEq p1 p2 && i1 =  i2 } )
-        let capturedMethodGroupResolutions = new ResizeArray<_>(100)
-        let allowedRange (m:range) = not m.IsSynthetic
-        interface Nameres.ITypecheckResultsSink with
-            member sink.NotifyEnvWithScope(m,nenv,ad) = 
-                if allowedRange m then 
-                    capturedEnvs.Add((m,nenv,ad)) 
-            member sink.NotifyExprHasType(endPos,ty,denv,nenv,ad,m) = 
-                if allowedRange m then 
-                    capturedExprTypings.Add((endPos,ty,denv,nenv,ad,m))
-            member sink.NotifyNameResolution(endPos,item,itemMethodGroup,occurenceType,denv,nenv,ad,m) = 
-                // Desugaring some F# constructs (notably computation expressions with custom operators)
-                // results in duplication of textual variables. So we ensure we never record two name resolutions 
-                // for the same identifier at the same location.
-                if allowedRange m then 
-                    let keyOpt = match item with
-                                 | Item.Value vref -> Some (endPos, vref.DisplayName)
-                                 | Item.ArgName (id, _, _) -> Some (endPos, id.idText)
-                                 | _ -> None
-
-                    let alreadyDone = 
-                        match keyOpt with
-                        | Some key ->
-                            let res = capturedNameResolutionIdentifiers.Contains key
-                            if not res then capturedNameResolutionIdentifiers.Add key |> ignore
-                            res
-                        | _ -> false
-                
-                    if not alreadyDone then 
-                        capturedNameResolutions.Add((endPos,item,occurenceType,denv,nenv,ad,m)) 
-                        capturedMethodGroupResolutions.Add((endPos,itemMethodGroup,occurenceType,denv,nenv,ad,m)) 
-        member x.CapturedEnvs = capturedEnvs
-        member x.CapturedExprTypings = capturedExprTypings
-        member x.CapturedNameResolutions = capturedNameResolutions
-        member x.CapturedMethodGroupResolutions = capturedMethodGroupResolutions
 
 
     /// Indicates if the type check got aborted because it is no longer relevant.
-    type TypeCheckAborted = Yes | No 
+    type TypeCheckAborted = Yes | No of TypeCheckInfo
 
     // Type check a single file against an initial context, gleaning both errors and intellisense information.
-    let TypeCheckSource
-          (parseResult: ParsedInput option,
+    let TypeCheckOneFile
+          (parseResults: FSharpParseFileResults,
            source: string,
            mainInputFileName: string,
            projectFileName: string,
@@ -1471,19 +1676,17 @@ module internal Parser =
            tcState: TcState,
            loadClosure: LoadClosure option,
            // These are the errors and warnings seen by the background compiler for the entire antecedant 
-           backgroundErrors: (PhasedError * bool) list,    
-           syncop: (unit->unit)->unit,
+           backgroundErrors: (PhasedError * FSharpErrorSeverity) list,    
+           reactorOps: IReactorOperations,
+           // Used by 'FSharpDeclarationListInfo' to check the IncrementalBuilder is still alive.
            checkAlive : (unit -> bool),
            isResultObsolete: unit->bool,
-           parseHadErrors : bool,
-           textSnapshotInfo : obj) = 
-      try
-        let projectDir = Filename.directoryName (if projectFileName = "" then mainInputFileName else projectFileName)
-        Trace.PrintLine("CompilerServices", fun _ -> sprintf "Parser.TypeCheckSource %s, projectDir = %s" mainInputFileName projectDir)
-        match parseResult with 
+           textSnapshotInfo : obj option) = 
+
+        match parseResults.ParseTree with 
         // When processing the following cases, we don't need to type-check
         | None -> 
-            [| |], None, TypeCheckAborted.Yes
+            [| |], TypeCheckAborted.Yes
                
         // Run the type checker...
         | Some parsedMainInput ->
@@ -1501,8 +1704,8 @@ module internal Parser =
             errHandler.TcConfig <- tcConfig
 
             // Play background errors and warnings for this file.
-            backgroundErrors
-            |> List.iter(fun (err,iserr) ->if iserr then errorSink err else warnSink err)
+            for (err,sev) in backgroundErrors do
+                if sev = FSharpErrorSeverity.Error then errorSink err else warnSink err
 
 
             // If additional references were brought in by the preprocessor then we need to process them
@@ -1516,7 +1719,7 @@ module internal Parser =
                 loadClosure.RootWarnings |> List.iter warnSink
                 
 
-                let fileOfBackgroundError err = (match RangeOfError (fst err) with Some m-> m.FileName | None -> null)
+                let fileOfBackgroundError err = (match GetRangeOfError (fst err) with Some m-> m.FileName | None -> null)
                 let sameFile file hashLoadInFile = 
                     (0 = String.Compare(fst hashLoadInFile, file, StringComparison.OrdinalIgnoreCase))
 
@@ -1543,117 +1746,101 @@ module internal Parser =
                         if sameFile (fst errorGroupedByFileName) hashLoadInFile then
                             for rangeOfHashLoad in snd hashLoadInFile do // Handle the case of two #loads of the same file
                                 let errorsAndWarnings = snd errorGroupedByFileName |> List.map(fun (pe,f)->pe.Exception,f) // Strip the build phase here. It will be replaced, in total, with TypeCheck
-                                let errors,warnings = errorsAndWarnings |> List.partition snd 
-                                let errors,warnings = errors |> List.map fst, warnings |> List.map fst
+                                let errors = [ for (err,sev) in errorsAndWarnings do if sev = FSharpErrorSeverity.Error then yield err ]
+                                let warnings = [ for (err,sev) in errorsAndWarnings do if sev = FSharpErrorSeverity.Warning then yield err ]
                                 
                                 let message = HashLoadedSourceHasIssues(warnings,errors,rangeOfHashLoad)
                                 if errors=[] then warning(message)
                                 else errorR(message)
 
                 // Replay other background errors.
-                for (phasedError,isWarning) in otherBackgroundErrors do
-                    if isWarning then warning phasedError.Exception else errorR phasedError.Exception
+                for (phasedError,sev) in otherBackgroundErrors do
+                    if sev = FSharpErrorSeverity.Warning then warning phasedError.Exception else errorR phasedError.Exception
 
             | None -> 
                 // For non-scripts, check for disallow #r and #load.
                 ApplyMetaCommandsFromInputToTcConfig tcConfig (parsedMainInput,Path.GetDirectoryName mainInputFileName) |> ignore
                 
-            if verbose then 
-                tcConfig.includes |> List.iter (fun p -> Trace.PrintLine("CompilerServicesVerbose", fun _ -> sprintf "include directory '%s'\n" p)) 
-                tcConfig.implicitOpens |> List.iter (fun p -> Trace.PrintLine("CompilerServicesVerbose", fun _ -> sprintf "implicit open '%s'\n" p)) 
-                tcConfig.referencedDLLs |> List.iter (fun r -> Trace.PrintLine("CompilerServicesVerbose", fun _ -> sprintf "dll from flags '%s'\n" r.Text)) 
-            
             // A problem arises with nice name generation, which really should only 
             // be done in the backend, but is also done in the typechecker for better or worse. 
             // If we don't do this the NNG accumulates data and we get a memory leak. 
             tcState.NiceNameGenerator.Reset()
             
             // Typecheck the real input.  
-            let sink = TcResultsSinkImpl()
+            let sink = TcResultsSinkImpl(tcGlobals, source = source)
 
-            let amap = tcImports.GetImportMap()
             let tcEnvAtEndOpt =
                 try
-                    let checkForErrors() = (parseHadErrors || errHandler.ErrorCount > 0)
+                    let checkForErrors() = (parseResults.ParseHadErrors || errHandler.ErrorCount > 0)
                     // Typecheck is potentially a long running operation. We chop it up here with an Eventually continuation and, at each slice, give a chance
                     // for the client to claim the result as obsolete and have the typecheck abort.
-                    let computation = TypecheckSingleInputAndFinishEventually(checkForErrors,tcConfig, tcImports, tcGlobals, None, TcResultsSink.WithSink sink, tcState, parsedMainInput)
+                    let computation = TypeCheckSingleInputAndFinishEventually(checkForErrors,tcConfig, tcImports, tcGlobals, None, TcResultsSink.WithSink sink, tcState, parsedMainInput)
                     match computation |> Eventually.forceWhile (fun () -> not (isResultObsolete())) with
-                    | Some((tcEnvAtEnd,_,_),_) -> Some tcEnvAtEnd
+                    | Some((tcEnvAtEnd,_,typedImplFiles),tcState) -> Some (tcEnvAtEnd, typedImplFiles, tcState)
                     | None -> None // Means 'aborted'
                 with
                 | e ->
                     errorR e
-                    Some(tcState.TcEnvFromSignatures)
+                    Some(tcState.TcEnvFromSignatures, [], tcState)
             
             let errors = errHandler.CollectedErrorsAndWarnings
             
             match tcEnvAtEndOpt with
-            | Some tcEnvAtEnd ->
+            | Some (tcEnvAtEnd, _typedImplFiles, tcState) ->
                 let scope = 
-                    TypeCheckInfo(tcConfig, tcGlobals, amap, projectDir, mainInputFileName, 
-                                sink.CapturedEnvs, tcEnvAtEnd.NameEnv,
-                                sink.CapturedExprTypings,
-                                sink.CapturedNameResolutions,
-                                sink.CapturedMethodGroupResolutions,
+                    TypeCheckInfo(tcConfig, tcGlobals, 
+                                tcState.PartialAssemblySignature, 
+                                tcState.Ccu,
+                                tcImports,
+                                tcEnvAtEnd.AccessRights,
+                                //typedImplFiles,
+                                projectFileName, 
+                                mainInputFileName, 
+                                sink.GetResolutions(), 
+                                sink.GetSymbolUses(), 
+                                tcEnvAtEnd.NameEnv,
                                 loadClosure,
-                                syncop,
+                                reactorOps,
                                 checkAlive,
                                 textSnapshotInfo)     
-                errors, Some scope, TypeCheckAborted.No
+                errors, TypeCheckAborted.No scope
             | None -> 
-                errors, None, TypeCheckAborted.Yes
-      with 
-      | e -> 
-        ReportUnexpectedException(e)
-        reraise()
-
-type internal UnresolvedReferencesSet = 
-    val private set : System.Collections.Generic.HashSet
-    new(unresolved) = {set = System.Collections.Generic.HashSet(unresolved, HashIdentity.Structural)}
-
-    override this.Equals(o) = 
-        match o with
-        | :? UnresolvedReferencesSet as urs -> this.set.SetEquals(urs.set)
-        | _ -> false
+                errors, TypeCheckAborted.Yes
 
-    override this.GetHashCode() = 
-        // this code is copy from prim-types.fs: family of GenericHash...Array functions
-        // it seems that it is never called, but we implement GetHashCode just to make the compiler happy
-        let inline HashCombine nr x y = (x <<< 1) + y + 631 * nr
-        ((0,0), this.set) 
-        ||> Seq.fold (fun (acc, n) v -> (HashCombine n acc (hash v)), (n + 1))
-        |> fst
+type  UnresolvedReferencesSet = UnresolvedReferencesSet of UnresolvedAssemblyReference list
 
 // NOTE: may be better just to move to optional arguments here
-type CheckOptions =
+type FSharpProjectOptions =
     { 
       ProjectFileName: string
       ProjectFileNames: string[]
-      ProjectOptions: string[]
+      OtherOptions: string[]
+      ReferencedProjects: (string * FSharpProjectOptions)[]
       IsIncompleteTypeCheckEnvironment : bool
       UseScriptResolutionRules : bool      
       LoadTime : System.DateTime
       UnresolvedReferences : UnresolvedReferencesSet option
     }
+    member x.ProjectOptions = x.OtherOptions
     /// Whether the two parse options refer to the same project.
-    static member AreSameProjectName(options1,options2) =
+    static member AreSubsumable(options1,options2) =
         options1.ProjectFileName = options2.ProjectFileName          
+
     /// Compare two options sets with respect to the parts of the options that are important to parsing.
-    static member AreSameProjectForParsing(options1,options2) =
-        CheckOptions.AreSameProjectName(options1,options2) &&
-        options1.ProjectOptions = options2.ProjectOptions &&
-        (
-            match options1.UnresolvedReferences, options2.UnresolvedReferences with
-            | None, None -> true
-            | (Some r1), (Some r2) -> r1.Equals(r2)
-            | _ -> false
-        )
+    static member AreSameForParsing(options1,options2) =
+        options1.ProjectFileName = options2.ProjectFileName &&
+        options1.OtherOptions = options2.OtherOptions &&
+        options1.UnresolvedReferences = options2.UnresolvedReferences
+
     /// Compare two options sets with respect to the parts of the options that are important to building.
-    static member AreSameProjectForBuilding(options1,options2) =
-        CheckOptions.AreSameProjectForParsing(options1,options2) &&
+    static member AreSameForChecking(options1,options2) =
+        options1.ProjectFileName = options2.ProjectFileName &&
         options1.ProjectFileNames = options2.ProjectFileNames &&
+        options1.OtherOptions = options2.OtherOptions &&
+        options1.ReferencedProjects.Length = options2.ReferencedProjects.Length &&
+        Array.forall2 (fun (n1,a) (n2,b) -> n1 = n2 && FSharpProjectOptions.AreSameForChecking(a,b)) options1.ReferencedProjects options2.ReferencedProjects &&
         options1.LoadTime = options2.LoadTime
+
     /// Compute the project directory.
     member po.ProjectDirectory = System.IO.Path.GetDirectoryName(po.ProjectFileName)
     override this.ToString() =
@@ -1663,27 +1850,100 @@ type CheckOptions =
             sb.ToString()
         let options =
             let sb = new StringBuilder()
-            this.ProjectOptions |> Array.iter (fun op -> sb.AppendFormat("{0} ", op) |> ignore)
+            this.OtherOptions |> Array.iter (fun op -> sb.AppendFormat("{0} ", op) |> ignore)
             sb.ToString()
-        sprintf "CheckOptions(%s)\n  Files:\n%s  Options: %s" this.ProjectFileName files options
+        sprintf "OtherOptions(%s)\n  Files:\n%s  Options: %s" this.ProjectFileName files options
  
+
+[] 
+type FSharpProjectContext(thisCcu: CcuThunk, assemblies: FSharpAssembly list, ad: AccessorDomain) =
+
+    /// Get the assemblies referenced
+    member __.GetReferencedAssemblies() = assemblies
+
+    member __.AccessibilityRights = FSharpAccessibilityRights(thisCcu, ad)
+
+
+[]
+// 'details' is an option because the creation of the tcGlobals etc. for the project may have failed.
+type FSharpCheckProjectResults(_keepAssemblyContents, errors: FSharpErrorInfo[], details:(TcGlobals*TcImports*CcuThunk*ModuleOrNamespaceType*TcSymbolUses list*TopAttribs option*CompileOps.IRawFSharpAssemblyData option * ILAssemblyRef * AccessorDomain * TypedAssembly option) option, reactorOps: IReactorOperations) =
+
+    let getDetails() = 
+        match details with 
+        | None -> invalidOp ("The project has no results due to critical errors in the project options. Check the HasCriticalErrors before accessing the detaild results. Errors: " + String.concat "\n" [ for e in errors -> e.Message ])
+        | Some d -> d
+
+    member info.Errors = errors
+
+    member info.HasCriticalErrors = details.IsNone
+
+    member info.AssemblySignature =  
+        let (tcGlobals, tcImports, thisCcu, ccuSig, _tcSymbolUses, topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr) = getDetails()
+        FSharpAssemblySignature(tcGlobals, thisCcu, tcImports, topAttribs, ccuSig)
+
+    // member info.AssemblyContents =  
+    //     if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to tru on the FSharpChecker in order to access the checked contents of assemblies"
+    //     let (tcGlobals, tcImports, thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr) = getDetails()
+    //     let mimpls = 
+    //         match tcAssemblyExpr with 
+    //         | None -> []
+    //         | Some (TAssembly mimpls) -> mimpls
+    //     FSharpAssemblyContents(tcGlobals, thisCcu, tcImports, mimpls)
+
+    // Not, this does not have to be a SyncOp, it can be called from any thread
+    member info.GetUsesOfSymbol(symbol:FSharpSymbol) = 
+        let (tcGlobals, _tcImports, _thisCcu, _ccuSig, tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr) = getDetails()
+        // This probably doesn't need to be run on the reactor since all data touched by GetUsesOfSymbol is immutable.
+        reactorOps.EnqueueAndAwaitOpAsync("GetUsesOfSymbol", fun _ct -> 
+            [| for r in tcSymbolUses do yield! r.GetUsesOfSymbol(symbol.Item) |] 
+            |> Seq.distinctBy (fun (itemOcc,_denv,m) -> itemOcc, m) 
+            |> Seq.filter (fun (itemOcc,_,_) -> itemOcc <> ItemOccurence.RelatedText) 
+            |> Seq.map (fun (itemOcc,denv,m) -> FSharpSymbolUse(tcGlobals, denv, symbol, itemOcc, m)) 
+            |> Seq.toArray)
+
+    // Not, this does not have to be a SyncOp, it can be called from any thread
+    member info.GetAllUsesOfAllSymbols() = 
+        let (tcGlobals, tcImports, thisCcu, _ccuSig, tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr) = getDetails()
+        // This probably doesn't need to be run on the reactor since all data touched by GetAllUsesOfSymbols is immutable.
+        reactorOps.EnqueueAndAwaitOpAsync("GetAllUsesOfAllSymbols", fun _ct -> 
+            [| for r in tcSymbolUses do 
+                  for (item,itemOcc,denv,m) in r.GetAllUsesOfSymbols() do
+                   if itemOcc <> ItemOccurence.RelatedText then
+                    let symbol = FSharpSymbol.Create(tcGlobals, thisCcu, tcImports, item)
+                    yield FSharpSymbolUse(tcGlobals, denv, symbol, itemOcc, m) |]) 
+
+    member info.ProjectContext = 
+        let (tcGlobals, tcImports, thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, ad, _tcAssemblyExpr) = getDetails()
+        let assemblies = 
+            [ for x in tcImports.GetImportedAssemblies() do
+                yield FSharpAssembly(tcGlobals, tcImports, x.FSharpViewOfMetadata) ]
+        FSharpProjectContext(thisCcu, assemblies, ad) 
+
+    member info.RawFSharpAssemblyData = 
+        let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr) = getDetails()
+        tcAssemblyData
+
+    member info.AssemblyFullName = 
+        let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, ilAssemRef, _ad, _tcAssemblyExpr) = getDetails()
+        ilAssemRef.QualifiedName
+
 []
 /// A live object of this type keeps the background corresponding background builder (and type providers) alive (through reference-counting).
 //
 // There is an important property of all the objects returned by the methods of this type: they do not require 
 // the corresponding background builder to be alive. That is, they are simply plain-old-data through pre-formatting of all result text.
-type TypeCheckResults(errors: ErrorInfo[], details: (TypeCheckInfo * IncrementalFSharpBuild.IncrementalBuilder * Reactor.Reactor) option ) =
+type FSharpCheckFileResults(errors: FSharpErrorInfo[], scopeOptX: TypeCheckInfo option, builderX: IncrementalBuilder option, reactorOpsX:IReactorOperations) =
 
     // This may be None initially, or may be set to None when the object is disposed or finalized
-    let mutable details = details
+    let mutable details = match scopeOptX with None -> None | Some scopeX -> Some (scopeX, builderX, reactorOpsX)
 
     let decrementer = 
         match details with 
-        | None -> { new System.IDisposable with member x.Dispose() = () } 
-        | Some (_,builder,_) -> 
+        | Some (_,Some builder,_) -> 
             // Increment the usage count on the IncrementalBuilder. We want to keep the IncrementalBuilder and all associated
             // resources and type providers alive for the duration of the lifetime of this object.
             builder.IncrementUsageCount()
+        | _ -> { new System.IDisposable with member x.Dispose() = () } 
 
     let mutable disposed = false
 
@@ -1691,21 +1951,38 @@ type TypeCheckResults(errors: ErrorInfo[], details: (TypeCheckInfo * Incremental
        if not disposed then 
            disposed <- true 
            match details with 
-           | None -> () 
            | Some (_,_,reactor) -> 
                // Make sure we run disposal in the reactor thread, since it may trigger type provider disposals etc.
                details <- None
-               reactor.AsyncOp (fun () -> decrementer.Dispose())
+               reactor.EnqueueOp ("Dispose", fun () -> decrementer.Dispose())
+           | _ -> () 
 
-    let checkBuilder dflt f = 
+    // Run an operation that needs to be run in the reactor thread
+    let reactorOp desc dflt f = 
+      async {
+        match details with
+        | None -> 
+            return dflt
+        | Some (_ , Some builder, _) when not builder.IsAlive -> 
+            System.Diagnostics.Debug.Assert(false,"unexpected dead builder") 
+            return dflt
+        | Some (scope, builderOpt, reactor) -> 
+            // Ensure the builder doesn't get released while running operations asynchronously. 
+            use _unwind = match builderOpt with Some builder -> builder.IncrementUsageCount() | None -> { new System.IDisposable with member __.Dispose() = () }
+            let! res = reactor.EnqueueAndAwaitOpAsync(desc, fun _ct ->  f scope)
+            return res
+      }
+
+    // Run an operation that can be called from any thread
+    let threadSafeOp dflt f = 
         match details with
         | None -> 
-            dflt
-        | Some (_ , builder, _) when not builder.IsAlive -> 
+            dflt()
+        | Some (_ , Some builder, _) when not builder.IsAlive -> 
             System.Diagnostics.Debug.Assert(false,"unexpected dead builder") 
-            dflt
-        | Some (scope, builder, reactor) -> 
-            f(scope, builder, reactor)
+            dflt()
+        | Some (scope, builderOpt, ops) -> 
+            f(scope, builderOpt, ops)
 
     // At the moment we only dispose on finalize - we never explicitly dispose these objects. Explicitly disposing is not
     // really worth much since the underlying project builds are likely to still be in the incrementalBuilder cache.
@@ -1716,520 +1993,908 @@ type TypeCheckResults(errors: ErrorInfo[], details: (TypeCheckInfo * Incremental
     member info.HasFullTypeCheckInfo = details.IsSome
     
     /// Intellisense autocompletions
-    member info.GetDeclarations(untypedParseInfoOpt:UntypedParseInfo option, (line,colAtEndOfNames), lineStr, names:NamesWithResidue, hasTextChangedSinceLastTypecheck: (obj * Range -> bool)) = 
-        checkBuilder (async.Return DeclarationSet.Empty) (fun (scope, builder, reactor) -> 
-            async { // Ensure the builder doesn't get released while running GetDeclarations asynchronously. In synchronous operations,
-                    // the builder is kept alive at least because the TypeCheckResults object itself is alive (note it is almsot certain to 
-                    // be alive for other reasons too anyway, e.g. in the incrementalBuildersCache).
-                    use _unwind = builder.IncrementUsageCount()
-                    return! reactor.RunAsyncOp(fun () -> scope.GetDeclarations(untypedParseInfoOpt, line, lineStr, colAtEndOfNames, names, hasTextChangedSinceLastTypecheck))  
-                  })
+    member info.GetDeclarationListInfo(parseResultsOpt, line, colAtEndOfNamesAndResidue, lineStr, qualifyingNames, partialName, ?hasTextChangedSinceLastTypecheck) = 
+        let hasTextChangedSinceLastTypecheck = defaultArg hasTextChangedSinceLastTypecheck (fun _ -> false)
+        reactorOp "GetDeclarations" FSharpDeclarationListInfo.Empty (fun scope -> scope.GetDeclarations(parseResultsOpt, line, lineStr, colAtEndOfNamesAndResidue, qualifyingNames, partialName, hasTextChangedSinceLastTypecheck))
+
+    member info.GetDeclarationListSymbols(parseResultsOpt, line, colAtEndOfNamesAndResidue, lineStr, qualifyingNames, partialName, ?hasTextChangedSinceLastTypecheck) = 
+        let hasTextChangedSinceLastTypecheck = defaultArg hasTextChangedSinceLastTypecheck (fun _ -> false)
+        reactorOp "GetDeclarationListSymbols" List.empty (fun scope -> scope.GetDeclarationListSymbols(parseResultsOpt, line, lineStr, colAtEndOfNamesAndResidue, qualifyingNames, partialName, hasTextChangedSinceLastTypecheck))
 
     /// Resolve the names at the given location to give a data tip 
-    member info.GetDataTipText((x1,x2),lineStr,names:Names,tokenTag:int) : DataTipText = 
-        use t = Trace.Call("SyncOp","GetDataTipText", fun _->sprintf " at=(%d:%d),names=%+A tag=%d tokenId=%+A" x1 x2 names tokenTag (tokenTagToTokenId tokenTag))
-        let dflt = DataTipText []
-        checkBuilder dflt (fun (scope, _builder, reactor) -> 
-            match tokenTagToTokenId tokenTag with 
-            | TOKEN_IDENT -> 
-                reactor.RunSyncOp (fun () -> scope.GetDataTipText x1 lineStr x2 names)
-            | TOKEN_STRING | TOKEN_STRING_TEXT -> 
-                reactor.RunSyncOp (fun () -> scope.GetReferenceResolutionDataTipText(x1,x2))        
-            | _ -> DataTipText [])
-
-    member info.GetF1Keyword ((line,colAtEndOfNames),lineStr,names) : string option =
-        use t = Trace.Call("SyncOp","GetF1Keyword", fun _->sprintf " at=(%d:%d),names=%+A" line colAtEndOfNames names)
-        checkBuilder None (fun (scope, _builder, reactor) -> 
-            reactor.RunSyncOp (fun () -> scope.GetF1Keyword (line, lineStr, colAtEndOfNames, names)))
+    member info.GetToolTipTextAlternate(line, colAtEndOfNames, lineStr, names, tokenTag) = 
+        let dflt = FSharpToolTipText []
+        match tokenTagToTokenId tokenTag with 
+        | TOKEN_IDENT -> 
+            reactorOp "GetToolTipText" dflt (fun scope -> scope.GetToolTipText line lineStr colAtEndOfNames names)
+        | TOKEN_STRING | TOKEN_STRING_TEXT -> 
+            reactorOp "GetReferenceResolutionToolTipText" dflt (fun scope -> scope.GetReferenceResolutionToolTipText(line, colAtEndOfNames) )
+        | _ -> 
+            async.Return dflt
+
+    member info.GetF1KeywordAlternate (line, colAtEndOfNames, lineStr, names) =
+        reactorOp "GetF1Keyword" None (fun scope -> 
+            scope.GetF1Keyword (line, lineStr, colAtEndOfNames, names))
 
     // Resolve the names at the given location to a set of methods
-    member info.GetMethods((x1,x2):Position,lineStr:string,names:Names option) =
-        use t = Trace.Call("SyncOp","GetMethods", fun _->sprintf " at=(%d:%d),names=%+A" x1 x2 names)
-        let dflt = MethodOverloads("",[| |])
-        checkBuilder dflt (fun (scope, _builder, reactor) -> 
-            reactor.RunSyncOp (fun () -> scope.GetMethods (x1, lineStr, x2, names)))
+    member info.GetMethodsAlternate(line, colAtEndOfNames, lineStr, names) =
+        let dflt = FSharpMethodGroup("",[| |])
+        reactorOp "GetMethods" dflt (fun scope-> 
+            scope.GetMethods (line, lineStr, colAtEndOfNames, names))
             
-    member info.GetDeclarationLocation ((x1, x2) : Position, lineStr:string, names : Names, tokenTag : int, flag : bool) = 
-        use t = Trace.Call("SyncOp","GetDeclarationLocation", fun _->sprintf " at=(%d:%d),names=%+A,flag=%+A" x1 x2 names flag)
-        let dflt = FindDeclResult.DeclNotFound FindDeclFailureReason.Unknown
-        checkBuilder dflt (fun (scope, _builder, reactor) -> 
-            reactor.RunSyncOp (fun () -> scope.GetDeclarationLocation (x1, lineStr, x2, names, tokenTagToTokenId tokenTag, flag)))
-
-    member info.GetExtraColorizations() = 
-        use t = Trace.Call("SyncOp","GetExtraColorizations", fun _->sprintf "")
-        checkBuilder [| |] (fun (scope, _builder, _reactor) -> 
+    member info.GetDeclarationLocationAlternate (line, colAtEndOfNames, lineStr, names, ?preferFlag) = 
+        let dflt = FSharpFindDeclResult.DeclNotFound FSharpFindDeclFailureReason.Unknown
+        reactorOp "GetDeclarationLocation" dflt (fun scope -> 
+            scope.GetDeclarationLocation (line, lineStr, colAtEndOfNames, names, preferFlag))
+
+    member info.GetSymbolUseAtLocation (line, colAtEndOfNames, lineStr, names) = 
+        reactorOp "GetSymbolUseAtLocation" None (fun scope -> 
+            scope.GetSymbolUseAtLocation (line, lineStr, colAtEndOfNames, names)
+            |> Option.map (fun (sym,denv,m) -> FSharpSymbolUse(scope.TcGlobals,denv,sym,ItemOccurence.Use,m)))
+
+    member info.GetMethodsAsSymbols (line, colAtEndOfNames, lineStr, names) = 
+        reactorOp "GetMethodsAsSymbols" None (fun scope -> 
+            scope.GetMethodsAsSymbols (line, lineStr, colAtEndOfNames, names)
+            |> Option.map (fun (symbols,denv,m) ->
+                symbols |> List.map (fun sym -> FSharpSymbolUse(scope.TcGlobals,denv,sym,ItemOccurence.Use,m))))
+
+    member info.GetSymbolAtLocationAlternate (line, colAtEndOfNames, lineStr, names) = 
+        reactorOp "GetSymbolUseAtLocation" None (fun scope -> 
+            scope.GetSymbolUseAtLocation (line, lineStr, colAtEndOfNames, names)
+            |> Option.map (fun (sym,_,_) -> sym))
+
+
+    member info.GetFormatSpecifierLocations() = 
+        threadSafeOp 
+           (fun () -> [| |]) 
+           (fun (scope, _builder, _reactor) -> 
+            // This operation is not asynchronous - GetFormatSpecifierLocations can be run on the calling thread
+            scope.GetFormatSpecifierLocations())
+
+    member info.GetExtraColorizationsAlternate() = 
+        threadSafeOp 
+           (fun () -> [| |]) 
+           (fun (scope, _builder, _reactor) -> 
+            // This operation is not asynchronous - GetExtraColorizations can be run on the calling thread
             scope.GetExtraColorizations())
      
+    member info.PartialAssemblySignature = 
+        threadSafeOp 
+            (fun () -> failwith "not available") 
+            (fun (scope, _builder, _reactor) -> 
+            // This operation is not asynchronous - PartialAssemblySignature can be run on the calling thread
+            scope.PartialAssemblySignature())
+
+    member info.ProjectContext = 
+        threadSafeOp 
+            (fun () -> failwith "not available") 
+            (fun (scope, _builder, _reactor) -> 
+               // This operation is not asynchronous - GetReferencedAssemblies can be run on the calling thread
+                FSharpProjectContext(scope.ThisCcu, scope.GetReferencedAssemblies(), scope.AccessRights))
+
+    member info.GetAllUsesOfAllSymbolsInFile() = 
+        reactorOp "GetAllUsesOfAllSymbolsInFile" [| |] (fun scope -> 
+            [| for (item,itemOcc,denv,m) in scope.ScopeSymbolUses.GetAllUsesOfSymbols() do
+                 if itemOcc <> ItemOccurence.RelatedText then
+                  let symbol = FSharpSymbol.Create(scope.TcGlobals, scope.ThisCcu, scope.TcImports, item)
+                  yield FSharpSymbolUse(scope.TcGlobals, denv, symbol, itemOcc, m) |])
+
+    member info.GetUsesOfSymbolInFile(symbol:FSharpSymbol) = 
+        reactorOp "GetUsesOfSymbolInFile" [| |] (fun scope -> 
+            [| for (itemOcc,denv,m) in scope.ScopeSymbolUses.GetUsesOfSymbol(symbol.Item) |> Seq.distinctBy (fun (itemOcc,_denv,m) -> itemOcc, m) do
+                 if itemOcc <> ItemOccurence.RelatedText then
+                  yield FSharpSymbolUse(scope.TcGlobals, denv, symbol, itemOcc, m) |])
 
-/// Information about the compilation environment    
-module internal CompilerEnvironment =
-    /// These are the names of assemblies that should be referenced for .fs, .ml, .fsi, .mli files that
-    /// are not asscociated with a project
-    let DefaultReferencesForOrphanSources = DefaultBasicReferencesForOutOfProjectSources
     
-    /// Publish compiler-flags parsing logic. Must be fast because its used by the colorizer.
-    let GetCompilationDefinesForEditing(filename:string, compilerFlags : string list) =
-        let defines = ref(SourceFileImpl.AdditionalDefinesForUseInEditor(filename))
-        let MatchAndExtract(flag:string,prefix:string) =
-            if flag.StartsWith(prefix) then 
-                let sub = flag.Substring(prefix.Length)
-                let trimmed = sub.Trim()
-                defines := trimmed :: !defines
-        let rec QuickParseDefines = function
-            | hd :: tail ->
-               MatchAndExtract(hd,"-d:")
-               MatchAndExtract(hd,"--define:")
-               QuickParseDefines tail
-            | _ -> ()
-        QuickParseDefines compilerFlags
-        !defines
-            
-    /// Return true if this is a subcategory of error or warning message that the language service can emit
-    let IsCheckerSupportedSubcategory(subcategory:string) =
-        // Beware: This code logic is duplicated in DocumentTask.cs in the language service
-        PhasedError.IsSubcategoryOfCompile(subcategory)
+//----------------------------------------------------------------------------
+// BackgroundCompiler
+//
 
-/// Information about the debugging environment
-module internal DebuggerEnvironment =
-    /// Return the language ID, which is the expression evaluator id that the
-    /// debugger will use.
-    let GetLanguageID() =
-        System.Guid(0xAB4F38C9u, 0xB6E6us, 0x43baus, 0xBEuy, 0x3Buy, 0x58uy, 0x08uy, 0x0Buy, 0x2Cuy, 0xCCuy, 0xE3uy)
-        
-    
 []
-type internal TypeCheckAnswer =
-    | NoAntecedant
+type FSharpCheckFileAnswer =
     | Aborted
-    | TypeCheckSucceeded of TypeCheckResults   
-        
-/// This file has become eligible to be re-typechecked.
-type internal NotifyFileTypeCheckStateIsDirty = NotifyFileTypeCheckStateIsDirty of (string -> unit)
+    | Succeeded of FSharpCheckFileResults   
         
-// Identical to _VSFILECHANGEFLAGS in vsshell.idl
-type internal DependencyChangeCode =
-    | NoChange = 0x00000000
-    | FileChanged = 0x00000001
-    | TimeChanged = 0x00000002
-    | Size = 0x00000004
-    | Deleted = 0x00000008
-    | Added = 0x00000010        
 
 /// Callback that indicates whether a requested result has become obsolete.    
 []
-type internal IsResultObsolete = 
+type (*internal*) IsResultObsolete = 
     | IsResultObsolete of (unit->bool)
 
-        
-// There is only one instance of this type, held in InteractiveChecker
-type BackgroundCompiler(notifyFileTypeCheckStateIsDirty:NotifyFileTypeCheckStateIsDirty) as self =
-    // STATIC ROOT: LanguageServiceState.InteractiveChecker.backgroundCompiler.reactor: The one and only Reactor
-    let reactor = Reactor.Reactor()
 
-    // STATIC ROOT: LanguageServiceState.InteractiveChecker.backgroundCompiler.scriptClosure 
+[]
+module Helpers = 
+    
+    /// Determine whether two (fileName,options) keys are identical w.r.t. affect on checking
+    let AreSameForChecking2((fileName1: string, options1: FSharpProjectOptions), (fileName2, o2)) =
+        (fileName1 = fileName2) 
+        && FSharpProjectOptions.AreSameForChecking(options1,o2)
+        
+    /// Determine whether two (fileName,options) keys should be identical w.r.t. resource usage
+    let AreSubsumable2((fileName1:string,o1:FSharpProjectOptions),(fileName2:string,o2:FSharpProjectOptions)) =
+        (fileName1 = fileName2)
+        && FSharpProjectOptions.AreSubsumable(o1,o2)
+
+    /// Determine whether two (fileName,sourceText,options) keys should be identical w.r.t. parsing
+    let AreSameForParsing3((fileName1: string, source1: string, options1: FSharpProjectOptions), (fileName2, source2, options2)) =
+        (fileName1 = fileName2) 
+        && FSharpProjectOptions.AreSameForParsing(options1,options2)
+        && (source1 = source2)
+        
+    /// Determine whether two (fileName,sourceText,options) keys should be identical w.r.t. checking
+    let AreSameForChecking3((fileName1: string, source1: string, options1: FSharpProjectOptions), (fileName2, source2, options2)) =
+        (fileName1 = fileName2) 
+        && FSharpProjectOptions.AreSameForChecking(options1,options2)
+        && (source1 = source2)
+
+    /// Determine whether two (fileName,sourceText,options) keys should be identical w.r.t. resource usage
+    let AreSubsumable3((fileName1:string,_,o1:FSharpProjectOptions),(fileName2:string,_,o2:FSharpProjectOptions)) =
+        (fileName1 = fileName2)
+        && FSharpProjectOptions.AreSubsumable(o1,o2)
+        
+// There is only one instance of this type, held in FSharpChecker
+type BackgroundCompiler(projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions) as self =
+    // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.backgroundCompiler.reactor: The one and only Reactor
+    let reactor = Reactor.Singleton
+    let beforeFileChecked = Event()
+    let fileParsed = Event()
+    let fileChecked = Event()
+    let projectChecked = Event()
+
+    let mutable implicitlyStartBackgroundWork = true
+    let reactorOps = 
+        { new IReactorOperations with 
+                member __.EnqueueAndAwaitOpAsync (desc, op) = reactor.EnqueueAndAwaitOpAsync (desc, op)
+                member __.EnqueueOp (desc, op) = reactor.EnqueueOp (desc, op) }
+
+    // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.backgroundCompiler.scriptClosureCache 
     /// Information about the derived script closure.
-    let scriptClosure = AgedLookup(buildCacheSize, areSame=CheckOptions.AreSameProjectForBuilding)
+    let scriptClosureCache = 
+        MruCache(projectCacheSize, 
+            areSame=FSharpProjectOptions.AreSameForChecking, 
+            areSameForSubsumption=FSharpProjectOptions.AreSubsumable)
+
+    let frameworkTcImportsCache = FrameworkImportsCache(frameworkTcImportsCacheStrongSize)
 
     /// CreateOneIncrementalBuilder (for background type checking). Note that fsc.fs also
     /// creates an incremental builder used by the command line compiler.
-    let CreateOneIncrementalBuilder (options:CheckOptions) = 
-        use t = Trace.Call("Reactor","CreateOneIncrementalBuilder", fun () -> sprintf "options = %+A" options)
-        let builder, errorsAndWarnings = 
-            IncrementalFSharpBuild.IncrementalBuilder.CreateBackgroundBuilderForProjectOptions
-                  (scriptClosure.TryGet options, Array.toList options.ProjectFileNames, 
-                   Array.toList options.ProjectOptions, options.ProjectDirectory, 
-                   options.UseScriptResolutionRules, options.IsIncompleteTypeCheckEnvironment)
+    let CreateOneIncrementalBuilder (options:FSharpProjectOptions) = 
+
+        let projectReferences =  
+            [ for (nm,opts) in options.ReferencedProjects ->
+                { new IProjectReference with 
+                        member x.EvaluateRawContents() = 
+                            let r = self.ParseAndCheckProjectImpl(opts)
+                            r.RawFSharpAssemblyData 
+                        member x.GetLogicalTimeStamp() = 
+                            self.GetLogicalTimeStampForProject(opts)
+                        member x.FileName = nm } ]
+
+        let builderOpt, errorsAndWarnings = 
+            IncrementalBuilder.TryCreateBackgroundBuilderForProjectOptions
+                  (frameworkTcImportsCache, scriptClosureCache.TryGet options, Array.toList options.ProjectFileNames, 
+                   Array.toList options.OtherOptions, projectReferences, options.ProjectDirectory, 
+                   options.UseScriptResolutionRules, options.IsIncompleteTypeCheckEnvironment, keepAssemblyContents, keepAllBackgroundResolutions)
 
         // We're putting the builder in the cache, so increment its count.
-        let decrement = builder.IncrementUsageCount()
-        // Register the behaviour that responds to CCUs being invalidated because of type
-        // provider Invalidate events. This invalidates the configuration in the build.
-        builder.ImportedCcusInvalidated.Add (fun msg -> 
-            System.Diagnostics.Debugger.Log(100, "service", sprintf "A build cache entry is being invalidated because of a : %s" msg)
-            self.InvalidateConfiguration options)
-
-        // Register the callback called just before a file is typechecked by the background builder (without recording
-        // errors or intellisense information).
-        //
-        // This indicates to the UI that the file type check state is dirty. If the file is open and visible then 
-        // the UI will sooner or later request a typecheck of the file, recording errors and intellisense information.
-        builder.BeforeTypeCheckFile.Add (fun msg -> match notifyFileTypeCheckStateIsDirty with NotifyFileTypeCheckStateIsDirty f -> f msg)
-
-        (builder, errorsAndWarnings, decrement)
-
-    // STATIC ROOT: LanguageServiceState.InteractiveChecker.backgroundCompiler.incrementalBuildersCache. This root typically holds more 
-    // live information than anything else in the F# Language Service, since it holds up to 3 (buildCacheSize) background project builds
+        let decrement = IncrementalBuilder.KeepBuilderAlive builderOpt
+
+        match builderOpt with 
+        | None -> ()
+        | Some builder -> 
+
+            // Register the behaviour that responds to CCUs being invalidated because of type
+            // provider Invalidate events. This invalidates the configuration in the build.
+            builder.ImportedCcusInvalidated.Add (fun msg -> 
+                System.Diagnostics.Debugger.Log(100, "service", sprintf "A build cache entry is being invalidated because of a : %s" msg)
+                self.InvalidateConfiguration options)
+
+            // Register the callback called just before a file is typechecked by the background builder (without recording
+            // errors or intellisense information).
+            //
+            // This indicates to the UI that the file type check state is dirty. If the file is open and visible then 
+            // the UI will sooner or later request a typecheck of the file, recording errors and intellisense information.
+            builder.BeforeTypeCheckFile.Add (beforeFileChecked.Trigger)
+            builder.FileParsed.Add (fileParsed.Trigger)
+            builder.FileChecked.Add (fileChecked.Trigger)
+            builder.ProjectChecked.Add (fun () -> projectChecked.Trigger options.ProjectFileName)
+
+        (builderOpt, errorsAndWarnings, decrement)
+
+    // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.backgroundCompiler.incrementalBuildersCache. This root typically holds more 
+    // live information than anything else in the F# Language Service, since it holds up to 3 (projectCacheStrongSize) background project builds
     // strongly.
     // 
     /// Cache of builds keyed by options.        
     let incrementalBuildersCache = 
-        MruCache(keepStrongly=buildCacheSize, keepMax=buildCacheSize, compute=CreateOneIncrementalBuilder, 
-                 areSame =  CheckOptions.AreSameProjectForBuilding, 
-                 areSameForSubsumption =  CheckOptions.AreSameProjectName,
+        MruCache
+                (keepStrongly=projectCacheSize, keepMax=projectCacheSize, 
+                 areSame =  FSharpProjectOptions.AreSameForChecking, 
+                 areSameForSubsumption =  FSharpProjectOptions.AreSubsumable,
+                 requiredToKeep=(fun (builderOpt,_,_) -> match builderOpt with None -> false | Some b -> b.IsBeingKeptAliveApartFromCacheEntry),
                  onDiscard = (fun (_, _, decrement) -> decrement.Dispose()))
 
+    let getOrCreateBuilder options =  
+        match incrementalBuildersCache.TryGet options with
+        | Some b -> b
+        | None -> 
+            let b = CreateOneIncrementalBuilder options 
+            incrementalBuildersCache.Set (options, b)
+            b
+
     
-    /// Helper: get the antecedant typecheck state for the give file (in the options). Return none if not available.        
-    let GetAntecendantResultWithoutSideEffects(filename:string, options:CheckOptions) = 
-        match incrementalBuildersCache.GetAvailable options with
-        | Some(builder, createErrors, _) ->
-            let slotOfFile = builder.GetSlotOfFileName(filename)
-            Some (builder, createErrors, builder.GetAntecedentTypeCheckResultsBySlot slotOfFile)
-        | None->
-            None        
+
+    // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.parseFileInProjectCache. Most recently used cache for parsing files.
+    let parseFileInProjectCache = 
+        MruCache<_, _>(parseFileInProjectCacheSize, 
+            areSame=AreSameForParsing3,
+            areSameForSubsumption=AreSubsumable3)
+
+    // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.parseAndCheckFileInProjectCachePossiblyStale 
+    // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.parseAndCheckFileInProjectCache
+    //
+    /// Cache which holds recently seen type-checks.
+    /// This cache may hold out-of-date entries, in two senses
+    ///    - there may be a more recent antecedent state available because the background build has made it available
+    ///    - the source for the file may have changed
     
+    let parseAndCheckFileInProjectCachePossiblyStale = 
+        MruCache
+            (keepStrongly=incrementalTypeCheckCacheSize,
+             areSame=AreSameForChecking2,
+             areSameForSubsumption=AreSubsumable2)
+
+    // Also keyed on source. This can only be out of date if the antecedent is out of date
+    let parseAndCheckFileInProjectCache = 
+        MruCache
+            (keepStrongly=incrementalTypeCheckCacheSize,
+             areSame=AreSameForChecking3,
+             areSameForSubsumption=AreSubsumable3)
+
+    let lockObj = obj()
+    let locked f = lock lockObj f
 
-    /// Helper: do one step of the build for the given options.
-    let DoStep(options:CheckOptions) = 
-        // Do the step.
-        let builder,_,_ = incrementalBuildersCache.Get(options)
-        if builder.Step() then 
-            Trace.PrintLine("ChangeEvents", fun _ -> sprintf "CheckOptions(%s) now maps to Build(%s)" (options.ToString()) (builder.ToString()))
-            true
-        else
-            false
+    static let mutable foregroundParseCount = 0
+    static let mutable foregroundTypeCheckCount = 0
+
+    let MakeCheckFileResultsEmpty(creationErrors) = 
+        FSharpCheckFileResults (Array.ofList creationErrors,None, None, reactorOps)
+
+    let MakeCheckFileResults(options:FSharpProjectOptions, builder, scope, creationErrors, parseErrors, tcErrors) = 
+        let errors = 
+            [| yield! creationErrors 
+               yield! parseErrors
+               if options.IsIncompleteTypeCheckEnvironment then 
+                    yield! Seq.truncate maxTypeCheckErrorsOutOfProjectContext tcErrors
+               else 
+                    yield! tcErrors |]
+                
+        FSharpCheckFileResults (errors, Some scope, Some builder, reactorOps)
+
+    let MakeCheckFileAnswer(tcFileResult, options:FSharpProjectOptions, builder, creationErrors, parseErrors, tcErrors) = 
+        match tcFileResult with 
+        | Parser.TypeCheckAborted.Yes  ->  FSharpCheckFileAnswer.Aborted                
+        | Parser.TypeCheckAborted.No scope -> FSharpCheckFileAnswer.Succeeded(MakeCheckFileResults(options, builder, scope, creationErrors, parseErrors, tcErrors))
+
+
+
+    member bc.RecordTypeCheckFileInProjectResults(filename,options,parseResults,fileVersion,priorTimeStamp,checkAnswer,source) =        
+        match checkAnswer with 
+        | None
+        | Some FSharpCheckFileAnswer.Aborted -> ()
+        | Some (FSharpCheckFileAnswer.Succeeded typedResults) -> 
+            foregroundTypeCheckCount <- foregroundTypeCheckCount + 1
+            locked (fun () -> 
+                parseAndCheckFileInProjectCachePossiblyStale.Set((filename,options),(parseResults,typedResults,fileVersion))            
+                parseAndCheckFileInProjectCache.Set((filename,source,options),(parseResults,typedResults,fileVersion,priorTimeStamp))
+                parseFileInProjectCache.Set((filename,source,options),parseResults))
+
+    member bc.ImplicitlyStartCheckProjectInBackground(options) =        
+        if implicitlyStartBackgroundWork then 
+            bc.CheckProjectInBackground(options)   
 
     /// Parses the source file and returns untyped AST
-    member bc.UntypedParse(filename:string, source,options:CheckOptions)=
-        use t = Trace.Call("SyncOp","UntypedParse", fun _->"")
-        reactor.RunSyncOp (fun () -> 
-            Trace.PrintLine("CompilerServices", fun _ -> "Service.UntypedParseImpl")
-            use t = Trace.CallByThreadNamed("Reactor", "UntypedParseImpl", "ThreadPool", fun _->"")  
+    member bc.ParseFileInProject(filename:string, source,options:FSharpProjectOptions) =
+        match locked (fun () -> parseFileInProjectCache.TryGet (filename, source, options)) with 
+        | Some parseResults -> async.Return parseResults
+        | None -> 
+        // Try this cache too (which might contain different entries)
+        let cachedResults = locked (fun () -> parseAndCheckFileInProjectCache.TryGet((filename,source,options)))
+        match cachedResults with 
+        | Some (parseResults, _checkResults,_,_) ->  async.Return parseResults
+        | _ -> 
+        reactor.EnqueueAndAwaitOpAsync("ParseFileInProject " + filename, fun _ct -> 
         
-#if TYPE_PROVIDER_SECURITY
-            ExtensionTyping.GlobalsTheLanguageServiceCanPoke.theMostRecentFileNameWeChecked <- Some filename
-#endif
-            let builder,_,_ = incrementalBuildersCache.Get(options) // Q: Whis it it ok to ignore createErrors in the build cache? A: These errors will be appended into the typecheck results
-            
+            // Try the caches again - it may have been filled by the time this operation runs
+            match locked (fun () -> parseFileInProjectCache.TryGet (filename, source, options)) with 
+            | Some parseResults -> parseResults
+            | None -> 
+            let cachedResults = locked (fun () -> parseAndCheckFileInProjectCache.TryGet((filename,source,options)))
+            match cachedResults with 
+            | Some (parseResults, _checkResults,_,_) ->  parseResults
+            | _ -> 
+            foregroundParseCount <- foregroundParseCount + 1
+            let builderOpt,creationErrors,_ = getOrCreateBuilder options 
+            use _unwind = IncrementalBuilder.KeepBuilderAlive builderOpt
+            match builderOpt with
+            | None -> FSharpParseFileResults(List.toArray creationErrors, None, true, [])
+            | Some builder -> 
             // Do the parsing.
-            // REVIEW: _matchPairs is being ignored here
             let parseErrors, _matchPairs, inputOpt, anyErrors = 
-               Parser.ParseSource (source, false, true, filename, (options.ProjectFileNames |> Array.toList), builder.TcConfig)
+               Parser.ParseOneFile (source, false, true, filename, builder.ProjectFileNames, builder.TcConfig)
                  
-            // Strip everything but the file name.
-            let dependencyFiles = builder.Dependencies |> List.map (fun dep->dep.Filename)
+            let res = FSharpParseFileResults(parseErrors, inputOpt, anyErrors, builder.Dependencies )
+            locked (fun () -> parseFileInProjectCache.Set ((filename, source, options), res))
+            res 
+        )
 
-            UntypedParseInfo(parsed = { Errors = parseErrors 
-                                        Input = inputOpt
-                                        ParseHadErrors = anyErrors
-                                        DependencyFiles = dependencyFiles})) 
-     
-#if NO_QUICK_SEARCH_HELPERS // only used in QuickSearch prototype
-#else
-    member bc.UntypedParseForSlot(slot,options) =
-        use t = Trace.Call("SyncOp","UntypedParseForSlot", fun _->"")
-        reactor.RunSyncOp (fun () -> 
-            Trace.PrintLine("CompilerServices", fun _ -> "Service.UntypedParseForSlotImpl")
-            use t = Trace.CallByThreadNamed("Reactor", "UntypedParseImpl", "ThreadPool", fun _->"")  
-            let builder,_,_= incrementalBuildersCache.Get(options)
-            let inputOpt,_,_ = builder.GetParseResultsBySlot slot            
-            Trace.PrintLine("ChangeEvents", fun _ -> sprintf "CheckOptions(%s) now maps to Build(%s)" (options.ToString()) (builder.ToString()))
-            // Strip everything but the file name.
-            let dependencyFiles = builder.Dependencies |> List.map (fun dep->dep.Filename)
-        
-            UntypedParseInfo(parsed = { Errors = [| |] 
-                                        Input = inputOpt
-                                        ParseHadErrors = false
-                                        DependencyFiles = dependencyFiles})) 
-        
-    member bc.GetSlotsCount(options) =
-        use t = Trace.Call("SyncOp","GetSlotsCount", fun _->"")
-        reactor.RunSyncOp (fun () -> 
-            Trace.PrintLine("CompilerServices", fun _ -> "Service.GetSlotsCountImpl")
-            use t = Trace.CallByThreadNamed("Reactor", "GetSlotsCountImpl", "ThreadPool", fun _->"")  
-            let builder,_,_ = incrementalBuildersCache.Get options
-            builder.GetSlotsCount ())
-#endif // QUICK_SEARCH
-     
-    member bc.MatchBraces(filename:string, source,options)=
-        use t = Trace.Call("SyncOp","MatchBraces", fun _->"")
-        reactor.RunSyncOp (fun () -> 
-            Trace.PrintLine("CompilerServices", fun _ -> "Service.MatchBracesImpl")
-            use t = Trace.CallByThreadNamed("Reactor", "MatchBracesImpl", "ThreadPool", fun _->"")  
-            let builder,_,_ = incrementalBuildersCache.Get(options)
-            // Do the parsing.
+    /// Fetch the parse information from the background compiler (which checks w.r.t. the FileSystem API)
+    member bc.GetBackgroundParseResultsForFileInProject(filename, options) =
+        reactor.EnqueueAndAwaitOpAsync("GetBackgroundParseResultsForFileInProject " + filename, fun _ct -> 
+            let builderOpt, creationErrors, _ = getOrCreateBuilder options
+            use _unwind = IncrementalBuilder.KeepBuilderAlive builderOpt
+            match builderOpt with
+            | None -> FSharpParseFileResults(List.toArray creationErrors, None, true, [])
+            | Some builder -> 
+            let inputOpt,_,_,parseErrors = builder.GetParseResultsForFile filename            
+            let dependencyFiles = builder.Dependencies 
+            let errors = [| yield! creationErrors; yield! Parser.CreateErrorInfos (builder.TcConfig, false, filename, parseErrors) |]
+            FSharpParseFileResults(errors = errors, input = inputOpt, parseHadErrors = false, dependencyFiles = dependencyFiles)
+        )
+
+    member bc.MatchBraces(filename:string, source, options)=
+        reactor.EnqueueAndAwaitOpAsync("MatchBraces " + filename, fun _ct -> 
+            let builderOpt,_,_ = getOrCreateBuilder options
+            use _unwind = IncrementalBuilder.KeepBuilderAlive builderOpt
+            match builderOpt with
+            | None -> [| |]
+            | Some builder -> 
             let _parseErrors, matchPairs, _inputOpt, _anyErrors = 
-               Parser.ParseSource (source, true, false, filename, (options.ProjectFileNames |> Array.toList), builder.TcConfig)
+               Parser.ParseOneFile (source, true, false, filename, builder.ProjectFileNames, builder.TcConfig)
                  
-            matchPairs)
-
-    /// Type-check the result obtained by parsing
-    /// The input should be first parsed using 'UntypedParseImpl'
-    member bc.TypeCheckSource(parseResult,filename:string,source,options,isResultObsolete:unit->bool,textSnapshotInfo)=
-        use t = Trace.Call("SyncOp","TypeCheckSource", fun _->"")
-        reactor.RunSyncOp (fun () -> 
-            use t = Trace.CallByThreadNamed("Reactor", "TypeCheckSourceImpl", "ThreadPool", fun _->"")  
-        
-            match GetAntecendantResultWithoutSideEffects(filename,options) with
-            | Some(builder,createErrors,Some(tcPriorState,tcImports,tcGlobals,tcConfig,backgroundErrors,_antecedantTimeStamp)) -> 
-        
-                // Get additional script #load closure information if applicable.
-                // For scripts, this will have been recorded by GetCheckOptionsFromScriptRoot.
-                let loadClosure = scriptClosure.TryGet options 
+            matchPairs
+        )
+
+    member bc.GetCachedCheckFileResult(builder: IncrementalBuilder,filename,source,options) =
+            // Check the cache. We can only use cached results when there is no work to do to bring the background builder up-to-date
+            let cachedResults = locked (fun () -> parseAndCheckFileInProjectCache.TryGet((filename,source,options)))
+            match cachedResults with 
+//            | Some (parseResults, checkResults, _, _) when builder.AreCheckResultsBeforeFileInProjectReady(filename) -> 
+            | Some (parseResults, checkResults,_,priorTimeStamp) 
+                 when 
+                    (match builder.GetCheckResultsBeforeFileInProjectIfReady filename with 
+                    | None -> false
+                    | Some(tcPrior) -> 
+                        tcPrior.TimeStamp = priorTimeStamp &&
+                        builder.AreCheckResultsBeforeFileInProjectReady(filename)) -> 
+                Some (parseResults,checkResults)
+            | _ -> None
+
+    /// Type-check the result obtained by parsing, but only if the antecedent type checking context is available. 
+    member bc.CheckFileInProjectIfReady(parseResults:FSharpParseFileResults,filename,fileVersion,source,options,isResultObsolete,textSnapshotInfo:obj option) =
+        reactor.EnqueueAndAwaitOpAsync("CheckFileInProjectIfReady " + filename, fun _ct -> 
+          let answer = 
+            match incrementalBuildersCache.TryGetAny options with
+            | Some(Some builder, creationErrors, _) ->
+            
+                match bc.GetCachedCheckFileResult(builder,filename,source,options) with 
+                | Some (_parseResults, checkResults) -> Some (FSharpCheckFileAnswer.Succeeded checkResults)
+                | _ ->
+                match builder.GetCheckResultsBeforeFileInProjectIfReady filename with 
+                | Some tcPrior -> 
         
-                let parseHadErrors = parseResult.ParseHadErrors 
-
-                // Run the type checking.
-                let tcErrors, scopeOpt, aborted = 
-                    Parser.TypeCheckSource(parseResult.Input,source,filename,options.ProjectFileName,tcConfig,tcGlobals,tcImports,  tcPriorState,
-                                           loadClosure,backgroundErrors,reactor.SyncOp,(fun () -> builder.IsAlive),isResultObsolete,parseHadErrors,textSnapshotInfo)
-
-                if aborted = Parser.TypeCheckAborted.No then                           
-                                                    
-                    // Append all the errors together.
-                    let errors = 
-                        [| yield! createErrors 
-                           yield! parseResult.Errors
-                           if options.IsIncompleteTypeCheckEnvironment then 
-                               yield! Seq.truncate maxTypeCheckErrorsOutOfProjectContext tcErrors
-                           else 
-                               yield! tcErrors |]
+                    // Get additional script #load closure information if applicable.
+                    // For scripts, this will have been recorded by GetProjectOptionsFromScript.
+                    let loadClosure = scriptClosureCache.TryGet options 
                 
-                    let res = TypeCheckResults (errors,(match scopeOpt with None -> None | Some scope -> Some (scope, builder, reactor)))   
-                    TypeCheckSucceeded res
-                else Aborted                
-            | _ -> 
-                // Either the builder did not exist or the antecedent to the slot was not ready. Return 'None'.
-                // The caller will send a request for a background build of this project. This
-                // will create the builder and notify the UI when the antecedent to the slot is ready. 
-                NoAntecedant)
-
-    member bc.GetCheckOptionsFromScriptRoot(filename, source, loadedTimestamp, otherFlags) = 
-        reactor.RunSyncOp (fun () -> 
-            // REVIEW: Opportunity to cache by filename, version?
-            // REVIEW: Opportunity to save script 'input' which is about to be generated including children.
-            let fas = LoadClosure.ComputeClosureOfSourceText(filename, source, CodeContext.Editing, new Lexhelp.LexResourceManager())
-            let baseFlags =  ["--noframework"; "--warn:3"]  @ Array.toList otherFlags
-            let references = fas.References |> List.map (fun r->"-r:" + fst r)
-            let nowarns = fas.NoWarns |> List.map (fun (code,_)->"--nowarn:" + code)
-            let allFlags = baseFlags @ references @ nowarns @ Array.toList otherFlags
+                    // Run the type checking.
+                    let tcErrors, tcFileResult = 
+                        Parser.TypeCheckOneFile(parseResults,source,filename,options.ProjectFileName,tcPrior.TcConfig,tcPrior.TcGlobals,tcPrior.TcImports,  tcPrior.TcState,
+                                                loadClosure,tcPrior.Errors,reactorOps,(fun () -> builder.IsAlive),isResultObsolete,textSnapshotInfo)
+
+                    let checkAnswer = MakeCheckFileAnswer(tcFileResult, options, builder, creationErrors, parseResults.Errors, tcErrors)
+                    bc.RecordTypeCheckFileInProjectResults(filename,options,parseResults,fileVersion,tcPrior.TimeStamp,Some checkAnswer,source)
+                    Some checkAnswer
+                | None -> None  // the incremental builder was not up to date
+            | _ -> None // the builder wasn't ready
+          bc.ImplicitlyStartCheckProjectInBackground(options)
+          answer)
+
+
+    /// Type-check the result obtained by parsing. Force the evaluation of the antecedent type checking context if needed.
+    member bc.CheckFileInProject(parseResults:FSharpParseFileResults,filename,fileVersion,source,options,isResultObsolete,textSnapshotInfo) =
+        reactor.EnqueueAndAwaitOpAsync("CheckFileInProject " + filename, fun _ct -> 
+            let builderOpt,creationErrors,_ = getOrCreateBuilder options
+            use _unwind = IncrementalBuilder.KeepBuilderAlive builderOpt
+            match builderOpt with
+            | None -> FSharpCheckFileAnswer.Succeeded (MakeCheckFileResultsEmpty(creationErrors))
+            | Some builder -> 
+
+        
+            // Check the cache. We can only use cached results when there is no work to do to bring the background builder up-to-date
+            match bc.GetCachedCheckFileResult(builder,filename,source,options) with 
+            | Some (_parseResults, checkResults) -> FSharpCheckFileAnswer.Succeeded checkResults
+            | _ ->
+            let tcPrior = builder.GetCheckResultsBeforeFileInProject filename 
+            let loadClosure = scriptClosureCache.TryGet options 
+            let tcErrors, tcFileResult = 
+                Parser.TypeCheckOneFile(parseResults,source,filename,options.ProjectFileName,tcPrior.TcConfig,tcPrior.TcGlobals,tcPrior.TcImports,  tcPrior.TcState,
+                                        loadClosure,tcPrior.Errors,reactorOps,(fun () -> builder.IsAlive),isResultObsolete,textSnapshotInfo)
+            let checkAnswer = MakeCheckFileAnswer(tcFileResult, options, builder, creationErrors, parseResults.Errors, tcErrors)
+            bc.RecordTypeCheckFileInProjectResults(filename,options,parseResults,fileVersion,tcPrior.TimeStamp,Some checkAnswer,source)
+            bc.ImplicitlyStartCheckProjectInBackground(options)
+            checkAnswer 
+        ) 
+
+    /// Parses the source file and returns untyped AST
+    member bc.ParseAndCheckFileInProject(filename:string, fileVersion, source, options:FSharpProjectOptions,isResultObsolete,textSnapshotInfo) =
+        reactor.EnqueueAndAwaitOpAsync("ParseAndCheckFileInProject " + filename, fun _ct -> 
+            let builderOpt,creationErrors,_ = getOrCreateBuilder options // Q: Whis it it ok to ignore creationErrors in the build cache? A: These errors will be appended into the typecheck results
+            use _unwind = IncrementalBuilder.KeepBuilderAlive builderOpt
+            match builderOpt with
+            | None -> 
+                let parseResults = FSharpParseFileResults(List.toArray creationErrors, None, true, [])
+                (parseResults, FSharpCheckFileAnswer.Aborted)
+            | Some builder -> 
+
+                match bc.GetCachedCheckFileResult(builder,filename,source,options) with 
+                | Some (parseResults, checkResults) -> parseResults, FSharpCheckFileAnswer.Succeeded checkResults
+                | _ ->
+                let tcPrior = builder.GetCheckResultsBeforeFileInProject filename 
+
+                // Do the parsing.
+                let parseErrors, _matchPairs, inputOpt, anyErrors = Parser.ParseOneFile (source, false, true, filename, builder.ProjectFileNames, builder.TcConfig)
+                 
+                let parseResults = FSharpParseFileResults(parseErrors, inputOpt, anyErrors, builder.Dependencies)
+                let loadClosure = scriptClosureCache.TryGet options 
+                let tcErrors, tcFileResult = 
+                    Parser.TypeCheckOneFile(parseResults,source,filename,options.ProjectFileName,tcPrior.TcConfig,tcPrior.TcGlobals,tcPrior.TcImports,  tcPrior.TcState,
+                                            loadClosure,tcPrior.Errors,reactorOps,(fun () -> builder.IsAlive),isResultObsolete,textSnapshotInfo)
+                let checkAnswer = MakeCheckFileAnswer(tcFileResult, options, builder, creationErrors, parseResults.Errors, tcErrors)
+                bc.RecordTypeCheckFileInProjectResults(filename,options,parseResults,fileVersion,tcPrior.TimeStamp,Some checkAnswer,source)
+                bc.ImplicitlyStartCheckProjectInBackground(options)
+                parseResults, checkAnswer
+        )
+
+    /// Fetch the check information from the background compiler (which checks w.r.t. the FileSystem API)
+    member bc.GetBackgroundCheckResultsForFileInProject(filename,options) =
+        reactor.EnqueueAndAwaitOpAsync("GetBackgroundCheckResultsForFileInProject " + filename, fun _ct -> 
+            let (builderOpt, creationErrors, _) = getOrCreateBuilder options 
+            use _unwind = IncrementalBuilder.KeepBuilderAlive builderOpt
+            match builderOpt with
+            | None -> 
+                let parseResults = FSharpParseFileResults(Array.ofList creationErrors, None, true, [])
+                let typedResults = MakeCheckFileResultsEmpty(creationErrors)
+                (parseResults, typedResults)
+            | Some builder -> 
+                let (inputOpt, _, _, untypedErrors) = builder.GetParseResultsForFile filename  
+                let tcProj = builder.GetCheckResultsAfterFileInProject filename 
+                let untypedErrors = [| yield! creationErrors; yield! Parser.CreateErrorInfos (builder.TcConfig, false, filename, untypedErrors) |]
+                let tcErrors = [| yield! creationErrors; yield! Parser.CreateErrorInfos (builder.TcConfig, false, filename, tcProj.Errors) |]
+                let parseResults = FSharpParseFileResults(errors = untypedErrors, input = inputOpt, parseHadErrors = false, dependencyFiles = builder.Dependencies)
+                let loadClosure = scriptClosureCache.TryGet options 
+                let scope = 
+                    TypeCheckInfo(tcProj.TcConfig, tcProj.TcGlobals, tcProj.TcState.PartialAssemblySignature, tcProj.TcState.Ccu, tcProj.TcImports, tcProj.TcEnvAtEnd.AccessRights,
+                                  options.ProjectFileName, filename, 
+                                  List.last tcProj.TcResolutions, 
+                                  List.last tcProj.TcSymbolUses,
+                                  tcProj.TcEnvAtEnd.NameEnv,
+                                  loadClosure, reactorOps, (fun () -> builder.IsAlive), None)     
+                let typedResults = MakeCheckFileResults(options, builder, scope, creationErrors, parseResults.Errors, tcErrors)
+                (parseResults, typedResults)
+            )
+
+
+    /// Try to get recent approximate type check results for a file. 
+    member bc.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, source) =
+        match source with 
+        | Some sourceText -> 
+            locked (fun () -> 
+                match parseAndCheckFileInProjectCache.TryGet((filename,sourceText,options)) with
+                | Some (a,b,c,_) -> Some (a,b,c)
+                | None -> None)
+        | None -> locked (fun () -> parseAndCheckFileInProjectCachePossiblyStale.TryGet((filename,options)))
+
+    /// Parse and typecheck the whole project (the implementation, called recursively as project graph is evaluated)
+    member private bc.ParseAndCheckProjectImpl(options) : FSharpCheckProjectResults =
+        let builderOpt,creationErrors,_ = getOrCreateBuilder options
+        use _unwind = IncrementalBuilder.KeepBuilderAlive builderOpt
+        match builderOpt with 
+        | None -> 
+            FSharpCheckProjectResults (keepAssemblyContents, Array.ofList creationErrors, None, reactorOps)
+        | Some builder -> 
+            let (tcProj, ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt)  = builder.GetCheckResultsAndImplementationsForProject()
+            let errors = [| yield! creationErrors; yield! Parser.CreateErrorInfos (tcProj.TcConfig, true, Microsoft.FSharp.Compiler.TcGlobals.DummyFileNameForRangesWithoutASpecificLocation, tcProj.Errors) |]
+            FSharpCheckProjectResults (keepAssemblyContents, errors, Some(tcProj.TcGlobals, tcProj.TcImports, tcProj.TcState.Ccu, tcProj.TcState.PartialAssemblySignature, tcProj.TcSymbolUses, tcProj.TopAttribs, tcAssemblyDataOpt, ilAssemRef, tcProj.TcEnvAtEnd.AccessRights, tcAssemblyExprOpt), reactorOps)
+
+    /// Get the timestamp that would be on the output if fully built immediately
+    member private bc.GetLogicalTimeStampForProject(options) =
+        let builderOpt,_creationErrors,_ = getOrCreateBuilder options
+        use _unwind = IncrementalBuilder.KeepBuilderAlive builderOpt
+        match builderOpt with 
+        | None -> None
+        | Some builder -> Some (builder.GetLogicalTimeStampForProject())
+
+    /// Keep the projet builder alive over a scope
+    member bc.KeepProjectAlive(options) =
+        reactor.EnqueueAndAwaitOpAsync("KeepProjectAlive " + options.ProjectFileName, fun _ct -> 
+            let builderOpt,_creationErrors,_ = getOrCreateBuilder options
+            // This increments, and lets the caller decrement
+            IncrementalBuilder.KeepBuilderAlive builderOpt)
+
+    /// Parse and typecheck the whole project.
+    member bc.ParseAndCheckProject(options) =
+        reactor.EnqueueAndAwaitOpAsync("ParseAndCheckProject " + options.ProjectFileName, fun _ct -> bc.ParseAndCheckProjectImpl(options))
+
+    member bc.GetProjectOptionsFromScript(filename, source, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib) = 
+        reactor.EnqueueAndAwaitOpAsync ("GetProjectOptionsFromScript " + filename, fun _ct -> 
+            // Do we add a reference to FSharp.Compiler.Interactive.Settings by default?
+            let useFsiAuxLib = defaultArg useFsiAuxLib true
+            // Do we use a "FSharp.Core, 4.3.0.0" reference by default?
+            let otherFlags = defaultArg otherFlags [| |]
+            let useMonoResolution = runningOnMono || otherFlags |> Array.exists (fun x -> x = "--simpleresolution")
+            let loadedTimeStamp = defaultArg loadedTimeStamp DateTime.MaxValue // Not 'now', we don't want to force reloading
+            let applyCompilerOptions tcConfigB  = 
+                let collect _name = ()
+                let fsiCompilerOptions = CompileOptions.GetCoreFsiCompilerOptions tcConfigB 
+                CompileOptions.ParseCompilerOptions (collect, fsiCompilerOptions, Array.toList otherFlags)
+            let fas = LoadClosure.ComputeClosureOfSourceText(filename, source, CodeContext.Editing, useMonoResolution, useFsiAuxLib, new Lexhelp.LexResourceManager(), applyCompilerOptions)
+            let otherFlags = 
+                [| yield "--noframework"; yield "--warn:3"; 
+                   yield! otherFlags 
+                   for r in fas.References do yield "-r:" + fst r
+                   for (code,_) in fas.NoWarns do yield "--nowarn:" + code
+                |]
             let co = 
                 {
                     ProjectFileName = filename + ".fsproj" // Make a name that is unique in this directory.
-                    ProjectFileNames = fas.SourceFiles |> List.map(fun s->fst s) |> List.toArray
-                    ProjectOptions = allFlags |> List.toArray
+                    ProjectFileNames = fas.SourceFiles |> List.map fst |> List.toArray
+                    OtherOptions = otherFlags 
+                    ReferencedProjects= [| |]  
                     IsIncompleteTypeCheckEnvironment = false
                     UseScriptResolutionRules = true 
-                    LoadTime = loadedTimestamp
+                    LoadTime = loadedTimeStamp
                     UnresolvedReferences = Some (UnresolvedReferencesSet(fas.UnresolvedReferences))
                 }
-            scriptClosure.Put(co,fas) // Save the full load closure for later correlation.
+            scriptClosureCache.Set(co,fas) // Save the full load closure for later correlation.
             co)
             
-    member bc.InvalidateConfiguration(options : CheckOptions) =
-        use t = Trace.Call("SyncOp","InvalidateConfiguration", fun _->"")
-        reactor.AsyncOp (fun () -> 
-            use t = Trace.Call("ChangeEvents","InvalidateBuildCacheEntry", fun _ -> sprintf "Received notification to invalidate build for options: %A" options)
-            match incrementalBuildersCache.GetAvailable options with
+    member bc.InvalidateConfiguration(options : FSharpProjectOptions) =
+        reactor.EnqueueOp("InvalidateConfiguration", fun () -> 
+            match incrementalBuildersCache.TryGetAny options with
             | None -> ()
             | Some (_oldBuilder, _, _) ->
                     // We do not need to decrement here - the onDiscard function is called each time an entry is pushed out of the build cache,
                     // including by SetAlternate.
-                    Trace.PrintLine("ChangeEvents", fun _ -> "Refreshing configuration")
                     let builderB, errorsB, decrementB = CreateOneIncrementalBuilder options
-                    Trace.PrintLine("ChangeEvents", fun _ -> sprintf "CheckOptions(%s) now maps to Build(%s)" (options.ToString()) (builderB.ToString()))
-                    incrementalBuildersCache.SetAlternate(options, (builderB, errorsB, decrementB)))
-        reactor.StartBuilding(fun () -> DoStep options) 
+                    incrementalBuildersCache.Set(options, (builderB, errorsB, decrementB))
+            if implicitlyStartBackgroundWork then 
+               bc.CheckProjectInBackground(options))
 
-    member bc.NotifyProjectCleaned(options : CheckOptions) =
-        match incrementalBuildersCache.GetAvailable options with
+    member bc.NotifyProjectCleaned(options : FSharpProjectOptions) =
+        match incrementalBuildersCache.TryGetAny options with
         | None -> ()
-        | Some (incrementalBuilder, _, _) ->
+        | Some (builderOpt, _, _) ->
 #if EXTENSIONTYPING
-            if incrementalBuilder.ThereAreLiveTypeProviders then
-                bc.InvalidateConfiguration(options)
+            builderOpt |> Option.iter (fun builder -> 
+                if builder.ThereAreLiveTypeProviders then
+                    bc.InvalidateConfiguration(options))
 #else
             ()
 #endif
 
-    member bc.InvalidateAll() =
-        use t = Trace.Call("SyncOp","InvalidateAll", fun _->"")
-        reactor.AsyncOp (fun () -> incrementalBuildersCache.Clear())
+    member bc.CheckProjectInBackground(options) =
+        reactor.SetBackgroundOp(Some(fun () -> 
+            let builderOpt,_,_ = getOrCreateBuilder options
+            use _unwind = IncrementalBuilder.KeepBuilderAlive builderOpt
+            match builderOpt with 
+            | None -> false
+            | Some builder -> builder.Step()))
 
+    member bc.StopBackgroundCompile() =
+        reactor.SetBackgroundOp(None)
 
-    member bc.StartBuilding(options) =
-        reactor.StartBuilding(fun () -> DoStep options) 
-
-    member bc.StopBuilding() =
-        reactor.StopBuilding() 
-
-    // This is for unit testing only
     member bc.WaitForBackgroundCompile() =
-        reactor.WaitForBackgroundCompile() 
+        reactor.WaitForBackgroundOpCompletion() 
+
+    member bc.CompleteAllQueuedOps() =
+        reactor.CompleteAllQueuedOps() 
+
+    member bc.ReactorOps  = reactorOps
+    member bc.BeforeBackgroundFileCheck = beforeFileChecked.Publish
+    member bc.FileParsed = fileParsed.Publish
+    member bc.FileChecked = fileChecked.Publish
+    member bc.ProjectChecked = projectChecked.Publish
+
+    member bc.CurrentQueueLength = reactor.CurrentQueueLength
+
+    member bc.ClearCachesAsync() =
+        reactor.EnqueueAndAwaitOpAsync ("ClearCachesAsync", fun _ct -> 
+            locked (fun () -> 
+                parseAndCheckFileInProjectCachePossiblyStale.Clear()
+                parseAndCheckFileInProjectCache.Clear()
+                parseFileInProjectCache.Clear())
+            incrementalBuildersCache.Clear()
+            frameworkTcImportsCache.Clear()
+            scriptClosureCache.Clear())
+
+    member bc.DownsizeCaches() =
+        reactor.EnqueueAndAwaitOpAsync ("DownsizeCaches", fun _ct -> 
+            locked (fun () -> 
+                parseAndCheckFileInProjectCachePossiblyStale.Resize(keepStrongly=1)
+                parseAndCheckFileInProjectCache.Resize(keepStrongly=1)
+                parseFileInProjectCache.Resize(keepStrongly=1))
+            incrementalBuildersCache.Resize(keepStrongly=1, keepMax=1)
+            frameworkTcImportsCache.Downsize()
+            scriptClosureCache.Resize(keepStrongly=1, keepMax=1))
+         
+    member __.FrameworkImportsCache = frameworkTcImportsCache
+    member __.ImplicitlyStartBackgroundWork with get() = implicitlyStartBackgroundWork and set v = implicitlyStartBackgroundWork <- v
+    static member GlobalForegroundParseCountStatistic = foregroundParseCount
+    static member GlobalForegroundTypeCheckCountStatistic = foregroundTypeCheckCount
+
+//----------------------------------------------------------------------------
+// FSharpChecker
+//
 
 []
 []
 // There is typically only one instance of this type in a Visual Studio process.
-type (* internal *) InteractiveChecker(notifyFileTypeCheckStateIsDirty) =
-    // STATIC ROOT: LanguageServiceState.InteractiveChecker.backgroundCompiler. See BackgroundCompiler above.
-    let backgroundCompiler = BackgroundCompiler(notifyFileTypeCheckStateIsDirty)
+type FSharpChecker(projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions) =
 
-    static let mutable foregroundParseCount = 0
-    static let mutable foregroundTypeCheckCount = 0
-    
-    /// Determine whether two sets of sources and parse options are the same.
-    let AreSameForParsing((f1: string, s1: string, o1: CheckOptions), (f2, s2, o2)) =
-        (f1 = f2) 
-        && CheckOptions.AreSameProjectForParsing(o1,o2)
-        && (s1 = s2)
-        
-    /// Determine whether two sets of sources and parse options should be subsumed under the same project.
-    let AreSubsumableForParsing((_,_,o1:CheckOptions),(_,_,o2:CheckOptions)) =
-        CheckOptions.AreSameProjectName(o1,o2)
+    let backgroundCompiler = BackgroundCompiler(projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions)
+
+    static let globalInstance = FSharpChecker.Create()
         
     // Parse using backgroundCompiler
-    let ComputeBraceMatching(filename:string,source,options:CheckOptions) = 
-        Trace.PrintLine("CompilerServices", fun () -> sprintf "ComputeBraceMatching, FileName = %s\n  " filename) 
+    let ComputeBraceMatching(filename:string,source,options:FSharpProjectOptions) = 
         backgroundCompiler.MatchBraces(filename,source,options)
     
-    /// Parse a source code file, returning an information about the untyped results
-    /// and the results needed for further processing using 'TypeCheckSource'
-    let ComputeUntypedParse(filename: string, source, options) =
-        Trace.PrintLine("CompilerServices", fun () -> sprintf "UntypedParse, FileName = %s\n  " filename) 
-        foregroundParseCount <- foregroundParseCount + 1
-        backgroundCompiler.UntypedParse(filename, source, options)
-
-    // STATIC ROOT: LanguageServiceState.InteractiveChecker.braceMatchMru. Most recently used cache for brace matching. Accessed on the
+    // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.braceMatchCache. Most recently used cache for brace matching. Accessed on the
     // background UI thread, not on the compiler thread.
-    let braceMatchMru = MruCache<_,_>(braceMatchCacheSize,ComputeBraceMatching,areSame=AreSameForParsing,areSameForSubsumption=AreSubsumableForParsing,isStillValid=(fun _ -> true)) 
+    let braceMatchCache = 
+        MruCache<(string*string*FSharpProjectOptions),_>(braceMatchCacheSize,
+            areSame=AreSameForParsing3,
+            areSameForSubsumption=AreSubsumable3) 
 
-    // STATIC ROOT: LanguageServiceState.InteractiveChecker.untypedCheckMru. Most recently used cache for parsing files.
-    let untypedCheckMru = MruCache<_, _>(untypedCheckMruSize, ComputeUntypedParse, areSame=AreSameForParsing,areSameForSubsumption=AreSubsumableForParsing,isStillValid=(fun _ -> true))
-
-    // STATIC ROOT: LanguageServiceState.InteractiveChecker.typeCheckLookup. 
-    //
-    /// Cache which holds recently seen type-checks, no more than one for each file.
-    /// This cache may hold out-of-date entries, in two senses
-    ///    - there may be a more recent antecedent state available because the background build has made it available
-    ///    - the source for the file may have changed
-    
-    let typeCheckLookup = 
-        AgedLookup(keepStrongly=recentForgroundTypeCheckLookupSize,
-                                                                                   areSame=fun (x,y)->x=y) 
+    static member Create() = 
+        new FSharpChecker(projectCacheSizeDefault,false,true)
 
     /// Instantiate an interactive checker.    
-    static member Create(notifyFileTypeCheckStateIsDirty) = new InteractiveChecker(notifyFileTypeCheckStateIsDirty)
-
-    /// Parse a source code file, returning an information about the untyped results
-    /// and the results needed for further processing using 'TypeCheckSource'
-    member ic.MatchBraces(filename, source, options) =
-        braceMatchMru.Get((filename, source, options))
+    static member Create(?projectCacheSize, ?keepAssemblyContents, ?keepAllBackgroundResolutions) = 
+        let keepAssemblyContents = defaultArg keepAssemblyContents false
+        let keepAllBackgroundResolutions = defaultArg keepAllBackgroundResolutions true
+        let projectCacheSizeReal = defaultArg projectCacheSize projectCacheSizeDefault
+        new FSharpChecker(projectCacheSizeReal,keepAssemblyContents, keepAllBackgroundResolutions)
+
+    member ic.MatchBracesAlternate(filename, source, options) =
+        async { 
+            match braceMatchCache.TryGet (filename, source, options) with 
+            | Some res -> return res
+            | None -> 
+                let! res = ComputeBraceMatching (filename, source, options)
+                braceMatchCache.Set ((filename, source, options), res)
+                return res 
+         }
 
-    /// Parse a source code file, returning an information about the untyped results
-    /// and the results needed for further processing using 'TypeCheckSource'
-    member ic.UntypedParse(filename, source, options) =
-        untypedCheckMru.Get((filename, source, options))
+    member ic.ParseFileInProject(filename, source, options) =
+        backgroundCompiler.ParseFileInProject(filename, source, options)
         
-#if NO_QUICK_SEARCH_HELPERS // only used in QuickSearch prototype
-#else
-    member ic.GetSlotsCount options =
-        Trace.PrintLine("CompilerServices", fun () -> sprintf "GetSlotsCount, ProjectName = %s\n  " options.ProjectFileName)         
-        backgroundCompiler.GetSlotsCount(options)
+    member ic.GetBackgroundParseResultsForFileInProject (filename,options) =
+        backgroundCompiler.GetBackgroundParseResultsForFileInProject(filename,options)
         
-    member ic.UntypedParseForSlot (slot,options) =
-        Trace.PrintLine("CompilerServices", fun () -> sprintf "UntypedParseForSlot, ProjectName = %s, slot = %d\n  " options.ProjectFileName slot)         
-        backgroundCompiler.UntypedParseForSlot(slot,options)
-#endif // QUICK_SEARCH
+    member ic.GetBackgroundCheckResultsForFileInProject (filename,options) =
+        backgroundCompiler.GetBackgroundCheckResultsForFileInProject(filename,options)
         
     /// Try to get recent approximate type check results for a file. 
-    member ic.TryGetRecentTypeCheckResultsForFile(filename: string, options:CheckOptions) =
-        match typeCheckLookup.TryGet((filename,options)) with
-        | Some res -> 
-            Some res
-        | _ -> 
-            None
+    member ic.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, ?source) =
+        backgroundCompiler.TryGetRecentCheckResultsForFile(filename,options,source)
 
-    /// This function is called when the entire environment is known to have changed for reasons not encoded in the CheckOptions of any project/compilation.
+    /// This function is called when the entire environment is known to have changed for reasons not encoded in the ProjectOptions of any project/compilation.
     /// For example, the type provider approvals file may have changed.
     member ic.InvalidateAll() =
-        backgroundCompiler.InvalidateAll()
+        ic.ClearCaches()
             
-    /// This function is called when the entire environment is known to have changed for reasons not encoded in the CheckOptions of any project/compilation.
+    member ic.ClearCachesAsync() =
+        braceMatchCache.Clear()
+        backgroundCompiler.ClearCachesAsync() 
+
+    member ic.ClearCaches() =
+        ic.ClearCachesAsync() |> Async.Start // this cache clearance is not synchronous, it will happen when the background op gets run
+
+    /// This function is called when the entire environment is known to have changed for reasons not encoded in the ProjectOptions of any project/compilation.
     /// For example, the type provider approvals file may have changed.
     //
     // This is for unit testing only
     member ic.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() =
-        ic.InvalidateAll()
-        typeCheckLookup.Clear()
-        braceMatchMru.Clear()
-        untypedCheckMru.Clear()
-        for i in 0 .. 2 do 
-            System.GC.Collect()
-            System.GC.WaitForPendingFinalizers() 
-            backgroundCompiler.WaitForBackgroundCompile() // flush AsyncOp
+        backgroundCompiler.CompleteAllQueuedOps() // flush AsyncOp
+        ic.ClearCachesAsync() |> Async.RunSynchronously
+        System.GC.Collect()
+        System.GC.WaitForPendingFinalizers() 
+        backgroundCompiler.CompleteAllQueuedOps() // flush AsyncOp
             
-    /// This function is called when the configuration is known to have changed for reasons not encoded in the CheckOptions.
+    /// This function is called when the configuration is known to have changed for reasons not encoded in the ProjectOptions.
     /// For example, dependent references may have been deleted or created.
-    member ic.InvalidateConfiguration(options: CheckOptions) =
+    member ic.InvalidateConfiguration(options: FSharpProjectOptions) =
         backgroundCompiler.InvalidateConfiguration options
 
     /// This function is called when a project has been cleaned, and thus type providers should be refreshed.
-    member ic.NotifyProjectCleaned(options: CheckOptions) =
+    member ic.NotifyProjectCleaned(options: FSharpProjectOptions) =
         backgroundCompiler.NotifyProjectCleaned options
               
-    /// TypeCheck a source code file, returning a handle to the results of the 
+    /// Typecheck a source code file, returning a handle to the results of the 
     /// parse including the reconstructed types in the file.
-    member ic.TypeCheckSource(parsed:UntypedParseInfo, filename:string, fileVersion:int, source:string, options:CheckOptions, IsResultObsolete(isResultObsolete), textSnapshotInfo:obj) =        
-        Trace.PrintLine("CompilerServices", fun () -> sprintf "TypeCheckSource, FileName = %s\n  " filename) 
-        let answer = backgroundCompiler.TypeCheckSource(UntypedParseInfoImpl.GetUntypedParseResults parsed,filename,source,options,isResultObsolete,textSnapshotInfo)
-        match answer with 
-        | Aborted
-        | NoAntecedant ->
-            backgroundCompiler.StartBuilding(options) 
-            answer
-        | TypeCheckSucceeded typedResults -> 
-            foregroundTypeCheckCount <- foregroundTypeCheckCount + 1
-            typeCheckLookup.Put((filename,options),(parsed,typedResults,fileVersion))            
-            // JAF: Why don't we kick the backgroundCompiler off here like we do for Aborted and NoAntecedant? 
-            // Because we expect the second half of the request (GetMethods or whatever) soon and would like that to have a chance to start that request quickly
-            answer
+    member ic.CheckFileInProjectIfReady(parseResults:FSharpParseFileResults, filename:string, fileVersion:int, source:string, options:FSharpProjectOptions, ?isResultObsolete, ?textSnapshotInfo:obj) =        
+        let (IsResultObsolete(isResultObsolete)) = defaultArg isResultObsolete (IsResultObsolete(fun _ -> false))
+        backgroundCompiler.CheckFileInProjectIfReady(parseResults,filename,fileVersion,source,options,isResultObsolete,textSnapshotInfo)
+            
+    /// Typecheck a source code file, returning a handle to the results of the 
+    /// parse including the reconstructed types in the file.
+    member ic.CheckFileInProject(parseResults:FSharpParseFileResults, filename:string, fileVersion:int, source:string, options:FSharpProjectOptions, ?isResultObsolete, ?textSnapshotInfo:obj) =        
+        let (IsResultObsolete(isResultObsolete)) = defaultArg isResultObsolete (IsResultObsolete(fun _ -> false))
+        backgroundCompiler.CheckFileInProject(parseResults,filename,fileVersion,source,options,isResultObsolete,textSnapshotInfo)
             
-    /// For a given script file, get the CheckOptions implied by the #load closure
-    member ic.GetCheckOptionsFromScriptRoot(filename, source, loadedTimestamp) = 
-        ic.GetCheckOptionsFromScriptRoot(filename, source, loadedTimestamp, [| |]) 
+    /// Typecheck a source code file, returning a handle to the results of the 
+    /// parse including the reconstructed types in the file.
+    member ic.ParseAndCheckFileInProject(filename:string, fileVersion:int, source:string, options:FSharpProjectOptions, ?isResultObsolete, ?textSnapshotInfo:obj) =        
+        let (IsResultObsolete(isResultObsolete)) = defaultArg isResultObsolete (IsResultObsolete(fun _ -> false))
+        backgroundCompiler.ParseAndCheckFileInProject(filename, fileVersion, source, options, isResultObsolete, textSnapshotInfo)
+            
+    member ic.ParseAndCheckProject(options) =
+        backgroundCompiler.ParseAndCheckProject(options)
+
+    member ic.KeepProjectAlive(options) =
+        backgroundCompiler.KeepProjectAlive(options)
 
-    member ic.GetCheckOptionsFromScriptRoot(filename : string, source : string, loadedTimestamp : DateTime, otherFlags) :  CheckOptions = 
-        backgroundCompiler.GetCheckOptionsFromScriptRoot(filename,source,loadedTimestamp, otherFlags)
+    /// For a given script file, get the ProjectOptions implied by the #load closure
+    member ic.GetProjectOptionsFromScript(filename, source, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib) = 
+        backgroundCompiler.GetProjectOptionsFromScript(filename,source,?loadedTimeStamp=loadedTimeStamp, ?otherFlags=otherFlags, ?useFsiAuxLib=useFsiAuxLib)
         
+    member ic.GetProjectOptionsFromCommandLineArgs(projectFileName, argv, ?loadedTimeStamp) = 
+        let loadedTimeStamp = defaultArg loadedTimeStamp DateTime.MaxValue // Not 'now', we don't want to force reloading
+        { ProjectFileName = projectFileName
+          ProjectFileNames = [| |] // the project file names will be inferred from the ProjectOptions
+          OtherOptions = argv 
+          ReferencedProjects= [| |]  
+          IsIncompleteTypeCheckEnvironment = false
+          UseScriptResolutionRules = false
+          LoadTime = loadedTimeStamp
+          UnresolvedReferences = None }
+
+    /// Begin background parsing the given project.
+    member ic.StartBackgroundCompile(options) = backgroundCompiler.CheckProjectInBackground(options) 
+
     /// Begin background parsing the given project.
-    member ic.StartBackgroundCompile(options) = backgroundCompiler.StartBuilding(options) 
+    member ic.CheckProjectInBackground(options) = backgroundCompiler.CheckProjectInBackground(options) 
+
     /// Stop the background compile.
-    member ic.StopBackgroundCompile() = backgroundCompiler.StopBuilding()
+    member ic.StopBackgroundCompile() = backgroundCompiler.StopBackgroundCompile()
 
     /// Block until the background compile finishes.
     //
     // This is for unit testing only
     member ic.WaitForBackgroundCompile() = backgroundCompiler.WaitForBackgroundCompile()
 
-    static member GlobalForegroundParseCountStatistic = foregroundParseCount
-    static member GlobalForegroundTypeCheckCountStatistic = foregroundTypeCheckCount
+    // Publish the ReactorOps from the background compiler for internal use
+    member ic.ReactorOps = backgroundCompiler.ReactorOps
+    member ic.CurrentQueueLength = backgroundCompiler.CurrentQueueLength
+
+
+    member ic.BeforeBackgroundFileCheck  = backgroundCompiler.BeforeBackgroundFileCheck
+    member ic.FileParsed  = backgroundCompiler.FileParsed
+    member ic.FileChecked  = backgroundCompiler.FileChecked
+    member ic.ProjectChecked = backgroundCompiler.ProjectChecked
+    member ic.ImplicitlyStartBackgroundWork with get() = backgroundCompiler.ImplicitlyStartBackgroundWork and set v = backgroundCompiler.ImplicitlyStartBackgroundWork <- v
+    member ic.PauseBeforeBackgroundWork with get() = Reactor.Singleton.PauseBeforeBackgroundWork and set v = Reactor.Singleton.PauseBeforeBackgroundWork <- v
+
+    static member GlobalForegroundParseCountStatistic = BackgroundCompiler.GlobalForegroundParseCountStatistic
+    static member GlobalForegroundTypeCheckCountStatistic = BackgroundCompiler.GlobalForegroundTypeCheckCountStatistic
           
-module internal PrettyNaming =
-    let IsIdentifierPartCharacter     = Microsoft.FSharp.Compiler.PrettyNaming.IsIdentifierPartCharacter
-    let IsLongIdentifierPartCharacter = Microsoft.FSharp.Compiler.PrettyNaming.IsLongIdentifierPartCharacter
-    let GetLongNameFromString         = Microsoft.FSharp.Compiler.PrettyNaming.SplitNamesForILPath
-    let FormatAndOtherOverloadsString(remainingOverloads) = FSComp.SR.typeInfoOtherOverloads(remainingOverloads)
-        
+    // Obsolete
+    member ic.MatchBraces(filename, source, options) =
+        ic.MatchBracesAlternate(filename, source, options) 
+        |> Async.RunSynchronously
+        |> Array.map (fun (a,b) -> Range.toZ a, Range.toZ b)
 
-#if EXTENSIBLE_DUMPER
-#if DEBUG
+    member bc.ParseFile(filename, source, options) = 
+        bc.ParseFileInProject(filename, source, options) 
+        |> Async.RunSynchronously
 
-namespace Internal.Utilities.Diagnostic
-open Microsoft.FSharp.Compiler.Env
-open Microsoft.FSharp.Compiler.Tastops 
-open Microsoft.FSharp.Compiler.Infos
-open Microsoft.FSharp.Compiler
-open System.Text
+    member bc.TypeCheckSource(parseResults, filename, fileVersion, source, options, isResultObsolete, textSnapshotInfo:obj) = 
+        bc.CheckFileInProjectIfReady(parseResults, filename, fileVersion, source, options, isResultObsolete, textSnapshotInfo)
+        |> Async.RunSynchronously
 
-type internal typDumper(dumpTarget:Microsoft.FSharp.Compiler.Tast.TType) =
-    override self.ToString() = 
-        match !global_g with
-        | Some g -> 
-            let denv = DisplayEnv.Empty g
-            let sb = StringBuilder()
-            NicePrint.outputTy denv sb dumpTarget
-            sb.ToString()
-        | None -> "No global environment"
+    member ic.GetCheckOptionsFromScriptRoot(filename, source, loadedTimeStamp) = 
+        ic.GetProjectOptionsFromScript(filename, source, loadedTimeStamp, [| |]) 
+        |> Async.RunSynchronously
+
+    member ic.GetCheckOptionsFromScriptRoot(filename, source, loadedTimeStamp, otherFlags) = 
+        ic.GetProjectOptionsFromScript(filename, source, loadedTimeStamp, otherFlags) 
+        |> Async.RunSynchronously
+
+    member ic.GetProjectOptionsFromScriptRoot(filename, source, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib) = 
+        ic.GetProjectOptionsFromScript(filename, source, ?loadedTimeStamp=loadedTimeStamp, ?otherFlags=otherFlags, ?useFsiAuxLib=useFsiAuxLib)
+        |> Async.RunSynchronously
+
+    member ic.FileTypeCheckStateIsDirty  = backgroundCompiler.BeforeBackgroundFileCheck
+
+    static member Instance = globalInstance
+    member internal __.FrameworkImportsCache = backgroundCompiler.FrameworkImportsCache
+
+type FsiInteractiveChecker(reactorOps: IReactorOperations, tcConfig, tcGlobals, tcImports, tcState, loadClosure) =
+    let keepAssemblyContents = false
+
+    static member CreateErrorInfos (tcConfig, allErrors, mainInputFileName, errors) = 
+        Parser.CreateErrorInfos(tcConfig, allErrors, mainInputFileName, errors)
+
+    member __.ParseAndCheckInteraction (source) =
+
+        let mainInputFileName = "stdin.fsx" 
+        // Note: projectSourceFiles is only used to compute isLastCompiland, and is ignored if Build.IsScript(mainInputFileName) is true (which it is in this case).
+        let projectSourceFiles = [ ]
+        let parseErrors, _matchPairs, inputOpt, anyErrors = Parser.ParseOneFile (source, false, true, mainInputFileName, projectSourceFiles, tcConfig)
+        let dependencyFiles = [] // interactions have no dependencies
+        let parseResults = FSharpParseFileResults(parseErrors, inputOpt, parseHadErrors = anyErrors, dependencyFiles = dependencyFiles)
+
+        let backgroundErrors = []
+        let tcErrors, tcFileResult = 
+            Parser.TypeCheckOneFile(parseResults,source,mainInputFileName,"project",tcConfig,tcGlobals,tcImports,  tcState,
+                                    loadClosure,backgroundErrors,reactorOps,(fun () -> true),(fun _ -> false),None)
+
+        match tcFileResult with 
+        | Parser.TypeCheckAborted.No scope ->
+            let errors = [|  yield! parseErrors; yield! tcErrors |]
+            let typeCheckResults = FSharpCheckFileResults (errors,Some scope, None, reactorOps)   
+            let projectResults = FSharpCheckProjectResults (keepAssemblyContents, errors, Some(tcGlobals, tcImports, scope.ThisCcu, scope.CcuSig, [scope.ScopeSymbolUses], None, None, mkSimpleAssRef "stdin", tcState.TcEnvFromImpls.AccessRights, None), reactorOps)
+            parseResults, typeCheckResults, projectResults
+        | _ -> 
+            failwith "unexpected aborted"
+                
+//----------------------------------------------------------------------------
+// CompilerEnvironment, DebuggerEnvironment
+//
+
+/// Information about the compilation environment
+[]
+module CompilerEnvironment =
+    /// These are the names of assemblies that should be referenced for .fs, .ml, .fsi, .mli files that
+    /// are not asscociated with a project
+    let DefaultReferencesForOrphanSources = DefaultBasicReferencesForOutOfProjectSources
     
-#endif    
-#endif
+    /// Publish compiler-flags parsing logic. Must be fast because its used by the colorizer.
+    let GetCompilationDefinesForEditing(filename:string, compilerFlags : string list) =
+        let defines = ref(SourceFileImpl.AdditionalDefinesForUseInEditor(filename))
+        let MatchAndExtract(flag:string,prefix:string) =
+            if flag.StartsWith(prefix) then 
+                let sub = flag.Substring(prefix.Length)
+                let trimmed = sub.Trim()
+                defines := trimmed :: !defines
+        let rec QuickParseDefines = function
+            | hd :: tail ->
+               MatchAndExtract(hd,"-d:")
+               MatchAndExtract(hd,"--define:")
+               QuickParseDefines tail
+            | _ -> ()
+        QuickParseDefines compilerFlags
+        !defines
+            
+    /// Return true if this is a subcategory of error or warning message that the language service can emit
+    let IsCheckerSupportedSubcategory(subcategory:string) =
+        // Beware: This code logic is duplicated in DocumentTask.cs in the language service
+        PhasedError.IsSubcategoryOfCompile(subcategory)
+
+/// Information about the debugging environment
+module DebuggerEnvironment =
+    /// Return the language ID, which is the expression evaluator id that the
+    /// debugger will use.
+    let GetLanguageID() =
+        System.Guid(0xAB4F38C9u, 0xB6E6us, 0x43baus, 0xBEuy, 0x3Buy, 0x58uy, 0x08uy, 0x0Buy, 0x2Cuy, 0xCCuy, 0xE3uy)
+
+module PrettyNaming =
+    let IsIdentifierPartCharacter     x = Microsoft.FSharp.Compiler.PrettyNaming.IsIdentifierPartCharacter x
+    let IsLongIdentifierPartCharacter x = Microsoft.FSharp.Compiler.PrettyNaming.IsLongIdentifierPartCharacter x
+    let GetLongNameFromString         x = Microsoft.FSharp.Compiler.PrettyNaming.SplitNamesForILPath x
+    let FormatAndOtherOverloadsString remainingOverloads = FSComp.SR.typeInfoOtherOverloads(remainingOverloads)
+    let QuoteIdentifierIfNeeded id = Lexhelp.Keywords.QuoteIdentifierIfNeeded id
+    let KeywordNames = Lexhelp.Keywords.keywordNames
+
diff --git a/src/fsharp/vs/service.fsi b/src/fsharp/vs/service.fsi
old mode 100644
new mode 100755
index f678689cdc6..2b606577175
--- a/src/fsharp/vs/service.fsi
+++ b/src/fsharp/vs/service.fsi
@@ -1,200 +1,534 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 //----------------------------------------------------------------------------
-// API to the compiler as an incremental service for parsing,
+// SourceCodeServices API to the compiler as an incremental service for parsing,
 // type checking and intellisense-like environment-reporting.
 //----------------------------------------------------------------------------
 
 namespace Microsoft.FSharp.Compiler.SourceCodeServices
+open System
+open System.Collections.Generic
 
 open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.Range
-open System.Collections.Generic
+open Microsoft.FSharp.Compiler.TcGlobals
+open Microsoft.FSharp.Compiler.NameResolution
+open Microsoft.FSharp.Compiler.CompileOps
+
+/// Represents one parameter for one method (or other item) in a group. 
+[]
+type internal FSharpMethodGroupItemParameter = 
+
+    /// The name of the parameter.
+    member ParameterName: string
+
+    /// A key that can be used for sorting the parameters, used to help sort overloads.
+    member CanonicalTypeTextForSorting: string
+
+    /// The text to display for the parameter including its name, its type and visual indicators of other
+    /// information such as whether it is optional.
+    member Display: string
+
+/// Represents one method (or other item) in a method group. The item may represent either a method or 
+/// a single, non-overloaded item such as union case or a named function value.
+[]
+type internal FSharpMethodGroupItem = 
+
+    /// The formatted description text for the method (or other item)
+    member Description : FSharpToolTipText
+
+    /// The formatted type text for the method (or other item)
+    member TypeText: string
+
+    /// The parameters of the method in the overload set
+    member Parameters: FSharpMethodGroupItemParameter[]
 
-type internal Param = 
-    { Name: string
-      CanonicalTypeTextForSorting: string
-      Display: string
-      Description: string }
-
-[]
-// Note: this type does not hold any handles to compiler data structure.
-type internal Method = 
-    { Description : DataTipText
-      Type: string
-      Parameters: Param[]
-      /// Indicates that this not really a method, but actually a static arguments list, like TP<42,"foo"> ?
-      IsStaticArguments: bool }
+    /// Indicates that this not really a method, but actually a static arguments list, like TP<42,"foo">
+    member IsStaticArguments: bool
 
+/// Represents a group of methods (or other items) returned by GetMethods.  
 []
-// Note: this type does not hold any handles to compiler data structure. All data has been pre-formatted.
-type internal MethodOverloads = 
-    member Name: string
-    member Methods: Method[] 
+type internal FSharpMethodGroup = 
+    /// The shared name of the methods (or other items) in the group
+    member MethodName: string
 
+    /// The methods (or other items) in the group
+    member Methods: FSharpMethodGroupItem[] 
+
+/// Represents the reason why the GetDeclarationLocation operation failed.
 []
-type internal FindDeclFailureReason = 
-    // generic reason: no particular information about error
+type internal FSharpFindDeclFailureReason = 
+
+    /// Generic reason: no particular information about error
     | Unknown
-    // source code file is not available
+
+    /// Source code file is not available
     | NoSourceCode
-    // trying to find declaration of ProvidedType without TypeProviderDefinitionLocationAttribute
+
+    /// Trying to find declaration of ProvidedType without TypeProviderDefinitionLocationAttribute
     | ProvidedType of string
-    // trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute
+
+    /// Trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute
     | ProvidedMember of string
 
-[]
-type internal FindDeclResult = 
-    /// declaration not found + reason
-    | DeclNotFound of FindDeclFailureReason
-    /// found declaration; return (position-in-file, name-of-file)
-    | DeclFound      of Position * string
+/// Represents the result of the GetDeclarationLocation operation.
+[]
+type internal FSharpFindDeclResult = 
+    /// Indicates a declaration location was not found, with an additional reason
+    | DeclNotFound of FSharpFindDeclFailureReason
+    /// Indicates a declaration location was found
+    | DeclFound      of range
      
-type internal Names = string list 
-type internal NamesWithResidue = Names * string 
+/// Represents the checking context implied by the ProjectOptions 
+[]
+type internal FSharpProjectContext =
+    /// Get the resolution and full contents of the assemblies referenced by the project options
+    member GetReferencedAssemblies : unit -> FSharpAssembly list
+
+    /// Get the accessibility rights for this project context w.r.t. InternalsVisibleTo attributes granting access to other assemblies
+    member AccessibilityRights : FSharpAccessibilityRights
+
+/// Represents the use of an F# symbol from F# source code
+[]
+type internal FSharpSymbolUse = 
+    // For internal use only
+    internal new : g:TcGlobals * denv: Tastops.DisplayEnv * symbol:FSharpSymbol * itemOcc:ItemOccurence * range: range -> FSharpSymbolUse
+
+    /// The symbol referenced
+    member Symbol : FSharpSymbol 
+
+    /// The display context active at the point where the symbol is used. Can be passed to FSharpType.Format
+    /// and other methods to format items in a way that is suitable for a specific source code location.
+    member DisplayContext : FSharpDisplayContext
+
+    /// Indicates if the reference is a definition for the symbol, either in a signature or implementation
+    member IsFromDefinition : bool
+
+    /// Indicates if the reference is in a pattern
+    member IsFromPattern : bool
+
+    /// Indicates if the reference is in a syntactic type
+    member IsFromType : bool
+
+    /// Indicates if the reference is in an attribute
+    member IsFromAttribute : bool
+
+    /// Indicates if the reference is via the member being implemented in a class or object expression
+    member IsFromDispatchSlotImplementation : bool
+
+    /// Indicates if the reference is either a builder or a custom operation in a compuation expression
+    member IsFromComputationExpression : bool
+
+    /// The file name the reference occurs in 
+    member FileName: string 
+
+    /// The range of text representing the reference to the symbol
+    member RangeAlternate: range
 
+/// A handle to the results of CheckFileInProject.
 []
-/// A handle to the results of TypeCheckSource.  
-/// A live object of this type keeps the background corresponding background builder (and type providers) alive (through reference-counting)
-type internal TypeCheckResults =
-    /// The errors returned by parsing a source file
-    member Errors : ErrorInfo[]
+type internal FSharpCheckFileResults =
+    /// The errors returned by parsing a source file.
+    member Errors : FSharpErrorInfo[]
 
+    /// Get a view of the contents of the assembly up to and including the file just checked
+    member PartialAssemblySignature : FSharpAssemblySignature
+
+    /// Get the resolution of the ProjectOptions 
+    member ProjectContext : FSharpProjectContext
+
+    /// Indicates whether type checking successfully occured with some results returned. If false, indicates that 
+    /// an unrecoverable error in earlier checking/parsing/resolution steps.
     member HasFullTypeCheckInfo: bool
 
-    /// Intellisense autocompletions
-    member GetDeclarations                : untypedParseInfoOpt:UntypedParseInfo option * position:Position * lineText:string * names:NamesWithResidue * hasTextChangedSinceLastTypecheck: (obj * Range -> bool) -> Async
-    /// Resolve the names at the given location to give a data tip 
-    member GetDataTipText                 : position:Position * lineText:string * names:Names * tokenTag:int -> DataTipText
-    /// Resolve the names at the given location to give F1 keyword
-    member GetF1Keyword                   : position:Position * lineText:string * names:Names -> string option
-    /// Resolve the names at the given location to a set of methods
-    member GetMethods                     : position:Position * lineText:string * names:Names option -> MethodOverloads
-    /// Resolve the names at the given location to the declaration location of the corresponding construct
-    member GetDeclarationLocation         : position:Position * lineText:string * names:Names * tokenTag:int * isDeclaration:bool -> FindDeclResult
-
-    /// Get any extra colorization info that is available after the typecheck
-    member GetExtraColorizations : unit -> (Range * TokenColorKind)[]
-
-/// wraps the set of unresolved references providing implementations of Equals\GetHashCode
-/// of this objects of this type can be used as parts of types with generated Equals\GetHashCode
-/// i.e. records or DUs
-type internal UnresolvedReferencesSet = class end
-
-/// A set of key information for the language service's internal caches of project/script build information for a particular source file
-type internal CheckOptions = 
+    /// Get the items for a declaration list
+    ///
+    /// 
+    ///    If this is present, it is used to filter declarations based on location in the
+    ///    parse tree, specifically at 'open' declarations, 'inherit' of class or interface
+    ///    'record field' locations and r.h.s. of 'range' operator a..b
+    /// 
+    /// The line number where the completion is happening
+    /// The column number (1-based) at the end of the 'names' text 
+    /// The long identifier to the left of the '.'
+    /// The residue of a partial long identifier to the right of the '.'
+    /// The residue of a partial long identifier to the right of the '.'
+    /// 
+    ///    The text of the line where the completion is happening. This is only used to make a couple
+    ///    of adhoc corrections to completion accuracy (e.g. checking for "..")
+    /// 
+    /// 
+    ///    If text has been used from a captured name resolution from the typecheck, then 
+    ///    callback to the client to check if the text has changed. If it has, then give up
+    ///    and assume that we're going to repeat the operation later on.
+    /// 
+
+    member GetDeclarationListInfo : ParsedFileResultsOpt:FSharpParseFileResults option * line: int * colAtEndOfPartialName: int * lineText:string * qualifyingNames: string list * partialName: string * ?hasTextChangedSinceLastTypecheck: (obj * range -> bool) -> Async
+
+    /// Get the items for a declaration list in FSharpSymbol format
+    ///
+    /// 
+    ///    If this is present, it is used to filter declarations based on location in the
+    ///    parse tree, specifically at 'open' declarations, 'inherit' of class or interface
+    ///    'record field' locations and r.h.s. of 'range' operator a..b
+    /// 
+    /// The line number where the completion is happening
+    /// The column number (1-based) at the end of the 'names' text 
+    /// The long identifier to the left of the '.'
+    /// The residue of a partial long identifier to the right of the '.'
+    /// The residue of a partial long identifier to the right of the '.'
+    /// 
+    ///    The text of the line where the completion is happening. This is only used to make a couple
+    ///    of adhoc corrections to completion accuracy (e.g. checking for "..")
+    /// 
+    /// 
+    ///    If text has been used from a captured name resolution from the typecheck, then 
+    ///    callback to the client to check if the text has changed. If it has, then give up
+    ///    and assume that we're going to repeat the operation later on.
+    /// 
+    member GetDeclarationListSymbols : ParsedFileResultsOpt:FSharpParseFileResults option * line: int * colAtEndOfPartialName: int * lineText:string * qualifyingNames: string list * partialName: string * ?hasTextChangedSinceLastTypecheck: (obj * range -> bool) -> Async
+
+
+    /// Compute a formatted tooltip for the given location
+    ///
+    /// The line number where the information is being requested.
+    /// The column number at the end of the identifiers where the information is being requested.
+    /// The text of the line where the information is being requested.
+    /// The identifiers at the location where the information is being requested.
+    /// Used to discriminate between 'identifiers', 'strings' and others. For strings, an attempt is made to give a tooltip for a #r "..." location. Use a value from FSharpTokenInfo.Tag, or FSharpTokenTag.Identifier, unless you have other information available.
+    member GetToolTipTextAlternate : line:int * colAtEndOfNames:int * lineText:string * names:string list * tokenTag:int -> Async
+
+    /// Compute the Visual Studio F1-help key identifier for the given location, based on name resolution results
+    ///
+    /// The line number where the information is being requested.
+    /// The column number at the end of the identifiers where the information is being requested.
+    /// The text of the line where the information is being requested.
+    /// The identifiers at the location where the information is being requested.
+    member GetF1KeywordAlternate                   : line:int * colAtEndOfNames:int * lineText:string * names:string list -> Async
+
+
+    /// Compute a set of method overloads to show in a dialog relevant to the given code location.
+    ///
+    /// The line number where the information is being requested.
+    /// The column number at the end of the identifiers where the information is being requested.
+    /// The text of the line where the information is being requested.
+    /// The identifiers at the location where the information is being requested.
+    member GetMethodsAlternate              : line:int * colAtEndOfNames:int * lineText:string * names:string list option -> Async
+
+    /// Compute a set of method overloads to show in a dialog relevant to the given code location.  The resulting method overloads are returned as symbols.
+    /// The line number where the information is being requested.
+    /// The column number at the end of the identifiers where the information is being requested.
+    /// The text of the line where the information is being requested.
+    /// The identifiers at the location where the information is being requested.
+    member GetMethodsAsSymbols : line:int * colAtEndOfNames:int * lineText:string * names:string list -> Async
+
+    /// Resolve the names at the given location to the declaration location of the corresponding construct.
+    ///
+    /// The line number where the information is being requested.
+    /// The column number at the end of the identifiers where the information is being requested.
+    /// The text of the line where the information is being requested.
+    /// The identifiers at the location where the information is being requested.
+    /// If not given, then get the location of the symbol. If false, then prefer the location of the corresponding symbol in the implementation of the file (rather than the signature if present). If true, prefer the location of the corresponding symbol in the signature of the file (rather than the implementation).
+    member GetDeclarationLocationAlternate         : line:int * colAtEndOfNames:int * lineText:string * names:string list * ?preferFlag:bool -> Async
+
+
+    /// Resolve the names at the given location to a use of symbol.
+    ///
+    /// The line number where the information is being requested.
+    /// The column number at the end of the identifiers where the information is being requested.
+    /// The text of the line where the information is being requested.
+    /// The identifiers at the location where the information is being requested.
+    member GetSymbolUseAtLocation  : line:int * colAtEndOfNames:int * lineText:string * names:string list -> Async
+
+    /// Get any extra colorization info that is available after the typecheck
+    member GetExtraColorizationsAlternate : unit -> (range * FSharpTokenColorKind)[]
+
+    /// Get the locations of format specifiers
+    member GetFormatSpecifierLocations : unit -> range[]
+
+    /// Get all textual usages of all symbols throughout the file
+    member GetAllUsesOfAllSymbolsInFile : unit -> Async
+
+    /// Get the textual usages that resolved to the given symbol throughout the file
+    member GetUsesOfSymbolInFile : symbol:FSharpSymbol -> Async
+
+
+
+/// A handle to the results of CheckFileInProject.
+[]
+type internal FSharpCheckProjectResults =
+    /// The errors returned by processing the project
+    member Errors : FSharpErrorInfo[]
+
+    /// Get a view of the overall signature of the assembly. Only valid to use if HasCriticalErrors is false.
+    member AssemblySignature : FSharpAssemblySignature
+
+    // /// Get a view of the overall contents of the assembly. Only valid to use if HasCriticalErrors is false.
+    // member AssemblyContents : FSharpAssemblyContents
+
+    /// Get the resolution of the ProjectOptions 
+    member ProjectContext : FSharpProjectContext
+
+    /// Get the textual usages that resolved to the given symbol throughout the project
+    member GetUsesOfSymbol : symbol:FSharpSymbol -> Async
+
+    /// Get all textual usages of all symbols throughout the project
+    member GetAllUsesOfAllSymbols : unit -> Async
+
+    /// Indicates if critical errors existed in the project options
+    member HasCriticalErrors : bool 
+
+
+/// Unused in this API
+type internal UnresolvedReferencesSet 
+
+/// A set of information describing a project or script build configuration.
+type internal FSharpProjectOptions = 
     { 
       // Note that this may not reduce to just the project directory, because there may be two projects in the same directory.
       ProjectFileName: string
+      /// The files in the project
       ProjectFileNames: string[]
-      ProjectOptions: string[]
-      /// When true, the typechecking environment is known a priori to be incomplete. 
-      /// This can happen, for example, when a .fs file is opened outside of a project.
-      /// It may be appropriate, then, to not show error messages related to type checking
-      /// since they will just be noise.
+      /// Additional command line argument options for the project. These can include additional files and references.
+      OtherOptions: string[]
+      /// The command line arguments for the other projects referenced by this project, indexed by the
+      /// exact text used in the "-r:" reference in FSharpProjectOptions.
+      ReferencedProjects: (string * FSharpProjectOptions)[]
+      /// When true, the typechecking environment is known a priori to be incomplete, for
+      /// example when a .fs file is opened outside of a project. In this case, the number of error 
+      /// messages reported is reduced.
       IsIncompleteTypeCheckEnvironment : bool
       /// When true, use the reference resolution rules for scripts rather than the rules for compiler.
       UseScriptResolutionRules : bool
-      /// Timestamp of project/script load
-      LoadTime : System.DateTime
+      /// Timestamp of project/script load, used to differentiate between different instances of a project load.
+      /// This ensures that a complete reload of the project or script type checking
+      /// context occurs on project or script unload/reload.
+      LoadTime : DateTime
+      /// Unused in this API and should be 'None'
       UnresolvedReferences : UnresolvedReferencesSet option
     }
          
           
-/// Information about the compilation environment    
-module internal CompilerEnvironment =
-    /// These are the names of assemblies that should be referenced for .fs, .ml, .fsi, .mli files that
-    /// are not asscociated with a project.
-    val DefaultReferencesForOrphanSources : string list
-    /// Return the compilation defines that should be used when editing the given file.
-    val GetCompilationDefinesForEditing : filename : string * compilerFlags : string list -> string list
-    /// Return true if this is a subcategory of error or warning message that the language service can emit
-    val IsCheckerSupportedSubcategory : string -> bool
-
-/// Information about the debugging environment
-module internal DebuggerEnvironment =
-    /// Return the language ID, which is the expression evaluator id that the
-    /// debugger will use.
-    val GetLanguageID : unit -> System.Guid
-    
-/// This file has become eligible to be re-typechecked.
-/// This notifies the language service that it needs to set the dirty flag on files whose typecheck antecedents have changed.
-type internal NotifyFileTypeCheckStateIsDirty = NotifyFileTypeCheckStateIsDirty of (string -> unit)
-        
-/// Identical to _VSFILECHANGEFLAGS in vsshell.idl
-type internal DependencyChangeCode =
-    | NoChange = 0x0
-    | FileChanged = 0x00000001
-    | TimeChanged = 0x00000002
-    | Deleted = 0x00000008
-    | Added = 0x00000010   
-    
-/// Callback that indicates whether a requested result has become obsolete.    
-[]
+/// Callback which can be used by the host to indicate to the checker that a requested result has become obsolete,
+/// e.g. because of typing by the user in the editor window. This can be used to marginally increase accuracy
+/// of intellisense results in some situations.
 type internal IsResultObsolete = 
     | IsResultObsolete of (unit->bool)
 
 /// The result of calling TypeCheckResult including the possibility of abort and background compiler not caught up.
-[]
-type internal TypeCheckAnswer =
-    | NoAntecedant
-    | Aborted // because result was obsolete
-    | TypeCheckSucceeded of TypeCheckResults    
-
-[]
-[]      
-type internal InteractiveChecker =
-    /// Create an instance of an InteractiveChecker.  Currently resources are not reclaimed.
-    static member Create : NotifyFileTypeCheckStateIsDirty -> InteractiveChecker
+[]
+type internal FSharpCheckFileAnswer =
+    | Aborted // because isResultObsolete caused an abandonment of the operation
+    | Succeeded of FSharpCheckFileResults    
+
+[]      
+/// Used to parse and check F# source code.
+type internal FSharpChecker =
+    /// 
+    /// Create an instance of an FSharpChecker.  
+    /// 
+    ///
+    /// The optional size of the project checking cache.
+    /// Keep the checked contents of projects.
+    /// If false, do not keep full intermediate checking results from background checking suitable for returning from GetBackgroundCheckResultsForFileInProject. This reduces memory usage.
+    static member Create : ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool -> FSharpChecker
+
+    /// Create an instance of an FSharpChecker.
+    static member Create : unit -> FSharpChecker
+
+    /// 
+    ///   Parse a source code file, returning information about brace matching in the file.
+    ///   Return an enumeration of the matching parenthetical tokens in the file.
+    /// 
+    ///
+    /// The filename for the file, used to help caching of results.
+    /// The full source for the file.
+    /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing.
+    member MatchBracesAlternate : filename : string * source: string * options: FSharpProjectOptions -> Async<(range * range)[]>
+
+    /// 
+    /// Parse a source code file, returning a handle that can be used for obtaining navigation bar information
+    /// To get the full information, call 'CheckFileInProject' method on the result
+    /// All files except the one being checked are read from the FileSystem API
+    /// 
+    ///
+    /// The filename for the file.
+    /// The full source for the file.
+    /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing.
+    member ParseFileInProject : filename: string * source: string * options: FSharpProjectOptions -> Async
+
+    /// 
+    /// Check a source code file, returning a handle to the results of the parse including
+    /// the reconstructed types in the file.
+    ///
+    /// All files except the one being checked are read from the FileSystem API
+    /// Note: returns NoAntecedent if the background builder is not yet done preparing the type check context for the 
+    /// file (e.g. loading references and parsing/checking files in the project that this file depends upon). 
+    /// In this case, the caller can either retry, or wait for FileTypeCheckStateIsDirty to be raised for this file.
+    /// 
+    /// 
+    ///
+    /// The results of ParseFileInProject for this file.
+    /// The name of the file in the project whose source is being checked.
+    /// An integer that can be used to indicate the version of the file. This will be returned by TryGetRecentCheckResultsForFile when looking up the file.
+    /// The full source for the file.
+    /// The options for the project or script.
+    /// 
+    ///     A callback to check if a requested result is already obsolete, e.g. because of changed 
+    //      source code in the editor. Type checking is abandoned when this returns 'true'.
+    /// 
+    /// 
+    ///     An item passed back to 'hasTextChangedSinceLastTypecheck' to help determine if 
+    ///     an approximate intellisense resolution is inaccurate because a range of text has changed. This 
+    ///     can be used to marginally increase accuracy of intellisense results in some situations.
+    /// 
+    ///
+    member CheckFileInProjectIfReady : parsed: FSharpParseFileResults * filename: string * fileversion: int * source: string * options: FSharpProjectOptions * ?isResultObsolete: IsResultObsolete * ?textSnapshotInfo: obj -> Async
+
+    /// 
+    /// 
+    ///   Check a source code file, returning a handle to the results
+    /// 
+    /// 
+    ///    Note: all files except the one being checked are read from the FileSystem API
+    /// 
+    /// 
+    ///   Return FSharpCheckFileAnswer.Aborted if a parse tree was not available or if the check
+    ////  was abandoned due to isResultObsolete returning 'true' at some checkpoint during type checking.
+    /// 
+    /// 
+    ///
+    /// The results of ParseFileInProject for this file.
+    /// The name of the file in the project whose source is being checked.
+    /// An integer that can be used to indicate the version of the file. This will be returned by TryGetRecentCheckResultsForFile when looking up the file.
+    /// The full source for the file.
+    /// The options for the project or script.
+    /// 
+    ///     A callback to check if a requested result is already obsolete, e.g. because of changed 
+    //      source code in the editor. Type checking is abandoned when this returns 'true'.
+    /// 
+    /// 
+    ///     An item passed back to 'hasTextChangedSinceLastTypecheck' to help determine if 
+    ///     an approximate intellisense resolution is inaccurate because a range of text has changed. This 
+    ///     can be used to marginally increase accuracy of intellisense results in some situations.
+    /// 
+    ///
+    member CheckFileInProject : parsed: FSharpParseFileResults * filename: string * fileversion: int * source: string * options: FSharpProjectOptions * ?isResultObsolete: IsResultObsolete * ?textSnapshotInfo: obj -> Async
+
+    /// 
+    /// 
+    ///   Parse and check a source code file, returning a handle to the results 
+    /// 
+    /// 
+    ///    Note: all files except the one being checked are read from the FileSystem API
+    /// 
+    /// 
+    ///   Return FSharpCheckFileAnswer.Aborted if a parse tree was not available or if the check
+    ////  was abandoned due to isResultObsolete returning 'true' at some checkpoint during type checking.
+    /// 
+    /// 
+    ///
+    /// The name of the file in the project whose source is being checked.
+    /// An integer that can be used to indicate the version of the file. This will be returned by TryGetRecentCheckResultsForFile when looking up the file.
+    /// The full source for the file.
+    /// The options for the project or script.
+    /// 
+    ///     A callback to check if a requested result is already obsolete, e.g. because of changed 
+    //      source code in the editor. Type checking is abandoned when this returns 'true'.
+    /// 
+    /// 
+    ///     An item passed back to 'hasTextChangedSinceLastTypecheck' to help determine if 
+    ///     an approximate intellisense resolution is inaccurate because a range of text has changed. This 
+    ///     can be used to marginally increase accuracy of intellisense results in some situations.
+    /// 
+    ///
+    member ParseAndCheckFileInProject : filename: string * fileversion: int * source: string * options: FSharpProjectOptions * ?isResultObsolete: IsResultObsolete * ?textSnapshotInfo: obj -> Async
 
-    /// Parse a source code file, returning information about brace matching in the file
-    /// Return an enumeration of the matching parethetical tokens in the file
-    member MatchBraces : filename : string * source: string * options: CheckOptions -> (Range * Range)[]
+    /// 
+    /// Parse and typecheck all files in a project.
+    /// All files are read from the FileSystem API
+    /// 
+    ///
+    /// The options for the project or script.
+    member ParseAndCheckProject : options: FSharpProjectOptions -> Async
 
-    /// Parse a source code file, returning a handle that can be used for obtaining navigation bar information
-    /// To get the full information, call 'TypeCheckSource' method on the result
-    member UntypedParse : filename: string * source: string * options: CheckOptions -> UntypedParseInfo        
+    /// 
+    /// Create resources for the project and keep the project alive until the returned object is disposed.
+    /// 
+    ///
+    /// The options for the project or script.
+    member KeepProjectAlive : options: FSharpProjectOptions -> Async
 
-    /// Typecheck a source code file, returning a handle to the results of the parse including
-    /// the reconstructed types in the file.
+    /// 
+    /// For a given script file, get the FSharpProjectOptions implied by the #load closure.
+    /// All files are read from the FileSystem API, except the file being checked.
+    /// 
     ///
-    /// Return None if the background builder is not yet done prepring the type check results for the antecedent to the 
-    /// file.
-    member TypeCheckSource : parsed: UntypedParseInfo * filename: string * fileversion: int * source: string * options: CheckOptions * isResultObsolete: IsResultObsolete * textSnapshotInfo: obj -> TypeCheckAnswer
-    
-    /// For a given script file, get the CheckOptions implied by the #load closure
-    member GetCheckOptionsFromScriptRoot : filename : string * source : string * loadedTimestamp : System.DateTime -> CheckOptions
-        
-#if NO_QUICK_SEARCH_HELPERS // only used in QuickSearch prototype
-#else
-    /// For QuickSearch index - not used by VS2008/VS2010/VS11
-    member GetSlotsCount : options : CheckOptions -> int
-    /// For QuickSearch index - not used by VS2008/VS2010/VS11
-    member UntypedParseForSlot : slot:int * options : CheckOptions -> UntypedParseInfo
-#endif // QUICK_SEARCH
-
-    /// Try to get recent type check results for a file. This may arbitrarily refuse to return any
-    /// results if the InteractiveChecker would like a chance to recheck the file, in which case
-    /// UntypedParse and TypeCheckSource should be called. If the source of the file
-    /// has changed the results returned by this function may be out of date, though may
-    /// still be usable for generating intellsense menus and information.
-    member TryGetRecentTypeCheckResultsForFile : filename: string * options:CheckOptions -> (UntypedParseInfo * TypeCheckResults * (*version*)int) option
-
-    /// This function is called when the entire environment is known to have changed for reasons not encoded in the CheckOptions of any project/compilation.
+    /// Used to differentiate between scripts, to consider each script a separate project.
+    /// Also used in formatted error messages.
+    ///
+    /// Indicates when the script was loaded into the editing environment,
+    /// so that an 'unload' and 'reload' action will cause the script to be considered as a new project,
+    /// so that references are re-resolved.
+    member GetProjectOptionsFromScript : filename: string * source: string * ?loadedTimeStamp: DateTime * ?otherFlags: string[] * ?useFsiAuxLib: bool -> Async
+
+    /// 
+    /// Get the FSharpProjectOptions implied by a set of command line arguments.
+    /// 
+    ///
+    /// Used to differentiate between projects and for the base directory of the project.
+    /// The command line arguments for the project build.
+    /// Indicates when the script was loaded into the editing environment,
+    /// so that an 'unload' and 'reload' action will cause the script to be considered as a new project,
+    /// so that references are re-resolved.
+    member GetProjectOptionsFromCommandLineArgs : projectFileName: string * argv: string[] * ?loadedTimeStamp: DateTime -> FSharpProjectOptions
+           
+    /// 
+    /// Like ParseFileInProject, but uses results from the background builder.
+    /// All files are read from the FileSystem API, including the file being checked.
+    /// 
+    ///
+    /// The filename for the file.
+    /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing.
+    member GetBackgroundParseResultsForFileInProject : filename : string * options : FSharpProjectOptions -> Async
+
+    /// 
+    /// Like ParseFileInProject, but uses the existing results from the background builder.
+    /// All files are read from the FileSystem API, including the file being checked.
+    /// 
+    ///
+    /// The filename for the file.
+    /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing.
+    member GetBackgroundCheckResultsForFileInProject : filename : string * options : FSharpProjectOptions -> Async
+
+    /// 
+    /// Try to get type check results for a file. This looks up the results of recent type checks of the
+    /// same file, regardless of contents. The version tag specified in the original check of the file is returned.
+    /// If the source of the file has changed the results returned by this function may be out of date, though may
+    /// still be usable for generating intellisense menus and information.
+    /// 
+    /// The filename for the file.
+    /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing.
+    /// Optionally, specify source that must match the previous parse precisely.
+    member TryGetRecentCheckResultsForFile : filename: string * options:FSharpProjectOptions * ?source: string -> (FSharpParseFileResults * FSharpCheckFileResults * (*version*)int) option
+
+    /// This function is called when the entire environment is known to have changed for reasons not encoded in the ProjectOptions of any project/compilation.
     /// For example, the type provider approvals file may have changed.
     member InvalidateAll : unit -> unit    
         
-    /// This function is called when the configuration is known to have changed for reasons not encoded in the CheckOptions.
+    /// This function is called when the configuration is known to have changed for reasons not encoded in the ProjectOptions.
     /// For example, dependent references may have been deleted or created.
-    member InvalidateConfiguration: options: CheckOptions -> unit    
+    member InvalidateConfiguration: options: FSharpProjectOptions -> unit    
 
-    /// Begin background parsing the given project.
-    member StartBackgroundCompile: options: CheckOptions -> unit
+    /// Set the project to be checked in the background.  Overrides any previous call to CheckProjectInBackground
+    member CheckProjectInBackground: options: FSharpProjectOptions -> unit
 
     /// Stop the background compile.
+    //[]
     member StopBackgroundCompile : unit -> unit
 
     /// Block until the background compile finishes.
+    //[]
     member WaitForBackgroundCompile : unit -> unit
     
     /// Report a statistic for testability
@@ -206,21 +540,88 @@ type internal InteractiveChecker =
     /// Flush all caches and garbage collect
     member ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients : unit -> unit
 
+    /// Current queue length of the service, for debug purposes. 
+    /// In addition, a single async operation or a step of a background build 
+    /// may be in progress - such an operation is not counted in the queue length.
+    member CurrentQueueLength : int
+
     /// This function is called when a project has been cleaned/rebuilt, and thus any live type providers should be refreshed.
-    member NotifyProjectCleaned: options: CheckOptions -> unit    
+    member NotifyProjectCleaned: options: FSharpProjectOptions -> unit    
+    
+    /// Notify the host that the logical type checking context for a file has now been updated internally
+    /// and that the file has become eligible to be re-typechecked for errors.
+    ///
+    /// The event will be raised on a background thread.
+    member BeforeBackgroundFileCheck : IEvent
+
+    /// Raised after a parse of a file in the background analysis.
+    ///
+    /// The event will be raised on a background thread.
+    member FileParsed : IEvent
+
+    /// Raised after a check of a file in the background analysis.
+    ///
+    /// The event will be raised on a background thread.
+    member FileChecked : IEvent
+    
+    /// Get or set a flag which controls if background work is started implicitly. 
+    ///
+    /// If true, calls to CheckFileInProject implicitly start a background check of that project, replacing
+    /// any other background checks in progress. This is useful in IDE applications with spare CPU cycles as 
+    /// it prepares the project analysis results for use.  The default is 'true'.
+    member ImplicitlyStartBackgroundWork: bool with get, set
+    
+    /// Get or set the pause time in milliseconds before background work is started.
+    member PauseBeforeBackgroundWork: int with get, set
     
+    /// Notify the host that a project has been fully checked in the background (using file contents provided by the file system API)
+    ///
+    /// The event may be raised on a background thread.
+    member ProjectChecked : IEvent
+
+    // For internal use only 
+    member internal ReactorOps : IReactorOperations
 
+    // One shared global singleton for use by multiple add-ins
+    static member Instance : FSharpChecker
+    member internal FrameworkImportsCache : FrameworkImportsCache
 
 
-#if FSI_SERVER_INTELLISENSE
-// These functions determine all declarations, called by fsi.fs for fsi-server requests.
-module internal FsiIntelisense =
-    val getDeclarations : Build.TcConfig * Env.TcGlobals * Build.TcImports * Build.TcState -> string -> string[] -> (string * string * string * int)[]
-#endif
+// An object to typecheck source in a given typechecking environment.
+// Used internally to provide intellisense over F# Interactive.
+type internal FsiInteractiveChecker =
+    internal new : ops: IReactorOperations * tcConfig: TcConfig * tcGlobals: TcGlobals * tcImports: TcImports * tcState: TcState * loadClosure: LoadClosure option ->  FsiInteractiveChecker 
+    member internal ParseAndCheckInteraction : source:string -> FSharpParseFileResults * FSharpCheckFileResults * FSharpCheckProjectResults
+    static member internal CreateErrorInfos : tcConfig: TcConfig * allErrors:bool * mainInputFileName : string * seq -> FSharpErrorInfo[]
 
+/// Information about the compilation environment 
+[]   
+module internal CompilerEnvironment =
+    /// These are the names of assemblies that should be referenced for .fs or .fsi files that
+    /// are not asscociated with a project.
+    val DefaultReferencesForOrphanSources : string list
+    /// Return the compilation defines that should be used when editing the given file.
+    val GetCompilationDefinesForEditing : filename : string * compilerFlags : string list -> string list
+    /// Return true if this is a subcategory of error or warning message that the language service can emit
+    val IsCheckerSupportedSubcategory : string -> bool
+
+/// Information about the debugging environment
+module internal DebuggerEnvironment =
+    /// Return the language ID, which is the expression evaluator id that the
+    /// debugger will use.
+    val GetLanguageID : unit -> Guid
+
+/// A set of helpers related to naming of identifiers
 module internal PrettyNaming =
-    val IsIdentifierPartCharacter     : (char -> bool)
-    val IsLongIdentifierPartCharacter : (char -> bool)
-    val GetLongNameFromString         : (string -> Names)
-    // Temporary workaround for no localized resources in FSharp.LanguageService.dll
-    val FormatAndOtherOverloadsString : (int -> string)
+    val IsIdentifierPartCharacter     : char -> bool
+    val IsLongIdentifierPartCharacter : char -> bool
+    val GetLongNameFromString         : string -> string list
+
+    val FormatAndOtherOverloadsString : int -> string
+
+    /// A utility to help determine if an identifier needs to be quoted 
+    val QuoteIdentifierIfNeeded : string -> string
+
+    /// All the keywords in the F# langauge 
+    val KeywordNames : string list
+
diff --git a/src/ilx/pubclo.fs b/src/ilx/EraseClosures.fs
similarity index 99%
rename from src/ilx/pubclo.fs
rename to src/ilx/EraseClosures.fs
index d94eacb3868..19505c55fff 100644
--- a/src/ilx/pubclo.fs
+++ b/src/ilx/EraseClosures.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseIlxFuncs
+module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseClosures
 
 open Internal.Utilities
 
diff --git a/src/ilx/pubclo.fsi b/src/ilx/EraseClosures.fsi
similarity index 73%
rename from src/ilx/pubclo.fsi
rename to src/ilx/EraseClosures.fsi
index 9c0fa3850c8..9c268e84534 100644
--- a/src/ilx/pubclo.fsi
+++ b/src/ilx/EraseClosures.fsi
@@ -1,7 +1,7 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 /// Compiler use only.  Erase closures
-module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseIlxFuncs
+module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseClosures
 
 open Microsoft.FSharp.Compiler.AbstractIL
 open Microsoft.FSharp.Compiler.AbstractIL.IL 
diff --git a/src/ilx/cu_erase.fs b/src/ilx/EraseUnions.fs
similarity index 99%
rename from src/ilx/cu_erase.fs
rename to src/ilx/EraseUnions.fs
index 1a2be51f2ce..bf7431e0de4 100644
--- a/src/ilx/cu_erase.fs
+++ b/src/ilx/EraseUnions.fs
@@ -1,11 +1,11 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 // -------------------------------------------------------------------- 
 // Erase discriminated unions.
 // -------------------------------------------------------------------- 
 
 
-module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseIlxUnions
+module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseUnions
 
 open Internal.Utilities
 open Microsoft.FSharp.Compiler.AbstractIL 
@@ -1116,7 +1116,7 @@ let rec convClassUnionDef cenv enc td cud =
           Properties=mkILProperties (tagProps @ basePropsFromAlt @ selfProps @ existingProps);
           CustomAttrs=td.CustomAttrs;
           tdKind = ILTypeDefKind.Class; }
-       // The .cctor goes on the Cases type since that's where the constant fields for nullary cosntructors live
+       // The .cctor goes on the Cases type since that's where the constant fields for nullary constructors live
        |> addConstFieldInit 
 
     baseTypeDef
diff --git a/src/ilx/cu_erase.fsi b/src/ilx/EraseUnions.fsi
similarity index 70%
rename from src/ilx/cu_erase.fsi
rename to src/ilx/EraseUnions.fsi
index ef7c3d0a88c..96ed542478c 100644
--- a/src/ilx/cu_erase.fsi
+++ b/src/ilx/EraseUnions.fsi
@@ -1,10 +1,10 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 // -------------------------------------------------------------------- 
 // Compiler use only.  Erase discriminated unions.
 // -------------------------------------------------------------------- 
 
-module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseIlxUnions
+module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseUnions
 
 open Microsoft.FSharp.Compiler.AbstractIL.IL
 open Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.Types
diff --git a/src/ilx/ilxsettings.fs b/src/ilx/ilxsettings.fs
index e37be1444b7..bc4cccbe4c2 100644
--- a/src/ilx/ilxsettings.fs
+++ b/src/ilx/ilxsettings.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.IlxSettings 
 
diff --git a/src/root.traversal.targets b/src/root.traversal.targets
index 78e3cb4eb77..69f71f1271a 100644
--- a/src/root.traversal.targets
+++ b/src/root.traversal.targets
@@ -1,4 +1,4 @@
-
+
 
   
     
diff --git a/src/update.cmd b/src/update.cmd
index bcf825bb36a..8d268120400 100644
--- a/src/update.cmd
+++ b/src/update.cmd
@@ -1,5 +1,5 @@
 @rem ===========================================================================================================
-@rem Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, 
+@rem Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, 
 @rem               Version 2.0.  See License.txt in the project root for license information.
 @rem ===========================================================================================================
 
@@ -11,7 +11,7 @@ if /i "%1" == "release" goto :ok
 if /i "%1" == "vsdebug" goto :ok
 if /i "%1" == "vsrelease" goto :ok
 
-echo GACs built binaries, adds required strong name verification skipping, and optionally NGens built binaries
+echo adding required strong name verification skipping, and NGening built binaries
 echo Usage:
 echo    update.cmd debug   [-ngen]
 echo    update.cmd release [-ngen]
@@ -26,9 +26,17 @@ set BINDIR=%~dp0..\%1\net40\bin
 if /i "%PROCESSOR_ARCHITECTURE%"=="x86" set X86_PROGRAMFILES=%ProgramFiles%
 if /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" set X86_PROGRAMFILES=%ProgramFiles(x86)%
 
-set GACUTIL="%X86_PROGRAMFILES%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe"
-set SN32="%X86_PROGRAMFILES%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe"
-set SN64="%X86_PROGRAMFILES%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\sn.exe"
+set REGEXE32BIT=reg.exe
+if not "%OSARCH%"=="x86" set REGEXE32BIT=%WINDIR%\syswow64\reg.exe
+
+                            FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+
+set SN32="%WINSDKNETFXTOOLS%sn.exe"
+set SN64="%WINSDKNETFXTOOLS%x64\sn.exe"
 set NGEN32=%windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe
 set NGEN64=%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe
 
@@ -71,9 +79,6 @@ if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
     %SN64% -Vr Salsa,b03f5f7f11d50a3a
 )
 
-rem Only GACing FSharp.Core for now
-%GACUTIL% /if %BINDIR%\FSharp.Core.dll
-
 rem NGen fsc, fsi, fsiAnyCpu, and FSharp.Build.dll
 if /i not "%2"=="-ngen" goto :donengen
 
diff --git a/src/update.fs b/src/update.fs
new file mode 100644
index 00000000000..7637631816f
--- /dev/null
+++ b/src/update.fs
@@ -0,0 +1,179 @@
+
+module UpdateCmd
+
+open System.IO
+open NUnit.Framework
+open Microsoft.Win32
+
+open PlatformHelpers
+open FSharpTestSuiteTypes
+
+type Configuration = 
+    | DEBUG
+    | RELEASE
+    override this.ToString() = 
+        match this with
+        | DEBUG -> "Debug"
+        | RELEASE -> "Release"
+
+type updateCmdArgs = 
+    { Configuration : Configuration
+      Ngen : bool }
+
+let private regQuery = WindowsPlatform.regQuery
+
+let private checkResult result =
+    match result with
+    | CmdResult.ErrorLevel err -> let x = err, (sprintf "ERRORLEVEL %d" err) in Failure (RunError.ProcessExecError x)
+    | CmdResult.Success -> Success ()
+
+let updateCmd envVars args = processor {
+    // @echo off
+    // setlocal
+    ignore "useless"
+
+    // if /i "%1" == "debug" goto :ok
+    // if /i "%1" == "release" goto :ok
+    ignore "already validated input"
+
+    // echo adding required strong name verification skipping, and NGening built binaries
+    // echo Usage:
+    // echo    update.cmd debug [-ngen]
+    // echo    update.cmd release [-ngen]
+    // exit /b 1
+    ignore "useless help"
+
+    //:ok
+    let env k () = match envVars |> Map.tryFind k with None -> Failure (sprintf "environment variable '%s' not found" k) | Some x -> Success x
+    let ``~dp0`` = __SOURCE_DIRECTORY__
+    let exec exe args = 
+        log "%s %s" exe args
+        use toLog = redirectToLog ()
+        Process.exec { RedirectError = Some toLog.Post; RedirectOutput = Some toLog.Post; RedirectInput = None } ``~dp0`` envVars exe args
+
+    // set BINDIR=%~dp0..\%1\net40\bin
+    let! binDir = env "FSCBINPATH"
+
+    // if /i "%PROCESSOR_ARCHITECTURE%"=="x86" set X86_PROGRAMFILES=%ProgramFiles%
+    // if /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" set X86_PROGRAMFILES=%ProgramFiles(x86)%
+    let processorArchitecture = WindowsPlatform.processorArchitecture envVars
+    let x86_ProgramFiles = WindowsPlatform.x86ProgramFilesDirectory envVars processorArchitecture
+
+    let! windir = env "windir"
+
+    let REGEXE32BIT path value =
+        let hklm32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
+        match hklm32 |> regQuery path value with
+        | Some (:? string as d) -> Some d
+        | Some _ | None -> None
+
+    let allWINSDKNETFXTOOLS = seq {
+    //                             FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+        yield REGEXE32BIT @"Software\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" "InstallationFolder"
+    // if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+        yield REGEXE32BIT @"Software\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" "InstallationFolder"
+    // if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+        yield REGEXE32BIT @"Software\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" "InstallationFolder"
+    // if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+        yield REGEXE32BIT @"Software\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" "InstallationFolder"
+    // if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+        yield REGEXE32BIT @"Software\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" "InstallationFolder"
+        }
+
+    let WINSDKNETFXTOOLS = match allWINSDKNETFXTOOLS |> Seq.tryPick id with Some sdk -> sdk | None -> ""
+
+    // set SN32="%WINSDKNETFXTOOLS%sn.exe"
+    let SN32 = WINSDKNETFXTOOLS/"sn.exe"
+    // set SN64="%WINSDKNETFXTOOLS%x64\sn.exe"
+    let SN64 = WINSDKNETFXTOOLS/"x64"/"sn.exe"
+    // set NGEN32=%windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe
+    let NGEN32 = windir/"Microsoft.NET"/"Framework"/"v4.0.30319"/"ngen.exe"
+    // set NGEN64=%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe
+    let NGEN64 = windir/"Microsoft.NET"/"Framework64"/"v4.0.30319"/"ngen.exe"
+
+    let checkResult = function CmdResult.ErrorLevel err -> Failure (sprintf "ERRORLEVEL %d" err) | CmdResult.Success -> Success ()
+
+    let ngen32 = Commands.ngen exec NGEN32 >> checkResult
+    let ngen64 = Commands.ngen exec NGEN64 >> checkResult
+    let sn32 = exec SN32 >> checkResult
+    let sn64 = exec SN32 >> checkResult
+
+    // rem Disable strong-name validation for F# binaries built from open source that are signed with the microsoft key
+    // %SN32% -Vr FSharp.Core,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.Build,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.Compiler.Interactive.Settings,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.Compiler.Hosted,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.Compiler,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.Compiler.Server.Shared,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.Editor,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.LanguageService,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.LanguageService.Base,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.LanguageService.Compiler,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.ProjectSystem.Base,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.ProjectSystem.FSharp,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.ProjectSystem.PropertyPages,b03f5f7f11d50a3a
+    // %SN32% -Vr FSharp.VS.FSI,b03f5f7f11d50a3a
+    // %SN32% -Vr Unittests,b03f5f7f11d50a3a
+    // %SN32% -Vr Salsa,b03f5f7f11d50a3a
+
+    let strongName (snExe: string -> Result<_,_>) = processor {
+        let all = 
+            [ "FSharp.Core";
+            "FSharp.Build";
+            "FSharp.Compiler.Interactive.Settings";"FSharp.Compiler.Hosted";
+            "FSharp.Compiler";"FSharp.Compiler.Server.Shared";
+            "FSharp.Editor";
+            "FSharp.LanguageService";"FSharp.LanguageService.Base";"FSharp.LanguageService.Compiler";
+            "FSharp.ProjectSystem.Base";"FSharp.ProjectSystem.FSharp";"FSharp.ProjectSystem.PropertyPages";
+            "FSharp.VS.FSI";
+            "VisualFSharp.Unittests";
+            "VisualFSharp.Salsa" ]
+        for a in all do
+            do! snExe (sprintf " -Vr %s,b03f5f7f11d50a3a" a) 
+        }
+
+    do! strongName sn32
+        
+    //if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
+    do! if processorArchitecture = AMD64 then
+            //  %SN64% -Vr FSharp.Core,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.Build,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.Compiler.Interactive.Settings,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.Compiler.Hosted,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.Compiler,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.Compiler.Server.Shared,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.Editor,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.LanguageService,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.LanguageService.Base,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.LanguageService.Compiler,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.ProjectSystem.Base,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.ProjectSystem.FSharp,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.ProjectSystem.PropertyPages,b03f5f7f11d50a3a
+            //  %SN64% -Vr FSharp.VS.FSI,b03f5f7f11d50a3a
+            //  %SN64% -Vr Unittests,b03f5f7f11d50a3a
+            //  %SN64% -Vr Salsa,b03f5f7f11d50a3a
+            strongName sn64
+        else 
+            (fun () -> Success ())
+    //)
+
+    // rem NGen fsc, fsi, fsiAnyCpu, and FSharp.Build.dll
+    // if /i not "%2"=="-ngen" goto :donengen
+
+    if args.Ngen then
+        // "%NGEN32%" install "%BINDIR%\fsc.exe" /queue:1
+        // "%NGEN32%" install "%BINDIR%\fsi.exe" /queue:1
+        // "%NGEN32%" install "%BINDIR%\FSharp.Build.dll" /queue:1
+        // "%NGEN32%" executeQueuedItems 1
+        do! ngen32 [binDir/"fsc.exe"; binDir/"fsi.exe"; binDir/"FSharp.Build.dll"]
+
+        // if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
+        if processorArchitecture = AMD64 then
+            // "%NGEN64%" install "%BINDIR%\fsiAnyCpu.exe" /queue:1
+            // "%NGEN64%" install "%BINDIR%\FSharp.Build.dll" /queue:1
+            // "%NGEN64%" executeQueuedItems 1
+            do! ngen64 [binDir/"fsiAnyCpu.exe"; binDir/"FSharp.Build.dll"]
+        // )
+    //:donengen
+    
+    }
diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs
index e382e333b8e..a1757256c2f 100644
--- a/src/utils/CompilerLocationUtils.fs
+++ b/src/utils/CompilerLocationUtils.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Internal.Utilities
 open System
@@ -214,10 +214,13 @@ module internal FSharpEnvironment =
                 // Property pages (ApplicationPropPage.vb)
 
                 let key20 = @"Software\Microsoft\.NETFramework\AssemblyFolders\Microsoft.FSharp-" + FSharpTeamVersionNumber 
-#if FX_ATLEAST_45
+#if VS_VERSION_DEV12
+                let key40 = @"Software\Microsoft\FSharp\3.1\Runtime\v4.0"
+#endif
+#if VS_VERSION_DEV14
                 let key40 = @"Software\Microsoft\FSharp\4.0\Runtime\v4.0"
 #else
-                let key40 = @"Software\Microsoft\FSharp\2.0\Runtime\v4.0"
+                let key40 = @"Software\Microsoft\FSharp\4.1\Runtime\v4.0"
 #endif
                 let key1,key2 = 
                     match FSharpCoreLibRunningVersion with 
@@ -247,7 +250,7 @@ module internal FSharpEnvironment =
 #if FX_ATLEAST_45
 
     // Apply the given function to the registry entry corresponding to the subkey.
-    // The reg key is dispoed at the end of the scope.
+    // The reg key is disposed at the end of the scope.
     let useKey subkey f =
         let key = Registry.LocalMachine.OpenSubKey subkey
         try f key 
diff --git a/src/utils/HashMultiMap.fs b/src/utils/HashMultiMap.fs
index 8aa1f3a32f8..213b0c118c4 100644
--- a/src/utils/HashMultiMap.fs
+++ b/src/utils/HashMultiMap.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Internal.Utilities.Collections
 
diff --git a/src/utils/HashMultiMap.fsi b/src/utils/HashMultiMap.fsi
index da2c204e0b0..449708c89bf 100644
--- a/src/utils/HashMultiMap.fsi
+++ b/src/utils/HashMultiMap.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Internal.Utilities.Collections
 
diff --git a/src/utils/resizearray.fs b/src/utils/ResizeArray.fs
similarity index 98%
rename from src/utils/resizearray.fs
rename to src/utils/ResizeArray.fs
index 9c00f38f851..cc392e92c0b 100644
--- a/src/utils/resizearray.fs
+++ b/src/utils/ResizeArray.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Internal.Utilities
 
diff --git a/src/utils/resizearray.fsi b/src/utils/ResizeArray.fsi
similarity index 98%
rename from src/utils/resizearray.fsi
rename to src/utils/ResizeArray.fsi
index 240adcf2114..15c42121871 100644
--- a/src/utils/resizearray.fsi
+++ b/src/utils/ResizeArray.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Internal.Utilities
 
diff --git a/src/utils/TaggedCollections.fs b/src/utils/TaggedCollections.fs
index 384c9c19198..1e39f71a25f 100644
--- a/src/utils/TaggedCollections.fs
+++ b/src/utils/TaggedCollections.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Internal.Utilities.Collections.Tagged
 
@@ -302,7 +302,7 @@ namespace Internal.Utilities.Collections.Tagged
             // Perf: tried bruteForce for low heights, but nothing significant 
             match t1,t2 with               
             | SetNode(k1,t11,t12,h1),SetNode(k2,t21,t22,h2) -> // (t11 < k < t12) AND (t21 < k2 < t22) 
-                // Divide and Quonquer:
+                // Divide and Conquer:
                 //   Suppose t1 is largest.
                 //   Split t2 using pivot k1 into lo and hi.
                 //   Union disjoint subproblems and then combine. 
diff --git a/src/utils/TaggedCollections.fsi b/src/utils/TaggedCollections.fsi
index f02e0d9194d..f70b592826a 100644
--- a/src/utils/TaggedCollections.fsi
+++ b/src/utils/TaggedCollections.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 /// This namespace contains FSharp.PowerPack extensions for the F# collection types
 namespace Internal.Utilities.Collections.Tagged
@@ -12,7 +12,7 @@ namespace Internal.Utilities.Collections.Tagged
     []
     type internal Set<'T,'ComparerTag> when 'ComparerTag :> IComparer<'T> =
 
-        /// A useful shortcut for Set.add.  Note this operation prodcues a new set
+        /// A useful shortcut for Set.add.  Note this operation produces a new set
         /// and does not mutate the original set.  The new set will share many storage
         /// nodes with the original.  See the Set module for further operations on sets.
         member Add : 'T -> Set<'T,'ComparerTag>
diff --git a/src/utils/filename.fs b/src/utils/filename.fs
index ba37fa0b612..19d489542bc 100644
--- a/src/utils/filename.fs
+++ b/src/utils/filename.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 module internal Internal.Utilities.Filename
 
diff --git a/src/utils/filename.fsi b/src/utils/filename.fsi
index a67c98426e4..7a8a8e1cbc8 100644
--- a/src/utils/filename.fsi
+++ b/src/utils/filename.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 /// Some filename operations.    
 module internal Internal.Utilities.Filename
@@ -22,7 +22,7 @@ val hasExtension: string -> bool
 /// Get the filename of the given path
 val fileNameOfPath: string -> string
 
-/// Get the filename without extenstion of the given path
+/// Get the filename without extension of the given path
 val fileNameWithoutExtension: string -> string
 
 
diff --git a/src/utils/prim-lexing.fs b/src/utils/prim-lexing.fs
index 0ad2479db63..d82a24c20aa 100644
--- a/src/utils/prim-lexing.fs
+++ b/src/utils/prim-lexing.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 #nowarn "47" // recursive initialization of LexBuffer
 
@@ -9,53 +9,65 @@ namespace Internal.Utilities.Text.Lexing
     open Microsoft.FSharp.Collections
     open System.Collections.Generic
 
-    // REVIEW: This type showed up on a parsing-intensive performance measurement. 
-    // REVIEW: Consider whether it can be smaller or can be a struct. 
-    type internal Position = 
-        { /// The file name index for the position, use fileOfFileIndex in range.fs to decode
-          posFileIndex: int;
-          /// The line number for the position
-          posLineNum: int;
-          /// The line number for the position in the original source file
-          posOriginalLineNum : int;
-          /// The absolute offset of the beginning of the line
-          posStartOfLineOffset: int;
-          /// The absolute offset of the column for the position
-          posColumnOffset: int; }
-        member x.FileIndex = x.posFileIndex
-        member x.Line = x.posLineNum
-        member x.OriginalLine = x.posOriginalLineNum
-        member x.AbsoluteOffset = x.posColumnOffset
-        member x.StartOfLine = x.posStartOfLineOffset
-        member x.StartOfLineAbsoluteOffset = x.posStartOfLineOffset
-        member x.Column = x.posColumnOffset - x.posStartOfLineOffset
-        member pos.NextLine = 
-            { pos with 
-                    posOriginalLineNum = pos.OriginalLine + 1;
-                    posLineNum = pos.Line+1; 
-                    posStartOfLineOffset = pos.AbsoluteOffset }
-        member pos.EndOfToken n = {pos with posColumnOffset=pos.posColumnOffset + n }
-        member pos.ShiftColumnBy by = {pos with posColumnOffset = pos.posColumnOffset + by}
-        member pos.ColumnMinusOne = { pos with posColumnOffset = pos.posStartOfLineOffset-1 }
-
-        member pos.ApplyLineDirective (fileIdx, line) =
-            {pos with posFileIndex = fileIdx; 
-                      posStartOfLineOffset= pos.posColumnOffset;
-                      posLineNum=line };
-
-        static member Empty = 
-            { posFileIndex=0; 
-              posLineNum= 0; 
-              posOriginalLineNum = 0;
-              posStartOfLineOffset= 0; 
-              posColumnOffset=0 }
+    []
+    type internal Position =
+        val FileIndex: int
+        val Line: int
+        val OriginalLine: int
+        val AbsoluteOffset: int
+        val StartOfLineAbsoluteOffset: int
+        member x.Column = x.AbsoluteOffset - x.StartOfLineAbsoluteOffset
+
+        new (fileIndex: int, line: int, originalLine: int, startOfLineAbsoluteOffset: int, absoluteOffset: int) =
+            { FileIndex = fileIndex
+              Line = line
+              OriginalLine = originalLine
+              AbsoluteOffset = absoluteOffset
+              StartOfLineAbsoluteOffset = startOfLineAbsoluteOffset }
+
+        member x.NextLine = 
+            Position (x.FileIndex,
+                      x.Line + 1,
+                      x.OriginalLine + 1,
+                      x.AbsoluteOffset,
+                      x.AbsoluteOffset)
+
+        member x.EndOfToken n = 
+            Position (x.FileIndex,
+                      x.Line,
+                      x.OriginalLine,
+                      x.StartOfLineAbsoluteOffset,
+                      x.AbsoluteOffset + n)
+
+        member x.ShiftColumnBy by = 
+            Position (x.FileIndex,
+                      x.Line,
+                      x.OriginalLine,
+                      x.StartOfLineAbsoluteOffset,
+                      x.AbsoluteOffset + by)
+
+        member x.ColumnMinusOne = 
+            Position (x.FileIndex,
+                      x.Line,
+                      x.OriginalLine,
+                      x.StartOfLineAbsoluteOffset,
+                      x.StartOfLineAbsoluteOffset - 1)
+
+        member x.ApplyLineDirective (fileIdx, line) =
+            Position (fileIdx,
+                      line,
+                      x.OriginalLine,
+                      x.AbsoluteOffset,
+                      x.AbsoluteOffset)
+
+        static member Empty = Position ()
 
         static member FirstLine fileIdx = 
-            { posFileIndex= fileIdx; 
-              posStartOfLineOffset=0;
-              posColumnOffset=0;
-              posOriginalLineNum = 0;
-              posLineNum=1 }
+            Position (fileIdx,
+                      1,
+                      0,
+                      0,
+                      0)
 
     type internal LexBufferFiller<'Char> = (LexBuffer<'Char> -> unit) 
         
@@ -63,7 +75,7 @@ namespace Internal.Utilities.Text.Lexing
         internal LexBuffer<'Char>(filler: LexBufferFiller<'Char>) = 
         let context = new Dictionary(1) 
         let mutable buffer=[||];
-        /// number of valid charactes beyond bufferScanStart 
+        /// number of valid characters beyond bufferScanStart 
         let mutable bufferMaxScanLength=0;
         /// count into the buffer when scanning 
         let mutable bufferScanStart=0;
diff --git a/src/utils/prim-lexing.fsi b/src/utils/prim-lexing.fsi
index 5ed7da699f7..6898b3d9d1f 100644
--- a/src/utils/prim-lexing.fsi
+++ b/src/utils/prim-lexing.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 // LexBuffers are for use with automatically generated lexical analyzers,
 // in particular those produced by 'fslex'.
@@ -10,21 +10,20 @@ open Microsoft.FSharp.Core
 open Microsoft.FSharp.Control
 
 /// Position information stored for lexing tokens
-[]
+[]
 type internal Position = 
-     interface System.IComparable
      /// The file index for the file associated with the input stream, use fileOfFileIndex in range.fs to decode
-     member FileIndex : int
+     val FileIndex : int
      /// The line number in the input stream, assuming fresh positions have been updated 
      /// for the new line by modifying the EndPos property of the LexBuffer.
-     member Line : int
+     val Line : int
      /// The line number for the position in the input stream, assuming fresh positions have been updated 
      /// using for the new line
-     member OriginalLine : int
+     val OriginalLine : int
      /// The character number in the input stream
-     member AbsoluteOffset : int
+     val AbsoluteOffset : int
      /// Return absolute offset of the start of the line marked by the position
-     member StartOfLineAbsoluteOffset : int
+     val StartOfLineAbsoluteOffset : int
      /// Return the column number marked by the position, i.e. the difference between the AbsoluteOffset and the StartOfLineAbsoluteOffset
      member Column : int
      // Given a position just beyond the end of a line, return a position at the start of the next line
diff --git a/src/utils/prim-parsing.fs b/src/utils/prim-parsing.fs
index a7bf323de67..938e3a12f3d 100644
--- a/src/utils/prim-parsing.fs
+++ b/src/utils/prim-parsing.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace  Internal.Utilities.Text.Parsing
 open Internal.Utilities
@@ -420,7 +420,7 @@ module internal Implementation =
                         // and an EOF token. 
                         if inEofCountDown && eofCountDown < 10 then 
 #if DEBUG
-                            if Flags.debug then printfn "poppin stack, lokking to shift both 'error' and that token, during end-of-file error recovery" ;
+                            if Flags.debug then printfn "popping stack, looking to shift both 'error' and that token, during end-of-file error recovery" ;
 #endif
                             popStackUntilErrorShifted(if haveLookahead then Some(lookaheadToken) else None);
 
diff --git a/src/utils/prim-parsing.fsi b/src/utils/prim-parsing.fsi
index a8288c82f0a..48981741849 100644
--- a/src/utils/prim-parsing.fsi
+++ b/src/utils/prim-parsing.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Internal.Utilities.Text.Parsing
 open Internal.Utilities
@@ -86,9 +86,9 @@ type internal Tables<'tok> =
     /// Returns an object indicating the final synthesized value for the parse.
     member Interpret :  lexer:(LexBuffer -> 'tok) * lexbuf:LexBuffer * startState:int -> obj 
 
-/// Indicates an accept action has occured
+/// Indicates an accept action has occurred
 exception internal Accept of obj
-/// Indicates a parse error has occured and parse recovery is in progress
+/// Indicates a parse error has occurred and parse recovery is in progress
 exception internal RecoverableParseError
 
 #if DEBUG
diff --git a/src/utils/sformat.fs b/src/utils/sformat.fs
index e8dc0a37c2c..0d13894c6f4 100644
--- a/src/utils/sformat.fs
+++ b/src/utils/sformat.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 // This file is compiled 3(!) times in the codebase
 //    - as the internal implementation of printf '%A' formatting 
@@ -145,12 +145,6 @@ namespace Microsoft.FSharp.Text.StructuredFormat
 
         let aboveL  l r = mkNode l r (Broken 0)
 
-        let joinN i l r = mkNode l r (Breakable i)                                      
-        let join  = joinN 0
-        let join1 = joinN 1
-        let join2 = joinN 2
-        let join3 = joinN 3
-
         let tagAttrL tag attrs l = Attr(tag,attrs,l)
 
         let apply2 f l r = if isEmptyL l then r else
@@ -168,9 +162,9 @@ namespace Microsoft.FSharp.Text.StructuredFormat
             | [x]   -> x
             | x::xs ->
                 let rec process' prefixL = function
-                    []    -> prefixL
+                  | []    -> prefixL
                   | y::ys -> process' ((tagger prefixL) ++ y) ys
-                in  process' x xs
+                process' x xs
             
         let commaListL x = tagListL (fun prefixL -> prefixL ^^ rightL ",") x
         let semiListL x  = tagListL (fun prefixL -> prefixL ^^ rightL ";") x
@@ -184,7 +178,7 @@ namespace Microsoft.FSharp.Text.StructuredFormat
           | x::ys -> List.fold (fun pre y -> pre @@ y) x ys
 
         let optionL xL = function
-            None   -> wordL "None"
+          | None   -> wordL "None"
           | Some x -> wordL "Some" -- (xL x)
 
         let listL xL xs = leftL "[" ^^ sepListL (sepL ";") (List.map xL xs) ^^ rightL "]"
@@ -787,7 +781,7 @@ namespace Microsoft.FSharp.Text.StructuredFormat
 
         let formatStringInWidth (width:int) (str:string) =
             // Return a truncated version of the string, e.g.
-            //   "This is the initial text, which has been truncat"+[12 chars]
+            //   "This is the initial text, which has been truncated"+[12 chars]
             //
             // Note: The layout code forces breaks based on leaf size and possible break points.
             //       It does not force leaf size based on width.
@@ -899,7 +893,7 @@ namespace Microsoft.FSharp.Text.StructuredFormat
                                                   let alternativeObjL = 
                                                     match alternativeObj with 
                                                         // A particular rule is that if the alternative property
-                                                        // returns a string, we turn off auto-quoting and esaping of
+                                                        // returns a string, we turn off auto-quoting and escaping of
                                                         // the string, i.e. just treat the string as display text.
                                                         // This allows simple implementations of 
                                                         // such as
@@ -1165,31 +1159,6 @@ namespace Microsoft.FSharp.Text.StructuredFormat
         // pprinter: leafFormatter
         // --------------------------------------------------------------------
 
-#if Suggestion4299
-        // See bug 4299. Suppress FSI_dddd+ from fsi printer.
-        let fixupForInteractiveFSharpClassesWithNoToString obj (text:string) =
-              // Given obj:T.
-              // If T is a nested type inside a parent type called FSI_dddd, then it looks like an F# Interactive type.
-              // Further, if the .ToString() text starts with "FSI_dddd+T" then it looks like it's the default ToString.
-              // A better test: it is default ToString if the MethodInfo.DeclaringType is System.Object.
-              // In this case, replace "FSI_dddd+T" by "T".
-              // assert(obj <> null)
-              let fullName = obj.GetType().FullName // e.g. "FSI_0123+Name"
-              let name     = obj.GetType().Name     // e.g. "Name"
-              let T = obj.GetType()      
-              if text.StartsWith(fullName) then
-                  // text could be a default .ToString() since it starts with the FullName of the type. More checks...
-                  if T.IsNested &&
-                     T.DeclaringType.Name.StartsWith("FSI_") &&                             // Name has "FSI_" which is 
-                     T.DeclaringType.Name.Substring(4) |> Seq.forall System.Char.IsDigit    // followed by digits?
-                  then
-                      name ^ text.Substring(fullName.Length)    // replace fullName by name at start of text
-                  else
-                      text
-              else
-                text
-#endif
-
         let leafFormatter (opts:FormatOptions) (obj :obj) =
             match obj with 
             | null -> "null"
@@ -1225,11 +1194,7 @@ namespace Microsoft.FSharp.Text.StructuredFormat
             | :? bool   as b -> (if b then "true" else "false")
             | :? char   as c -> "\'" + formatChar true c + "\'"
             | _ -> try  let text = obj.ToString()
-//Suggestion4299. Not yet fixed.
-//#if COMPILER
-//                      let text = fixupForInteractiveFSharpClassesWithNoToString obj text
-//#endif  
-                        text
+                        if text = null then "" else text
                    with e ->
                      // If a .ToString() call throws an exception, catch it and use the message as the result.
                      // This may be informative, e.g. division by zero etc...
diff --git a/src/utils/sformat.fsi b/src/utils/sformat.fsi
index af61be7cc1c..f33f1b30423 100644
--- a/src/utils/sformat.fsi
+++ b/src/utils/sformat.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 // This file is compiled 4(!) times in the codebase
 //    - as the internal implementation of printf '%A' formatting 
@@ -173,7 +173,7 @@ namespace Microsoft.FSharp.Text.StructuredFormat
         /// See tagL
         val tagAttrL : text:string -> maps:(string * string) list -> layout:Layout -> Layout
 
-        /// For limitting layout of list-like sequences (lists,arrays,etc).
+        /// For limiting layout of list-like sequences (lists,arrays,etc).
         /// unfold a list of items using (project and z) making layout list via itemL.
         /// If reach maxLength (before exhausting) then truncate.
         val unfoldL : selector:('T -> Layout) -> folder:('State -> ('T * 'State) option) -> state:'State -> count:int -> Layout list
@@ -188,7 +188,7 @@ namespace Microsoft.FSharp.Text.StructuredFormat
     /// If ShowProperties is set the printing process will evaluate properties of the values being
     /// displayed.  This may cause additional computation.  
     ///
-    /// The ShowIEnumerable is set the printing process will force the evalution of IEnumerable objects
+    /// The ShowIEnumerable is set the printing process will force the evaluation of IEnumerable objects
     /// to a small, finite depth, as determined by the printing parameters.
     /// This may lead to additional computation being performed during printing.
     ///
@@ -257,7 +257,7 @@ namespace Microsoft.FSharp.Text.StructuredFormat
         /// call to Object.ToString() on the boxed version of the input.
         val any_to_string: value:'T -> string
 
-        /// Ouput any value to a channel using the same set of formatting rules
+        /// Output any value to a channel using the same set of formatting rules
         /// as any_to_string
         val output_any: writer:TextWriter -> value:'T -> unit
 
diff --git a/tests/BuildTestTools.cmd b/tests/BuildTestTools.cmd
index 4735edc9abd..6c6b5b56cb8 100644
--- a/tests/BuildTestTools.cmd
+++ b/tests/BuildTestTools.cmd
@@ -25,8 +25,6 @@ if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\common7\ide\devenv.ex
 if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0
 if exist "%VS120COMNTOOLS%" set VisualStudioVersion=12.0
 
-
-
 :vsversionset
 if '%VisualStudioVersion%' == '' echo Error: Could not find an installation of Visual Studio && goto :eof
 
@@ -55,6 +53,19 @@ if exist %~dp0\..\%1\net40\bin (
     xcopy /Y %~dp0\..\%1\net40\bin\FSharp.Core.optdata %~dp0\fsharpqa\testenv\bin  || goto :error
 )
 
+echo set NUNITPATH=%~dp0%..\packages\NUnit.Console.3.0.0\tools\
+set NUNITPATH=%~dp0%..\packages\NUnit.Console.3.0.0\tools\
+echo if not exist "%NUNITPATH%" 
+if not exist "%NUNITPATH%" (
+    echo here
+    pushd %~dp0..
+    .\.nuget\nuget.exe restore packages.config -PackagesDirectory packages
+    popd
+)    
+echo  "%NUNITPATH%*.*"  "%~dp0\fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
+xcopy "%NUNITPATH%*.*"  "%~dp0\fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
+echo  "%~dp0\fsharpqa\testenv\src\nunit*.*" "%~dp0\fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
+xcopy "%~dp0\fsharpqa\testenv\src\nunit*.*" "%~dp0\fsharpqa\testenv\bin\nunit\*.*" /S /Q /Y
 goto :EOF
 
 :error
diff --git a/tests/Convert-NUnit2Args-to-NUnit3Where.fsx b/tests/Convert-NUnit2Args-to-NUnit3Where.fsx
new file mode 100644
index 00000000000..4cc8f55adc6
--- /dev/null
+++ b/tests/Convert-NUnit2Args-to-NUnit3Where.fsx
@@ -0,0 +1,86 @@
+#r "System.Core.dll"
+
+open System
+
+type CmdArgs = { IncludeCategories: string option; ExcludeCategories: string option }
+
+type Expr =
+    | And of Expr list
+    | Or of Expr list
+    | Equal of Prop * string
+    | NotEqual of Prop * string
+and Prop =
+    | Category
+    | Property of string
+
+let toWhereExpr (cmdArgs: CmdArgs) =
+    
+    let split (line: string) = 
+        line.Split([| "," |], StringSplitOptions.RemoveEmptyEntries)
+        |> Array.map (fun s -> s.Trim())
+        |> List.ofArray
+
+    let includesList = 
+        cmdArgs.IncludeCategories
+        |> Option.map split
+        |> function None -> [] | Some l -> l
+    let excludesList = 
+        cmdArgs.ExcludeCategories
+        |> Option.map split
+        |> function None -> [] | Some l -> l
+
+    let il = includesList |> List.map (fun c -> Equal(Category, c)) |> Or
+
+    let el = excludesList |> List.map (fun c -> NotEqual(Category, c)) |> And
+
+    And([il; el])
+
+let rec exprToString (w: Expr) =
+    let addParens = sprintf "(%s)"
+    let sanitize (s: string) = if s.Contains(" ") then sprintf "'%s'" s else s
+    let propS p = match p with Category -> "cat" | Property name -> sanitize name
+
+    match w with
+    | And [] -> None
+    | Or [] -> None
+    | And l ->
+        match l |> List.map exprToString |> List.choose id with
+        | [] -> None
+        | [x] -> Some x
+        | xs -> Some (xs |> List.map addParens |> String.concat " and ") 
+    | Or l ->
+        match l |> List.map exprToString |> List.choose id with
+        | [] -> None
+        | [x] -> Some x
+        | xs -> Some (xs |> List.map addParens |> String.concat " or ")
+    | Equal (prop, v) -> Some (sprintf "%s == %s" (propS prop) (sanitize v))
+    | NotEqual (prop, v) -> Some (sprintf "%s != %s" (propS prop) (sanitize v))
+
+let parseCmdArgs (args: string list) =
+    match args with
+    | [a; b] -> { IncludeCategories = Some a; ExcludeCategories = Some b }
+    | xs -> failwithf "Invalid arguments %A" xs
+    
+let main args =
+    args
+    |> parseCmdArgs 
+    |> toWhereExpr 
+    |> exprToString
+    |> function None -> "" | Some s -> s
+    |> printfn "%s"
+
+let rec getScriptArgs l = 
+    match l with
+    | [] -> []
+    | "--" :: rest -> rest
+    | _ :: tail -> getScriptArgs tail
+
+try
+    Environment.GetCommandLineArgs()
+    |> List.ofArray
+    |> getScriptArgs
+    |> main
+    exit 0
+with e ->
+    printfn "%s" e.Message
+    exit 1
diff --git a/tests/RunTests.cmd b/tests/RunTests.cmd
index e15f9619a7f..a7ebbea2eeb 100644
--- a/tests/RunTests.cmd
+++ b/tests/RunTests.cmd
@@ -10,30 +10,47 @@ goto :USAGE
 
 :flavor_ok
 
-set NUNITPATH=%~dp0%..\packages\NUnit.Runners.2.6.4\tools\
-if not exist "%NUNITPATH%" (
-    pushd %~dp0..
+set NUNITPATH=%~dp0\fsharpqa\testenv\bin\nunit\
+if not exist "%~dp0%..\packages\NUnit.Console.3.0.0\tools\" (
+    pushd %~dp0
     .\.nuget\nuget.exe restore packages.config -PackagesDirectory packages
+    call buildtesttools.cmd %FLAVOR%
     popd
-)    
+)
+SET NUNIT3_CONSOLE=%~dp0%..\packages\NUnit.Console.3.0.0\tools\nunit3-console.exe
+SET LKG_FSI=%~dp0%..\lkg\FSharp-14.0.23413.0\bin\Fsi.exe
 
 rem "ttags" indicates what test areas will be run, based on the tags in the test.lst files
 set TTAGS_ARG=
+SET TTAGS=
 set _tmp=%3
-if not '%_tmp%' == '' set TTAGS_ARG=-ttags:%_tmp:"=%
+if not '%_tmp%' == '' (
+    set TTAGS_ARG=-ttags:%_tmp:"=%
+    set TTAGS=%_tmp:"=%
+)
 
 rem "nottags" indicates which test areas/test cases will NOT be run, based on the tags in the test.lst and env.lst files
 set NO_TTAGS_ARG=-nottags:ReqPP,NOOPEN
+set NO_TTAGS=ReqPP,NOOPEN
 set _tmp=%4
-if not '%_tmp%' == '' set NO_TTAGS_ARG=-nottags:ReqPP,NOOPEN,%_tmp:"=%
+if not '%_tmp%' == '' (
+    set NO_TTAGS_ARG=-nottags:ReqPP,NOOPEN,%_tmp:"=%
+    set NO_TTAGS=ReqPP,NOOPEN,%_tmp:"=%
+)
 
-if /I "%APPVEYOR_CI%" == "1" (set NO_TTAGS_ARG=%NO_TTAGS_ARG%,NO_CI)
+if /I "%APPVEYOR_CI%" == "1" (
+    set NO_TTAGS_ARG=%NO_TTAGS_ARG%,NO_CI
+    set NO_TTAGS=%NO_TTAGS%,NO_CI
+)
 
 set PARALLEL_ARG=-procs:%NUMBER_OF_PROCESSORS%
 
 rem This can be set to 1 to reduce the number of permutations used and avoid some of the extra-time-consuming tests
 set REDUCED_RUNTIME=1
-if "%REDUCED_RUNTIME%" == "1" set NO_TTAGS_ARG=%NO_TTAGS_ARG%,Expensive
+if "%REDUCED_RUNTIME%" == "1" (
+    set NO_TTAGS_ARG=%NO_TTAGS_ARG%,Expensive
+    set NO_TTAGS=%NO_TTAGS%,Expensive
+)
 
 rem Set this to 1 in order to use an external compiler host process
 rem    This only has an effect when running the FSHARPQA tests, but can
@@ -47,6 +64,29 @@ rem folder where test logs/results will be dropped
 set RESULTSDIR=%~dp0\TestResults
 if not exist "%RESULTSDIR%" (mkdir "%RESULTSDIR%")
 
+setlocal EnableDelayedExpansion
+
+SET CONV_V2_TO_V3_CMD="%LKG_FSI%" --exec --nologo "%~dp0%\Convert-NUnit2Args-to-NUnit3Where.fsx" -- "!TTAGS!" "!NO_TTAGS!"
+echo %CONV_V2_TO_V3_CMD%
+
+SET CONV_V2_TO_V3_CMD_TEMPFILE=%~dp0%nunit3args.txt
+
+%CONV_V2_TO_V3_CMD% >%CONV_V2_TO_V3_CMD_TEMPFILE%
+
+IF ERRORLEVEL 1 (
+  echo Error converting args to nunit 3 test selection language, the nunit3-console --where argument
+  type "%CONV_V2_TO_V3_CMD_TEMPFILE%"
+  del /Q "%CONV_V2_TO_V3_CMD_TEMPFILE%"
+  exit /b 1
+)
+
+set /p TTAGS_NUNIT_WHERE=<%CONV_V2_TO_V3_CMD_TEMPFILE%
+if not '!TTAGS_NUNIT_WHERE!' == '' (set TTAGS_NUNIT_WHERE=--where "!TTAGS_NUNIT_WHERE!")
+
+del /Q "%CONV_V2_TO_V3_CMD_TEMPFILE%"
+
+setlocal DisableDelayedExpansion
+
 if /I "%2" == "fsharp" (goto :FSHARP)
 if /I "%2" == "fsharpqa" (goto :FSHARPQA)
 if /I "%2" == "fsharpqadowntarget" (goto :FSHARPQA)
@@ -81,13 +121,16 @@ if /I "%2" == "ideunit" (goto :IDEUNIT)
 
 echo Usage:
 echo.
-echo RunTests.cmd ^ ^ [TagToRun^|"Tags,To,Run"] [TagNotToRun^|"Tags,Not,To,Run"]
+echo RunTests.cmd ^ ^ [TagToRun^|"Tags,To,Run"] [TagNotToRun^|"Tags,Not,To,Run"]
 echo.
 exit /b 1
 
-
 :FSHARP
 
+if not '%FSHARP_TEST_SUITE_USE_NUNIT_RUNNER%' == '' (
+    goto :FSHARP_NUNIT
+)
+
 set RESULTFILE=FSharp_Results.log
 set FAILFILE=FSharp_Failures.log
 set FAILENV=FSharp_Failures
@@ -95,7 +138,7 @@ set FAILENV=FSharp_Failures
 rem Hosted compiler not supported for FSHARP suite
 set HOSTED_COMPILER=
 
-where.exe perl > NUL 2> NUL 
+where.exe perl > NUL 2> NUL
 if errorlevel 1 (
   echo Error: perl is not in the PATH
   exit /b 1
@@ -106,8 +149,22 @@ echo perl %~dp0\fsharpqa\testenv\bin\runall.pl -resultsroot %RESULTSDIR% -result
 goto :EOF
 
 
-:FSHARPQA
+:FSHARP_NUNIT
+
+set FSHARP_TEST_SUITE_CONFIGURATION=%FLAVOR%
+
+set XMLFILE=FSharpNunit_Xml.xml
+set OUTPUTFILE=FSharpNunit_Output.log
+set ERRORFILE=FSharpNunit_Error.log
 
+echo "%NUNIT3_CONSOLE%" "%FSCBINPATH%\..\..\net40\bin\FSharp.Tests.FSharp.dll" --framework:V4.0 %TTAGS_NUNIT_WHERE% --work="%FSCBINPATH%"  --output="%OUTPUTFILE%" --err="%ERRORFILE%" --result="%XMLFILE%" 
+"%NUNIT3_CONSOLE%" "%FSCBINPATH%\..\..\net40\bin\FSharp.Tests.FSharp.dll" --framework:V4.0 %TTAGS_NUNIT_WHERE% --work="%FSCBINPATH%"  --output="%OUTPUTFILE%" --err="%ERRORFILE%" --result="%XMLFILE%"
+
+call :UPLOAD_XML "%XMLFILE%"
+goto :EOF
+
+
+:FSHARPQA
 set OSARCH=%PROCESSOR_ARCHITECTURE%
 
 set X86_PROGRAMFILES=%ProgramFiles%
@@ -116,7 +173,8 @@ if "%OSARCH%"=="AMD64" set X86_PROGRAMFILES=%ProgramFiles(x86)%
 set REGEXE32BIT=reg.exe
 if not "%OSARCH%"=="x86" set REGEXE32BIT=%WINDIR%\syswow64\reg.exe
 
-                            FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+                            FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
+if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
 if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
 if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
 if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
@@ -124,26 +182,24 @@ set PATH=%PATH%;%WINSDKNETFXTOOLS%
 
 IF NOT DEFINED SNEXE32 IF EXIST "%WINSDKNETFXTOOLS%sn.exe"               set SNEXE32=%WINSDKNETFXTOOLS%sn.exe
 IF NOT DEFINED SNEXE64 IF EXIST "%WINSDKNETFXTOOLS%x64\sn.exe"           set SNEXE64=%WINSDKNETFXTOOLS%x64\sn.exe
-IF NOT DEFINED GACUTILEXE32 IF EXIST "%WINSDKNETFXTOOLS%gacutil.exe"     set GACUTILEXE32=%WINSDKNETFXTOOLS%gacutil.exe
-IF NOT DEFINED GACUTILEXE64 IF EXIST "%WINSDKNETFXTOOLS%x64\gacutil.exe" set GACUTILEXE64=%WINSDKNETFXTOOLS%x64\gacutil.exe
 
 set FSC=%FSCBINPATH%\fsc.exe
 set PATH=%FSCBINPATH%;%PATH%
 
-set FSCVPREVBINPATH=%X86_PROGRAMFILES%\Microsoft SDKs\F#\3.1\Framework\v4.0
+set FSCVPREVBINPATH=%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0
 set FSCVPREV=%FSCVPREVBINPATH%\fsc.exe
 
 REM == VS-installed paths to FSharp.Core.dll
-set FSCOREDLLPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0
+set FSCOREDLLPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.1.9055
 set FSCOREDLL20PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v2.0\2.3.0.0
-set FSCOREDLLPORTABLEPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.4.0
-set FSCOREDLLNETCOREPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.4.0
-set FSCOREDLLNETCORE78PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.4.0
-set FSCOREDLLNETCORE259PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.4.0
+set FSCOREDLLPORTABLEPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.41.9055
+set FSCOREDLLNETCOREPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.41.9055
+set FSCOREDLLNETCORE78PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.41.9055
+set FSCOREDLLNETCORE259PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.41.9055
 set FSDATATPPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\Type Providers
-set FSCOREDLLVPREVPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.1.0
+set FSCOREDLLVPREVPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0
 
-REM == open source logic        
+REM == open source logic
 if exist "%FSCBinPath%\FSharp.Core.dll" set FSCOREDLLPATH=%FSCBinPath%
 if exist "%FSCBinPath%\..\..\net20\bin\FSharp.Core.dll" set FSCOREDLL20PATH=%FSCBinPath%\..\..\net20\bin
 if exist "%FSCBinPath%\..\..\portable47\bin\FSharp.Core.dll" set FSCOREDLLPORTABLEPATH=%FSCBinPath%\..\..\portable47\bin
@@ -164,7 +220,7 @@ set FSCOREDLLVPREVPATH=%FSCOREDLLVPREVPATH%\FSharp.Core.dll
 for /d %%i in (%WINDIR%\Microsoft.NET\Framework\v4.0.?????) do set CORDIR=%%i
 set PATH=%PATH%;%CORDIR%
 
-if not exist %WINDIR%\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll set NO_TTAGS_ARG=%NO_TTAGS_ARG%,Req20 
+if not exist %WINDIR%\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll set NO_TTAGS_ARG=%NO_TTAGS_ARG%,Req20
 
 set RESULTFILE=FSharpQA_Results.log
 set FAILFILE=FSharpQA_Failures.log
@@ -188,7 +244,7 @@ if /I "%2" == "fsharpqaredirect" (
    set FAILENV=FSharpQARedirect_Failures
 )
 
-where.exe perl > NUL 2> NUL 
+where.exe perl > NUL 2> NUL
 if errorlevel 1 (
   echo Error: perl is not in the PATH
   exit /b 1
@@ -203,33 +259,54 @@ goto :EOF
 
 :COREUNIT
 
-set XMLFILE=CoreUnit_%coreunitsuffix%_Xml.xml
-set OUTPUTFILE=CoreUnit_%coreunitsuffix%_Output.log
-set ERRORFILE=CoreUnit_%coreunitsuffix%_Error.log
+set XMLFILE=%RESULTSDIR%\CoreUnit_%coreunitsuffix%_Xml.xml
+set OUTPUTFILE=%RESULTSDIR%\CoreUnit_%coreunitsuffix%_Output.log
+set ERRORFILE=%RESULTSDIR%\CoreUnit_%coreunitsuffix%_Error.log
+
+echo "%NUNIT3_CONSOLE%" /framework:V4.0 /result="%XMLFILE%;format=nunit2" /output="%OUTPUTFILE%" /err="%ERRORFILE%" /work="%FSCBINPATH%" "%FSCBINPATH%\..\..\%coreunitsuffix%\bin\FSharp.Core.Unittests.dll"
+     "%NUNIT3_CONSOLE%" /framework:V4.0 /result="%XMLFILE%;format=nunit2" /output="%OUTPUTFILE%" /err="%ERRORFILE%" /work="%FSCBINPATH%" "%FSCBINPATH%\..\..\%coreunitsuffix%\bin\FSharp.Core.Unittests.dll"
 
-echo "%NUNITPATH%\nunit-console.exe" /nologo /result=%XMLFILE% /output=%OUTPUTFILE% /err=%ERRORFILE% /work=%RESULTSDIR% %FSCBINPATH%\..\..\%coreunitsuffix%\bin\FSharp.Core.Unittests.dll 
-     "%NUNITPATH%\nunit-console.exe" /nologo /result=%XMLFILE% /output=%OUTPUTFILE% /err=%ERRORFILE% /work=%RESULTSDIR% %FSCBINPATH%\..\..\%coreunitsuffix%\bin\FSharp.Core.Unittests.dll 
+call :UPLOAD_XML "%XMLFILE%"
 
 goto :EOF
 
 :COMPILERUNIT
 
-set XMLFILE=ComplierUnit_%compilerunitsuffix%_Xml.xml
-set OUTPUTFILE=ComplierUnit_%compilerunitsuffix%_Output.log
-set ERRORFILE=ComplierUnit_%compilerunitsuffix%_Error.log
+set XMLFILE=%RESULTSDIR%\CompilerUnit_%compilerunitsuffix%_Xml.xml
+set OUTPUTFILE=%RESULTSDIR%\CompilerUnit_%compilerunitsuffix%_Output.log
+set ERRORFILE=%RESULTSDIR%\CompilerUnit_%compilerunitsuffix%_Error.log
 
-echo "%NUNITPATH%\nunit-console.exe" /nologo /result=%XMLFILE% /output=%OUTPUTFILE% /err=%ERRORFILE% /work=%RESULTSDIR% %FSCBINPATH%\..\..\%compilerunitsuffix%\bin\FSharp.Compiler.Unittests.dll 
-     "%NUNITPATH%\nunit-console.exe" /nologo /result=%XMLFILE% /output=%OUTPUTFILE% /err=%ERRORFILE% /work=%RESULTSDIR% %FSCBINPATH%\..\..\%compilerunitsuffix%\bin\FSharp.Compiler.Unittests.dll 
+echo "%NUNIT3_CONSOLE%" /framework:V4.0 /result="%XMLFILE%;format=nunit2" /output="%OUTPUTFILE%" /err="%ERRORFILE%" /work="%FSCBINPATH%" "%FSCBINPATH%\..\..\%compilerunitsuffix%\bin\FSharp.Compiler.Unittests.dll"
+     "%NUNIT3_CONSOLE%" /framework:V4.0 /result="%XMLFILE%;format=nunit2" /output="%OUTPUTFILE%" /err="%ERRORFILE%" /work="%FSCBINPATH%" "%FSCBINPATH%\..\..\%compilerunitsuffix%\bin\FSharp.Compiler.Unittests.dll"
+
+call :UPLOAD_XML "%XMLFILE%"
 
 goto :EOF
 
 :IDEUNIT
 
-set XMLFILE=IDEUnit_Xml.xml
-set OUTPUTFILE=IDEUnit_Output.log
-set ERRORFILE=IDEUnit_Error.log
+set XMLFILE=%RESULTSDIR%\IDEUnit_Xml.xml
+set OUTPUTFILE=%RESULTSDIR%\IDEUnit_Output.log
+set ERRORFILE=%RESULTSDIR%\IDEUnit_Error.log
+
+pushd %FSCBINPATH%
+echo "%NUNIT3_CONSOLE%" --x86 /framework:V4.0 /result="%XMLFILE%;format=nunit2" /output="%OUTPUTFILE%" /err="%ERRORFILE%" /work="%FSCBINPATH%" "%FSCBINPATH%\VisualFSharp.Unittests.dll"
+     "%NUNIT3_CONSOLE%" --x86 /framework:V4.0 /result="%XMLFILE%;format=nunit2" /output="%OUTPUTFILE%" /err="%ERRORFILE%" /work="%FSCBINPATH%" "%FSCBINPATH%\VisualFSharp.Unittests.dll"
+popd
+call :UPLOAD_XML "%XMLFILE%"
+
+goto :EOF
+
+:UPLOAD_XML
 
-echo "%NUNITPATH%\nunit-console-x86.exe" /nologo /result=%XMLFILE% /output=%OUTPUTFILE% /err=%ERRORFILE% /work=%RESULTSDIR% %FSCBINPATH%\Unittests.dll 
-     "%NUNITPATH%\nunit-console-x86.exe" /nologo /result=%XMLFILE% /output=%OUTPUTFILE% /err=%ERRORFILE% /work=%RESULTSDIR% %FSCBINPATH%\Unittests.dll 
+rem See 
+if not defined APPVEYOR goto :EOF
+
+set saved_errorlevel=%errorlevel%
+echo Saved errorlevel %saved_errorlevel%
+powershell -File Upload-Results.ps1 "%~1"
+if %saved_errorlevel% neq 0 exit /b %saved_errorlevel%
+goto :EOF
 
-goto :EOF
\ No newline at end of file
+:: Note: "goto :EOF" returns from an in-batchfile "call" command
+:: in preference to returning from the entire batch file.
diff --git a/tests/Upload-Results.ps1 b/tests/Upload-Results.ps1
new file mode 100644
index 00000000000..5fdfde3b7ef
--- /dev/null
+++ b/tests/Upload-Results.ps1
@@ -0,0 +1,17 @@
+Param (
+    [Parameter(Mandatory = $true)]
+    [string] $path,
+    [string] $format = "nunit"
+)
+# Upload results to AppVeyor
+
+Get-Item Env:APPVEYOR_* | Write-Verbose
+Write-Verbose ""
+
+# See 
+# and 
+$url = "$env:APPVEYOR_URL/api/testresults/$format/$($env:APPVEYOR_JOB_ID)"
+Write-Output "Uploading results to $url"
+
+$wc = New-Object 'System.Net.WebClient'
+$wc.UploadFile($url, (Resolve-Path $path))
diff --git a/tests/config.bat b/tests/config.bat
index 90843e8583f..0868e704b25 100644
--- a/tests/config.bat
+++ b/tests/config.bat
@@ -40,7 +40,6 @@ if not defined CSC    set CSC=csc.exe %csc_flags%
 
 REM SDK Dependencires.
 if not defined ILDASM   set ILDASM=ildasm.exe
-if not defined GACUTIL   set GACUTIL=gacutil.exe
 if not defined PEVERIFY set PEVERIFY=peverify.exe
 if not defined RESGEN   set RESGEN=resgen.exe
 
@@ -75,7 +74,6 @@ set fsc_flags=%fsc_flags%
 
 set CLR_SUPPORTS_GENERICS=true
 set ILDASM=%ILDASM%
-set GACUTIL=%GACUTIL%
 set CLR_SUPPORTS_WINFORMS=true
 set CLR_SUPPORTS_SYSTEM_WEB=true
 
@@ -98,10 +96,11 @@ REM == Use the same runtime as our architecture
 REM == ASSUMPTION: This could be a good or bad thing.
 IF /I NOT "%PROCESSOR_ARCHITECTURE%"=="x86" set CORDIR=%CORDIR:Framework=Framework64%
 
-FOR /F "tokens=2*" %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
-
-IF "%CORSDK%"=="" FOR /F "tokens=2*" %%A IN ('reg QUERY "HKLM\Software\Microsoft\Microsoft SDKs\Windows" /v CurrentInstallFolder') DO SET CORSDK=%%BBin
-IF NOT "%CORDIR40%"=="" IF EXIST "%CORSDK%\NETFX 4.0 Tools" set CORSDK=%CORSDK%\NETFX 4.0 Tools
+FOR /F "tokens=2* delims=	 " %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
+if "%CORSDK%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
+if "%CORSDK%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
+if "%CORSDK%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
+if "%CORSDK%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
 
 REM == Fix up CORSDK for 64bit platforms...
 IF /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" SET CORSDK=%CORSDK%\x64
@@ -147,7 +146,6 @@ REM == The logic here is: pick the latest msbuild
 REM == If we are testing against NDP4.0, then don't try msbuild 3.5
 REM ==
 IF NOT "%CORSDK%"=="" IF EXIST "%CORSDK%\ildasm.exe"          SET ILDASM=%CORSDK%\ildasm.exe
-IF NOT "%CORSDK%"=="" IF EXIST "%CORSDK%\gacutil.exe"         SET GACUTIL=%CORSDK%\gacutil.exe
 IF NOT "%CORSDK%"=="" IF EXIST "%CORSDK%\peverify.exe"        SET PEVERIFY=%CORSDK%\peverify.exe
 IF NOT "%CORSDK%"=="" IF EXIST "%CORSDK%\resgen.exe"          SET RESGEN=%CORSDK%\resgen.exe
 IF NOT "%CORSDK%"=="" IF NOT EXIST "%RESGEN%" IF EXIST "%CORSDK%\..\resgen.exe"       SET RESGEN=%CORSDK%\..\resgen.exe
@@ -212,11 +210,11 @@ echo FSCOREDLLPORTABLEPATH =%FSCOREDLLPORTABLEPATH%
 echo FSCOREDLLNETCOREPATH=%FSCOREDLLNETCOREPATH%
 echo FSCOREDLLNETCORE78PATH=%FSCOREDLLNETCORE78PATH%
 echo FSCOREDLLNETCORE259PATH=%FSCOREDLLNETCORE259PATH%
+echo FSCOREDLLVPREVPATH  =%FSCOREDLLVPREVPATH%
 echo FSDATATPPATH        =%FSDATATPPATH%
 echo FSDIFF              =%FSDIFF%
 echo FSI                 =%FSI%
 echo fsi_flags           =%fsi_flags%
-echo GACUTIL             =%GACUTIL%
 echo ILDASM              =%ILDASM%
 echo INSTALL_SKU         =%INSTALL_SKU%
 echo MSBUILDTOOLSPATH    =%MSBuildToolsPath%
@@ -258,13 +256,14 @@ IF /I "%OSARCH%"=="IA64"  set X86_PROGRAMFILES=%ProgramFiles(x86)%
 IF /I "%OSARCH%"=="AMD64" set X86_PROGRAMFILES=%ProgramFiles(x86)%
 
 REM == Default VS install locations
-set FSCOREDLLPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0
+set FSCOREDLLPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.1.9055
 set FSCOREDLL20PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v2.0\2.3.0.0
-set FSCOREDLLPORTABLEPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.4.0
-set FSCOREDLLNETCOREPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.4.0
-set FSCOREDLLNETCORE78PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.4.0
-set FSCOREDLLNETCORE259PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.4.0
+set FSCOREDLLPORTABLEPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.41.9055
+set FSCOREDLLNETCOREPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.41.9055
+set FSCOREDLLNETCORE78PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.41.9055
+set FSCOREDLLNETCORE259PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.41.9055
 set FSDATATPPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\Type Providers
+set FSCOREDLLVPREVPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0
 
 REM == Check if using open build instead
 IF EXIST "%FSCBinPath%\FSharp.Core.dll" set FSCOREDLLPATH=%FSCBinPath%
@@ -281,4 +280,4 @@ set FSCOREDLLPORTABLEPATH=%FSCOREDLLPORTABLEPATH%\FSharp.Core.dll
 set FSCOREDLLNETCOREPATH=%FSCOREDLLNETCOREPATH%\FSharp.Core.dll
 set FSCOREDLLNETCORE78PATH=%FSCOREDLLNETCORE78PATH%\FSharp.Core.dll
 set FSCOREDLLNETCORE259PATH=%FSCOREDLLNETCORE259PATH%\FSharp.Core.dll
-set FSDATATPPATH=%FSDATATPPATH%\FSharp.Data.TypeProviders.dll
+set FSCOREDLLVPREVPATH=%FSCOREDLLVPREVPATH%\FSharp.Core.dll
diff --git a/tests/config.fs b/tests/config.fs
new file mode 100644
index 00000000000..9cfdcdf5671
--- /dev/null
+++ b/tests/config.fs
@@ -0,0 +1,586 @@
+module TestConfig
+
+open System
+open System.IO
+open System.Collections.Generic
+open Microsoft.Win32
+
+open PlatformHelpers
+open FSharpTestSuiteTypes
+
+let private fileExists = Commands.fileExists __SOURCE_DIRECTORY__ >> Option.isSome
+let private directoryExists = Commands.directoryExists __SOURCE_DIRECTORY__ >> Option.isSome
+
+let private regQuery = WindowsPlatform.regQuery
+
+type private FSLibPaths = 
+    { FSCOREDLLPATH : string
+      FSCOREDLL20PATH : string
+      FSCOREDLLPORTABLEPATH : string
+      FSCOREDLLNETCOREPATH : string
+      FSCOREDLLNETCORE78PATH : string
+      FSCOREDLLNETCORE259PATH : string
+      FSDATATPPATH : string
+      FSCOREDLLVPREVPATH : string }
+
+
+let private checkResult result = 
+    match result with
+    | CmdResult.ErrorLevel err -> let x = err, (sprintf "ERRORLEVEL %d" err) in Failure (RunError.ProcessExecError x)
+    | CmdResult.Success -> Success ()
+
+// REM ===
+// REM === Find paths to shipped F# libraries referenced by clients
+// REM ===
+let private GetFSLibPaths env osArch fscBinPath =
+    // REM == Find out OS architecture, no matter what cmd prompt
+    // SET OSARCH=%PROCESSOR_ARCHITECTURE%
+    // IF NOT "%PROCESSOR_ARCHITEW6432%"=="" SET OSARCH=%PROCESSOR_ARCHITEW6432%
+    ignore (osArch, "param")
+
+    // REM == Find out path to native 'Program Files 32bit', no matter what
+    // REM == architecture we are running on and no matter what command
+    // REM == prompt we came from.
+    // IF /I "%OSARCH%"=="x86"   set X86_PROGRAMFILES=%ProgramFiles%
+    // IF /I "%OSARCH%"=="IA64"  set X86_PROGRAMFILES=%ProgramFiles(x86)%
+    // IF /I "%OSARCH%"=="AMD64" set X86_PROGRAMFILES=%ProgramFiles(x86)%
+    let X86_PROGRAMFILES = WindowsPlatform.x86ProgramFilesDirectory env osArch
+
+    // REM == Default VS install locations
+    // set FSCOREDLLPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.1.9055
+    let mutable FSCOREDLLPATH = X86_PROGRAMFILES/"Reference Assemblies"/"Microsoft"/"FSharp"/".NETFramework"/"v4.0"/"4.4.1.9055"
+    // set FSCOREDLL20PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v2.0\2.3.0.0
+    let mutable FSCOREDLL20PATH = X86_PROGRAMFILES/"Reference Assemblies"/"Microsoft"/"FSharp"/".NETFramework"/"v2.0"/"2.3.0.0"
+    // set FSCOREDLLPORTABLEPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.41.9055
+    let mutable FSCOREDLLPORTABLEPATH = X86_PROGRAMFILES/"Reference Assemblies"/"Microsoft"/"FSharp"/".NETPortable"/"3.47.41.9055"
+    // set FSCOREDLLNETCOREPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.41.9055
+    let mutable FSCOREDLLNETCOREPATH = X86_PROGRAMFILES/"Reference Assemblies"/"Microsoft"/"FSharp"/".NETCore"/"3.7.41.9055"
+    // set FSCOREDLLNETCORE78PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.41.9055
+    let mutable FSCOREDLLNETCORE78PATH = X86_PROGRAMFILES/"Reference Assemblies"/"Microsoft"/"FSharp"/".NETCore"/"3.78.41.9055"
+    // set FSCOREDLLNETCORE259PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.41.9055
+    let mutable FSCOREDLLNETCORE259PATH = X86_PROGRAMFILES/"Reference Assemblies"/"Microsoft"/"FSharp"/".NETCore"/"3.259.41.9055"
+    // set FSDATATPPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\Type Providers
+    let mutable FSDATATPPATH = X86_PROGRAMFILES/"Reference Assemblies"/"Microsoft"/"FSharp"/".NETFramework"/"v4.0"/"4.3.0.0"/"Type Providers"
+    // set FSCOREDLLVPREVPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0
+    let mutable FSCOREDLLVPREVPATH = X86_PROGRAMFILES/"Reference Assemblies"/"Microsoft"/"FSharp"/".NETFramework"/"v4.0"/"4.4.0.0"
+
+    // REM == Check if using open build instead
+
+    // IF EXIST "%FSCBinPath%\FSharp.Core.dll" set FSCOREDLLPATH=%FSCBinPath%
+    match fscBinPath with
+    | Some d when fileExists (d/"FSharp.Core.dll") -> FSCOREDLLPATH <- d
+    | Some _ | None -> ()
+
+    // IF EXIST "%FSCBinPath%\..\..\net20\bin\FSharp.Core.dll" set FSCOREDLL20PATH=%FSCBinPath%\..\..\net20\bin
+    match fscBinPath |> Option.map (fun d -> d/".."/".."/"net20"/"bin") with
+    | Some d when fileExists (d/"FSharp.Core.dll") -> FSCOREDLL20PATH <- d
+    | Some _ | None -> ()
+
+    // IF EXIST "%FSCBinPath%\..\..\portable47\bin\FSharp.Core.dll" set FSCOREDLLPORTABLEPATH=%FSCBinPath%\..\..\portable47\bin
+    match fscBinPath |> Option.map (fun d -> d/".."/".."/"portable47"/"bin") with
+    | Some d when fileExists (d/"FSharp.Core.dll") -> FSCOREDLLPORTABLEPATH <- d
+    | Some _ | None -> ()
+
+    // IF EXIST "%FSCBinPath%\..\..\portable7\bin\FSharp.Core.dll" set FSCOREDLLNETCOREPATH=%FSCBinPath%\..\..\portable7\bin
+    match fscBinPath |> Option.map (fun d -> d/".."/".."/"portable7"/"bin") with
+    | Some d when fileExists (d/"FSharp.Core.dll") -> FSCOREDLLNETCOREPATH <- d
+    | Some _ | None -> ()
+
+    // IF EXIST "%FSCBinPath%\..\..\portable78\bin\FSharp.Core.dll" set FSCOREDLLNETCORE78PATH=%FSCBinPath%\..\..\portable78\bin
+    match fscBinPath |> Option.map (fun d -> d/".."/".."/"portable78"/"bin") with
+    | Some d when fileExists (d/"FSharp.Core.dll") -> FSCOREDLLNETCORE78PATH <- d
+    | Some _ | None -> ()
+
+    // IF EXIST "%FSCBinPath%\..\..\portable259\bin\FSharp.Core.dll" set FSCOREDLLNETCORE259PATH=%FSCBinPath%\..\..\portable259\bin
+    match fscBinPath |> Option.map (fun d -> d/".."/".."/"portable259"/"bin") with
+    | Some d when fileExists (d/"FSharp.Core.dll") -> FSCOREDLLNETCORE259PATH <- d
+    | Some _ | None -> ()
+
+    // IF EXIST "%FSCBinPath%\FSharp.Data.TypeProviders.dll" set FSDATATPPATH=%FSCBinPath%
+    match fscBinPath with
+    | Some d when fileExists (d/"FSharp.Data.TypeProviders.dll") -> FSDATATPPATH <- d
+    | Some _ | None -> ()
+
+    // set FSCOREDLLPATH=%FSCOREDLLPATH%\FSharp.Core.dll
+    FSCOREDLLPATH <- FSCOREDLLPATH/"FSharp.Core.dll"
+    // set FSCOREDLL20PATH=%FSCOREDLL20PATH%\FSharp.Core.dll
+    FSCOREDLL20PATH <- FSCOREDLL20PATH/"FSharp.Core.dll"
+    // set FSCOREDLLPORTABLEPATH=%FSCOREDLLPORTABLEPATH%\FSharp.Core.dll
+    FSCOREDLLPORTABLEPATH <- FSCOREDLLPORTABLEPATH/"FSharp.Core.dll"
+    // set FSCOREDLLNETCOREPATH=%FSCOREDLLNETCOREPATH%\FSharp.Core.dll
+    FSCOREDLLNETCOREPATH <- FSCOREDLLNETCOREPATH/"FSharp.Core.dll"
+    // set FSCOREDLLNETCORE78PATH=%FSCOREDLLNETCORE78PATH%\FSharp.Core.dll
+    FSCOREDLLNETCORE78PATH <- FSCOREDLLNETCORE78PATH/"FSharp.Core.dll"
+    // set FSCOREDLLNETCORE259PATH=%FSCOREDLLNETCORE259PATH%\FSharp.Core.dll
+    FSCOREDLLNETCORE259PATH <- FSCOREDLLNETCORE259PATH/"FSharp.Core.dll"
+    // set FSDATATPPATH=%FSDATATPPATH%\FSharp.Data.TypeProviders.dll
+    FSDATATPPATH <- FSDATATPPATH/"FSharp.Data.TypeProviders.dll"
+    // set FSCOREDLLVPREVPATH=%FSCOREDLLVPREVPATH%\FSharp.Core.dll
+    FSCOREDLLVPREVPATH <- FSCOREDLLVPREVPATH/"FSharp.Core.dll"
+
+    X86_PROGRAMFILES, {
+        FSCOREDLLPATH = FSCOREDLLPATH;
+        FSCOREDLL20PATH = FSCOREDLL20PATH;
+        FSCOREDLLPORTABLEPATH = FSCOREDLLPORTABLEPATH;
+        FSCOREDLLNETCOREPATH = FSCOREDLLNETCOREPATH;
+        FSCOREDLLNETCORE78PATH = FSCOREDLLNETCORE78PATH;
+        FSCOREDLLNETCORE259PATH = FSCOREDLLNETCORE259PATH;
+        FSDATATPPATH = FSDATATPPATH;
+        FSCOREDLLVPREVPATH = FSCOREDLLVPREVPATH }
+
+// REM ===
+// REM === Find path to FSC/FSI looking up the registry
+// REM === Will set the FSCBinPath env variable.
+// REM === This if for Dev11+/NDP4.5
+// REM === Works on both XP and Vista and hopefully everything else
+// REM === Works on 32bit and 64 bit, no matter what cmd prompt it is invoked from
+// REM === 
+let private SetFSCBinPath45 () =
+    // FOR /F "tokens=1-2*" %%a IN ('reg query "%REG_SOFTWARE%\Microsoft\FSharp\4.0\Runtime\v4.0" /ve') DO set FSCBinPath=%%c
+    // FOR /F "tokens=1-3*" %%a IN ('reg query "%REG_SOFTWARE%\Microsoft\FSharp\4.0\Runtime\v4.0" /ve') DO set FSCBinPath=%%d
+    // IF EXIST "%FSCBinPath%" goto :EOF
+    let hklm32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
+    match hklm32 |> regQuery @"SOFTWARE\Microsoft\FSharp\4.0\Runtime\v4.0" "" with
+    | Some (:? string as d) when directoryExists d -> Some d
+    | Some _ | None -> None
+
+let private attendedLog envVars x86_ProgramFiles corDir corDir40 =
+    let getMsbuildPath =
+        // rem first see if we have got msbuild installed
+        let mutable MSBuildToolsPath = envVars |> Map.tryFind "MSBuildToolsPath"
+
+        // if exist "%X86_PROGRAMFILES%\MSBuild\14.0\Bin\MSBuild.exe" SET MSBuildToolsPath=%X86_PROGRAMFILES%\MSBuild\14.0\Bin\
+        if x86_ProgramFiles/"MSBuild"/"14.0"/"Bin"/"MSBuild.exe" |> fileExists
+        then  MSBuildToolsPath <- Some (x86_ProgramFiles/"MSBuild"/"14.0"/"Bin" |> Commands.pathAddBackslash)
+        // if not "%MSBuildToolsPath%" == "" goto done_MsBuildToolsPath
+        match MSBuildToolsPath with
+        | Some x -> Some x
+        | None ->
+            let mutable MSBuildToolsPath = None
+            // IF NOT "%CORDIR%"=="" IF EXIST "%CORDIR%\msbuild.exe"         SET MSBuildToolsPath=%CORDIR%
+            if not (corDir = "") then 
+                if corDir/"msbuild.exe" |> fileExists 
+                then MSBuildToolsPath <- Some corDir
+            // IF     "%CORDIR40%"=="" IF NOT "%CORDIR%"=="" IF EXIST "%CORDIR%\..\V3.5\msbuild.exe" SET MSBuildToolsPath="%CORDIR%\..\V3.5\"
+            if (corDir40 |> Option.isNone) then
+                if (not (corDir = "")) then
+                    if corDir/".."/"V3.5"/"msbuild.exe" |> fileExists
+                    then MSBuildToolsPath <- Some (corDir/".."/"V3.5")
+
+            // IF NOT "%CORDIR%"=="" FOR /f %%j IN ("%MSBuildToolsPath%") do SET MSBuildToolsPath=%%~fj
+            if (not (corDir = "")) 
+            then MSBuildToolsPath <- (MSBuildToolsPath |> Option.map Path.GetFullPath)
+            MSBuildToolsPath
+        // :done_MsBuildToolsPath
+
+    // exit /b 0
+    getMsbuildPath, (WindowsPlatform.visualStudioVersion ())
+
+
+let config envVars =
+    // set _SCRIPT_DRIVE=%~d0
+    ignore "unused"
+    // set _SCRIPT_PATH=%~p0
+    ignore "unused"
+    // set SCRIPT_ROOT=%_SCRIPT_DRIVE%%_SCRIPT_PATH%
+    let SCRIPT_ROOT = __SOURCE_DIRECTORY__ |> Path.GetFullPath
+
+    let env key = envVars |> Map.tryFind key
+    let envOrDefault key def = env key |> Option.fold (fun s t -> t) def
+    let envOrFail key = env key |> function Some x -> x | None -> failwithf "environment variable '%s' required " key
+    let where = Commands.where envVars
+
+    let PROCESSOR_ARCHITECTURE = WindowsPlatform.processorArchitecture envVars
+    // set REG_SOFTWARE=HKLM\SOFTWARE
+    // IF /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" (set REG_SOFTWARE=%REG_SOFTWARE%\Wow6432Node)
+    ignore "unused, using .net bcl to query RegistryView.Registry32"
+
+    // if not defined FSHARP_HOME set FSHARP_HOME=%SCRIPT_ROOT%..\..
+    // for /f %%i in ("%FSHARP_HOME%") do set FSHARP_HOME=%%~fi
+    let FSHARP_HOME =
+        envOrDefault "FSHARP_HOME" (SCRIPT_ROOT/".."/"..")
+        |> Path.GetFullPath
+
+    // REM Do we know where fsc.exe is?
+    // IF DEFINED FSCBinPath goto :FSCBinPathFound
+    // FOR /F "delims=" %%i IN ('where fsc.exe') DO SET FSCBinPath=%%~dpi
+    // :FSCBinPathFound
+    let mutable FSCBinPath =
+        match env "FSCBINPATH" with
+        | Some p -> Some p
+        | None -> where "fsc.exe" |> Option.map Path.GetDirectoryName
+
+    // SET CLIFLAVOUR=cli\4.5
+    let CLIFLAVOUR = @"cli\4.5"
+
+    // if not exist "%FSCBinPath%\fsc.exe" call :SetFSCBinPath45
+    if not (FSCBinPath |> Option.map (fun dir -> dir/"fsc.exe") |> Option.exists fileExists)
+    then FSCBinPath <- SetFSCBinPath45 ()
+
+    // if not exist "%FSCBinPath%\fsc.exe" echo %FSCBinPath%\fsc.exe still not found. Assume that user has added it to path somewhere
+    ignore "smoke test check fsc.exe"
+
+    // REM add %FSCBinPath% to path only if not already there. Otherwise, the path keeps growing.
+    // echo %path%; | find /i "%FSCBinPath%;" > NUL
+    // if ERRORLEVEL 1    set PATH=%PATH%;%FSCBinPath%
+    //REVIEW add it? or better use only env var?
+
+    // if "%FSDIFF%"=="" set FSDIFF=%SCRIPT_ROOT%fsharpqa\testenv\bin\diff.exe
+    let FSDIFF = envOrDefault "FSDIFF" (SCRIPT_ROOT/"fsharpqa"/"testenv"/"bin"/"diff.exe")
+    // if not exist "%FSDIFF%" echo FSDIFF not found at expected path of %fsdiff% && exit /b 1
+    ignore "check exists diff.exe"
+
+    // rem check if we're already configured, if not use the configuration from the last line of the config file
+    // if "%fsc%"=="" ( 
+    //   set csc_flags=/nologo
+    //   set fsiroot=fsi
+    // )
+    let mutable FSC = env "fsc"
+    let csc_flags =
+        match FSC with None -> "/nologo" | Some _ -> (envOrDefault "csc_flags" "/nologo")
+    let mutable fsiroot =
+        match FSC with None -> Some "fsi" | Some _ -> (env "fsiroot")
+
+    // if not defined ALINK  set ALINK=al.exe
+    let mutable ALINK = (envOrDefault "ALINK" "al.exe")
+    // if not defined CSC    set CSC=csc.exe %csc_flags%
+    let CSC = envOrDefault "CSC" "csc.exe"
+
+    // REM SDK Dependencires.
+    // if not defined ILDASM   set ILDASM=ildasm.exe
+    let mutable ILDASM = envOrDefault "ILDASM" "ildasm.exe"
+    // if not defined GACUTIL   set GACUTIL=gacutil.exe
+    let mutable GACUTIL = envOrDefault "GACUTIL" "gacutil.exe"
+    // if not defined PEVERIFY set PEVERIFY=peverify.exe
+    let mutable PEVERIFY = envOrDefault "PEVERIFY" "peverify.exe"
+    // if not defined RESGEN   set RESGEN=resgen.exe
+    let mutable RESGEN = envOrDefault "RESGEN" "resgen.exe"
+
+    // if "%fsiroot%" == "" ( set fsiroot=fsi)
+    if fsiroot |> Option.isNone 
+    then fsiroot <- Some "fsi"
+
+    // REM == Test strategy: if we are on a 32bit OS => use fsi.exe
+    // REM ==                if we are on a 64bit OS => use fsiAnyCPU.exe
+    // REM == This way we get coverage of both binaries without having to
+    // REM == double the test matrix. Note that our nightly automation
+    // REM == always cover x86 and x64... so we won't miss much. There
+    // REM == is an implicit assumption that the CLR will do it's job
+    // REM == to make an FSIAnyCPU.exe behave as FSI.exe on a 32bit OS.
+    // REM == On 64 bit machines ensure that we run the 64 bit versions of tests too.
+
+    // SET OSARCH=%PROCESSOR_ARCHITECTURE%
+    // IF NOT "%PROCESSOR_ARCHITEW6432%"=="" SET OSARCH=%PROCESSOR_ARCHITEW6432%
+    let OSARCH = WindowsPlatform.osArch envVars
+         
+    // IF "%fsiroot%"=="fsi" IF NOT "%OSARCH%"=="x86" (
+    //   SET fsiroot=fsiAnyCPU
+    //   set FSC_BASIC_64=FSC_BASIC_64
+    // )
+    let mutable FSC_BASIC_64 = env "FSC_BASIC_64"
+    match fsiroot, OSARCH with
+    | Some "fsi", X86 -> ()
+    | Some "fsi", arc ->
+        fsiroot <- Some "fsiAnyCPU"
+        FSC_BASIC_64 <- Some "FSC_BASIC_64"
+    | _ -> ()
+
+
+    // REM ---------------------------------------------------------------
+    // REM If we set a "--cli-version" flag anywhere in the flags then assume its v1.x
+    // REM and generate a config file, so we end up running the test on the right version
+    // REM of the CLR.  Also modify the CORSDK used.
+    // REM
+    // REM Use CLR 1.1 at a minimum since 1.0 is not installed on most of my machines
+    // REM otherwise assume v2.0
+    // REM TODO: we need to update this to be v2.0 or v3.5 and nothing else.
+
+    // set fsc_flags=%fsc_flags% 
+    let mutable fsc_flags = env "fsc_flags"
+
+    // set CLR_SUPPORTS_GENERICS=true
+    let CLR_SUPPORTS_GENERICS = true
+    // set ILDASM=%ILDASM%
+    ignore "env var not needed, ildasm is invoked with Commands.ildasm"
+    // set GACUTIL=%GACUTIL%
+    ignore "env var not needed, gacutil is invoked with Commads.gacutil"
+    // set CLR_SUPPORTS_WINFORMS=true
+    let CLR_SUPPORTS_WINFORMS = true
+    // set CLR_SUPPORTS_SYSTEM_WEB=true
+    let CLR_SUPPORTS_SYSTEM_WEB = true
+
+    // REM ==
+    // REM == F# v1.0 targets NetFx3.5 (i.e. NDP2.0)
+    // REM == It is ok to hardcode the location, since this is not going to
+    // REM == change ever. Well, if/when we target a different runtime we'll have
+    // REM == to come and update this, but for now we MUST make sure we use the 2.0 stuff.
+    // REM ==
+    // REM == If we run on a 64bit machine (from a 64bit command prompt!), we use the 64bit
+    // REM == CLR, but tweaking 'Framework' to 'Framework64'.
+    // REM ==
+    // set CORDIR=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\
+    let SystemRoot = envOrFail "SystemRoot"
+    let mutable CORDIR = SystemRoot/"Microsoft.NET"/"Framework"/"v2.0.50727" |> Commands.pathAddBackslash
+    // set CORDIR40=
+    // FOR /D %%i IN (%windir%\Microsoft.NET\Framework\v4.0.?????) do set CORDIR40=%%i
+    let windir = envOrFail "windir"
+    let CORDIR40 =
+        match Directory.EnumerateDirectories (windir/"Microsoft.NET"/"Framework", "v4.0.?????") |> List.ofSeq |> List.rev with
+        | x :: _ -> Some x
+        | [] -> None
+    // IF NOT "%CORDIR40%"=="" set CORDIR=%CORDIR40%
+    match CORDIR40 with
+    | None -> ()
+    | Some d -> CORDIR <- d
+
+    // REM == Use the same runtime as our architecture
+    // REM == ASSUMPTION: This could be a good or bad thing.
+    // IF /I NOT "%PROCESSOR_ARCHITECTURE%"=="x86" set CORDIR=%CORDIR:Framework=Framework64%
+    match PROCESSOR_ARCHITECTURE with 
+    | X86 -> () 
+    | _ -> CORDIR <- CORDIR.Replace("Framework", "Framework64")
+
+
+
+    let regQueryREG_SOFTWARE path value =
+        let hklm32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
+        match hklm32 |> regQuery path value with
+        | Some (:? string as d) -> Some d
+        | Some _ | None -> None
+
+    let allSDK = seq {
+    // FOR /F "tokens=2* delims=	 "  %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
+            yield regQueryREG_SOFTWARE @"Software\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools" "InstallationFolder";
+    // if "%CORSDK%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
+            yield regQueryREG_SOFTWARE @"Software\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools" "InstallationFolder";
+    // if "%CORSDK%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
+            yield regQueryREG_SOFTWARE @"Software\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools" "InstallationFolder";
+    // if "%CORSDK%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
+            yield regQueryREG_SOFTWARE @"Software\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools" "InstallationFolder";
+    // if "%CORSDK%"=="" FOR /F "tokens=2* delims=	 " %%A IN ('reg QUERY "%REG_SOFTWARE%\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET CORSDK=%%B
+            yield regQueryREG_SOFTWARE @"Software\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools" "InstallationFolder";
+        }
+
+    let mutable CORSDK = allSDK |> Seq.tryPick id
+
+    // REM == Fix up CORSDK for 64bit platforms...
+    // IF /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" SET CORSDK=%CORSDK%\x64
+    // IF /I "%PROCESSOR_ARCHITECTURE%"=="IA64"  SET CORSDK=%CORSDK%\IA64
+    match PROCESSOR_ARCHITECTURE with
+    | AMD64 -> CORSDK <- CORSDK |> Option.map (fun dir -> dir/"x64")
+    | IA64 -> CORSDK <- CORSDK |> Option.map (fun dir -> dir/"IA64")
+    | _ -> ()
+
+    // REM add powerpack to flags only if not already there. Otherwise, the variable can keep growing.
+    // echo %fsc_flags% | find /i "powerpack"
+    // if ERRORLEVEL 1 set fsc_flags=%fsc_flags% -r:System.Core.dll --nowarn:20
+    if fsc_flags |> Option.exists (fun flags -> flags.ToLower().Contains("powerpack")) then ()
+    else fsc_flags <- Some (sprintf "%s -r:System.Core.dll --nowarn:20" (fsc_flags |> Option.fold (fun s t -> t) ""))
+
+    // if not defined fsi_flags set fsi_flags=%fsc_flags:--define:COMPILED=% --define:INTERACTIVE --maxerrors:1 --abortonerror
+    let mutable fsi_flags = env "fsi_flags"
+    if fsi_flags |> Option.isNone then (
+        let fsc_flags_no_compiled = fsc_flags |> Option.fold (fun s flags -> flags.Replace("--define:COMPILED", "")) ""
+        fsi_flags <- Some (sprintf "%s --define:INTERACTIVE --maxerrors:1 --abortonerror" fsc_flags_no_compiled)
+    )
+
+    // echo %fsc_flags%; | find "--define:COMPILED" > NUL || (
+    //     set fsc_flags=%fsc_flags% --define:COMPILED
+    // )
+    if not (fsc_flags |> Option.exists (fun flags -> flags.Contains("--define:COMPILED")))
+    then fsc_flags <- Some (sprintf "%s --define:COMPILED" (fsc_flags |> Option.fold (fun s t -> t) ""))
+
+    // if NOT "%fsc_flags:generate-config-file=X%"=="%fsc_flags%" ( 
+    //     if NOT "%fsc_flags:clr-root=X%"=="%fsc_flags%" ( 
+    //         set fsc_flags=%fsc_flags% --clr-root:%CORDIR%
+    //     )
+    // )
+    //  --clr-root non e' un flag valido di fsc
+    //    if not <| (fsc_flags |> Option.exists (fun flags -> flags.Contains("generate-config-file")))  then
+    //        if not <| (fsc_flags |> Option.exists (fun flags -> flags.Contains("clr-root"))) then 
+    //            fsc_flags <- Some (sprintf "%s --clr-root:%s" (fsc_flags |> Option.fold (fun s t -> t) "") (!CORDIR))
+
+    // if "%CORDIR%"=="unknown" set CORDIR=
+    if CORDIR = "unknown" then CORDIR <- ""
+
+    // REM use short names in the path so you don't have to deal with the space in things like "Program Files"
+    // for /f "delims=" %%I in ("%CORSDK%") do set CORSDK=%%~dfsI%
+    CORSDK <- CORSDK |> Option.map Commands.convertToShortPath
+
+    // for /f "delims=" %%I in ("%CORDIR%") do set CORDIR=%%~dfsI%
+    CORDIR <- Commands.convertToShortPath CORDIR
+
+
+    // set NGEN=
+    let mutable NGEN = None
+
+    // REM ==
+    // REM == Set path to C# compiler. If we are NOT on NetFx4.0, try we prefer C# 3.5 to C# 2.0 
+    // REM == This is because we have tests that reference System.Core.dll from C# code!
+    // REM == (e.g. fsharp\core\fsfromcs)
+    // REM ==
+    // IF NOT "%CORDIR%"=="" IF EXIST "%CORDIR%\csc.exe" SET CSC="%CORDIR%\csc.exe" %csc_flags%
+    let mutable CSC = None
+    if not (CORDIR = "") then
+        if CORDIR/"csc.exe" |> fileExists 
+        then CSC <- Some (CORDIR/"csc.exe")
+
+    // IF     "%CORDIR40%"=="" IF NOT "%CORDIR%"=="" IF EXIST "%CORDIR%\..\V3.5\csc.exe" SET CSC="%CORDIR%\..\v3.5\csc.exe" %csc_flags%
+    if CORDIR40 |> Option.isNone then
+        if not (CORDIR = "") then
+            if CORDIR/".."/"V3.5"/"csc.exe" |> fileExists
+            then CSC <- Some (CORDIR/".."/"V3.5"/"csc.exe")
+
+    // IF NOT "%CORDIR%"=="" IF EXIST "%CORDIR%\ngen.exe"            SET NGEN=%CORDIR%\ngen.exe
+    if not (CORDIR = "") then 
+        if CORDIR/"ngen.exe" |> fileExists
+        then NGEN <- Some (CORDIR/"ngen.exe")
+
+    // IF NOT "%CORDIR%"=="" IF EXIST "%CORDIR%\al.exe"              SET ALINK=%CORDIR%\al.exe
+    if not (CORDIR = "") then
+        if CORDIR/"al.exe" |> fileExists 
+        then ALINK <- CORDIR/"al.exe"
+
+    // REM ==
+    // REM == The logic here is: pick the latest msbuild
+    // REM == If we are testing against NDP4.0, then don't try msbuild 3.5
+    // REM ==
+
+    // IF NOT "%CORSDK%"=="" IF EXIST "%CORSDK%\ildasm.exe"          SET ILDASM=%CORSDK%\ildasm.exe
+    match CORSDK |> Option.map (fun d -> d/"ildasm.exe") with
+    | Some p when fileExists p -> ILDASM <- p
+    | Some _ | None -> ()
+        
+    // IF NOT "%CORSDK%"=="" IF EXIST "%CORSDK%\gacutil.exe"         SET GACUTIL=%CORSDK%\gacutil.exe
+    match CORSDK |> Option.map (fun d -> d/"gacutil.exe") with
+    | Some p when fileExists p -> GACUTIL <- p
+    | Some _ | None -> ()
+
+    // IF NOT "%CORSDK%"=="" IF EXIST "%CORSDK%\peverify.exe"        SET PEVERIFY=%CORSDK%\peverify.exe
+    match CORSDK |> Option.map (fun d -> d/"peverify.exe") with
+    | Some p when fileExists p -> PEVERIFY <- p
+    | Some _ | None -> ()
+
+    // IF NOT "%CORSDK%"=="" IF EXIST "%CORSDK%\resgen.exe"          SET RESGEN=%CORSDK%\resgen.exe
+    // IF NOT "%CORSDK%"=="" IF NOT EXIST "%RESGEN%" IF EXIST "%CORSDK%\..\resgen.exe"       SET RESGEN=%CORSDK%\..\resgen.exe
+    match CORSDK with
+    | Some sdk ->
+        if sdk/"resgen.exe" |> fileExists 
+        then RESGEN <- sdk/"resgen.exe"
+        elif sdk/".."/"resgen.exe" |> fileExists
+        then RESGEN <- sdk/".."/"resgen.exe"
+    | None -> ()
+
+    // IF NOT "%CORSDK%"=="" IF EXIST "%CORSDK%\al.exe"              SET ALINK=%CORSDK%\al.exe
+    match CORSDK |> Option.map (fun d -> d/"al.exe") with
+    | Some p when fileExists p -> ALINK <- p
+    | Some _ | None -> ()
+
+    // IF NOT DEFINED FSC SET FSC=fsc.exe
+    let mutable FSC = envOrDefault "FSC" "fsc.exe"
+    // IF NOT DEFINED FSI SET FSI=%fsiroot%.exe
+    let mutable FSI = envOrDefault "FSI" (fsiroot |> Option.fold (+) ".exe")
+
+    // IF DEFINED FSCBinPath IF EXIST "%FSCBinPath%\fsc.exe"   SET FSC=%FSCBinPath%\fsc.exe
+    match FSCBinPath |> Option.map (fun d -> d/"fsc.exe") with
+    | Some fscExe when fileExists fscExe -> FSC <- fscExe
+    | Some _ | None -> ()
+
+    // IF DEFINED FSCBinPath IF EXIST "%FSCBinPath%\%fsiroot%.exe"   SET FSI=%FSCBinPath%\%fsiroot%.exe
+    match FSCBinPath, fsiroot with
+    | Some dir, Some fsiExe when fileExists (dir/(fsiExe+".exe")) -> FSI <- dir/(fsiExe+".exe")
+    | _ -> ()
+
+    // REM == Located F# library DLLs in either open or Visual Studio contexts
+    // call :GetFSLibPaths
+    let X86_PROGRAMFILES, libs = GetFSLibPaths envVars OSARCH FSCBinPath
+
+    // REM == Set standard flags for invoking powershell scripts
+    // IF NOT DEFINED PSH_FLAGS SET PSH_FLAGS=-nologo -noprofile -executionpolicy bypass
+    let PSH_FLAGS = envOrDefault "PSH_FLAGS" "-nologo -noprofile -executionpolicy bypass"
+    ignore "unused, cross platform requirement and powershell is not used in tests"
+
+    //add to environment variables, only if needed (an example is ILDASM, cfg.ILDASM should be used instead inside tests)
+    let environment =
+        envVars
+        |> Map.add "CLR_SUPPORTS_GENERICS" (sprintf "%A" CLR_SUPPORTS_GENERICS)
+        |> Map.add "CLR_SUPPORTS_WINFORMS" (sprintf "%A" CLR_SUPPORTS_WINFORMS)
+        |> Map.add "CLR_SUPPORTS_SYSTEM_WEB" (sprintf "%A" CLR_SUPPORTS_SYSTEM_WEB)
+
+    let orBlank = Option.fold (fun _ x -> x) ""
+
+    let cfg = {
+      EnvironmentVariables = environment;
+      ALINK = ALINK;
+      CORDIR = CORDIR |> Commands.pathAddBackslash;
+      CORSDK = CORSDK |> orBlank |> Commands.pathAddBackslash;
+      FSCBinPath = FSCBinPath |> orBlank |> Commands.pathAddBackslash;
+      FSCOREDLL20PATH = libs.FSCOREDLL20PATH;
+      FSCOREDLLPATH = libs.FSCOREDLLPATH;
+      FSCOREDLLPORTABLEPATH = libs.FSCOREDLLPORTABLEPATH;
+      FSCOREDLLNETCOREPATH = libs.FSCOREDLLNETCOREPATH;
+      FSCOREDLLNETCORE78PATH = libs.FSCOREDLLNETCORE78PATH;
+      FSCOREDLLNETCORE259PATH = libs.FSCOREDLLNETCORE259PATH;
+      FSDATATPPATH = libs.FSDATATPPATH;
+      FSCOREDLLVPREVPATH = libs.FSCOREDLLVPREVPATH;
+      FSDIFF = FSDIFF;
+      GACUTIL = GACUTIL;
+      ILDASM = ILDASM;
+      INSTALL_SKU = None;
+      MSBUILDTOOLSPATH = None;
+      MSBUILD = None;
+      NGEN = NGEN |> orBlank;
+      PEVERIFY = PEVERIFY;
+      RESGEN = RESGEN;
+      CSC = CSC |> orBlank;
+      FSC = FSC;
+      FSI = FSI;
+      csc_flags = csc_flags;
+      fsc_flags = fsc_flags |> orBlank;
+      fsi_flags = fsi_flags |> orBlank;
+    }
+
+    // if DEFINED _UNATTENDEDLOG exit /b 0
+    match env "_UNATTENDEDLOG" with
+    | Some _ -> cfg
+    | None ->
+        let msbuildToolsPath, installSku = attendedLog envVars X86_PROGRAMFILES CORDIR CORDIR40
+        { cfg with 
+            MSBUILDTOOLSPATH = msbuildToolsPath |> Option.map (Commands.pathAddBackslash); 
+            MSBUILD = msbuildToolsPath |> Option.map (fun d -> d/"msbuild.exe");
+            INSTALL_SKU = installSku }
+    
+
+
+let logConfig (cfg: TestConfig) =
+    log "---------------------------------------------------------------"
+    log "Executables"
+    log ""
+    log "ALINK               =%s" cfg.ALINK
+    log "CORDIR              =%s" cfg.CORDIR
+    log "CORSDK              =%s" cfg.CORSDK
+    log "CSC                 =%s" cfg.CSC
+    log "csc_flags           =%s" cfg.csc_flags
+    log "FSC                 =%s" cfg.FSC
+    log "fsc_flags           =%s" cfg.fsc_flags
+    log "FSCBINPATH          =%s" cfg.FSCBinPath
+    log "FSCOREDLL20PATH     =%s" cfg.FSCOREDLL20PATH
+    log "FSCOREDLLPATH       =%s" cfg.FSCOREDLLPATH
+    log "FSCOREDLLPORTABLEPATH =%s" cfg.FSCOREDLLPORTABLEPATH
+    log "FSCOREDLLNETCOREPATH=%s" cfg.FSCOREDLLNETCOREPATH
+    log "FSCOREDLLNETCORE78PATH=%s" cfg.FSCOREDLLNETCORE78PATH
+    log "FSCOREDLLNETCORE259PATH=%s" cfg.FSCOREDLLNETCORE259PATH
+    log "FSCOREDLLVPREVPATH=%s" cfg.FSCOREDLLVPREVPATH
+    log "FSDATATPPATH        =%s" cfg.FSDATATPPATH
+    log "FSDIFF              =%s" cfg.FSDIFF
+    log "FSI                 =%s" cfg.FSI
+    log "fsi_flags           =%s" cfg.fsi_flags
+    log "GACUTIL             =%s" cfg.GACUTIL
+    log "ILDASM              =%s" cfg.ILDASM
+    log "INSTALL_SKU         =%A" cfg.INSTALL_SKU
+    log "MSBUILDTOOLSPATH    =%A" cfg.MSBUILDTOOLSPATH
+    log "MSBUILD             =%A" cfg.MSBUILD
+    log "NGEN                =%s" cfg.NGEN
+    log "PEVERIFY            =%s" cfg.PEVERIFY
+    log "RESGEN              =%s" cfg.RESGEN
+    log "---------------------------------------------------------------"
diff --git a/tests/fsharp/.gitignore b/tests/fsharp/.gitignore
new file mode 100644
index 00000000000..0493c881790
--- /dev/null
+++ b/tests/fsharp/.gitignore
@@ -0,0 +1,16 @@
+build.ok
+test.ok
+test*.exe
+test*.pdb
+test*.dll
+failures.log
+
+lib*.dll
+lib*.pdb
+lib*.xml
+
+Library1.dll
+
+
+cd.tmp
+
diff --git a/tests/fsharp/Commands.fs b/tests/fsharp/Commands.fs
new file mode 100644
index 00000000000..8d5fed0ef3c
--- /dev/null
+++ b/tests/fsharp/Commands.fs
@@ -0,0 +1,160 @@
+[]
+module Commands
+
+open System
+open System.IO
+
+open PlatformHelpers
+
+let getfullpath workDir path =
+    let rooted =
+        if Path.IsPathRooted(path) then path
+        else Path.Combine(workDir, path)
+    rooted |> Path.GetFullPath
+
+let fileExists workDir path = 
+    if path |> getfullpath workDir |> File.Exists then Some path else None
+
+let directoryExists workDir path = 
+    if path |> getfullpath workDir |> Directory.Exists then Some path else None
+
+/// copy /y %source1% tmptest2.ml
+let copy_y workDir source to' = 
+    log "copy /y %s %s" source to'
+    File.Copy( source |> getfullpath workDir, to' |> getfullpath workDir, true)
+    CmdResult.Success
+
+/// mkdir orig
+let mkdir_p workDir dir =
+    log "mkdir %s" dir
+    Directory.CreateDirectory ( Path.Combine(workDir, dir) ) |> ignore
+
+/// del test.txt
+let rm dir path =
+    log "rm %s" path
+    let p = path |> getfullpath dir
+    if File.Exists(p) then File.Delete(p)
+
+let pathAddBackslash (p: FilePath) = 
+    if String.IsNullOrWhiteSpace (p) 
+    then p
+    else
+        p.TrimEnd ([| Path.DirectorySeparatorChar; Path.AltDirectorySeparatorChar |]) 
+        + Path.DirectorySeparatorChar.ToString()
+
+// echo. > build.ok
+let ``echo._tofile`` workDir text p =
+    log "echo.%s> %s" text p
+    let to' = p |> getfullpath workDir in File.WriteAllText(to', text + Environment.NewLine)
+
+/// echo // empty file  > tmptest2.mli
+let echo_tofile workDir text p =
+    log "echo %s> %s" text p
+    let to' = p |> getfullpath workDir in File.WriteAllText(to', text + Environment.NewLine)
+
+/// echo // empty file  >> tmptest2.mli
+let echo_append_tofile workDir text p =
+    log "echo %s> %s" text p
+    let to' = p |> getfullpath workDir in File.AppendAllText(to', text + Environment.NewLine)
+
+/// type %source1%  >> tmptest3.ml
+let type_append_tofile workDir source p =
+    log "type %s >> %s" source p
+    let from = source |> getfullpath workDir
+    let to' = p |> getfullpath workDir
+    let contents = File.ReadAllText(from)
+    File.AppendAllText(to', contents)
+
+// %GACUTIL% /if %BINDIR%\FSharp.Core.dll
+let gacutil exec exeName flags assembly =
+    exec exeName (sprintf """%s "%s" """ flags assembly)
+
+// "%NGEN32%" install "%BINDIR%\fsc.exe" /queue:1
+// "%NGEN32%" install "%BINDIR%\fsi.exe" /queue:1
+// "%NGEN32%" install "%BINDIR%\FSharp.Build.dll" /queue:1
+// "%NGEN32%" executeQueuedItems 1
+let ngen exec (ngenExe: FilePath) assemblies =
+    let queue = assemblies |> List.map (fun a -> (sprintf "install \"%s\" /queue:1" a))
+
+    List.concat [ queue; ["executeQueuedItems 1"] ]
+    |> Seq.ofList
+    |> Seq.map (fun args -> exec ngenExe args)
+    |> Seq.takeWhile (function ErrorLevel _ -> false | Ok -> true)
+    |> Seq.last
+
+let fsc exec (fscExe: FilePath) flags srcFiles =
+    // "%FSC%" %fsc_flags% --define:COMPILING_WITH_EMPTY_SIGNATURE -o:tmptest2.exe tmptest2.mli tmptest2.ml
+    exec fscExe (sprintf "%s %s" flags (srcFiles |> Seq.ofList |> String.concat " "))
+
+let csc exec cscExe flags srcFiles =
+    exec cscExe (sprintf "%s %s"  flags (srcFiles |> Seq.ofList |> String.concat " "))
+
+let fsi exec fsiExe flags sources =
+    exec fsiExe (sprintf "%s %s" flags (sources |> Seq.ofList |> String.concat " "))
+
+// "%MSBUILDTOOLSPATH%\msbuild.exe" PCL.fsproj
+let msbuild exec msbuildExe flags srcFiles =
+    exec msbuildExe (sprintf "%s %s"  flags (srcFiles |> Seq.ofList |> String.concat " "))
+
+// "%RESGEN%" /compile Resources.resx
+let resgen exec resgenExe flags sources =
+    exec resgenExe (sprintf "%s %s" flags (sources |> Seq.ofList |> String.concat " "))
+
+let internal quotepath (p: FilePath) =
+    let quote = '"'.ToString()
+    if p.Contains(" ") 
+    then (sprintf "%s%s%s" quote p quote)
+    else p
+
+let ildasm exec ildasmExe flags assembly =
+    exec ildasmExe (sprintf "%s %s" flags (quotepath assembly))
+
+let peverify exec peverifyExe flags path =
+    exec peverifyExe (sprintf "%s %s" (quotepath path) flags)
+
+let createTempDir () =
+    let path = Path.GetTempFileName ()
+    File.Delete path
+    Directory.CreateDirectory path |> ignore
+    path
+
+let convertToShortPath path =
+    log "convert to short path %s" path
+    let result = ref None
+    let lastLine = function null -> () | l -> result := Some l
+
+    let cmdArgs = { RedirectOutput = Some lastLine; RedirectError = None; RedirectInput = None }
+    
+    let args = sprintf """/c for /f "delims=" %%I in ("%s") do echo %%~dfsI""" path
+
+    match Process.exec cmdArgs (Path.GetTempPath()) Map.empty "cmd.exe" args with
+    | ErrorLevel _ -> path
+    | Ok -> match !result with None -> path | Some p -> p
+
+let where envVars cmd =
+    log "where %s" cmd
+    let result = ref None
+    let lastLine = function null -> () | l -> result := Some l
+
+    let cmdArgs = { RedirectOutput = Some lastLine; RedirectError = None; RedirectInput = None; }
+
+    match Process.exec cmdArgs (Path.GetTempPath()) envVars "cmd.exe" (sprintf "/c where %s" cmd) with
+    | ErrorLevel _ -> None
+    | CmdResult.Success -> !result    
+
+let fsdiff exec fsdiffExe file1 file2 =
+    // %FSDIFF% %testname%.err %testname%.bsl
+    exec fsdiffExe (sprintf "%s %s" file1 file2)
+
+let ``for /f`` path = 
+    // FOR /F processing of a text file consists of reading the file, one line of text at a time and then breaking the line up into individual
+    // items of data called 'tokens'. The DO command is then executed with the parameter(s) set to the token(s) found.
+    // By default, /F breaks up the line at each blank space " ", and any blank lines are skipped, this default parsing behavior can be changed 
+    // by applying one or more of the "options" parameters. The option(s) must be contained within "a pair of quotes"
+    let splitLines lines =
+        lines
+        |> Array.filter (fun l -> not <| String.IsNullOrWhiteSpace(l))
+        |> Array.collect (fun l -> l.Split([| ' ' |], StringSplitOptions.RemoveEmptyEntries))
+        |> List.ofArray
+
+    File.ReadAllLines (path) |> splitLines
diff --git a/tests/fsharp/FSharp.Tests.fsproj b/tests/fsharp/FSharp.Tests.fsproj
new file mode 100644
index 00000000000..1996ebf1eb9
--- /dev/null
+++ b/tests/fsharp/FSharp.Tests.fsproj
@@ -0,0 +1,102 @@
+
+
+  
+    ..\..\src
+    {C163E892-5BF7-4B59-AA99-B0E8079C67C4}
+  
+  
+  
+    Debug
+    AnyCPU
+    2.0
+    true
+    true
+    Library
+    FSharp.Tests.FSharp
+    SystematicUnitTests
+    
+    false
+    false
+  
+  
+    $(DefineConstants);EXTENSIONTYPING
+  
+  
+    true
+    full
+    false
+    bin\Debug\
+    DEBUG;TRACE
+    prompt
+    3
+  
+  
+    pdbonly
+    true
+    bin\Release\
+    TRACE
+    prompt
+    3
+  
+  
+  
+    
+      {DED3BBD7-53F4-428A-8C9F-27968E768605}
+      FSharp.Core
+    
+    
+    
+      ..\..\packages\NUnit.3.0.0\lib\net45\nunit.framework.dll
+      True
+    
+    
+    
+  
+  
+    
+    
+    
+    
+      windowsPlatform.fs
+    
+    
+      config.fs
+    
+    
+      update.fs
+    
+    
+    
+    
+    
+    
+  
+  
+    
+  
+  
+     
+  
+  
+    
+  
+  
+    
+  
+  
+    
+  
+  
+    
+  
+  
+    
+    
+     
+  
+  
+    
+    
+    
+  
+
diff --git a/tests/fsharp/FSharpTestSuiteTypes.fs b/tests/fsharp/FSharpTestSuiteTypes.fs
new file mode 100644
index 00000000000..6596a928daf
--- /dev/null
+++ b/tests/fsharp/FSharpTestSuiteTypes.fs
@@ -0,0 +1,69 @@
+module FSharpTestSuiteTypes
+
+open PlatformHelpers
+
+type RunError = 
+    | GenericError of string
+    | ProcessExecError of (int * string)
+    | Skipped of string
+
+type Permutation = 
+    | FSI_FILE
+    | FSI_STDIN
+    | FSI_STDIN_OPT
+    | FSI_STDIN_GUI
+    | FSC_BASIC
+    | FSC_BASIC_64
+    | FSC_HW
+    | FSC_O3
+    | GENERATED_SIGNATURE
+    | EMPTY_SIGNATURE
+    | EMPTY_SIGNATURE_OPT
+    | FSC_OPT_MINUS_DEBUG
+    | FSC_OPT_PLUS_DEBUG
+    | FRENCH
+    | SPANISH
+    | AS_DLL
+    | WRAPPER_NAMESPACE
+    | WRAPPER_NAMESPACE_OPT
+    override this.ToString() = (sprintf "%A" this)
+
+type TestConfig = 
+    { EnvironmentVariables : Map
+      ALINK : string
+      CORDIR : string
+      CORSDK : string
+      CSC : string
+      csc_flags : string
+      FSC : string
+      fsc_flags : string
+      FSCBinPath : string
+      FSCOREDLL20PATH : string
+      FSCOREDLLPATH : string
+      FSCOREDLLPORTABLEPATH : string
+      FSCOREDLLNETCOREPATH : string
+      FSCOREDLLNETCORE78PATH : string
+      FSCOREDLLNETCORE259PATH : string
+      FSDATATPPATH : string
+      FSCOREDLLVPREVPATH : string
+      FSDIFF : string
+      FSI : string
+      fsi_flags : string
+      GACUTIL : string
+      ILDASM : string
+      INSTALL_SKU : INSTALL_SKU option
+      MSBUILDTOOLSPATH : string option
+      NGEN : string
+      PEVERIFY : string
+      RESGEN : string
+      MSBUILD : string option }
+
+and INSTALL_SKU = 
+    | Clean
+    | DesktopExpress
+    | WebExpress
+    | Ultimate
+
+type TestRunContext = 
+    { Directory: string; 
+      Config: TestConfig }
diff --git a/tests/fsharp/PickPermutations.ps1 b/tests/fsharp/PickPermutations.ps1
index b31532a0864..1e35c113969 100644
--- a/tests/fsharp/PickPermutations.ps1
+++ b/tests/fsharp/PickPermutations.ps1
@@ -26,6 +26,6 @@ $specialCaseCriteria = @{
 # seed for random selection is based on build # and test area
 # this ensures re-runs are predictable, but different test areas get different random choices
 $seed = (dir $fscPath).VersionInfo.FileBuildPart -bxor $testPath.GetHashCode()
-$permutations = ($allPermutations -split '\s+') |?{ $specialCaseCriteria[$_] -ne $false } | Get-Random -SetSeed $seed
+$permutations = ($allPermutations -split '\s+') |?{ $specialCaseCriteria[$_] -ne $false } #| Get-Random -SetSeed $seed
 
 $permutations -join ' '
\ No newline at end of file
diff --git a/tests/fsharp/PlatformHelpers.fs b/tests/fsharp/PlatformHelpers.fs
new file mode 100644
index 00000000000..77decfd7255
--- /dev/null
+++ b/tests/fsharp/PlatformHelpers.fs
@@ -0,0 +1,213 @@
+module PlatformHelpers
+
+type ProcessorArchitecture = 
+    | X86
+    | IA64
+    | AMD64
+    | Unknown of string
+    override this.ToString() = 
+        match this with
+        | X86 -> "x86"
+        | IA64 -> "IA64"
+        | AMD64 -> "AMD64"
+        | Unknown arc -> arc
+
+open System.IO
+
+type FilePath = string
+
+type CmdResult = 
+    | Success
+    | ErrorLevel of int
+
+type CmdArguments = 
+    { RedirectOutput : (string -> unit) option
+      RedirectError : (string -> unit) option
+      RedirectInput : (StreamWriter -> unit) option }
+
+module Process =
+
+    open System.Diagnostics
+
+    let processExePath baseDir exe =
+        if Path.IsPathRooted(exe) then exe
+        else 
+            match Path.GetDirectoryName(exe) with
+            | "" -> exe
+            | _ -> Path.Combine(baseDir,exe) |> Path.GetFullPath
+
+    let exec cmdArgs (workDir: FilePath) envs (path: FilePath) arguments =
+
+        let exePath = path |> processExePath workDir
+        let processInfo = new ProcessStartInfo(exePath, arguments)
+        processInfo.CreateNoWindow <- true
+        processInfo.UseShellExecute <- false
+        processInfo.WorkingDirectory <- workDir
+
+        envs
+        |> Map.iter (fun k v -> processInfo.EnvironmentVariables.[k] <- v)
+
+        let p = new Process()
+        p.EnableRaisingEvents <- true
+        p.StartInfo <- processInfo
+
+        cmdArgs.RedirectOutput
+        |> Option.map (fun f -> (fun (ea: DataReceivedEventArgs) -> ea.Data |> f)) 
+        |> Option.iter (fun newOut ->
+            processInfo.RedirectStandardOutput <- true
+            p.OutputDataReceived.Add newOut
+        )
+
+        cmdArgs.RedirectError 
+        |> Option.map (fun f -> (fun (ea: DataReceivedEventArgs) -> ea.Data |> f)) 
+        |> Option.iter (fun newErr ->
+            processInfo.RedirectStandardError <- true
+            p.ErrorDataReceived.Add newErr
+        )
+
+        cmdArgs.RedirectInput
+        |> Option.iter (fun _ -> p.StartInfo.RedirectStandardInput <- true)
+
+        let exitedAsync (proc: Process) =
+            let tcs = new System.Threading.Tasks.TaskCompletionSource();
+            p.Exited.Add (fun s -> 
+                tcs.TrySetResult(proc.ExitCode) |> ignore
+                proc.Dispose())
+            tcs.Task
+
+        p.Start() |> ignore
+    
+        cmdArgs.RedirectOutput |> Option.iter (fun _ -> p.BeginOutputReadLine())
+        cmdArgs.RedirectError |> Option.iter (fun _ -> p.BeginErrorReadLine())
+
+        cmdArgs.RedirectInput
+        |> Option.map (fun input -> async {
+            let inputWriter = p.StandardInput
+            do! inputWriter.FlushAsync () |> Async.AwaitIAsyncResult |> Async.Ignore
+            input inputWriter
+            do! inputWriter.FlushAsync () |> Async.AwaitIAsyncResult |> Async.Ignore
+            inputWriter.Close ()
+            })
+        |> Option.iter Async.Start
+
+        let exitCode = p |> exitedAsync |> Async.AwaitTask |> Async.RunSynchronously
+
+        match exitCode with
+        | 0 -> Success
+        | err -> ErrorLevel err
+
+
+
+type Result<'S,'F> =
+    | Success of 'S
+    | Failure of 'F
+
+type Attempt<'S,'F> = (unit -> Result<'S,'F>)
+
+open System.Diagnostics
+
+[]
+let internal succeed x = (fun () -> Success x)
+
+[]
+let internal failed err = (fun () -> Failure err)
+
+[]
+let runAttempt (a: Attempt<_,_>) = a ()
+
+[]
+let delay f = (fun () -> f() |> runAttempt)
+
+[]
+let either successTrack failTrack (input : Attempt<_, _>) : Attempt<_, _> =
+    match runAttempt input with
+    | Success s -> successTrack s
+    | Failure f -> failTrack f
+
+[]
+let bind successTrack = either successTrack failed
+
+[] 
+let fail failTrack result = either succeed failTrack result
+
+[] 
+type Attempt =
+    static member Run x = runAttempt x
+
+[] 
+type AttemptBuilder() =
+    member this.Bind(m : Attempt<_, _>, success) = bind success m
+    member this.Bind(m : Result<_, _>, success) = bind success (fun () -> m)
+    member this.Bind(m : Result<_, _> option, success) = 
+        match m with
+        | None -> this.Combine(this.Zero(), success)
+        | Some x -> this.Bind(x, success)
+    member this.Return(x) : Attempt<_, _> = succeed x
+    member this.ReturnFrom(x : Attempt<_, _>) = x
+    member this.Combine(v, f) : Attempt<_, _> = bind f v
+    member this.Yield(x) = Success x
+    member this.YieldFrom(x) = x
+    member this.Delay(f) : Attempt<_, _> = delay f
+    member this.Zero() : Attempt<_, _> = succeed ()
+    member this.While(guard, body: Attempt<_, _>) =
+        if not (guard()) 
+        then this.Zero() 
+        else this.Bind(body, fun () -> 
+            this.While(guard, body))  
+
+    member this.TryWith(body, handler) =
+        try this.ReturnFrom(body())
+        with e -> handler e
+
+    member this.TryFinally(body, compensation) =
+        try this.ReturnFrom(body())
+        finally compensation() 
+
+    member this.Using(disposable:#System.IDisposable, body) =
+        let body' = fun () -> body disposable
+        this.TryFinally(body', fun () -> 
+            match disposable with 
+                | null -> () 
+                | disp -> disp.Dispose())
+
+    member this.For(sequence:seq<'a>, body: 'a -> Attempt<_,_>) =
+        this.Using(sequence.GetEnumerator(),fun enum -> 
+            this.While(enum.MoveNext, 
+                this.Delay(fun () -> body enum.Current)))
+
+let attempt = new AttemptBuilder()
+let processor = attempt //TODO deprecated
+
+let log format = Printf.ksprintf (printfn "%s") format
+
+type OutPipe (mailbox: MailboxProcessor<_>) =
+    member x.Post msg = mailbox.Post(msg)
+    interface System.IDisposable with
+        member x.Dispose () = 
+            async {
+                while mailbox.CurrentQueueLength > 0 do
+                    let timeout = System.TimeSpan.FromMilliseconds(50.0)
+                    do! Async.Sleep (timeout.TotalMilliseconds |> int)
+            } |> Async.RunSynchronously
+
+let redirectTo (writer: TextWriter) =
+    let mailbox = MailboxProcessor.Start(fun inbox -> 
+        let rec loop () = async {
+            let! (msg : string) = inbox.Receive ()
+            do! writer.WriteLineAsync(msg) |> (Async.AwaitIAsyncResult >> Async.Ignore)
+            return! loop () }
+        loop ())
+    new OutPipe (mailbox)
+
+let redirectToLog () = redirectTo System.Console.Out
+
+let inline (++) a (b: string) = System.IO.Path.Combine(a,b)
+let inline (/) a b = a ++ b  //TODO deprecated
+
+let splitAtFirst (c: char -> bool) (s: string) =
+    let rec helper x (rest: string) =
+        match x with
+        | [] -> rest, None
+        | x :: xs when c(x) -> rest, Some (xs |> Array.ofList |> System.String)
+        | x :: xs -> helper xs (rest + x.ToString())
+    helper (s.ToCharArray() |> List.ofArray) ""
diff --git a/tests/fsharp/Properties/AssemblyInfo.cs b/tests/fsharp/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000000..801f9560999
--- /dev/null
+++ b/tests/fsharp/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("145B8577-B5E8-46A0-9FDF-2FB99C4D3573")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/tests/fsharp/core/.gitignore b/tests/fsharp/core/.gitignore
new file mode 100644
index 00000000000..34c12b24af2
--- /dev/null
+++ b/tests/fsharp/core/.gitignore
@@ -0,0 +1,58 @@
+
+forwarders/orig
+forwarders/split
+
+queriesCustomQueryOps/negativetest.err
+queriesCustomQueryOps/negativetest.vserr
+
+printing/z.output.test.*.txt
+printing/z.raw.output.test.*.txt
+printing/z.output.test.*.diff
+
+quotes/cslib.dll
+
+parsing/crlf.dll
+parsing/crlf.pdb
+parsing/toplet.exe
+parsing/toplet.pdb
+
+unicode/kanji-unicode-*.dll
+unicode/kanji-unicode-*.pdb
+unicode/out?.txt
+
+internalsvisible/main.exe
+
+hiding/client.exe
+
+load-script/out.txt
+load-script/usesfsi.exe
+
+queriesOverOData/schema?.csdl
+
+quotesInMultipleModules/module1.dll
+quotesInMultipleModules/module1-opt.dll
+quotesInMultipleModules/module2.exe
+quotesInMultipleModules/module2-opt.exe
+
+resources/Resources.resources
+
+topinit/app69514.exe
+topinit/app69514.pdb
+topinit/app69514-noopt.exe
+topinit/app69514-noopt.pdb
+topinit/app69514-noopt-withsig.exe
+topinit/app69514-noopt-withsig.pdb
+topinit/app69514-withsig.exe
+topinit/app69514-withsig.pdb
+topinit/both69514.exe
+topinit/both69514.pdb
+topinit/both69514-noopt.exe
+topinit/both69514-noopt.pdb
+
+verify/xmlverify.exe
+verify/xmlverify.pdb
+
+fsi-reload/load1.exe
+fsi-reload/load2.exe
+
+quotesInMultipleModules/module2-staticlink.exe
diff --git a/tests/fsharp/core/comprehensions/test.fsx b/tests/fsharp/core/comprehensions/test.fsx
index 3cea2803a94..e11b74bf688 100644
--- a/tests/fsharp/core/comprehensions/test.fsx
+++ b/tests/fsharp/core/comprehensions/test.fsx
@@ -1475,6 +1475,49 @@ module EnumPatternWithFunkyTypes_FSharp_1_0_13904 =
     // This is allowed - 'a is known to be "bool"
     let s = seq { for i in T true -> i }
 
+
+module SideEffectListMonad =
+    type SideEffectListWithReturnBuilder(onReturn, onZero) =
+        member b.Bind(x:unit,f) :list<'b> = f()
+        member b.Combine(x:list<'a>,y:list<'a>) :list<'a> = List.append x y
+        member b.Delay(f:unit->list<'a>) :list<'a> = f()
+        member b.Return _ :list<'a> = onReturn(); []
+        member b.Zero() :list<'a> = onZero(); []
+        member b.Yield(x:'a) :list<'a> = [x]
+
+    let sideEffectListWithReturn onReturn onZero = SideEffectListWithReturnBuilder(onReturn, onZero)
+
+    type SideEffectListWithZeroBuilder(onZero) =
+        member b.Bind(x:unit,f) :list<'b> = f()
+        member b.Combine(x:list<'a>,y:list<'a>) :list<'a> = List.append x y
+        member b.Delay(f:unit->list<'a>) :list<'a> = f()
+        member b.Zero() :list<'a> = onZero(); []
+        member b.Yield(x:'a) :list<'a> = [x]
+
+    let sideEffectListWithZero onZero = SideEffectListWithZeroBuilder(onZero)
+
+    module SideEffectListTests =
+        #if Portable
+        let printfn s = printfn "%s" s
+        #endif
+
+        let x0a : list * int * int =
+            let calledReturn = ref 0
+            let onReturn () = calledReturn := !calledReturn + 1
+            let calledZero = ref 0
+            let onZero () = calledZero := !calledZero + 1
+            sideEffectListWithReturn onReturn onZero { yield 1
+                                                       do! printfn "hello" }, !calledReturn, !calledZero
+        test "x0a" (x0a = ([1], 1, 0))
+
+        let x0b : list * int =
+            let calledZero = ref 0
+            let onZero () = calledZero := !calledZero + 1
+            sideEffectListWithZero onZero { yield 1
+                                            do! printfn "hello" }, !calledZero
+        test "x0b" (x0b = ([1], 1))
+
+
 let aa =
   if !failures then (stdout.WriteLine "Test Failed"; exit 1) 
   else (stdout.WriteLine "Test Passed"; 
diff --git a/tests/fsharp/core/control/test.fsx b/tests/fsharp/core/control/test.fsx
index ff976ff3981..0ef8971a32c 100644
--- a/tests/fsharp/core/control/test.fsx
+++ b/tests/fsharp/core/control/test.fsx
@@ -2095,7 +2095,6 @@ let aa = if not failures.IsEmpty then exit 1 else stdout.WriteLine "Test Passed"
 let _ = 
   if not failures.IsEmpty then (stdout.WriteLine("Test Failed, failures = {0}", failures); exit 1) 
   else (stdout.WriteLine "Test Passed"; 
-        log "ALL OK, HAPPY HOLIDAYS, MERRY CHRISTMAS!"
         System.IO.File.WriteAllText("test.ok","ok"); 
 // debug: why is the fsi test failing?  is it because test.ok does not exist?
         if System.IO.File.Exists("test.ok") then
diff --git a/tests/fsharp/core/controlChamenos/test.fsx b/tests/fsharp/core/controlChamenos/test.fsx
index ce0ff01baa1..2c1fc656e9f 100644
--- a/tests/fsharp/core/controlChamenos/test.fsx
+++ b/tests/fsharp/core/controlChamenos/test.fsx
@@ -138,7 +138,6 @@ let aa =
 let _ = 
   if not failures.IsEmpty then (stdout.WriteLine("Test Failed, failures = {0}", failures); exit 1) 
   else (stdout.WriteLine "Test Passed"; 
-        log "ALL OK, HAPPY HOLIDAYS, MERRY CHRISTMAS!"
         System.IO.File.WriteAllText("test.ok","ok"); 
 // debug: why is the fsi test failing?  is it because test.ok does not exist?
         if System.IO.File.Exists("test.ok") then
diff --git a/tests/fsharp/core/controlMailbox/test.fsx b/tests/fsharp/core/controlMailbox/test.fsx
index 8288ffccc82..6ef8eeb4fff 100644
--- a/tests/fsharp/core/controlMailbox/test.fsx
+++ b/tests/fsharp/core/controlMailbox/test.fsx
@@ -633,7 +633,6 @@ let aa = if not failures.IsEmpty then exit 1 else stdout.WriteLine "Test Passed"
 let _ = 
   if not failures.IsEmpty then (stdout.WriteLine("Test Failed, failures = {0}", failures); exit 1) 
   else (stdout.WriteLine "Test Passed"; 
-        log "ALL OK, HAPPY HOLIDAYS, MERRY CHRISTMAS!"
         System.IO.File.WriteAllText("test.ok","ok"); 
 // debug: why is the fsi test failing?  is it because test.ok does not exist?
         if System.IO.File.Exists("test.ok") then
diff --git a/tests/fsharp/core/forexpression/build.bat b/tests/fsharp/core/forexpression/build.bat
new file mode 100644
index 00000000000..a6ff3718fe7
--- /dev/null
+++ b/tests/fsharp/core/forexpression/build.bat
@@ -0,0 +1,6 @@
+@if "%_echo%"=="" echo off
+
+call %~d0%~p0..\..\single-test-build.bat
+
+exit /b %ERRORLEVEL%
+
diff --git a/tests/fsharp/core/forexpression/run.bat b/tests/fsharp/core/forexpression/run.bat
new file mode 100644
index 00000000000..ceb0a61a545
--- /dev/null
+++ b/tests/fsharp/core/forexpression/run.bat
@@ -0,0 +1,7 @@
+@if "%_echo%"=="" echo off
+
+call %~d0%~p0..\..\single-test-run.bat
+
+exit /b %ERRORLEVEL%
+
+
diff --git a/tests/fsharp/core/forexpression/test.fsx b/tests/fsharp/core/forexpression/test.fsx
new file mode 100644
index 00000000000..4abb0fa9e31
--- /dev/null
+++ b/tests/fsharp/core/forexpression/test.fsx
@@ -0,0 +1,153 @@
+#if Portable
+module Core_forexpression
+#endif
+
+let failures = ref false
+let report_failure () = 
+  stderr.WriteLine " NO"; failures := true
+let test s b = stderr.Write(s:string);  if b then stderr.WriteLine " OK" else report_failure() 
+
+#if NetCore
+#else
+let argv = System.Environment.GetCommandLineArgs() 
+let SetCulture() = 
+  if argv.Length > 2 && argv.[1] = "--culture" then  begin
+    let cultureString = argv.[2] in 
+    let culture = new System.Globalization.CultureInfo(cultureString) in 
+    stdout.WriteLine ("Running under culture "+culture.ToString()+"...");
+    System.Threading.Thread.CurrentThread.CurrentCulture <-  culture
+  end 
+  
+do SetCulture()    
+#endif
+
+open System
+open System.Collections.Generic
+
+let count       = 1000
+let testString  = "19740531"
+let testData    =
+    [|
+        for i in 0..count -> [| for inner in 0..i -> inner |]
+    |]
+let expectedArraySum        = 167167000 // Find an expression for this sum from count
+let expectedRangeSum        = ((count + 1) * count) / 2
+let expectedStringSum       = 30
+
+let getTestData (inner : int [] -> #seq) (outer : #seq [] -> #seq<'U>) =
+    (testData |> Array.map inner) |> outer
+
+// sumOverArray covers the case when the sequence type
+// is an Array`1
+let sumOverArray () =
+    let inner xs = xs
+    let outer xs = xs
+    let testData : int [] [] = getTestData inner outer
+    let mutable sum = 0
+    for outer in testData do
+        for inner in outer do
+            sum <- sum + inner
+    sum
+
+// sum over seq covers the case when no optimizations can be
+// found and F# has to rely on .GetEnumerator()
+let sumOverSeq () =
+    let inner = Array.toSeq
+    let outer = Array.toSeq
+    let testData : seq> = getTestData inner outer
+    let mutable sum = 0
+    for outer in testData do
+        for inner in outer do
+            sum <- sum + inner
+    sum
+
+// sum over seq covers a regression case when Dictionary
+// shouldn'be mistaken for an IList
+let sumOverDictionary () =
+    let inner xs =
+        let d = Dictionary()
+        xs |> Array.iteri (fun i x -> d.Add(i,x))
+        d
+    let testData : Dictionary [] = testData |> Array.map inner
+    let mutable sum = 0
+    for outer in testData do
+        for inner in outer do
+            sum <- sum + inner.Value
+    sum
+
+// sumOverResizeArray covers the case when the sequence type
+// extends an IList`1
+let sumOverResizeArray () =
+    let inner (xs : int []) = ResizeArray<_>(xs)
+    let outer (xs : #seq>) = ResizeArray<_>(xs)
+    let testData : ResizeArray> = getTestData inner outer
+    let mutable sum = 0
+    for outer in testData do
+        for inner in outer do
+            sum <- sum + inner
+    sum
+// sumOverIList covers the case when the sequence type
+// is IList`1
+let sumOverIList () =
+    let inner (xs : int []) = ResizeArray<_>(xs) :> IList<_>
+    let outer (xs : #seq>) = ResizeArray<_>(xs) :> IList<_>
+    let testData : IList> = getTestData inner outer
+    let mutable sum = 0
+    for outer in testData do
+        for inner in outer do
+            sum <- sum + inner
+    sum
+
+// sumOverList invokes the case when the sequence type
+// is a 'T list
+let sumOverList () =
+    let inner = Array.toList
+    let outer = Array.toList
+    let testData : int list list = getTestData inner outer
+    let mutable sum = 0
+    for outer in testData do
+        for inner in outer do
+            sum <- sum + inner
+    sum
+
+// sumOverRange invokes the case when the sequence type is
+// of the form n..m
+let sumOverRange () =
+    let mutable sum = 0
+    for i in 0..count do
+        sum <- sum + i
+    sum
+
+// sumOverString invokes the case when the sequence type is
+// a string
+let sumOverString () =
+    let mutable sum = 0
+    for i in testString do
+#if Portable
+        sum <- sum + ((int (i :?> char)) - (int '0'))
+#else
+        sum <- sum + ((int i) - (int '0'))
+#endif
+    sum
+
+let arraySum                = sumOverArray ()
+let seqSum                  = sumOverSeq ()
+let dictionarySum           = sumOverDictionary ()
+let ResizeArraySum          = sumOverResizeArray ()
+let listSum                 = sumOverList ()
+let ilistSum                = sumOverIList ()
+let rangeSum                = sumOverRange ()
+let stringSum               = sumOverString ()
+
+do test "arraySum"          (expectedArraySum   = arraySum      )
+do test "seqSum"            (expectedArraySum   = seqSum        )
+do test "dictionarySum"     (expectedArraySum   = dictionarySum )
+do test "ResizeArraySum"    (expectedArraySum   = ResizeArraySum)
+do test "listSum"           (expectedArraySum   = listSum       )
+do test "ilistSum"          (expectedArraySum   = ilistSum      )
+do test "rangeSum"          (expectedRangeSum   = rangeSum      )
+do test "stringSum"         (expectedStringSum  = stringSum     )
+
+let aa =
+    if !failures then stdout.WriteLine "Test Failed"; exit 1
+    else stdout.WriteLine "Test Passed"; System.IO.File.WriteAllText("test.ok","ok"); exit 0
diff --git a/tests/fsharp/core/fsiAndModifiers/test.fsx b/tests/fsharp/core/fsiAndModifiers/test.fsx
index e68a32f703a..39acf7397aa 100644
--- a/tests/fsharp/core/fsiAndModifiers/test.fsx
+++ b/tests/fsharp/core/fsiAndModifiers/test.fsx
@@ -89,12 +89,9 @@ module TestPack4 =
 
 if errors.IsEmpty then 
     System.IO.File.WriteAllText("test.ok", "")
+    exit(0)
 else 
     for error in errors do 
         printfn "ERROR: %s" error
-
-if errors.IsEmpty then System.IO.File.WriteAllText("test.ok", "")
-else 
-    for error in errors do 
-        printfn "ERROR: %s" error
+    exit(1)
     
\ No newline at end of file
diff --git a/tests/fsharp/core/ilread/Library.dll b/tests/fsharp/core/ilread/Library.dll
new file mode 100644
index 00000000000..7e724a12b20
Binary files /dev/null and b/tests/fsharp/core/ilread/Library.dll differ
diff --git a/tests/fsharp/core/ilread/build.bat b/tests/fsharp/core/ilread/build.bat
new file mode 100644
index 00000000000..8ee2cf351c6
--- /dev/null
+++ b/tests/fsharp/core/ilread/build.bat
@@ -0,0 +1,35 @@
+@if "%_echo%"=="" echo off
+
+setlocal
+REM Configure the sample, i.e. where to find the F# compiler and C# compiler.
+if EXIST build.ok DEL /f /q build.ok
+
+call %~d0%~p0..\..\..\config.bat
+@if ERRORLEVEL 1 goto Error
+
+if NOT "%FSC:NOTAVAIL=X%" == "%FSC%" ( 
+  REM Skipping test for FSI.EXE
+  goto Skip
+)
+
+"%FSC%" %fsc_flags% /r:Library.dll /out:test.exe test.fs
+@if ERRORLEVEL 1 goto Error
+
+"%PEVERIFY%" test.exe
+@if ERRORLEVEL 1 goto Error
+
+:Ok
+echo Built fsharp %~f0 ok.
+echo. > build.ok
+endlocal
+exit /b 0
+
+:Skip
+echo Skipped %~f0
+endlocal
+exit /b 0
+
+
+:Error
+endlocal
+exit /b %ERRORLEVEL%
diff --git a/tests/fsharp/core/ilread/run.bat b/tests/fsharp/core/ilread/run.bat
new file mode 100644
index 00000000000..2cbceb83a46
--- /dev/null
+++ b/tests/fsharp/core/ilread/run.bat
@@ -0,0 +1,22 @@
+@if "%_echo%"=="" echo off
+
+setlocal 
+dir build.ok > NUL ) || (
+  @echo 'build.ok' not found.
+  goto :ERROR
+)
+
+call %~d0%~p0..\..\..\config.bat
+
+%CLIX% .\test.exe
+if ERRORLEVEL 1 goto Error
+
+:Ok
+echo Ran fsharp %~f0 ok.
+endlocal
+exit /b 0
+
+:Error
+endlocal
+exit /b %ERRORLEVEL%
+
diff --git a/tests/fsharp/core/ilread/test.fs b/tests/fsharp/core/ilread/test.fs
new file mode 100644
index 00000000000..160a97cb9e1
--- /dev/null
+++ b/tests/fsharp/core/ilread/test.fs
@@ -0,0 +1,8 @@
+open Library
+
+[]
+let main _ =
+    let cls = Class1()
+    let len = cls.GetLength("123")
+    printfn "%O" len
+    if len = 3 then 0 else 1
\ No newline at end of file
diff --git a/tests/fsharp/core/load-script/build.bat b/tests/fsharp/core/load-script/build.bat
index ffda87fd580..93f38dbaea1 100644
--- a/tests/fsharp/core/load-script/build.bat
+++ b/tests/fsharp/core/load-script/build.bat
@@ -12,7 +12,7 @@ if NOT "%FSC:NOTAVAIL=X%" == "%FSC%" (
   goto Skip
 )
 
-script > out.txt 2>&1
+call script > out.txt 2>&1
 
 if NOT EXIST out.bsl COPY out.txt
 
diff --git a/tests/fsharp/core/measures/test.fsx b/tests/fsharp/core/measures/test.fsx
index 8b5106e13e1..3771dad7553 100644
--- a/tests/fsharp/core/measures/test.fsx
+++ b/tests/fsharp/core/measures/test.fsx
@@ -15,12 +15,13 @@ let test s b = if b then () else report_failure(s)
 #else
 let argv = System.Environment.GetCommandLineArgs() 
 let SetCulture() = 
-  if argv.Length > 2 && argv.[1] = "--culture" then  begin
-    let cultureString = argv.[2] in 
-    let culture = new System.Globalization.CultureInfo(cultureString) in 
+  if argv.Length > 2 && argv.[1] = "--culture" then
+    let cultureString = argv.[2]
+    let culture = new System.Globalization.CultureInfo(cultureString)
     stdout.WriteLine ("Running under culture "+culture.ToString()+"...");
     System.Threading.Thread.CurrentThread.CurrentCulture <-  culture
-  end 
+  else
+    System.Threading.Thread.CurrentThread.CurrentCulture <-  System.Globalization.CultureInfo.InvariantCulture
 
 do SetCulture()    
 #endif
@@ -508,7 +509,8 @@ module MembersTest =
     let s = 2.0f
     let d = 2.0M
 
-#if !NetCore
+#if NetCore
+#else
     let tmpCulture = System.Threading.Thread.CurrentThread.CurrentCulture
     System.Threading.Thread.CurrentThread.CurrentCulture <- System.Globalization.CultureInfo("en-US")
     test "f" (f.ToString().Equals("2"))
diff --git a/tests/fsharp/core/netcore/ConsoleApplication1/Program.cs b/tests/fsharp/core/netcore/ConsoleApplication1/Program.cs
index e2e869f0e1b..1cb412a0330 100644
--- a/tests/fsharp/core/netcore/ConsoleApplication1/Program.cs
+++ b/tests/fsharp/core/netcore/ConsoleApplication1/Program.cs
@@ -28,6 +28,7 @@ static int Main(string[] args)
             Run("Core_controlMailBox", () => { var x = Core_controlMailBox.aa; });
             Run("Core_controlStackOverflow", () => { var x = Core_controlStackOverflow.aa; });
             Run("Core_csext", () => { var x = Core_csext.aa; });
+            Run("Core_forexpression", () => { var x = Core_forexpression.aa; });
             Run("Core_innerpoly", () => { var x = Core_innerpoly.aa; });
             Run("Core_int32", () => { var x = Core_int32.aa; });
             Run("Core_lazy", () => { var x = Core_lazy.aa; });
diff --git a/tests/fsharp/core/netcore/netcoreautomationhelperlibrary/netcoreautomationhelperlibrary.fsproj b/tests/fsharp/core/netcore/netcoreautomationhelperlibrary/netcoreautomationhelperlibrary.fsproj
index e04bdaeb57a..780ccf8bd50 100644
--- a/tests/fsharp/core/netcore/netcoreautomationhelperlibrary/netcoreautomationhelperlibrary.fsproj
+++ b/tests/fsharp/core/netcore/netcoreautomationhelperlibrary/netcoreautomationhelperlibrary.fsproj
@@ -19,17 +19,17 @@
   
   
     Profile7
-    3.7.4.0
+    3.7.41.0
     $(FSCOREDLLNETCOREPATH)
   
   
     Profile78
-    3.78.4.0
+    3.78.41.0
     $(FSCOREDLLNETCORE78PATH)
   
   
     Profile259
-    3.259.4.0
+    3.259.41.0
     $(FSCOREDLLNETCORE259PATH)
   
   
diff --git a/tests/fsharp/core/netcore/netcorelibrary1/netcoretestinglibrary.fsproj b/tests/fsharp/core/netcore/netcorelibrary1/netcoretestinglibrary.fsproj
index 17304f6e603..27b39d2439f 100644
--- a/tests/fsharp/core/netcore/netcorelibrary1/netcoretestinglibrary.fsproj
+++ b/tests/fsharp/core/netcore/netcorelibrary1/netcoretestinglibrary.fsproj
@@ -19,7 +19,7 @@
   
   
     Profile7
-    3.7.4.0
+    3.7.41.0
     $(FSCOREDLLNETCOREPATH)
   
   
@@ -91,6 +91,9 @@
     
       csext-test.fsx
     
+    
+      forexpression-test.fsx
+    
     
       innerpoly-test.fsx
     
diff --git a/tests/fsharp/core/portable/ConsoleApplication1/Program.cs b/tests/fsharp/core/portable/ConsoleApplication1/Program.cs
index e2e869f0e1b..1cb412a0330 100644
--- a/tests/fsharp/core/portable/ConsoleApplication1/Program.cs
+++ b/tests/fsharp/core/portable/ConsoleApplication1/Program.cs
@@ -28,6 +28,7 @@ static int Main(string[] args)
             Run("Core_controlMailBox", () => { var x = Core_controlMailBox.aa; });
             Run("Core_controlStackOverflow", () => { var x = Core_controlStackOverflow.aa; });
             Run("Core_csext", () => { var x = Core_csext.aa; });
+            Run("Core_forexpression", () => { var x = Core_forexpression.aa; });
             Run("Core_innerpoly", () => { var x = Core_innerpoly.aa; });
             Run("Core_int32", () => { var x = Core_int32.aa; });
             Run("Core_lazy", () => { var x = Core_lazy.aa; });
diff --git a/tests/fsharp/core/portable/portablelibrary1/portabletestinglibrary.fsproj b/tests/fsharp/core/portable/portablelibrary1/portabletestinglibrary.fsproj
index 316c24d237c..36ff96ba4f8 100644
--- a/tests/fsharp/core/portable/portablelibrary1/portabletestinglibrary.fsproj
+++ b/tests/fsharp/core/portable/portablelibrary1/portabletestinglibrary.fsproj
@@ -57,6 +57,7 @@
     controlMailbox-test.fsx
     controlStackOverflow-test.fsx
     csext-test.fsx
+    forexpression-test.fsx
     innerpoly-test.fsx
     int32-test.fsx
     lazy-test.fsx
diff --git a/tests/fsharp/core/quotes/build.bat b/tests/fsharp/core/quotes/build.bat
index c640c78b032..36f77976912 100644
--- a/tests/fsharp/core/quotes/build.bat
+++ b/tests/fsharp/core/quotes/build.bat
@@ -15,6 +15,8 @@ if NOT "%FSC:NOTAVAIL=X%" == "%FSC%" (
 
 rem fsc.exe building
 
+    %CSC% /nologo  /target:library /out:cslib.dll cslib.cs
+    @if ERRORLEVEL 1 goto Error
 
     "%FSC%" %fsc_flags% -o:test.exe -r cslib.dll -g test.fsx
     @if ERRORLEVEL 1 goto Error
@@ -35,6 +37,22 @@ rem fsc.exe building
     "%PEVERIFY%" test--optimize.exe 
     @if ERRORLEVEL 1 goto Error
 
+    rmdir /s /q test--downtarget
+    mkdir test--downtarget
+
+	dir "%FSCOREDLLVPREVPATH%"
+	dir "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\"
+	REM Compile with FSharp.Core 4.3.1.0.  Add the FSHARP_CORE_31 and Portable defines.
+	"%FSC%" %fsc_flags% -o:test--downtarget\test--downtarget.exe --noframework -r "%FSCOREDLLVPREVPATH%" -r "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll" -r System.dll -r System.Runtime.dll -r System.Xml.dll -r System.Data.dll -r System.Web.dll -r System.Core.dll -r System.Numerics.dll -r cslib.dll -g test.fsx --define:FSHARP_CORE_31 --define:Portable
+    @if ERRORLEVEL 1 goto Error
+
+	copy /y "%FSCOREDLLVPREVPATH%" test--downtarget\FSharp.Core.dll
+    @if ERRORLEVEL 1 goto Error
+
+    "%PEVERIFY%" test--downtarget\test--downtarget.exe 
+    @if ERRORLEVEL 1 goto Error
+
+
 :Ok
 echo Built fsharp %~f0 ok.
 echo. > build.ok
diff --git a/tests/fsharp/core/quotes/cslib.cs b/tests/fsharp/core/quotes/cslib.cs
index a0a73731bb9..97a456275d7 100644
--- a/tests/fsharp/core/quotes/cslib.cs
+++ b/tests/fsharp/core/quotes/cslib.cs
@@ -2,3 +2,10 @@
 public struct S {
     public int x;
 }
+
+public class Class1
+{
+    public string myField;
+    public readonly string myReadonlyField;
+    public Class1(string v) { this.myReadonlyField = v; }
+}
diff --git a/tests/fsharp/core/quotes/cslib.dll b/tests/fsharp/core/quotes/cslib.dll
deleted file mode 100644
index 5d79f171d54..00000000000
Binary files a/tests/fsharp/core/quotes/cslib.dll and /dev/null differ
diff --git a/tests/fsharp/core/quotes/run.bat b/tests/fsharp/core/quotes/run.bat
index f8f048ea74f..ebe88e645db 100644
--- a/tests/fsharp/core/quotes/run.bat
+++ b/tests/fsharp/core/quotes/run.bat
@@ -35,6 +35,10 @@ echo TestD
     @if ERRORLEVEL 1 goto Error
     if NOT EXIST test.ok goto SetError
 
+    if exist test.ok (del /f /q test.ok)
+    %CLIX% test--downtarget\test--downtarget.exe 
+    if NOT EXIST test.ok goto SetError
+
 :Ok
 echo Ran fsharp %~f0 ok.
 endlocal
diff --git a/tests/fsharp/core/quotes/test.fsx b/tests/fsharp/core/quotes/test.fsx
index 66bb16e988a..47151507fdb 100644
--- a/tests/fsharp/core/quotes/test.fsx
+++ b/tests/fsharp/core/quotes/test.fsx
@@ -67,6 +67,24 @@ type S =
 
 module TypedTest = begin 
 
+    // Checks the shape of the quotation to match that of
+    // foreach implemented in terms of GetEnumerator ()
+    let (|ForEachShape|_|) = function
+        | Let (
+                inputSequence,
+                inputSequenceBinding,
+                Let (
+                        enumerator,
+                        enumeratorBinding,
+                        TryFinally (
+                            WhileLoop (
+                                guard,
+                                Let (i, currentExpr, body)),
+                            cleanup)
+                        )
+                ) -> Some inputSequence
+        | _ -> None
+
     let x = <@ 1 @>
 
     test "check SByte"    ((<@  1y   @> |> (function SByte 1y ->   true | _ -> false))) 
@@ -77,7 +95,6 @@ module TypedTest = begin
     test "check UInt16"   ((<@  1us  @> |> (function UInt16 1us -> true | _ -> false))) 
     test "check UInt32"   ((<@  1u   @> |> (function UInt32 1u ->  true | _ -> false))) 
     test "check UInt64"   ((<@  1UL  @> |> (function UInt64 1UL -> true | _ -> false))) 
-    test "check Decimal"  ((<@  1M   @> |> (function Decimal 1M -> true | _ -> false))) 
     test "check String"   ((<@  "1"  @> |> (function String "1" -> true | _ -> false))) 
 
     test "check ~SByte"   ((<@  "1"  @> |> (function SByte _ ->    false | _ -> true))) 
@@ -88,10 +105,14 @@ module TypedTest = begin
     test "check ~UInt16"  ((<@  "1"  @> |> (function UInt16 _ ->   false | _ -> true))) 
     test "check ~UInt32"  ((<@  "1"  @> |> (function UInt32 _ ->   false | _ -> true))) 
     test "check ~UInt64"  ((<@  "1"  @> |> (function UInt64 _ ->   false | _ -> true))) 
-    test "check ~Decimal" ((<@  "1"  @> |> (function Decimal _ ->  false | _ -> true))) 
     test "check ~String"  ((<@  1    @> |> (function String "1" -> false | _ -> true))) 
 
+#if FSHARP_CORE_31
+#else
+    test "check Decimal"  ((<@  1M   @> |> (function Decimal 1M -> true | _ -> false))) 
+    test "check ~Decimal" ((<@  "1"  @> |> (function Decimal _ ->  false | _ -> true))) 
     test "check ~Decimal neither" ((<@ 1M + 1M @> |> (function Decimal _ ->  false | _ -> true))) 
+#endif
 
     test "check AndAlso" ((<@ true && true  @> |> (function AndAlso(Bool(true),Bool(true)) -> true | _ -> false))) 
     test "check OrElse"  ((<@ true || true  @> |> (function OrElse(Bool(true),Bool(true)) -> true | _ -> false))) 
@@ -108,7 +129,11 @@ module TypedTest = begin
     // In this example, the types of the start and end points are not known at the point the loop
     // is typechecked. There was a bug (6064) where the transformation to a ForIntegerRangeLoop was only happening
     // when types were known
-    test "check ForIntegerRangeLoop"   (<@ for i in failwith "" .. failwith "" do printf "hello" @> |> (function ForIntegerRangeLoop(v,_,_,b) -> true | _ -> false))
+    test "check ForIntegerRangeLoop"    (<@ for i in failwith "" .. failwith "" do printf "hello" @> |> (function ForIntegerRangeLoop(v,_,_,b) -> true | _ -> false))
+    // Checks that foreach over non-integer ranges should have the shape of foreach implemented in terms of GetEnumerator
+    test "check ForEachInSeq"           (<@ for i in seq {for x in 0..10 -> x} do printf "hello" @> |> (function ForEachShape(_) -> true | _ -> false))
+    test "check ForEachInList"          (<@ for i in "123" do printf "hello" @> |> (function ForEachShape(_) -> true | _ -> false))
+    test "check ForEachInString"        (<@ for i in [1;2;3] do printf "hello" @> |> (function ForEachShape(_) -> true | _ -> false))
     // A slight non orthogonality is that all other 'for' loops go to (quite complex) the desugared form
     test "check Other Loop"   (<@ for i in 1 .. 2 .. 10 do printf "hello" @> |> (function Let(v,_,b) -> true | _ -> false))
     test "check Other Loop"   (<@ for i in 1L .. 10L do printf "hello" @> |> (function Let(v,_,b) -> true | _ -> false))
@@ -506,6 +531,17 @@ module TypedTest = begin
             |   _ -> false
         end
 
+#if FSHARP_CORE_31
+#else
+    test "check accesses to readonly fields in ReflectedDefinitions" 
+        begin
+            let c1 = Class1("a")
+            match <@ c1.myReadonlyField @> with
+            |   FieldGet(Some (ValueWithName (_, v, "c1")), field) -> (v.Name = "Class1") && (field.Name = "myReadonlyField")
+            |   _ -> false
+        end
+#endif
+
 end
 
 (*
@@ -1639,10 +1675,13 @@ module QuotationConstructionTests =
     check "vcknwwe099" (Expr.PropertySet(<@@ (new System.Windows.Forms.Form()) @@>, setof <@@ (new System.Windows.Forms.Form()).Text <- "2" @@>, <@@ "3" @@> )) <@@ (new System.Windows.Forms.Form()).Text <- "3" @@>
     #endif
     check "vcknwwe099" (Expr.PropertySet(<@@ (new Foo()) @@>, setof <@@ (new Foo()).[3] <- 1 @@>, <@@ 2 @@> , [ <@@ 3 @@> ] )) <@@ (new Foo()).[3] <- 2 @@>
+#if FSHARP_CORE_31
+#else
     check "vcknwwe0qq1" (Expr.QuoteRaw(<@ "1" @>)) <@@ <@@ "1" @@> @@>
     check "vcknwwe0qq2" (Expr.QuoteRaw(<@@ "1" @@>)) <@@ <@@ "1" @@> @@>
     check "vcknwwe0qq3" (Expr.QuoteTyped(<@ "1" @>)) <@@ <@ "1" @> @@>
     check "vcknwwe0qq4" (Expr.QuoteTyped(<@@ "1" @@>)) <@@ <@ "1" @> @@>
+#endif
     check "vcknwwe0ww" (Expr.Sequential(<@@ () @@>, <@@ 1 @@>)) <@@ (); 1 @@>
     check "vcknwwe0ee" (Expr.TryFinally(<@@ 1 @@>, <@@ () @@>)) <@@ try 1 finally () @@>
     check "vcknwwe0rr" (match Expr.TryWith(<@@ 1 @@>, Var.Global("e1",typeof), <@@ 1 @@>, Var.Global("e2",typeof), <@@ 2 @@>) with TryWith(b,v1,ef,v2,eh) -> b = <@@ 1 @@> && eh = <@@ 2 @@> && ef = <@@ 1 @@> && v1 = Var.Global("e1",typeof) && v2 = Var.Global("e2",typeof)| _ -> false) true 
@@ -2418,6 +2457,8 @@ module QuotationOfResizeArrayIteration =
         
 
 
+#if FSHARP_CORE_31
+#else
 module TestAutoQuoteAtStaticMethodCalls = 
     open Microsoft.FSharp.Quotations
 
@@ -2722,6 +2763,10 @@ module ExtensionMembersWithSameName =
         | _ -> failwith "unexpected shape"
 
     runAll()
+#endif
+
+module TestAssemblyAttributes = 
+    let attributes = System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(false)
 
 let aa =
   if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1) 
diff --git a/tests/fsharp/core/seq/test.fsx b/tests/fsharp/core/seq/test.fsx
index cec86850d9f..694fe89f0af 100644
--- a/tests/fsharp/core/seq/test.fsx
+++ b/tests/fsharp/core/seq/test.fsx
@@ -487,6 +487,31 @@ check "hfhdfsjkfur34"
         Failure "ss!!!" -> results := "caught"::!results
     !results)
     ["caught";"ssDispose";"eDispose"]
+
+// Check https://github.com/Microsoft/visualfsharp/pull/742
+
+module Repro1 = 
+
+    let configure () =
+     let aSequence = seq { yield "" } 
+     let aString = new string('a',3)
+     for _ in aSequence do
+       System.Console.WriteLine(aString)
+
+    do configure ()
+    /// The check is that the above code compiles OK
+
+module Repro2 = 
+
+    let configure () =
+     let aSequence = Microsoft.FSharp.Core.Operators.(..) 3 4
+     let aString = new string('a',3)
+     for _ in aSequence do
+       System.Console.WriteLine(aString)
+
+    do configure ()
+    /// The check is that the above code compiles OK
+
     
 (*---------------------------------------------------------------------------
 !* wrap up
diff --git a/tests/fsharp/core/signedtests/dont.run.peverify b/tests/fsharp/core/signedtests/dont.run.peverify
new file mode 100644
index 00000000000..ce274c82a82
Binary files /dev/null and b/tests/fsharp/core/signedtests/dont.run.peverify differ
diff --git a/tests/fsharp/core/tests_core.fs b/tests/fsharp/core/tests_core.fs
new file mode 100644
index 00000000000..ff71fbec917
--- /dev/null
+++ b/tests/fsharp/core/tests_core.fs
@@ -0,0 +1,2676 @@
+module ``FSharp-Tests-Core``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open NUnitConf
+open PlatformHelpers
+open FSharpTestSuiteTypes
+
+let testContext = FSharpTestSuite.testContext
+
+let requireVSUltimate cfg = processor {
+    do! match cfg.INSTALL_SKU with
+        | Some (Ultimate) -> Success
+        | x ->
+            // IF /I "%INSTALL_SKU%" NEQ "ULTIMATE" (
+            //     echo Test not supported except on Ultimate
+            NUnitConf.skip (sprintf "Test not supported except on Ultimate, was %A" x)
+            //     exit /b 0
+            // )
+    }
+
+module Access =
+    []
+    let access p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module Apporder = 
+    []
+    let apporder p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module Array = 
+    []
+    let array p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module Attributes = 
+    []
+    let attributes p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        }) 
+
+module Comprehensions = 
+    []
+    let comprehensions p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module Control = 
+    []
+    let control p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+    []
+    let ``control --tailcalls`` p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun {cfg with fsi_flags = " --tailcalls" } dir p
+        })
+
+module ControlChamenos =
+    []
+    let controlChamenos p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun { cfg with fsi_flags = " --tailcalls" }  dir p
+        })
+
+module ControlMailbox =
+    []
+    let controlMailbox p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg  dir p
+        })
+
+    []
+    let ``controlMailbox --tailcalls`` p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun { cfg with fsi_flags = " --tailcalls" }  dir p
+        })
+
+module ControlWpf = 
+    []
+    let controlWpf p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module Csext = 
+    []
+    let csext p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module Events = 
+
+    let build cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None} p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let csc = Printf.ksprintf (Commands.csc exec cfg.CSC)
+
+        // "%FSC%" %fsc_flags% -a -o:test.dll -g test.fs
+        do! fsc "%s -a -o:test.dll -g" cfg.fsc_flags ["test.fs"]
+
+        // "%PEVERIFY%" test.dll
+        do! peverify "test.dll"
+
+        // %CSC% /r:"%FSCOREDLLPATH%" /reference:test.dll /debug+ testcs.cs
+        do! csc """/r:"%s" /reference:test.dll /debug+""" cfg.FSCOREDLLPATH ["testcs.cs"]
+
+        // "%PEVERIFY%" testcs.exe
+        do! peverify "testcs.exe"
+        }
+
+    let run cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None} p >> checkResult
+        let fsi = Printf.ksprintf (Commands.fsi exec cfg.FSI)
+        let fileguard = (Commands.getfullpath dir) >> FileGuard.create
+
+        use testOkFile = fileguard "test.ok"
+
+        // %CLIX% "%FSI%" test.fs && (
+        do! fsi "" ["test.fs"]
+
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :FSI failed;
+        // goto Error
+        // set ERRORMSG=%ERRORMSG% FSI failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+
+        // %CLIX% .\testcs.exe
+        do! exec ("."/"testcs.exe") ""
+        }
+
+    []
+    let events () = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+        
+        do! run cfg dir
+        })
+
+
+module ``FSI-Shadowcopy`` = 
+
+    []
+    // "%FSI%" %fsi_flags%                          < test1.fsx
+    []
+    // "%FSI%" %fsi_flags%  --shadowcopyreferences- < test1.fsx
+    []
+    let ``shadowcopy disabled`` (flags: string) = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = Some(RedirectInput(l)) } p >> checkResult
+        let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags [])
+        let fileguard = (Commands.getfullpath dir) >> FileGuard.create
+
+        // if exist test1.ok (del /f /q test1.ok)
+        use testOkFile = fileguard "test1.ok"
+
+        do! ``fsi <`` "%s %s" cfg.fsi_flags flags "test1.fsx"
+
+        // if NOT EXIST test1.ok goto SetError
+        do! testOkFile |> NUnitConf.checkGuardExists
+        })
+
+    []
+    // "%FSI%" %fsi_flags%  /shadowcopyreferences+  < test2.fsx
+    []
+    // "%FSI%" %fsi_flags%  --shadowcopyreferences  < test2.fsx
+    []
+    let ``shadowcopy enabled`` (flags: string) = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = Some(RedirectInput(l)) } p >> checkResult
+        let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags [])
+        let fileguard = (Commands.getfullpath dir) >> FileGuard.create
+
+        // if exist test2.ok (del /f /q test2.ok)
+        use testOkFile = fileguard "test2.ok"
+
+        // "%FSI%" %fsi_flags%  /shadowcopyreferences+  < test2.fsx
+        do! ``fsi <`` "%s %s" cfg.fsi_flags flags "test2.fsx"
+
+        // if NOT EXIST test2.ok goto SetError
+        do! testOkFile |> NUnitConf.checkGuardExists
+        })
+
+    
+
+module Forwarders = 
+
+    []
+    let forwarders () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let csc = Printf.ksprintf (Commands.csc exec cfg.CSC)
+        let copy_y f = Commands.copy_y dir f >> checkResult
+        let mkdir = Commands.mkdir_p dir
+
+        // mkdir orig
+        mkdir "orig"
+        // mkdir split
+        mkdir "split"
+
+        // %CSC% /nologo  /target:library /out:orig\a.dll /define:PART1;PART2 a.cs
+        do! csc """/nologo  /target:library /out:orig\a.dll /define:PART1;PART2""" ["a.cs"]
+
+        // %CSC% /nologo  /target:library /out:orig\b.dll /r:orig\a.dll b.cs 
+        do! csc """/nologo  /target:library /out:orig\b.dll /r:orig\a.dll""" ["b.cs"]
+
+        // "%FSC%" -a -o:orig\c.dll -r:orig\b.dll -r:orig\a.dll c.fs
+        do! fsc """-a -o:orig\c.dll -r:orig\b.dll -r:orig\a.dll""" ["c.fs"]
+
+        // %CSC% /nologo  /target:library /out:split\a-part1.dll /define:PART1;SPLIT a.cs  
+        do! csc """/nologo  /target:library /out:split\a-part1.dll /define:PART1;SPLIT""" ["a.cs"]
+
+        // %CSC% /nologo  /target:library /r:split\a-part1.dll /out:split\a.dll /define:PART2;SPLIT a.cs
+        do! csc """/nologo  /target:library /r:split\a-part1.dll /out:split\a.dll /define:PART2;SPLIT""" ["a.cs"]
+
+        // copy /y orig\b.dll split\b.dll
+        do! copy_y ("orig"/"b.dll") ("split"/"b.dll")
+        // copy /y orig\c.dll split\c.dll
+        do! copy_y ("orig"/"c.dll") ("split"/"c.dll")
+
+        // "%FSC%" -o:orig\test.exe -r:orig\b.dll -r:orig\a.dll test.fs
+        do! fsc """-o:orig\test.exe -r:orig\b.dll -r:orig\a.dll""" ["test.fs"]
+
+        // "%FSC%" -o:split\test.exe -r:split\b.dll -r:split\a-part1.dll -r:split\a.dll test.fs
+        do! fsc """-o:split\test.exe -r:split\b.dll -r:split\a-part1.dll -r:split\a.dll""" ["test.fs"]
+
+        // "%FSC%" -o:split\test-against-c.exe -r:split\c.dll -r:split\a-part1.dll -r:split\a.dll test.fs
+        do! fsc """-o:split\test-against-c.exe -r:split\c.dll -r:split\a-part1.dll -r:split\a.dll""" ["test.fs"]
+
+        // pushd split
+        // "%PEVERIFY%" a-part1.dll
+        do! peverify ("split"/"a-part1.dll")
+
+        // REM "%PEVERIFY%" a.dll
+        // REM   @if ERRORLEVEL 1 goto Error
+
+        // "%PEVERIFY%" b.dll
+        do! peverify ("split"/"b.dll")
+
+        // "%PEVERIFY%" c.dll
+        do! peverify ("split"/"c.dll")
+
+        // "%PEVERIFY%" test.exe
+        do! peverify ("split"/"test.exe")
+
+        // "%PEVERIFY%" test-against-c.exe
+        do! peverify ("split"/"test-against-c.exe")
+
+        // popd
+
+        })
+
+module FsFromCs = 
+
+    let build cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let csc = Printf.ksprintf (Commands.csc exec cfg.CSC)
+        let fsc_flags = cfg.fsc_flags
+
+        // "%FSC%" %fsc_flags% -a --doc:lib.xml -o:lib.dll -g lib.ml
+        do! fsc "%s -a --doc:lib.xml -o:lib.dll -g" fsc_flags ["lib.ml"]
+
+        // "%PEVERIFY%" lib.dll
+        do! peverify "lib.dll"
+
+        // %CSC% /nologo /r:"%FSCOREDLLPATH%" /r:System.Core.dll /r:lib.dll /out:test.exe test.cs 
+        do! csc """/nologo /r:"%s" /r:System.Core.dll /r:lib.dll /out:test.exe""" cfg.FSCOREDLLPATH ["test.cs"]
+
+        // "%FSC%" %fsc_flags% -a --doc:lib--optimize.xml -o:lib--optimize.dll -g lib.ml
+        do! fsc """%s -a --doc:lib--optimize.xml -o:lib--optimize.dll -g""" fsc_flags ["lib.ml"]
+
+        // "%PEVERIFY%" lib--optimize.dll
+        do! peverify "lib--optimize.dll"
+
+        // %CSC% 
+        do! csc """/nologo /r:"%s"  /r:System.Core.dll /r:lib--optimize.dll    /out:test--optimize.exe""" cfg.FSCOREDLLPATH ["test.cs"]
+        
+        }
+
+    let run cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+
+        // %CLIX% .\test.exe
+        do! exec ("."/"test.exe") ""
+
+        // %CLIX% .\test--optimize.exe
+        do! exec ("."/"test--optimize.exe") ""
+
+        }
+
+    []
+    let fsfromcs () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+module FsFromFsViaCs = 
+
+    let build cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let csc = Printf.ksprintf (Commands.csc exec cfg.CSC)
+        let fsc_flags = cfg.fsc_flags
+
+        // "%FSC%" %fsc_flags% -a -o:lib.dll -g lib.ml
+        do! fsc "%s -a -o:lib.dll -g" fsc_flags ["lib.ml"]
+
+        // "%PEVERIFY%" lib.dll
+        do! peverify "lib.dll"
+
+        // %CSC% /nologo /target:library /r:"%FSCOREDLLPATH%" /r:lib.dll /out:lib2.dll lib2.cs 
+        do! csc """/nologo /target:library /r:"%s" /r:lib.dll /out:lib2.dll""" cfg.FSCOREDLLPATH ["lib2.cs"]
+
+        // "%FSC%" %fsc_flags% -r:lib.dll -r:lib2.dll -o:test.exe -g test.fsx
+        do! fsc "%s -r:lib.dll -r:lib2.dll -o:test.exe -g" fsc_flags ["test.fsx"]
+
+        // "%PEVERIFY%" test.exe 
+        do! peverify "test.exe"
+
+        }
+
+    let run cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+
+        // %CLIX% .\test.exe
+        do! exec ("."/"test.exe") ""
+
+        }
+
+    []
+    let fsfromfsviacs () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+
+module ``FSI-reload`` = 
+
+    []
+    let ``fsi-reload`` () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = Some(RedirectInput(l)) } p >> checkResult
+        let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags [])
+        let fsi = Printf.ksprintf (Commands.fsi exec cfg.FSI)
+        let fileguard = (Commands.getfullpath dir) >> FileGuard.create
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+
+        /////// build.bat ///////
+
+        // REM  NOTE that this test does not do anything.
+        // REM  PEVERIFY not needed
+
+        /////// run.bat  ////////
+
+        do! processor {
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = fileguard "test.ok"
+            // "%FSI%" %fsi_flags%  --maxerrors:1 < test1.ml
+            do! ``fsi <`` "%s  --maxerrors:1" cfg.fsi_flags "test1.ml"
+            // if NOT EXIST test.ok goto SetError
+            do! testOkFile |> NUnitConf.checkGuardExists
+            }
+                
+        do! processor {
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = fileguard "test.ok"
+            // "%FSI%" %fsi_flags%  --maxerrors:1 load1.fsx
+            do! fsi "%s  --maxerrors:1" cfg.fsi_flags ["load1.fsx"]
+            // if NOT EXIST test.ok goto SetError
+            do! testOkFile |> NUnitConf.checkGuardExists
+            }
+
+        do! processor {
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = fileguard "test.ok"
+            // "%FSI%" %fsi_flags%  --maxerrors:1 load2.fsx
+            do! fsi "%s  --maxerrors:1" cfg.fsi_flags ["load2.fsx"]
+            // if NOT EXIST test.ok goto SetError
+            do! testOkFile |> NUnitConf.checkGuardExists
+            }
+
+        // REM Check we can also compile, for sanity's sake
+        // "%FSC%" load1.fsx
+        do! fsc "" ["load1.fsx"]
+
+        // REM Check we can also compile, for sanity's sake
+        // "%FSC%" load2.fsx
+        do! fsc "" ["load2.fsx"]
+
+        })
+
+
+module fsiAndModifiers = 
+
+    let build cfg dir = processor {
+        let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = Some(RedirectInput(l)) } p >> checkResult
+        let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags [])
+        let del = Commands.rm dir
+        let exist = Commands.fileExists dir >> Option.isSome
+
+        // if exist TestLibrary.dll (del /f /q TestLibrary.dll)
+        do if exist "TestLibrary.dll" then del "TestLibrary.dll"
+
+        // "%FSI%" %fsi_flags%  --maxerrors:1 < prepare.fsx
+        do! ``fsi <`` "%s  --maxerrors:1" cfg.fsi_flags "prepare.fsx"
+
+        }
+
+    let run cfg dir = processor {
+        let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = Some(RedirectInput(l)) } p >> checkResult
+        let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags [])
+        let fileguard = (Commands.getfullpath dir) >> FileGuard.create
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = fileguard "test.ok"
+        
+        // "%FSI%" %fsi_flags%  --maxerrors:1 < test.fsx
+        do! ``fsi <`` "%s  --maxerrors:1" cfg.fsi_flags "test.fsx"
+
+        // if NOT EXIST test.ok goto SetError
+        do! testOkFile |> NUnitConf.checkGuardExists
+
+        }
+
+    []
+    let fsiAndModifiers () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+module GenericMeasures = 
+
+    []
+    let genericmeasures p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module Hiding = 
+
+    []
+    let hiding () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let fsc_flags = cfg.fsc_flags
+
+        // "%FSC%" %fsc_flags% -a --optimize -o:lib.dll lib.mli lib.ml libv.ml
+        do! fsc "%s -a --optimize -o:lib.dll" fsc_flags ["lib.mli";"lib.ml";"libv.ml"]
+
+        // "%PEVERIFY%" lib.dll
+        do! peverify "lib.dll"
+
+        // "%FSC%" %fsc_flags% -a --optimize -r:lib.dll -o:lib2.dll lib2.mli lib2.ml lib3.ml
+        do! fsc "%s -a --optimize -r:lib.dll -o:lib2.dll" fsc_flags ["lib2.mli";"lib2.ml";"lib3.ml"]
+
+        // "%PEVERIFY%" lib2.dll
+        do! peverify "lib2.dll"
+
+        // "%FSC%" %fsc_flags% --optimize -r:lib.dll -r:lib2.dll -o:client.exe client.ml
+        do! fsc "%s --optimize -r:lib.dll -r:lib2.dll -o:client.exe" fsc_flags ["client.ml"]
+
+        // "%PEVERIFY%" client.exe
+        do! peverify "client.exe"
+
+        })
+
+
+module Innerpoly = 
+
+    []
+    let innerpoly p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+        
+        
+module ``test int32`` = 
+
+    []
+    let int32 p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+module QueriesCustomQueryOps = 
+
+    let build cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let csc = Printf.ksprintf (Commands.csc exec cfg.CSC)
+        let fsc_flags = cfg.fsc_flags
+
+        // "%FSC%" %fsc_flags% -o:test.exe -g test.fsx
+        do! fsc """%s -o:test.exe -g""" fsc_flags ["test.fsx"]
+
+        // "%PEVERIFY%" test.exe 
+        do! peverify "test.exe"
+
+        // "%FSC%" %fsc_flags% --optimize -o:test--optimize.exe -g test.fsx
+        do! fsc """%s --optimize -o:test--optimize.exe -g""" fsc_flags ["test.fsx"]
+
+        // "%PEVERIFY%" test--optimize.exe 
+        do! peverify "test--optimize.exe"
+
+        // call ..\..\single-neg-test.bat negativetest
+        do! SingleNegTest.singleNegTest cfg dir "negativetest"
+        
+        }
+
+    let run cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsi = Printf.ksprintf (Commands.fsi exec cfg.FSI)
+        let fileguard = (Commands.getfullpath dir) >> FileGuard.create
+
+        // echo TestC
+        log "TestC"
+        do! processor {
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = fileguard "test.ok"
+
+            // "%FSI%" %fsi_flags% test.fsx
+            do! fsi "%s" cfg.fsi_flags ["test.fsx"]
+
+            // if NOT EXIST test.ok goto SetError
+            do! testOkFile |> NUnitConf.checkGuardExists
+        }
+
+        // echo TestD
+        log "TestD"
+        do! processor {
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = fileguard "test.ok"
+
+            // %CLIX% test.exe
+            do! exec ("."/"test.exe") ""
+
+            // if NOT EXIST test.ok goto SetError
+            do! testOkFile |> NUnitConf.checkGuardExists
+            }
+
+        do! processor {
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = fileguard "test.ok"
+
+            // %CLIX% test--optimize.exe
+            do! exec ("."/"test--optimize.exe") ""
+
+            // if NOT EXIST test.ok goto SetError
+            do! testOkFile |> NUnitConf.checkGuardExists
+            }
+
+        }
+
+    []
+    let queriesCustomQueryOps () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+module Printing = 
+
+    // "%FSI%" %fsc_flags_errors_ok%  --nologo --use:preludePrintSize200.fsx      z.raw.output.test.200.txt     2>&1 
+    // findstr /v "%CD%" z.raw.output.test.200.txt     | findstr /v -C:"--help' for options" > z.output.test.200.txt
+    // if NOT EXIST z.output.test.200.bsl     COPY z.output.test.200.txt     z.output.test.200.bsl
+    // %PRDIFF% z.output.test.200.txt     z.output.test.200.bsl     > z.output.test.200.diff
+    []
+    [] //not enough
+    []
+    []
+    []
+    []
+    []
+    let printing flag diffFile expectedFile = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let copy from' = Commands.copy_y dir from' >> checkResult
+        let fileExists = Commands.fileExists dir >> Option.isSome
+        let getfullpath = Commands.getfullpath dir
+
+        let ``fsi b 2>&1`` =
+            // "%FSI%" %fsc_flags_errors_ok%  --nologo                                    z.raw.output.test.default.txt 2>&1
+            let ``exec b 2>&1`` inFile outFile p = 
+                Command.exec dir cfg.EnvironmentVariables { Output = OutputAndError(Overwrite(outFile)); Input = Some(RedirectInput(inFile)); } p 
+                >> checkResult
+            Printf.ksprintf (fun flags in' out -> Commands.fsi (``exec b 2>&1`` in' out) cfg.FSI flags [])
+        
+        let fsdiff a b = 
+            let ``exec >`` f p = Command.exec dir cfg.EnvironmentVariables { Output = Output(Overwrite(f)); Input = None} p >> checkResult
+            let diffFile = Path.ChangeExtension(a, ".diff")
+            Commands.fsdiff (``exec >`` diffFile) cfg.FSDIFF a b
+
+        let fsc_flags_errors_ok = ""
+
+        // echo == Plain
+        // "%FSI%" %fsc_flags_errors_ok%  --nologo                                    z.raw.output.test.default.txt 2>&1
+        // echo == PrintSize 1000
+        // "%FSI%" %fsc_flags_errors_ok%  --nologo --use:preludePrintSize1000.fsx     z.raw.output.test.1000.txt    2>&1 
+        // echo == PrintSize 200
+        // "%FSI%" %fsc_flags_errors_ok%  --nologo --use:preludePrintSize200.fsx      z.raw.output.test.200.txt     2>&1 
+        // echo == ShowDeclarationValues off
+        // "%FSI%" %fsc_flags_errors_ok%  --nologo --use:preludeShowDeclarationValuesFalse.fsx z.raw.output.test.off.txt     2>&1
+        // echo == Quiet
+        // "%FSI%" %fsc_flags_errors_ok% --nologo --quiet                              z.raw.output.test.quiet.txt   2>&1
+        let rawFile = Path.GetTempFileName()
+        do! ``fsi b 2>&1`` "%s --nologo %s" fsc_flags_errors_ok flag "test.fsx" rawFile
+
+        // REM REVIEW: want to normalise CWD paths, not suppress them.
+        let ``findstr /v`` text = Seq.filter (fun (s: string) -> not <| s.Contains(text))
+        let removeCDandHelp from' to' =
+            File.ReadLines from' |> (``findstr /v`` dir) |> (``findstr /v`` "--help' for options") |> (fun lines -> File.WriteAllLines(getfullpath to', lines))
+
+        // findstr /v "%CD%" z.raw.output.test.default.txt | findstr /v -C:"--help' for options" > z.output.test.default.txt
+        // findstr /v "%CD%" z.raw.output.test.1000.txt    | findstr /v -C:"--help' for options" > z.output.test.1000.txt
+        // findstr /v "%CD%" z.raw.output.test.200.txt     | findstr /v -C:"--help' for options" > z.output.test.200.txt
+        // findstr /v "%CD%" z.raw.output.test.off.txt     | findstr /v -C:"--help' for options" > z.output.test.off.txt
+        // findstr /v "%CD%" z.raw.output.test.quiet.txt   | findstr /v -C:"--help' for options" > z.output.test.quiet.txt
+        removeCDandHelp rawFile diffFile
+
+        let withDefault default' to' =
+            if not (fileExists to') then Some (copy default' to') else None
+        // if NOT EXIST z.output.test.default.bsl COPY z.output.test.default.txt z.output.test.default.bsl
+        // if NOT EXIST z.output.test.off.bsl     COPY z.output.test.off.txt     z.output.test.off.bsl
+        // if NOT EXIST z.output.test.1000.bsl    COPY z.output.test.1000.txt    z.output.test.1000.bsl
+        // if NOT EXIST z.output.test.200.bsl     COPY z.output.test.200.txt     z.output.test.200.bsl
+        // if NOT EXIST z.output.test.quiet.bsl   COPY z.output.test.quiet.txt   z.output.test.quiet.bsl
+        do! expectedFile |> withDefault diffFile
+
+        // %PRDIFF% z.output.test.default.txt z.output.test.default.bsl > z.output.test.default.diff
+        // %PRDIFF% z.output.test.off.txt     z.output.test.off.bsl     > z.output.test.off.diff
+        // %PRDIFF% z.output.test.1000.txt    z.output.test.1000.bsl    > z.output.test.1000.diff
+        // %PRDIFF% z.output.test.200.txt     z.output.test.200.bsl     > z.output.test.200.diff
+        // %PRDIFF% z.output.test.quiet.txt   z.output.test.quiet.bsl   > z.output.test.quiet.diff
+        do! fsdiff diffFile expectedFile
+
+        // echo ======== Differences From ========
+        // TYPE  z.output.test.default.diff
+        // TYPE  z.output.test.off.diff
+        // TYPE  z.output.test.1000.diff
+        // TYPE  z.output.test.200.diff
+        // TYPE  z.output.test.quiet.diff
+        // echo ========= Differences To =========
+        // 
+        // TYPE  z.output.test.default.diff  > zz.alldiffs
+        // TYPE  z.output.test.off.diff     >> zz.alldiffs
+        // TYPE  z.output.test.1000.diff    >> zz.alldiffs
+        // TYPE  z.output.test.200.diff     >> zz.alldiffs
+        // TYPE  z.output.test.quiet.diff   >> zz.alldiffs
+        // 
+        // for /f %%c IN (zz.alldiffs) do (
+        //   echo NOTE -------------------------------------
+        //   echo NOTE ---------- THERE ARE DIFFs ----------
+        //   echo NOTE -------------------------------------
+        //   echo .
+        //   echo To update baselines: "sd edit *bsl", "del *bsl", "build.bat" regenerates bsl, "sd diff ...", check what changed.
+        //   goto Error
+        // )
+        ignore "printed to log"
+
+
+        })
+
+module Quotes = 
+
+    let build cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let fsc_flags = cfg.fsc_flags
+        let csc = Printf.ksprintf (Commands.csc exec cfg.CSC)
+
+        //missing csc
+        do! csc """/nologo  /target:library /out:cslib.dll""" ["cslib.cs"]
+
+        // "%FSC%" %fsc_flags% -o:test.exe -r cslib.dll -g test.fsx
+        do! fsc "%s -o:test.exe -r cslib.dll -g" fsc_flags ["test.fsx"]
+
+        // "%PEVERIFY%" test.exe 
+        do! peverify "test.exe"
+
+        // "%FSC%" %fsc_flags% -o:test-with-debug-data.exe --quotations-debug+ -r cslib.dll -g test.fsx
+        do! fsc "%s -o:test-with-debug-data.exe --quotations-debug+ -r cslib.dll -g" fsc_flags ["test.fsx"]
+
+        // "%PEVERIFY%" test-with-debug-data.exe 
+        do! peverify "test-with-debug-data.exe"
+
+        // "%FSC%" %fsc_flags% --optimize -o:test--optimize.exe -r cslib.dll -g test.fsx
+        do! fsc "%s --optimize -o:test--optimize.exe -r cslib.dll -g" fsc_flags ["test.fsx"]
+
+        // "%PEVERIFY%" test--optimize.exe 
+        do! peverify "test--optimize.exe"
+        
+        }
+
+    let run cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsi = Printf.ksprintf (Commands.fsi exec cfg.FSI)
+        let fileguard = (Commands.getfullpath dir) >> FileGuard.create
+
+        do! processor {
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = fileguard "test.ok"
+
+            // "%FSI%" %fsi_flags% -r cslib.dll test.fsx
+            do! fsi "%s -r cslib.dll" cfg.fsi_flags ["test.fsx"]
+            
+            // if NOT EXIST test.ok goto SetError
+            do! testOkFile |> NUnitConf.checkGuardExists
+            }
+
+        do! processor {
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = fileguard "test.ok"
+
+            // %CLIX% test.exe
+            do! exec ("."/"test.exe") ""
+
+            // if NOT EXIST test.ok goto SetError
+            do! testOkFile |> NUnitConf.checkGuardExists
+            }
+
+        do! processor {
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = fileguard "test.ok"
+
+            // %CLIX% test-with-debug-data.exe
+            do! exec ("."/"test-with-debug-data.exe") ""
+
+            // if NOT EXIST test.ok goto SetError
+            do! testOkFile |> NUnitConf.checkGuardExists
+            }
+
+        do! processor {
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = fileguard "test.ok"
+
+            // %CLIX% test--optimize.exe
+            do! exec ("."/"test--optimize.exe") ""
+
+            // if NOT EXIST test.ok goto SetError
+            do! testOkFile |> NUnitConf.checkGuardExists
+            }
+
+        }
+
+    []
+    let quotes () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+
+module Namespaces = 
+
+    []
+    let attributes p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        }) 
+
+module Parsing = 
+
+    []
+    let parsing () = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let fsc_flags = cfg.fsc_flags
+
+        // "%FSC%" %fsc_flags% -a -o:crlf.dll -g crlf.ml
+        do! fsc "%s -a -o:crlf.dll -g" fsc_flags ["crlf.ml"]
+
+        // "%FSC%" %fsc_flags% -o:toplet.exe -g toplet.ml
+        do! fsc "%s -o:toplet.exe -g" fsc_flags ["toplet.ml"]
+
+        // "%PEVERIFY%" toplet.exe
+        do! peverify "toplet.exe"
+
+        }) 
+
+module Unicode = 
+
+    let build cfg dir = processor {
+        
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let fsc_flags = cfg.fsc_flags
+
+        // REM just checking the files actually parse/compile for now....
+
+        // "%FSC%" %fsc_flags% -a -o:kanji-unicode-utf8-nosig-codepage-65001.dll -g kanji-unicode-utf8-nosig-codepage-65001.fs
+        do! fsc "%s -a -o:kanji-unicode-utf8-nosig-codepage-65001.dll -g" fsc_flags ["kanji-unicode-utf8-nosig-codepage-65001.fs"]
+
+        // "%FSC%" %fsc_flags% -a -o:kanji-unicode-utf8-nosig-codepage-65001.dll -g kanji-unicode-utf8-nosig-codepage-65001.fs
+        do! fsc "%s -a -o:kanji-unicode-utf8-nosig-codepage-65001.dll -g" fsc_flags ["kanji-unicode-utf8-nosig-codepage-65001.fs"]
+
+        let codepage = processor {
+            // "%FSC%" %fsc_flags% -a -o:kanji-unicode-utf16.dll -g kanji-unicode-utf16.fs
+            do! fsc "%s -a -o:kanji-unicode-utf16.dll -g" fsc_flags ["kanji-unicode-utf16.fs"]
+
+            // "%FSC%" %fsc_flags% -a --codepage:65000 -o:kanji-unicode-utf7-codepage-65000.dll -g kanji-unicode-utf7-codepage-65000.fs
+            do! fsc "%s -a --codepage:65000 -o:kanji-unicode-utf7-codepage-65000.dll -g" fsc_flags ["kanji-unicode-utf7-codepage-65000.fs"]
+            }
+
+        // REM check non-utf8 and --codepage flag for bootstrapped fsc.exe
+        // if NOT "%FSC:fscp=X%" == "%FSC%" (
+        do! if not <| cfg.FSC.Contains("fscp") then codepage else Success
+
+        // "%FSC%" %fsc_flags% -a -o:kanji-unicode-utf8-withsig-codepage-65001.dll -g kanji-unicode-utf8-withsig-codepage-65001.fs
+        do! fsc "%s -a -o:kanji-unicode-utf8-withsig-codepage-65001.dll -g" fsc_flags ["kanji-unicode-utf8-withsig-codepage-65001.fs"]
+        }
+
+    let run cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsi = Printf.ksprintf (Commands.fsi exec cfg.FSI)
+        let fsi_flags = cfg.fsi_flags
+
+        // if exist test.ok (del /f /q test.ok)
+        ignore "unused"
+        // "%FSI%" %fsi_flags% --utf8output kanji-unicode-utf8-nosig-codepage-65001.fs
+        do! fsi "%s --utf8output" fsi_flags ["kanji-unicode-utf8-nosig-codepage-65001.fs"]
+
+        // if exist test.ok (del /f /q test.ok)
+        ignore "unused"
+        // "%FSI%" %fsi_flags% --utf8output --codepage:65001 kanji-unicode-utf8-withsig-codepage-65001.fs
+        do! fsi "%s --utf8output --codepage:65001" fsi_flags ["kanji-unicode-utf8-withsig-codepage-65001.fs"]
+
+        // if exist test.ok (del /f /q test.ok)
+        ignore "unused"
+        // "%FSI%" %fsi_flags% --utf8output kanji-unicode-utf8-withsig-codepage-65001.fs
+        do! fsi "%s --utf8output" fsi_flags ["kanji-unicode-utf8-withsig-codepage-65001.fs"]
+
+        // if exist test.ok (del /f /q test.ok)
+        ignore "unused"
+        // "%FSI%" %fsi_flags% --utf8output --codepage:65000  kanji-unicode-utf7-codepage-65000.fs
+        do! fsi "%s --utf8output --codepage:65000" fsi_flags ["kanji-unicode-utf7-codepage-65000.fs"]
+
+        // if exist test.ok (del /f /q test.ok)
+        ignore "unused"
+        // "%FSI%" %fsi_flags% --utf8output kanji-unicode-utf16.fs
+        do! fsi "%s --utf8output" fsi_flags ["kanji-unicode-utf16.fs"]
+        }
+
+
+    []
+    let unicode () = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir  
+        do! run cfg dir
+        }) 
+
+    []
+    let unicode2 p = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        // call %~d0%~p0..\..\single-test-build.bat
+        do! SingleTestBuild.singleTestBuild cfg dir p        
+
+        // call %~d0%~p0..\..\single-test-run.bat
+        do! SingleTestRun.singleTestRun cfg dir p
+        }) 
+
+module InternalsVisible =
+
+    []
+    let internalsvisible () = check  (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let csc = Printf.ksprintf (Commands.csc exec cfg.CSC)
+        let fsc_flags = cfg.fsc_flags
+
+        // REM Test internals visible
+
+        // echo == Compiling F# Library
+        log "== Compiling F# Library"
+        // "%FSC%" %fsc_flags% --version:1.2.3 --keyfile:key.snk -a --optimize -o:library.dll library.fsi library.fs
+        do! fsc "%s --version:1.2.3 --keyfile:key.snk -a --optimize -o:library.dll" fsc_flags ["library.fsi"; "library.fs"]
+
+        // echo == Verifying F# Library
+        log "== Verifying F# Library"
+
+        // "%PEVERIFY%" library.dll
+        do! peverify "library.dll"
+
+        // echo == Compiling C# Library
+        log "== Compiling C# Library"
+        // %CSC% /target:library /keyfile:key.snk /out:librarycs.dll librarycs.cs
+        do! csc "/target:library /keyfile:key.snk /out:librarycs.dll" ["librarycs.cs"]
+
+        // echo == Verifying C# Library
+        log "== Verifying C# Library"
+        // "%PEVERIFY%" librarycs.dll
+        do! peverify "librarycs.dll"
+
+        // echo == Compiling F# main referencing C# and F# libraries
+        log "== Compiling F# main referencing C# and F# libraries"
+        // "%FSC%" %fsc_flags% --version:1.2.3 --keyfile:key.snk --optimize -r:library.dll -r:librarycs.dll -o:main.exe main.fs
+        do! fsc "%s --version:1.2.3 --keyfile:key.snk --optimize -r:library.dll -r:librarycs.dll -o:main.exe" fsc_flags ["main.fs"]
+
+        // echo == Verifying F# main
+        log "== Verifying F# main"
+        // "%PEVERIFY%" main.exe
+        do! peverify "main.exe"
+
+        // echo == Run F# main. Quick test!
+        log "== Run F# main. Quick test!"
+        // main.exe
+        do! exec ("."/"main.exe") ""
+        }) 
+
+
+module Interop = 
+
+    let build cfg dir = processor {
+        let envVars =
+            cfg.EnvironmentVariables
+            |> Map.add "FSCOREDLLPATH" cfg.FSCOREDLLPATH
+            |> Map.add "FSCOREDLLNETCORE78PATH" cfg.FSCOREDLLNETCORE78PATH
+
+        let exec p = Command.exec dir envVars { Output = Inherit; Input = None; } p >> checkResult
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let msbuild = Printf.ksprintf (Commands.msbuild exec (cfg.MSBUILD.Value))
+
+        // rd /S /Q obj
+        // del /f /q *.pdb *.xml *.config *.dll *.exe
+
+        // "%MSBUILDTOOLSPATH%\msbuild.exe" PCL.fsproj
+        do! msbuild "" ["PCL.fsproj"]
+
+        // "%MSBUILDTOOLSPATH%\msbuild.exe" User.fsproj
+        do! msbuild "" ["User.fsproj"]
+
+        // %PEVERIFY% User.exe
+        do! peverify "User.exe"
+
+        }
+
+    let run cfg dir = processor {
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+
+        do! exec ("."/"User.exe") ""
+        }
+
+    []
+    let interop () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+module ``test lazy`` = 
+
+    []
+    let ``lazy`` p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module letrec = 
+
+    []
+    let letrec p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module LibTest = 
+
+    []
+    let libtest p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module Lift = 
+
+    []
+    let lift p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+module ``Load-Script`` = 
+
+    let ``script > a 2>&1`` cfg dir to' = processor {
+
+        let toPath = to' |> Commands.getfullpath dir
+
+        let alwaysSuccess _ = Success ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = OutputAndError(Append(toPath)); Input = None; } p >> alwaysSuccess
+        let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = OutputAndError(Append(toPath)); Input = Some(RedirectInput(l)) } p >> alwaysSuccess
+        
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let type_append_tofile from = Commands.type_append_tofile dir from toPath
+        let echo text = Commands.echo_append_tofile dir text toPath
+        let fsi = Printf.ksprintf (Commands.fsi exec cfg.FSI)
+        let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags [])
+        let fileExists = Commands.fileExists dir >> Option.isSome
+        let del = Commands.rm dir
+        let getfullpath = Commands.getfullpath dir
+
+        File.WriteAllText(toPath, "")
+
+        // del 3.exe 2>nul 1>nul
+        do if fileExists "3.exe" then getfullpath "3.exe" |> File.Delete
+        // type 1.fsx 2.fsx 3.fsx
+        ["1.fsx"; "2.fsx"; "3.fsx"] |> List.iter type_append_tofile
+        // echo Test 1=================================================
+        echo "Test 1================================================="
+        // "%FSC%" 3.fsx --nologo
+        do! fsc "--nologo" ["3.fsx"]
+        // 3.exe
+        do! exec ("."/"3.exe") ""
+        // del 3.exe
+        del "3.exe"
+        // echo Test 2=================================================
+        echo "Test 2================================================="
+        // "%FSI%" 3.fsx
+        do! fsi "" ["3.fsx"]
+        // echo Test 3=================================================
+        echo "Test 3================================================="
+        // "%FSI%" --nologo < pipescr
+        do! ``fsi <`` "--nologo" "pipescr"
+        // echo.
+        echo ""
+        // echo Test 4=================================================
+        echo "Test 4================================================="
+        // "%FSI%" usesfsi.fsx
+        do! fsi "" ["usesfsi.fsx"]
+        // echo Test 5=================================================
+        echo "Test 5================================================="
+        // "%FSC%" usesfsi.fsx --nologo
+        do! fsc "--nologo" ["usesfsi.fsx"]
+        // echo Test 6=================================================
+        echo "Test 6================================================="
+        // "%FSC%" usesfsi.fsx --nologo -r FSharp.Compiler.Interactive.Settings
+        do! fsc "--nologo -r FSharp.Compiler.Interactive.Settings" ["usesfsi.fsx"]
+        // echo Test 7=================================================
+        echo "Test 7================================================="
+        // "%FSI%" 1.fsx 2.fsx 3.fsx
+        do! fsi "" ["1.fsx";"2.fsx";"3.fsx"]
+        // echo Test 8=================================================
+        echo "Test 8================================================="
+        // "%FSI%" 3.fsx 2.fsx 1.fsx
+        do! fsi "" ["3.fsx";"2.fsx";"1.fsx"]
+        // echo Test 9=================================================
+        echo "Test 9================================================="
+        // "%FSI%" multiple-load-1.fsx
+        do! fsi "" ["multiple-load-1.fsx"]
+        // echo Test 10=================================================
+        echo "Test 10================================================="
+        // "%FSI%" multiple-load-2.fsx
+        do! fsi "" ["multiple-load-2.fsx"]
+        // echo Test 11=================================================
+        echo "Test 11================================================="
+        // "%FSC%" FlagCheck.fs --nologo
+        do! fsc "--nologo" ["FlagCheck.fs"]
+        // FlagCheck.exe
+        do! exec ("."/"FlagCheck.exe") ""
+        // del FlagCheck.exe
+        del "FlagCheck.exe"
+        // echo Test 12=================================================
+        echo "Test 12================================================="
+        // "%FSC%" FlagCheck.fsx  --nologo
+        do! fsc "--nologo" ["FlagCheck.fsx"]
+        // FlagCheck.exe
+        do! exec ("."/"FlagCheck.exe") ""
+        // del FlagCheck.exe
+        del "FlagCheck.exe"
+        // echo Test 13=================================================
+        echo "Test 13================================================="
+        // "%FSI%" load-FlagCheckFs.fsx
+        do! fsi "" ["load-FlagCheckFs.fsx"]
+        // echo Test 14=================================================
+        echo "Test 14================================================="
+        // "%FSI%" FlagCheck.fsx
+        do! fsi "" ["FlagCheck.fsx"]
+        // echo Test 15=================================================
+        echo "Test 15================================================="
+        // "%FSI%" ProjectDriver.fsx
+        do! fsi "" ["ProjectDriver.fsx"]
+        // echo Test 16=================================================
+        echo "Test 16================================================="
+        // "%FSC%" ProjectDriver.fsx --nologo
+        do! fsc "--nologo" ["ProjectDriver.fsx"]
+        // ProjectDriver.exe
+        do! exec ("."/"ProjectDriver.exe") ""
+        // del ProjectDriver.exe
+        del "ProjectDriver.exe"
+        // echo Done ==================================================
+        echo "Done =================================================="
+        }
+
+    let build cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let ``script > out.txt 2>&1`` () = ``script > a 2>&1`` cfg dir "out.txt"
+        let getfullpath = Commands.getfullpath dir
+
+        let fsdiff a b = processor {
+            let out = new ResizeArray()
+            let redirectOutputToFile path args =
+                log "%s %s" path args
+                let toLog = redirectToLog ()
+                Process.exec { RedirectOutput = Some (function null -> () | s -> out.Add(s)); RedirectError = Some toLog.Post; RedirectInput = None; } dir cfg.EnvironmentVariables path args
+            do! (Commands.fsdiff redirectOutputToFile cfg.FSDIFF a b) |> (fun _ -> Success ())
+            return out.ToArray() |> List.ofArray
+            }
+
+
+        // script > out.txt 2>&1
+        do! ``script > out.txt 2>&1`` ()
+
+        // if NOT EXIST out.bsl COPY out.txt
+        ignore "useless, first run, same as use an empty file"
+
+        let normalizePaths f =
+            let text = File.ReadAllText(f)
+            let dummyPath = @"D:\staging\staging\src\tests\fsharp\core\load-script"
+            let contents = System.Text.RegularExpressions.Regex.Replace(text, System.Text.RegularExpressions.Regex.Escape(dir), dummyPath)
+            File.WriteAllText(f, contents)
+
+        normalizePaths (getfullpath "out.txt")
+
+        // %FSDIFF% out.txt out.bsl > out.diff
+        let! diffs = fsdiff (getfullpath "out.txt") (getfullpath "out.bsl")
+
+        // %FSDIFF% z.output.fsi.help.txt z.output.fsi.help.bsl > z.output.fsi.help.diff
+
+        // echo ======== Differences From ========
+        // TYPE  out.diff
+        // echo ========= Differences To =========
+
+        // for /f %%c IN (out.diff do (
+        //   echo .  
+        //   echo To update baselines: "sd edit *bsl", "del *bsl", "build.bat" regenerates bsl, "sd diff ...", check what changed.  
+        //   goto Error
+        // )
+        do! match diffs with
+            | [] -> Success
+            | l ->
+                // echo NOTE -------------------------------------
+                // echo NOTE ---------- THERE ARE DIFFs ----------
+                // echo NOTE -------------------------------------
+                log "NOTE -------------------------------------"
+                log "NOTE ---------- THERE ARE DIFFs ----------"
+                log "NOTE -------------------------------------"
+                NUnitConf.genericError (sprintf "'%s' and '%s' differ; %A" (getfullpath "out.txt") (getfullpath "out.bsl") diffs)
+        }
+
+    []
+    let ``load-script`` () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        })
+
+
+module LongNames = 
+
+    []
+    let longnames p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+module ``test map`` = 
+
+    []
+    let map p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module Math =
+    //TODO math/lalgebra does not have build.bat/run.bat and #r "FSharp.Math.Providers.dll"
+    
+    module Numbers = 
+
+        []
+        let numbers p = check (processor {
+            let { Directory = dir; Config = cfg } = testContext ()
+        
+            do! SingleTestBuild.singleTestBuild cfg dir p
+        
+            do! SingleTestRun.singleTestRun cfg dir p
+            })
+
+
+    module numbersVS2008 = 
+
+        []
+        let numbersVS2008 p = check (processor {
+            let { Directory = dir; Config = cfg } = testContext ()
+        
+            do! SingleTestBuild.singleTestBuild cfg dir p
+        
+            do! SingleTestRun.singleTestRun cfg dir p
+            })
+
+
+
+module Measures = 
+
+    []
+    let measures p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+module Members =
+
+    //TODO members/console does not have build.bat/run.bat
+
+    (* REVIEW This test fail for FSI_STDIN*
+       Output:
+
+        // D:\github\fsharp\tests\fsharp\..\..\Debug\net40\bin\fsiAnyCPU.exe  -r:System.Core.dll --nowarn:20 --define:INTERACTIVE --maxerrors:1 --abortonerror   getfullpath
+
+        // %CLIX% xmlverify.exe "%FSHARPCOREXML%"
+        do! exec ("."/"xmlverify.exe") FSharpCoreXml
+                
+        })
diff --git a/tests/fsharp/fsc/FileVersionInfo.fs b/tests/fsharp/fsc/FileVersionInfo.fs
new file mode 100644
index 00000000000..b357afc144f
--- /dev/null
+++ b/tests/fsharp/fsc/FileVersionInfo.fs
@@ -0,0 +1,67 @@
+module ``FSharp-Tests-Fsc-FileVersionInfo``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open NUnitConf
+open PlatformHelpers
+open FSharpTestSuiteTypes
+
+let testContext = FSharpTestSuite.testContext
+
+open System.Reflection
+
+module FileVersionInfoTest =
+
+    []
+    let ``should set file version info on generated file`` () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let fscToLibrary = Printf.ksprintf (FscCommand.fscToLibrary dir (Command.exec dir cfg.EnvironmentVariables) cfg.FSC)
+
+        printfn "Directory: %s" dir
+
+        let code _name file =
+            fprintf file "%s" """
+namespace CST.RI.Anshun
+open System.Reflection
+open System.Runtime.CompilerServices
+open System.Runtime.InteropServices
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+()
+            """
+
+        let! result = fscToLibrary "%s --nologo" cfg.fsc_flags { 
+            SourceFiles = [ SourceFile.Content("test.fs", code) ]
+            OutLibrary = "lib.dll" }
+
+        let fv = System.Diagnostics.FileVersionInfo.GetVersionInfo(result.OutLibraryFullPath)
+        fv.CompanyName |> Assert.areEqual "Compressed Space Transport"
+        fv.FileVersion |> Assert.areEqual "99.88.77.66"
+        
+        (fv.FileMajorPart, fv.FileMinorPart, fv.FileBuildPart, fv.FilePrivatePart)
+        |> Assert.areEqual (99,88,77,66)
+        
+        fv.ProductVersion |> Assert.areEqual "17.56.2912.14"
+        (fv.ProductMajorPart, fv.ProductMinorPart, fv.ProductBuildPart, fv.ProductPrivatePart) 
+        |> Assert.areEqual (17,56,2912,14)
+        
+        fv.LegalCopyright |> Assert.areEqual "Copyright \u00A9 Compressed Space Transport 2380"
+        fv.LegalTrademarks |> Assert.areEqual "CST \u2122"
+        
+        result.OutText 
+        |> FscCommand.parseFscOut 
+        |> List.choose (function FscCommand.FscOutputLine.Warning(w,e) -> Some w | _ -> None)
+        |> Assert.areEqual []
+    
+        })
diff --git a/tests/fsharp/fsc/ProductVersion.fs b/tests/fsharp/fsc/ProductVersion.fs
new file mode 100644
index 00000000000..8d592d49037
--- /dev/null
+++ b/tests/fsharp/fsc/ProductVersion.fs
@@ -0,0 +1,60 @@
+module ``FSharp-Tests-Fsc-ProductVersion``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open NUnitConf
+open PlatformHelpers
+open FSharpTestSuiteTypes
+
+let testContext = FSharpTestSuite.testContext
+
+open System.Reflection
+
+module ProductVersionTest =
+
+    let informationalVersionAttrName = typeof.FullName
+    let fileVersionAttrName = typeof.FullName
+
+    let fallbackTestData () =
+        let defAssemblyVersion = (1us,2us,3us,4us)
+        let defAssemblyVersionString = let v1,v2,v3,v4 = defAssemblyVersion in sprintf "%d.%d.%d.%d" v1 v2 v3 v4
+        [ defAssemblyVersionString, None, None, defAssemblyVersionString
+          defAssemblyVersionString, (Some "5.6.7.8"), None, "5.6.7.8"
+          defAssemblyVersionString, (Some "5.6.7.8" ), (Some "22.44.66.88"), "22.44.66.88"
+          defAssemblyVersionString, None, (Some "22.44.66.88" ), "22.44.66.88" ]
+        |> List.map (fun (a,f,i,e) -> FSharpSuiteTestCaseData(Commands.createTempDir(), a, f, i, e))
+
+    []
+    let ``should use correct fallback`` assemblyVersion fileVersion infoVersion expected = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let fscToLibrary = Printf.ksprintf (fun flags -> FscCommand.fscToLibrary dir (Command.exec dir cfg.EnvironmentVariables) cfg.FSC flags)
+
+        printfn "Directory: %s" dir
+
+        let assemblyAttrsFile _name file =
+            let globalAssembly (attr: Type) attrValue =
+                sprintf """[]""" attr.FullName attrValue
+
+            let attrs =
+                [ assemblyVersion |> (globalAssembly typeof >> Some)
+                  fileVersion |> Option.map (globalAssembly typeof)
+                  infoVersion |> Option.map (globalAssembly typeof) ]
+                |> List.choose id
+
+            fprintf file """
+namespace CST.RI.Anshun
+%s
+()
+            """ (attrs |> String.concat Environment.NewLine)
+
+        let! result = fscToLibrary "%s --nologo" cfg.fsc_flags { 
+            SourceFiles = [ SourceFile.Content("test.fs", assemblyAttrsFile) ]
+            OutLibrary = "lib.dll" }
+        
+        let fileVersionInfo = Diagnostics.FileVersionInfo.GetVersionInfo(result.OutLibraryFullPath)
+
+        fileVersionInfo.ProductVersion |> Assert.areEqual expected
+        })
diff --git a/tests/fsharp/fsc/warnings/FS2003/Warning_FS2003.fs b/tests/fsharp/fsc/warnings/FS2003/Warning_FS2003.fs
new file mode 100644
index 00000000000..583ba4653f9
--- /dev/null
+++ b/tests/fsharp/fsc/warnings/FS2003/Warning_FS2003.fs
@@ -0,0 +1,60 @@
+module ``FSharp-Tests-Fsc-Warnings``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open NUnitConf
+open PlatformHelpers
+open FSharpTestSuiteTypes
+
+let testContext = FSharpTestSuite.testContext
+
+open System.Reflection
+
+module FS2003 =
+
+    []
+    let ``should be raised if AssemblyInformationalVersion has invalid version`` () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let fscToLibrary = Printf.ksprintf (FscCommand.fscToLibrary dir (Command.exec dir cfg.EnvironmentVariables) cfg.FSC)
+
+        printfn "Directory: %s" dir
+
+        let code _name file =
+            fprintf file "%s" """
+namespace CST.RI.Anshun
+open System.Reflection
+[]
+[]
+()
+            """
+
+        let! result = fscToLibrary "%s --nologo" cfg.fsc_flags { 
+            SourceFiles = [ SourceFile.Content("test.fs", code) ]
+            OutLibrary = "lib.dll" }
+        
+        let fv = Diagnostics.FileVersionInfo.GetVersionInfo(result.OutLibraryFullPath)
+
+        fv.ProductVersion |> Assert.areEqual "45.2048.main1.2-hotfix (upgrade Second Chance security)"
+
+        (fv.ProductMajorPart, fv.ProductMinorPart, fv.ProductBuildPart, fv.ProductPrivatePart) 
+        |> Assert.areEqual (45,2048,0,0)
+
+        let w =
+            result.OutText
+            |> FscCommand.parseFscOut
+            |> List.tryFind (function FscCommand.FscOutputLine.Warning ("FS2003", desc) -> true | _ -> false)
+        
+        match w with
+        | None -> 
+            Assert.failf "expected warning FS2003"
+        | Some (FscCommand.FscOutputLine.Warning("FS2003", desc)) ->
+            StringAssert.Contains ("System.Reflection.AssemblyInformationalVersionAttribute", desc)
+            StringAssert.Contains ("45.2048.main1.2-hotfix (upgrade Second Chance security)", desc)
+        | Some warning -> 
+            Assert.failf "expected warning FS2003, but was %A" warning
+
+        })
+
diff --git a/tests/fsharp/nunitConf.fs b/tests/fsharp/nunitConf.fs
new file mode 100644
index 00000000000..1b501366cf0
--- /dev/null
+++ b/tests/fsharp/nunitConf.fs
@@ -0,0 +1,454 @@
+module NUnitConf
+
+open System
+open System.IO
+open NUnit.Framework
+
+open UpdateCmd
+open TestConfig
+open PlatformHelpers
+open FSharpTestSuiteTypes
+
+let checkTestResult result =
+    match result with
+    | Success () -> ()
+    | Failure (GenericError msg) -> Assert.Fail (msg)
+    | Failure (ProcessExecError (err, msg)) -> Assert.Fail (sprintf "ERRORLEVEL %i %s" err msg)
+    | Failure (Skipped msg) -> Assert.Ignore(sprintf "skipped. Reason: %s" msg)
+
+let checkResult result = 
+    match result with
+    | CmdResult.ErrorLevel err -> let x = err, (sprintf "ERRORLEVEL %d" err) in Failure (RunError.ProcessExecError x)
+    | CmdResult.Success -> Success ()
+
+let skip msg () = Failure (Skipped msg)
+let genericError msg () = Failure (GenericError msg)
+let errorLevel exitCode msg () = Failure (ProcessExecError (exitCode,msg))
+
+let envVars () = 
+    System.Environment.GetEnvironmentVariables () 
+    |> Seq.cast
+    |> Seq.map (fun d -> d.Key :?> string, d.Value :?> string)
+    |> Map.ofSeq
+
+let defaultConfigurationName =
+#if !DEBUG
+    DEBUG
+#else
+    RELEASE
+#endif
+
+let parseConfigurationName (name: string) =
+    match name.ToUpper() with
+    | "RELEASE" -> RELEASE
+    | "DEBUG" -> DEBUG
+    | s -> failwithf "invalid env var FSHARP_TEST_SUITE_CONFIGURATION '%s'" s
+    
+
+let initializeSuite () =
+
+    let configurationName = defaultConfigurationName
+
+    let doNgen = true;
+
+    let FSCBinPath = __SOURCE_DIRECTORY__/".."/".."/(sprintf "%O" configurationName)/"net40"/"bin"
+
+    let mapWithDefaults defaults m =
+        Seq.concat [ (Map.toSeq defaults) ; (Map.toSeq m) ] |> Map.ofSeq
+
+    let env = 
+        envVars ()
+        |> mapWithDefaults ( [ "FSCBINPATH", FSCBinPath ] |> Map.ofList )
+
+    let configurationName =
+        match env |> Map.tryFind "FSHARP_TEST_SUITE_CONFIGURATION" |> Option.map parseConfigurationName with
+        | Some confName -> confName
+        | None -> configurationName
+
+    processor {
+        do! updateCmd env { Configuration = configurationName; Ngen = doNgen; }
+            |> Attempt.Run
+            |> function Success () -> Success () | Failure msg -> genericError msg ()
+
+        let cfg =
+            let c = config env
+            let usedEnvVars =
+                c.EnvironmentVariables 
+                |> Map.add "FSC" c.FSC             
+            { c with EnvironmentVariables = usedEnvVars }
+
+        logConfig cfg
+
+        let directoryExists = Commands.directoryExists (Path.GetTempPath()) >> Option.isSome 
+
+        let checkfscBinPath () = processor {
+
+            let fscBinPath = cfg.EnvironmentVariables |> Map.tryFind "FSCBINPATH"
+            return!
+                match fscBinPath with
+                | Some dir when directoryExists dir -> Success
+                | None -> genericError "environment variable 'FSCBinPath' is required to be a valid directory, is not set"
+                | Some dir -> genericError (sprintf "environment variable 'FSCBinPath' is required to be a valid directory, but is '%s'" dir)
+            }
+
+        let smokeTest () = processor {
+            let tempFile ext = 
+                let p = Path.ChangeExtension( Path.GetTempFileName(), ext)
+                File.AppendAllText (p, """printfn "ciao"; exit 0""")
+                p
+
+            let tempDir = Commands.createTempDir ()
+            let exec exe args =
+                log "%s %s" exe args
+                use toLog = redirectToLog ()
+                Process.exec { RedirectError = Some toLog.Post; RedirectOutput = Some toLog.Post; RedirectInput = None } tempDir cfg.EnvironmentVariables exe args
+
+            do! Commands.fsc exec cfg.FSC "" [ tempFile ".fs" ] |> checkResult
+
+            do! Commands.fsi exec cfg.FSI "" [ tempFile ".fsx" ] |> checkResult
+        
+            }
+    
+        do! checkfscBinPath ()
+
+        do! smokeTest ()
+
+        return cfg
+    } 
+
+
+let suiteHelpers = lazy (
+    initializeSuite ()
+    |> Attempt.Run 
+    |> function Success x -> x | Failure err -> failwith (sprintf "Error %A" err)
+)
+
+[]
+type public InitializeSuiteAttribute () =
+    inherit TestActionAttribute()
+
+    override x.BeforeTest details =
+        if details.IsSuite 
+        then suiteHelpers.Force() |> ignore
+
+    override x.AfterTest details =
+        ()
+
+    override x.Targets with get() = ActionTargets.Test ||| ActionTargets.Suite
+
+
+[]
+[]
+()
+
+module FSharpTestSuite =
+
+    let getTagsOfFile path =
+        match File.ReadLines(path) |> Seq.truncate 5 |> Seq.tryFind (fun s -> s.StartsWith("// #")) with
+        | None -> []
+        | Some line -> 
+            line.TrimStart('/').Split([| '#' |], StringSplitOptions.RemoveEmptyEntries)
+            |> Seq.map (fun s -> s.Trim())
+            |> Seq.filter (fun s -> s.Length > 0)
+            |> Seq.distinct
+            |> Seq.toList
+
+    let getTestFileMetadata dir =
+        Directory.EnumerateFiles(dir, "*.fs*")
+        |> Seq.toList
+        |> List.collect getTagsOfFile
+
+    let parseTestLst path =
+        let dir = Path.GetDirectoryName(path)
+        let commentLine (t: string) = t.StartsWith("#")
+        let lines =
+            File.ReadAllLines(path)
+            |> Array.filter (not << commentLine)
+            |> Array.filter (not << String.IsNullOrWhiteSpace)
+        let parse (t: string) =
+            let a = t.Split([| '\t'; '\t' |], StringSplitOptions.RemoveEmptyEntries)
+            let testDir = Commands.getfullpath dir a.[1]
+            [| for x in a.[0].Split(',') do yield (x, testDir) |]
+
+        lines |> Array.collect parse |> List.ofArray
+
+    let ``test.lst`` = lazy ( 
+        parseTestLst ( __SOURCE_DIRECTORY__/".."/"test.lst" ) 
+        )
+
+    let getTestLstTags db dir =
+        let normalizePath path =
+            Uri(path).LocalPath
+            |> (fun s -> s.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar))
+            |> (fun s -> s.ToUpperInvariant())
+
+        let sameDir a = (normalizePath dir) = (normalizePath a)
+        let normalizedPath = normalizePath dir
+        db
+        |> List.choose (fun (tag, d) -> if sameDir d then Some tag else None)
+
+    let fsharpSuiteDirectory = __SOURCE_DIRECTORY__
+
+    let setProps dir (props: NUnit.Framework.Interfaces.IPropertyBag) =
+        let testDir = dir |> Commands.getfullpath fsharpSuiteDirectory
+
+        if not (Directory.Exists(testDir)) then failwithf "test directory '%s' does not exists" testDir
+
+        let categories = [ dir ] @ (testDir |> getTestFileMetadata) @ (testDir |> getTestLstTags ``test.lst``.Value)
+        categories |> List.iter (fun (c: string) -> props.Add(NUnit.Framework.Internal.PropertyNames.Category, c))
+
+        props.Set("DIRECTORY", testDir)
+
+    let testContext () =
+        let test = NUnit.Framework.TestContext.CurrentContext.Test
+        { Directory = test.Properties.Get("DIRECTORY") :?> string;
+          Config = suiteHelpers.Value }
+
+// parametrized test cases does not inherits properties of test ( see https://github.com/nunit/nunit/issues/548 )
+// and properties is where the custom context data is saved
+
+type FSharpSuiteTestAttribute(dir: string) =
+    inherit NUnitAttribute()
+
+    new() = FSharpSuiteTestAttribute(Commands.createTempDir())
+
+    interface NUnit.Framework.Interfaces.IApplyToTest with
+        member x.ApplyToTest(test: NUnit.Framework.Internal.Test) =
+            try
+                test.Properties |> FSharpTestSuite.setProps dir
+            with ex ->
+                test.RunState <- NUnit.Framework.Interfaces.RunState.NotRunnable
+                test.Properties.Set(NUnit.Framework.Internal.PropertyNames.SkipReason, NUnit.Framework.Internal.ExceptionHelper.BuildMessage(ex))
+                test.Properties.Set(NUnit.Framework.Internal.PropertyNames.ProviderStackTrace, NUnit.Framework.Internal.ExceptionHelper.BuildStackTrace(ex))
+
+type FSharpSuiteTestCaseData =
+    inherit TestCaseData
+
+    new (dir: string, [] arguments: Object array) as this = 
+        { inherit TestCaseData(arguments) }
+        then
+            this.Properties |> FSharpTestSuite.setProps dir
+            arguments
+            |> Array.choose (fun a -> match a with :? Permutation as p -> Some p | _ -> None)
+            |> Array.iter (fun p -> this.SetCategory(sprintf "%A" p) |> ignore)
+
+[]
+type FSharpSuiteTestCaseAttribute =
+    inherit TestCaseAttribute
+
+    new (dir: string, [] arguments: Object array) as this = 
+        { inherit TestCaseAttribute(arguments) }
+        then
+            this.Properties |> FSharpTestSuite.setProps dir
+
+
+type FSharpSuitePermutationsAttribute(dir: string) =
+    inherit NUnitAttribute()
+
+    let _builder = NUnit.Framework.Internal.Builders.NUnitTestCaseBuilder()
+    interface NUnit.Framework.Interfaces.ITestBuilder with
+        member x.BuildFrom(methodInfo, suite) =
+            let allPermutations = 
+                [ FSI_FILE; FSI_STDIN; FSI_STDIN_OPT; FSI_STDIN_GUI;
+                  FSC_BASIC; FSC_HW; FSC_O3;
+                  GENERATED_SIGNATURE; EMPTY_SIGNATURE; EMPTY_SIGNATURE_OPT; 
+                  FSC_OPT_MINUS_DEBUG; FSC_OPT_PLUS_DEBUG; 
+                  FRENCH; SPANISH;
+                  AS_DLL; 
+                  WRAPPER_NAMESPACE; WRAPPER_NAMESPACE_OPT 
+                ]
+                |> List.map (fun p -> (new FSharpSuiteTestCaseData (dir, p)))
+
+            allPermutations
+            |> List.map (fun tc -> _builder.BuildTestMethod(methodInfo, suite, tc))
+            |> Seq.ofList
+
+module FileGuard =
+    let private remove path = if File.Exists(path) then Commands.rm (Path.GetTempPath()) path
+
+    []
+    type T (path: string) =
+        member x.Path = path
+        interface IDisposable with
+            member x.Dispose () = remove path
+
+    let create path =
+        if not (Path.IsPathRooted(path)) then failwithf "path '%s' must be absolute" path
+        remove path
+        new T(path)
+    
+    let exists (guard: T) = guard.Path |> File.Exists
+        
+
+let checkGuardExists guard = processor {
+    if not <| (guard |> FileGuard.exists)
+    then return! genericError (sprintf "exit code 0 but %s file doesn't exists" (guard.Path |> Path.GetFileName))
+    }
+
+
+let check (f: Attempt<_,_>) =
+    f |> Attempt.Run |> checkTestResult
+
+
+type RedirectInfo = 
+    { Output : RedirectTo
+      Input : RedirectFrom option }
+
+and RedirectTo = 
+    | Inherit
+    | Output of RedirectToType
+    | OutputAndError of RedirectToType
+    | Error of RedirectToType
+
+and RedirectToType = 
+    | Overwrite of FilePath
+    | Append of FilePath
+
+and RedirectFrom = 
+    | RedirectInput of FilePath
+
+
+module Command =
+
+    let logExec dir path args redirect =
+        let inF =
+            function
+            | None -> ""
+            | Some(RedirectInput l) -> sprintf " <%s" l
+        let redirectType = function Overwrite x -> sprintf ">%s" x | Append x -> sprintf ">>%s" x
+        let outF =
+            function
+            | Inherit -> ""
+            | Output r-> sprintf " 1%s" (redirectType r)
+            | OutputAndError r -> sprintf " 1%s 2>&1" (redirectType r)
+            | Error r -> sprintf " 2%s" (redirectType r)
+        sprintf "%s%s%s%s" path (match args with "" -> "" | x -> " " + x) (inF redirect.Input) (outF redirect.Output)
+
+    let exec dir envVars redirect path args =
+        let { Output = o; Input = i} = redirect
+
+        let inputWriter sources (writer: StreamWriter) =
+            let pipeFile name = async {
+                let path = Commands.getfullpath dir name
+                use reader = File.OpenRead (path)
+                use ms = new MemoryStream()
+                do! reader.CopyToAsync (ms) |> (Async.AwaitIAsyncResult >> Async.Ignore)
+                ms.Position <- 0L
+                try
+                    do! ms.CopyToAsync(writer.BaseStream) |> (Async.AwaitIAsyncResult >> Async.Ignore)
+                    do! writer.FlushAsync() |> (Async.AwaitIAsyncResult >> Async.Ignore)
+                with
+                | :? System.IO.IOException as ex -> //input closed is ok if process is closed
+                    ()
+                }
+            sources |> pipeFile |> Async.RunSynchronously
+
+        let inF fCont cmdArgs =
+            match i with
+            | None -> fCont cmdArgs
+            | Some(RedirectInput l) -> fCont { cmdArgs with RedirectInput = Some (inputWriter l) }
+
+        let openWrite rt =
+            let fullpath = Commands.getfullpath dir
+            match rt with 
+            | Append p -> new StreamWriter (p |> fullpath, true) 
+            | Overwrite p -> new StreamWriter (p |> fullpath, false)
+
+        let outF fCont cmdArgs =
+            match o with
+            | RedirectTo.Inherit ->  
+                use toLog = redirectToLog ()
+                fCont { cmdArgs with RedirectOutput = Some (toLog.Post); RedirectError = Some (toLog.Post) }
+            | Output r ->
+                use writer = openWrite r
+                use outFile = redirectTo writer
+                use toLog = redirectToLog ()
+                fCont { cmdArgs with RedirectOutput = Some (outFile.Post); RedirectError = Some (toLog.Post) }
+            | OutputAndError r ->
+                use writer = openWrite r
+                use outFile = redirectTo writer
+                fCont { cmdArgs with RedirectOutput = Some (outFile.Post); RedirectError = Some (outFile.Post) }
+            | Error r ->
+                use writer = openWrite r
+                use outFile = redirectTo writer
+                use toLog = redirectToLog ()
+                fCont { cmdArgs with RedirectOutput = Some (toLog.Post); RedirectError = Some (outFile.Post) }
+            
+        let exec cmdArgs =
+            log "%s" (logExec dir path args redirect)
+            Process.exec cmdArgs dir envVars path args
+
+        { RedirectOutput = None; RedirectError = None; RedirectInput = None }
+        |> (outF (inF exec))
+
+
+[]
+module CommandTypes =
+    type SourceFile = 
+    | File of FilePath
+    | Content of string * (string -> TextWriter -> unit)
+
+module FscCommand =
+
+    type FscOutputLine =
+        | Error of string * string
+        | Warning of string * string
+        | Text of string
+    
+    type FscToLibraryArgs = {
+        OutLibrary: FilePath
+        SourceFiles: SourceFile list 
+        }
+
+    type FscToLibraryResult = {
+        OutLibraryFullPath: FilePath
+        OutText: string list
+        }
+
+    let private parseFscOutLine line =
+        let (|RegexFsc|_|) outType line =
+            let pattern = sprintf "%s (?.+): (?.*)" outType
+            match System.Text.RegularExpressions.Regex.Match(line, pattern) with
+            | m when m.Success -> Some (m.Groups.["code"].Value, m.Groups.["descr"].Value)
+            | _ -> None
+        
+        match line with
+        | RegexFsc "error" (code, descr) -> FscOutputLine.Error(code, descr)
+        | RegexFsc "warning" (code, descr) -> FscOutputLine.Warning(code, descr)
+        | l -> FscOutputLine.Text(line)
+
+    let parseFscOut = List.map parseFscOutLine
+
+    let fscToLibrary dir exec (fscExe: FilePath) flags (args: FscToLibraryArgs) = processor {
+        let ``exec >a`` a p = exec { RedirectInfo.Output = OutputAndError(a); Input = None; } p >> checkResult
+            
+        let outStream = Path.GetTempFileName ()
+        let fsc = Printf.ksprintf (Commands.fsc (``exec >a`` (Overwrite(outStream))) fscExe)
+    
+        let sourceFiles = 
+            args.SourceFiles 
+            |> List.map (fun sf ->
+                match sf with
+                | SourceFile.Content (name, writer) ->
+                    let filePath = dir/name
+                    use file = File.CreateText(filePath)
+                    writer name file
+                    name
+                | SourceFile.File path -> path )
+
+        let outDll = args.OutLibrary
+        
+        let logOutputOnFailure x =
+            match x with
+            | Success x -> Success x
+            | Failure(e) ->
+                printf "%s" (File.ReadAllText(outStream))
+                Failure(e)
+
+        do! (fsc "%s -a -o:%s" flags outDll sourceFiles) |> logOutputOnFailure
+            
+        let outText = File.ReadAllLines(outStream) |> List.ofArray
+
+        return { FscToLibraryResult.OutLibraryFullPath = (Commands.getfullpath dir outDll)
+                 OutText = outText }
+        }
diff --git a/tests/fsharp/optimize/.gitignore b/tests/fsharp/optimize/.gitignore
new file mode 100644
index 00000000000..2de025a1737
--- /dev/null
+++ b/tests/fsharp/optimize/.gitignore
@@ -0,0 +1,14 @@
+
+analyses/sizes.exe
+analyses/effects.exe
+analyses/tailcalls.exe
+analyses/*.output.test.txt
+
+inline/FSharpOptimizationData.*
+inline/FSharpSignatureData.*
+inline/*.il
+inline/*.res
+
+stats/*.resources
+stats/*.il
+stats/*.res
diff --git a/tests/fsharp/optimize/inline/build.bat b/tests/fsharp/optimize/inline/build.bat
index f95965dd97d..a75d70755fa 100644
--- a/tests/fsharp/optimize/inline/build.bat
+++ b/tests/fsharp/optimize/inline/build.bat
@@ -9,16 +9,23 @@ if NOT "%FSC:NOTAVAIL=X%" == "%FSC%" (
   goto Skip
 )
 
-"%FSC%" %fsc_flags% -g --optimize- --target:library -o:lib.dll lib.fs
+"%FSC%" %fsc_flags% -g --optimize- --target:library -o:lib.dll lib.fs lib2.fs
 if ERRORLEVEL 1 goto Error
 
-"%FSC%" %fsc_flags% --optimize --target:library -o:lib--optimize.dll -g lib.fs
+"%FSC%" %fsc_flags% -g --optimize- --target:library -o:lib3.dll -r:lib.dll lib3.fs
 if ERRORLEVEL 1 goto Error
 
-"%FSC%" %fsc_flags% -g --optimize- -o:test.exe test.fs -r:lib.dll
+"%FSC%" %fsc_flags% -g --optimize- -o:test.exe test.fs -r:lib.dll -r:lib3.dll
 if ERRORLEVEL 1 goto Error
 
-"%FSC%" %fsc_flags% --optimize -o:test--optimize.exe -g test.fs -r:lib--optimize.dll
+
+"%FSC%" %fsc_flags% --optimize --target:library -o:lib--optimize.dll -g lib.fs  lib2.fs
+if ERRORLEVEL 1 goto Error
+
+"%FSC%" %fsc_flags% --optimize --target:library -o:lib3--optimize.dll -r:lib--optimize.dll -g lib3.fs  
+if ERRORLEVEL 1 goto Error
+
+"%FSC%" %fsc_flags% --optimize -o:test--optimize.exe -g test.fs -r:lib--optimize.dll  -r:lib3--optimize.dll
 if ERRORLEVEL 1 goto Error
 
 :Ok
diff --git a/tests/fsharp/optimize/inline/lib.fs b/tests/fsharp/optimize/inline/lib.fs
index f927f87f15d..46e74db9db0 100644
--- a/tests/fsharp/optimize/inline/lib.fs
+++ b/tests/fsharp/optimize/inline/lib.fs
@@ -1,4 +1,4 @@
-module Test.Lib
+namespace ThisNamespaceHasToBeTheSame
 
 #nowarn "9"
 
@@ -34,6 +34,7 @@ module Vector3MutableField =
     let inline dot (v1: Vector3MutableField) (v2: Vector3MutableField) =
         v1.x * v2.x + v1.y * v2.y + v1.z * v2.z
 
+[]
 []
 type Vector3NestedMutableField =
     val x : single
@@ -48,6 +49,7 @@ module Vector3NestedMutableField =
     let inline test (v1: Vector3NestedMutableField) (v2: Vector3NestedMutableField) =
         v1.x * v2.x + v1.y.y * v2.y.y + v1.z * v2.z
 
+[]
 []
 type Vector3Generic<'T> =
     val x : 'T
@@ -58,6 +60,29 @@ type Vector3Generic<'T> =
 
 []
 []
-module Vector3Generic =
+module Vector3GenericInt =
     let inline test (v1: Vector3Generic) (v2: Vector3Generic) =
-        v1.x * v2.x + v1.y * v2.y + v1.z * v2.z
\ No newline at end of file
+        v1.x * v2.x + v1.y * v2.y + v1.z * v2.z
+
+[]
+[]
+module Vector3GenericObj =
+    let inline test (v1: Vector3Generic) (v2: Vector3Generic) =
+        v1.x
+
+type HiddenRecord = 
+    private { x : int } 
+    member this.X = this.x
+
+type HiddenUnion = 
+    private A of int | B of string
+    member this.X = match this with A x -> x | B s -> s.Length
+
+type internal Foo private () = 
+    static member FooMethod() = ()
+
+[]
+do()
+
+[]
+do()
diff --git a/tests/fsharp/optimize/inline/lib2.fs b/tests/fsharp/optimize/inline/lib2.fs
new file mode 100644
index 00000000000..f51e010d55b
--- /dev/null
+++ b/tests/fsharp/optimize/inline/lib2.fs
@@ -0,0 +1,9 @@
+namespace ThisNamespaceHasToBeTheSame
+module Factory = 
+    let NewRecord () = { x = 0 } 
+    let NewUnionA () = A 1
+    let NewUnionB () = B "1"
+
+type Bar () = 
+    member x.BarMethod() =
+       Foo.FooMethod()
\ No newline at end of file
diff --git a/tests/fsharp/optimize/inline/lib3.fs b/tests/fsharp/optimize/inline/lib3.fs
new file mode 100644
index 00000000000..947496da57e
--- /dev/null
+++ b/tests/fsharp/optimize/inline/lib3.fs
@@ -0,0 +1,7 @@
+namespace ASecondLibrary
+
+open ThisNamespaceHasToBeTheSame
+
+type Bar () = 
+    member x.BarMethod() =
+       Foo.FooMethod()
\ No newline at end of file
diff --git a/tests/fsharp/optimize/inline/test.fs b/tests/fsharp/optimize/inline/test.fs
index 69354adb59d..9f068ad711e 100644
--- a/tests/fsharp/optimize/inline/test.fs
+++ b/tests/fsharp/optimize/inline/test.fs
@@ -1,6 +1,7 @@
 module Test.Test
 
-open Test.Lib
+open ThisNamespaceHasToBeTheSame
+open ASecondLibrary
 
 let testVector3DotInline (v1: Vector3) =
     Vector3.dot v1 v1
@@ -11,5 +12,22 @@ let testVector3MutableFieldDotInline (v1: Vector3MutableField) =
 let testVector3NestedMutableFieldTestInline (v1: Vector3NestedMutableField) =
     Vector3NestedMutableField.test v1 v1
 
-let testVector3GenericInline (v1: Vector3Generic<'T>) =
-    Vector3Generic.test v1 v1
\ No newline at end of file
+let testVector3GenericInline (v1: Vector3Generic) =
+    Vector3GenericInt.test v1 v1
+
+let testVector3GenericInline2 (v1: Vector3Generic) =
+    Vector3GenericObj.test v1 v1
+
+// This was the failing case for the first bug reported in https://github.com/Microsoft/visualfsharp/issues/532
+//
+let testAccessingSomethingInlinableThatUsesAPrivateInlinedConstructFromAThirdModule = 
+    let boom1 = ThisNamespaceHasToBeTheSame.Factory.NewRecord ()
+    let boom2 = ThisNamespaceHasToBeTheSame.Factory.NewUnionA ()
+    let boom3 = ThisNamespaceHasToBeTheSame.Factory.NewUnionB ()
+    boom1.X, boom2.X, boom3.X
+
+// This is the failing case for the second bug reported in https://github.com/Microsoft/visualfsharp/issues/532
+//
+//let testAccessingSomethingInlinableThatUsesAInternalConstructFromAnInternalsVisibleToAssembly = 
+//    Bar().BarMethod()
+
diff --git a/tests/fsharp/optimize/stats/stats.txt b/tests/fsharp/optimize/stats/stats.txt
deleted file mode 100644
index 676d5db65ad..00000000000
--- a/tests/fsharp/optimize/stats/stats.txt
+++ /dev/null
@@ -1,454 +0,0 @@
-06/09/2005,  2:53:17.42, fslib-TypeFunc, 4, fslib-classes, 258,  fslib-methods, 1444, ,  fslib-fields, 488, mllib-TypeFunc, 33, mllib-classes, 297, mllib-methods, 1726, mllib-fields, 380,  
-07/09/2005,  5:11:52.27, fslib-TypeFunc, 4, fslib-classes, 258,  fslib-methods, 1444, ,  fslib-fields, 488, mllib-TypeFunc, 33, mllib-classes, 297, mllib-methods, 1726, mllib-fields, 380,  
-07/09/2005, 17:29:29.10, fslib-TypeFunc, 4, fslib-classes, 257,  fslib-methods, 1442, ,  fslib-fields, 484, mllib-TypeFunc, 33, mllib-classes, 297, mllib-methods, 1726, mllib-fields, 380,  
-08/09/2005, 22:19:48.44, fslib-TypeFunc, 5, fslib-classes, 262,  fslib-methods, 1456, ,  fslib-fields, 486, mllib-TypeFunc, 33, mllib-classes, 297, mllib-methods, 1724, mllib-fields, 380,  
-09/09/2005,  2:28:49.70, fslib-TypeFunc, 5, fslib-classes, 262,  fslib-methods, 1456, ,  fslib-fields, 486, mllib-TypeFunc, 33, mllib-classes, 297, mllib-methods, 1724, mllib-fields, 380,  
-10/09/2005,  5:37:36.19, fslib-TypeFunc, 5, fslib-classes, 262,  fslib-methods, 1456, ,  fslib-fields, 486, mllib-TypeFunc, 33, mllib-classes, 297, mllib-methods, 1724, mllib-fields, 380,  
-12/09/2005, 18:11:23.44, fslib-TypeFunc, 2, fslib-classes, 238,  fslib-methods, 1375, ,  fslib-fields, 471, mllib-TypeFunc, 9, mllib-classes, 312, mllib-methods, 1757, mllib-fields, 364,  
-13/09/2005, 23:35:06.82, fslib-TypeFunc, 2, fslib-classes, 237,  fslib-methods, 1375, ,  fslib-fields, 471, mllib-TypeFunc, 9, mllib-classes, 312, mllib-methods, 1757, mllib-fields, 364,  
-20/09/2005,  2:36:23.58, fslib-TypeFunc, 2, fslib-classes, 238,  fslib-methods, 1423, ,  fslib-fields, 480, mllib-TypeFunc, 9, mllib-classes, 312, mllib-methods, 1773, mllib-fields, 360,  
-22/09/2005, 20:07:15.96, fslib-TypeFunc, 2, fslib-classes, 242,  fslib-methods, 1439, ,  fslib-fields, 482, mllib-TypeFunc, 9, mllib-classes, 312, mllib-methods, 1773, mllib-fields, 360,  
-28/09/2005,  1:41:01.43, fslib-TypeFunc, 2, fslib-classes, 242,  fslib-methods, 1439, ,  fslib-fields, 482, mllib-TypeFunc, 9, mllib-classes, 312, mllib-methods, 1773, mllib-fields, 360,  
-19/10/2005, 18:18:09.74, fslib-TypeFunc, 2, fslib-classes, 242,  fslib-methods, 1439, ,  fslib-fields, 482, mllib-TypeFunc, 9, mllib-classes, 312, mllib-methods, 1773, mllib-fields, 360,  
-21/10/2005, 23:43:12.80, fslib-TypeFunc, 2, fslib-classes, 269,  fslib-methods, 1579, ,  fslib-fields, 517, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-22/10/2005,  1:58:57.12, fslib-TypeFunc, 2, fslib-classes, 269,  fslib-methods, 1579, ,  fslib-fields, 517, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-27/10/2005,  5:15:42.31, fslib-TypeFunc, 2, fslib-classes, 395,  fslib-methods, 2181, ,  fslib-fields, 719, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-27/10/2005, 21:35:58.36, fslib-TypeFunc, 2, fslib-classes, 404,  fslib-methods, 2237, ,  fslib-fields, 775, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-27/10/2005, 22:53:52.09, fslib-TypeFunc, 2, fslib-classes, 398,  fslib-methods, 2226, ,  fslib-fields, 759, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-29/10/2005, 13:50:19.01, fslib-TypeFunc, 2, fslib-classes, 398,  fslib-methods, 2227, ,  fslib-fields, 759, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-29/10/2005, 15:31:44.12, fslib-TypeFunc, 2, fslib-classes, 398,  fslib-methods, 2284, ,  fslib-fields, 759, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-04/11/2005,  2:57:53.41, fslib-TypeFunc, 2, fslib-classes, 397,  fslib-methods, 2296, ,  fslib-fields, 759, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-05/11/2005, 14:58:41.66, fslib-TypeFunc, 2, fslib-classes, 397,  fslib-methods, 2296, ,  fslib-fields, 759, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-05/11/2005, 23:41:23.35, fslib-TypeFunc, 2, fslib-classes, 397,  fslib-methods, 2296, ,  fslib-fields, 759, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-
-09/11/2005,  9:44:52.73, fslib-TypeFunc, 2, fslib-classes, 375,  fslib-methods, 2310, ,  fslib-fields, 723, mllib-TypeFunc, 9, mllib-classes, 334, mllib-methods, 1832, mllib-fields, 401,  
-10/11/2005,  2:36:06.14, fslib-TypeFunc, 2, fslib-classes, 405,  fslib-methods, 2443, ,  fslib-fields, 755, mllib-TypeFunc, 9, mllib-classes, 347, mllib-methods, 1879, mllib-fields, 402,  
-10/11/2005, 13:33:41.65, fslib-TypeFunc, 2, fslib-classes, 405,  fslib-methods, 2443, ,  fslib-fields, 755, mllib-TypeFunc, 9, mllib-classes, 347, mllib-methods, 1879, mllib-fields, 402,  
-12/12/2005, 19:58:02.44, fslib-TypeFunc, 2, fslib-classes, 771,  fslib-methods, 3655, ,  fslib-fields, 1130, mllib-TypeFunc, 9, mllib-classes, 348, mllib-methods, 1880, mllib-fields, 404,  
-14/12/2005, 22:03:58.96, fslib-TypeFunc, 2, fslib-classes, 778,  fslib-methods, 3687, ,  fslib-fields, 1142, mllib-TypeFunc, 10, mllib-classes, 342, mllib-methods, 1878, mllib-fields, 403,  
-17/12/2005,  3:05:27.53, fslib-TypeFunc, 2, fslib-classes, 846,  fslib-methods, 3870, ,  fslib-fields, 1254, mllib-TypeFunc, 10, mllib-classes, 342, mllib-methods, 1878, mllib-fields, 403,  
-20/12/2005, 22:51:59.35, fslib-TypeFunc, 2, fslib-classes, 849,  fslib-methods, 3857, ,  fslib-fields, 1244, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 441,  
-21/12/2005,  2:58:59.69, fslib-TypeFunc, 2, fslib-classes, 849,  fslib-methods, 3857, ,  fslib-fields, 1244, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 441,  
-26/12/2005, 10:51:30.88, fslib-TypeFunc, 2, fslib-classes, 851,  fslib-methods, 3865, ,  fslib-fields, 1246, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 441,  
-26/12/2005, 12:08:39.62, fslib-TypeFunc, 2, fslib-classes, 851,  fslib-methods, 3865, ,  fslib-fields, 1246, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 441,  
-26/12/2005, 13:58:09.12, fslib-TypeFunc, 2, fslib-classes, 851,  fslib-methods, 3865, ,  fslib-fields, 1246, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 441,  
-26/12/2005, 16:01:53.51, fslib-TypeFunc, 2, fslib-classes, 851,  fslib-methods, 3865, ,  fslib-fields, 1246, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 441,  
-27/12/2005,  3:59:19.74, fslib-TypeFunc, 2, fslib-classes, 851,  fslib-methods, 3865, ,  fslib-fields, 1246, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 439,  
-28/12/2005, 20:11:06.57, fslib-TypeFunc, 2, fslib-classes, 851,  fslib-methods, 3865, ,  fslib-fields, 1246, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 439,  
-31/12/2005,  2:50:46.04, fslib-TypeFunc, 2, fslib-classes, 854,  fslib-methods, 3884, ,  fslib-fields, 1253, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 439,  
-31/12/2005, 23:14:43.65, fslib-TypeFunc, 2, fslib-classes, 854,  fslib-methods, 3884, ,  fslib-fields, 1253, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 439,  
-02/01/2006, 10:12:13.94, fslib-TypeFunc, 2, fslib-classes, 852,  fslib-methods, 3881, ,  fslib-fields, 1251, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 439,  
-03/01/2006,  3:30:30.94, fslib-TypeFunc, 2, fslib-classes, 852,  fslib-methods, 3881, ,  fslib-fields, 1251, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1933, mllib-fields, 439,  
-10/01/2006, 20:37:19.33, fslib-TypeFunc, 3, fslib-classes, 855,  fslib-methods, 3672, ,  fslib-fields, 1289, mllib-TypeFunc, 10, mllib-classes, 336, mllib-methods, 1934, mllib-fields, 439,  
-12/01/2006,  2:41:36.30, fslib-TypeFunc, 3, fslib-classes, 844,  fslib-methods, 3641, ,  fslib-fields, 1283, mllib-TypeFunc, 10, mllib-classes, 337, mllib-methods, 1988, mllib-fields, 439,  
-12/01/2006,  5:06:30.32, fslib-TypeFunc, 3, fslib-classes, 837,  fslib-methods, 3627, ,  fslib-fields, 1262, mllib-TypeFunc, 10, mllib-classes, 337, mllib-methods, 1988, mllib-fields, 439,  
-13/01/2006, 23:20:55.32, fslib-TypeFunc, 3, fslib-classes, 837,  fslib-methods, 3627, ,  fslib-fields, 1262, mllib-TypeFunc, 10, mllib-classes, 337, mllib-methods, 1988, mllib-fields, 439,  
-16/01/2006, 21:00:29.82, fslib-TypeFunc, 3, fslib-classes, 837,  fslib-methods, 3645, ,  fslib-fields, 1262, mllib-TypeFunc, 10, mllib-classes, 337, mllib-methods, 1988, mllib-fields, 439,  
-19/01/2006, 13:03:43.94, fslib-TypeFunc, 3, fslib-classes, 845,  fslib-methods, 3665, ,  fslib-fields, 1278, mllib-TypeFunc, 10, mllib-classes, 337, mllib-methods, 1988, mllib-fields, 439,  
-21/01/2006, 21:42:02.77, fslib-TypeFunc, 3, fslib-classes, 832,  fslib-methods, 3643, ,  fslib-fields, 1255, mllib-TypeFunc, 10, mllib-classes, 334, mllib-methods, 1981, mllib-fields, 433,  
-22/01/2006,  0:57:58.69, fslib-TypeFunc, 1, fslib-classes, 836,  fslib-methods, 3663, ,  fslib-fields, 1227, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1978, mllib-fields, 430,  
-22/01/2006,  1:05:17.02, fslib-TypeFunc, 1, fslib-classes, 840,  fslib-methods, 3667, ,  fslib-fields, 1231, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1978, mllib-fields, 430,  
-22/01/2006,  1:10:34.37, fslib-TypeFunc, 48, fslib-classes, 958,  fslib-methods, 3902, ,  fslib-fields, 1339, mllib-TypeFunc, 42, mllib-classes, 416, mllib-methods, 2144, mllib-fields, 531,  
-22/01/2006,  1:25:44.43, fslib-TypeFunc, 1, fslib-classes, 840,  fslib-methods, 3667, ,  fslib-fields, 1231, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1978, mllib-fields, 430,  
-22/01/2006,  1:27:08.31, fslib-TypeFunc, 1, fslib-classes, 835,  fslib-methods, 3657, ,  fslib-fields, 1227, mllib-TypeFunc, 7, mllib-classes, 346, mllib-methods, 2007, mllib-fields, 444,  
-22/01/2006,  1:47:11.48, fslib-TypeFunc, 1, fslib-classes, 770,  fslib-methods, 3492, ,  fslib-fields, 1167, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1978, mllib-fields, 430,  
-22/01/2006,  2:52:35.47, fslib-TypeFunc, 1, fslib-classes, 770,  fslib-methods, 3492, ,  fslib-fields, 1167, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1978, mllib-fields, 430,  
-22/01/2006, 14:47:46.28, fslib-TypeFunc, 1, fslib-classes, 770,  fslib-methods, 3492, ,  fslib-fields, 1167, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1978, mllib-fields, 430,  
-23/01/2006, 22:23:51.35, fslib-TypeFunc, 1, fslib-classes, 770,  fslib-methods, 3492, ,  fslib-fields, 1167, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1978, mllib-fields, 430,  
-24/01/2006, 22:17:51.04, fslib-TypeFunc, 1, fslib-classes, 770,  fslib-methods, 3492, ,  fslib-fields, 1167, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1978, mllib-fields, 430,  
-27/01/2006, 16:38:48.87, fslib-TypeFunc, 1, fslib-classes, 817,  fslib-methods, 3809, ,  fslib-fields, 1202, mllib-TypeFunc, 7, mllib-classes, 290, mllib-methods, 1947, mllib-fields, 406,  
-27/01/2006, 23:55:06.36, fslib-TypeFunc, 1, fslib-classes, 818,  fslib-methods, 3773, ,  fslib-fields, 1202, mllib-TypeFunc, 6, mllib-classes, 315, mllib-methods, 1993, mllib-fields, 412,  
-28/01/2006,  3:08:01.05, fslib-TypeFunc, 1, fslib-classes, 817,  fslib-methods, 3809, ,  fslib-fields, 1202, mllib-TypeFunc, 7, mllib-classes, 290, mllib-methods, 1949, mllib-fields, 406,  
-05/02/2006, 22:19:08.61, fslib-TypeFunc, 1, fslib-classes, 809,  fslib-methods, 3646, ,  fslib-fields, 1210, mllib-TypeFunc, 7, mllib-classes, 308, mllib-methods, 1868, mllib-fields, 442,  
-07/02/2006,  0:00:00.59, fslib-TypeFunc, 1, fslib-classes, 811,  fslib-methods, 3651, ,  fslib-fields, 1216, mllib-TypeFunc, 6, mllib-classes, 310, mllib-methods, 1856, mllib-fields, 439,  
-07/02/2006, 21:12:44.55, fslib-TypeFunc, 1, fslib-classes, 811,  fslib-methods, 3650, ,  fslib-fields, 1216, mllib-TypeFunc, 6, mllib-classes, 310, mllib-methods, 1856, mllib-fields, 439,  
-16/02/2006,  2:10:56.51, fslib-TypeFunc, 1, fslib-classes, 828,  fslib-methods, 3715, ,  fslib-fields, 1229, mllib-TypeFunc, 6, mllib-classes, 310, mllib-methods, 1858, mllib-fields, 439,  
-19/02/2006,  5:11:54.03, fslib-TypeFunc, 1, fslib-classes, 828,  fslib-methods, 3714, ,  fslib-fields, 1220, mllib-TypeFunc, 6, mllib-classes, 310, mllib-methods, 1858, mllib-fields, 439,  
-23/02/2006,  2:04:01.28, fslib-TypeFunc, 1, fslib-classes, 825,  fslib-methods, 3812, ,  fslib-fields, 1217, mllib-TypeFunc, 6, mllib-classes, 321, mllib-methods, 1981, mllib-fields, 459,  
-23/02/2006,  3:47:41.95, fslib-TypeFunc, 1, fslib-classes, 825,  fslib-methods, 3812, ,  fslib-fields, 1217, mllib-TypeFunc, 6, mllib-classes, 321, mllib-methods, 1981, mllib-fields, 459,  
-24/02/2006,  4:19:00.57, fslib-TypeFunc, 1, fslib-classes, 825,  fslib-methods, 3812, ,  fslib-fields, 1217, mllib-TypeFunc, 6, mllib-classes, 321, mllib-methods, 1981, mllib-fields, 459,  
-06/03/2006,  7:16:26.29, fslib-TypeFunc, 1, fslib-classes, 825,  fslib-methods, 3812, ,  fslib-fields, 1217, mllib-TypeFunc, 6, mllib-classes, 321, mllib-methods, 1981, mllib-fields, 459,  
-22/03/2006,  1:40:17.00, fslib-TypeFunc, 1, fslib-classes, 825,  fslib-methods, 3812, ,  fslib-fields, 1217, mllib-TypeFunc, 6, mllib-classes, 321, mllib-methods, 1981, mllib-fields, 459,  
-22/03/2006, 13:34:30.79, fslib-TypeFunc, 1, fslib-classes, 646,  fslib-methods, 3414, ,  fslib-fields, 951, mllib-TypeFunc, 6, mllib-classes, 300, mllib-methods, 1936, mllib-fields, 467,  
-07/03/2006, 21:39:23.94, fslib-TypeFunc, 1, fslib-classes, 825,  fslib-methods, 3812, ,  fslib-fields, 1217, mllib-TypeFunc, 6, mllib-classes, 321, mllib-methods, 1981, mllib-fields, 459,  21/04/2006, 17:52:31.00, fslib-TypeFunc, 1, fslib-classes, 680,  fslib-methods, 3484, ,  fslib-fields, 957, mllib-TypeFunc, 7, mllib-classes, 372, mllib-methods, 2048, mllib-fields, 457,  
-22/04/2006,  1:18:45.92, fslib-TypeFunc, 1, fslib-classes, 665,  fslib-methods, 3412, ,  fslib-fields, 946, mllib-TypeFunc, 7, mllib-classes, 314, mllib-methods, 1922, mllib-fields, 425,  
-22/04/2006, 19:22:33.86, fslib-TypeFunc, 1, fslib-classes, 665,  fslib-methods, 3412, ,  fslib-fields, 946, mllib-TypeFunc, 7, mllib-classes, 314, mllib-methods, 1922, mllib-fields, 425,  
-22/04/2006, 22:07:26.17, fslib-TypeFunc, 1, fslib-classes, 658,  fslib-methods, 3392, ,  fslib-fields, 937, mllib-TypeFunc, 7, mllib-classes, 314, mllib-methods, 1917, mllib-fields, 425,  
-23/04/2006,  0:34:32.73, fslib-TypeFunc, 1, fslib-classes, 658,  fslib-methods, 3392, ,  fslib-fields, 937, mllib-TypeFunc, 7, mllib-classes, 314, mllib-methods, 1917, mllib-fields, 425,  
-23/04/2006,  0:44:15.98, fslib-TypeFunc, 1, fslib-classes, 658,  fslib-methods, 3392, ,  fslib-fields, 937, mllib-TypeFunc, 7, mllib-classes, 314, mllib-methods, 1917, mllib-fields, 425,  
-23/04/2006, 20:44:40.88, fslib-TypeFunc, 1, fslib-classes, 658,  fslib-methods, 3392, ,  fslib-fields, 937, mllib-TypeFunc, 7, mllib-classes, 314, mllib-methods, 1937, mllib-fields, 432,  
-23/04/2006, 22:25:04.51, fslib-TypeFunc, 1, fslib-classes, 658,  fslib-methods, 3392, ,  fslib-fields, 937, mllib-TypeFunc, 7, mllib-classes, 314, mllib-methods, 1937, mllib-fields, 432,  
-24/04/2006, 12:03:59.89, fslib-TypeFunc, 1, fslib-classes, 659,  fslib-methods, 3392, ,  fslib-fields, 937, mllib-TypeFunc, 7, mllib-classes, 314, mllib-methods, 1938, mllib-fields, 433,  
-02/05/2006, 19:29:32.77, fslib-TypeFunc, 1, fslib-classes, 652,  fslib-methods, 3373, ,  fslib-fields, 941, mllib-TypeFunc, 7, mllib-classes, 295, mllib-methods, 1924, mllib-fields, 434,  
-02/05/2006, 21:46:54.74, fslib-TypeFunc, 1, fslib-classes, 652,  fslib-methods, 3373, ,  fslib-fields, 941, mllib-TypeFunc, 7, mllib-classes, 295, mllib-methods, 1924, mllib-fields, 434,  
-05/05/2006, 13:32:41.25, fslib-TypeFunc, 1, fslib-classes, 648,  fslib-methods, 3372, ,  fslib-fields, 872, mllib-TypeFunc, 7, mllib-classes, 306, mllib-methods, 1994, mllib-fields, 452,  
-05/05/2006, 14:41:04.27, fslib-TypeFunc, 1, fslib-classes, 648,  fslib-methods, 3372, ,  fslib-fields, 872, mllib-TypeFunc, 7, mllib-classes, 306, mllib-methods, 1994, mllib-fields, 452,  
-06/05/2006,  2:16:05.17, fslib-TypeFunc, 1, fslib-classes, 648,  fslib-methods, 3372, ,  fslib-fields, 872, mllib-TypeFunc, 7, mllib-classes, 306, mllib-methods, 1994, mllib-fields, 452,  
-06/05/2006, 11:19:34.24, fslib-TypeFunc, 1, fslib-classes, 648,  fslib-methods, 3372, ,  fslib-fields, 872, mllib-TypeFunc, 7, mllib-classes, 306, mllib-methods, 1994, mllib-fields, 452,  
-06/05/2006, 14:02:44.16, fslib-TypeFunc, 1, fslib-classes, 648,  fslib-methods, 3372, ,  fslib-fields, 872, mllib-TypeFunc, 7, mllib-classes, 306, mllib-methods, 1994, mllib-fields, 452,  
-07/05/2006, 20:45:27.55, fslib-TypeFunc, 1, fslib-classes, 647,  fslib-methods, 3368, ,  fslib-fields, 870, mllib-TypeFunc, 7, mllib-classes, 306, mllib-methods, 1989, mllib-fields, 451,  
-08/05/2006, 22:12:02.82, fslib-TypeFunc, 1, fslib-classes, 645,  fslib-methods, 3362, ,  fslib-fields, 868, mllib-TypeFunc, 7, mllib-classes, 305, mllib-methods, 1986, mllib-fields, 451,  
-09/05/2006,  1:41:07.39, fslib-TypeFunc, 1, fslib-classes, 645,  fslib-methods, 3305, ,  fslib-fields, 868, mllib-TypeFunc, 7, mllib-classes, 308, mllib-methods, 1956, mllib-fields, 453,  
-10/05/2006,  1:44:53.37, fslib-TypeFunc, 1, fslib-classes, 645,  fslib-methods, 3305, ,  fslib-fields, 868, mllib-TypeFunc, 7, mllib-classes, 308, mllib-methods, 1956, mllib-fields, 453,  
-12/05/2006, 16:26:48.89, fslib-TypeFunc, 1, fslib-classes, 659,  fslib-methods, 3355, ,  fslib-fields, 876, mllib-TypeFunc, 7, mllib-classes, 308, mllib-methods, 1955, mllib-fields, 453,  
-13/05/2006,  0:08:38.09, fslib-TypeFunc, 1, fslib-classes, 659,  fslib-methods, 3350, ,  fslib-fields, 877, mllib-TypeFunc, 7, mllib-classes, 308, mllib-methods, 1959, mllib-fields, 453,  
-15/05/2006, 19:54:35.63, fslib-TypeFunc, 1, fslib-classes, 659,  fslib-methods, 3350, ,  fslib-fields, 877, mllib-TypeFunc, 7, mllib-classes, 308, mllib-methods, 1959, mllib-fields, 453,  
-22/05/2006, 20:12:47.20, fslib-TypeFunc, 1, fslib-classes, 667,  fslib-methods, 3364, ,  fslib-fields, 887, mllib-TypeFunc, 7, mllib-classes, 306, mllib-methods, 1961, mllib-fields, 449,  
-23/05/2006,  2:24:28.44, fslib-TypeFunc, 1, fslib-classes, 667,  fslib-methods, 3364, ,  fslib-fields, 887, mllib-TypeFunc, 7, mllib-classes, 306, mllib-methods, 1961, mllib-fields, 449,  
-09/06/2006, 15:20:31.58, fslib-TypeFunc, 1, fslib-classes, 669,  fslib-methods, 3376, ,  fslib-fields, 885, mllib-TypeFunc, 7, mllib-classes, 306, mllib-methods, 1961, mllib-fields, 449,  
-19/06/2006, 15:08:54.86, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 334, mllib-methods, 2007, mllib-fields, 453,  
-19/06/2006, 15:42:01.80, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 334, mllib-methods, 2007, mllib-fields, 453,  
-20/06/2006, 14:50:44.98, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 334, mllib-methods, 2007, mllib-fields, 453,  
-10/07/2006, 17:15:33.24, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 336, mllib-methods, 2021, mllib-fields, 456,  
-10/07/2006, 21:42:39.80, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 336, mllib-methods, 2021, mllib-fields, 456,  
-11/07/2006,  0:36:48.24, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 336, mllib-methods, 2021, mllib-fields, 456,  
-15/07/2006, 16:15:35.24, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 340, mllib-methods, 2028, mllib-fields, 457,  
-18/07/2006, 12:13:20.70, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 344, mllib-methods, 2050, mllib-fields, 463,  
-27/07/2006, 12:31:36.58, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 344, mllib-methods, 2037, mllib-fields, 463,  
-27/07/2006, 22:13:32.91, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 344, mllib-methods, 2037, mllib-fields, 463,  
-28/07/2006, 11:59:05.98, fslib-TypeFunc, 1, fslib-classes, 687,  fslib-methods, 3571, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 344, mllib-methods, 2037, mllib-fields, 463,  
-28/07/2006, 23:37:43.89, fslib-TypeFunc, 1, fslib-classes, 691,  fslib-methods, 3574, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 344, mllib-methods, 2037, mllib-fields, 463,  
-02/08/2006,  1:42:23.35, fslib-TypeFunc, 1, fslib-classes, 691,  fslib-methods, 3569, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 340, mllib-methods, 2018, mllib-fields, 454,  
-16/08/2006,  1:34:33.59, fslib-TypeFunc, 1, fslib-classes, 693,  fslib-methods, 3577, ,  fslib-fields, 888, mllib-TypeFunc, 7, mllib-classes, 341, mllib-methods, 2022, mllib-fields, 455,  
-19/08/2006, 19:10:17.44, fslib-TypeFunc, 1, fslib-classes, 705,  fslib-methods, 3701, ,  fslib-fields, 905, mllib-TypeFunc, 7, mllib-classes, 342, mllib-methods, 2054, mllib-fields, 457,  
-21/08/2006, 16:18:52.72, fslib-TypeFunc, 1, fslib-classes, 713,  fslib-methods, 3770, ,  fslib-fields, 921, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1962, mllib-fields, 413,  
-11/09/2006, 10:47:05.24, fslib-TypeFunc, 1, fslib-classes, 713,  fslib-methods, 3770, ,  fslib-fields, 921, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1962, mllib-fields, 413,  
-14/09/2006, 19:00:53.09, fslib-TypeFunc, 1, fslib-classes, 713,  fslib-methods, 3772, ,  fslib-fields, 921, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1962, mllib-fields, 413,  
-14/09/2006, 22:07:26.51, fslib-TypeFunc, 1, fslib-classes, 713,  fslib-methods, 3772, ,  fslib-fields, 921, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1962, mllib-fields, 413,  
-19/09/2006,  0:28:05.88, fslib-TypeFunc, 1, fslib-classes, 717,  fslib-methods, 3790, ,  fslib-fields, 923, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1965, mllib-fields, 413,  
-30/09/2006,  1:40:26.72, fslib-TypeFunc, 1, fslib-classes, 717,  fslib-methods, 3747, ,  fslib-fields, 923, mllib-TypeFunc, 7, mllib-classes, 331, mllib-methods, 1952, mllib-fields, 413,  
-17/10/2006, 13:06:26.83, fslib-TypeFunc, 0, fslib-classes, 718,  fslib-methods, 3746, ,  fslib-fields, 923, mllib-TypeFunc, 6, mllib-classes, 332, mllib-methods, 1992, mllib-fields, 425,  
-17/10/2006, 15:23:54.48, fslib-TypeFunc, 0, fslib-classes, 718,  fslib-methods, 3748, ,  fslib-fields, 923, mllib-TypeFunc, 6, mllib-classes, 332, mllib-methods, 1993, mllib-fields, 430,  
-24/10/2006, 16:40:59.62, fslib-TypeFunc, 0, fslib-classes, 718,  fslib-methods, 3749, ,  fslib-fields, 948, mllib-TypeFunc, 6, mllib-classes, 332, mllib-methods, 1997, mllib-fields, 471,  
-02/11/2006, 15:26:30.30, fslib-TypeFunc, 0, fslib-classes, 760,  fslib-methods, 3959, ,  fslib-fields, 1013, mllib-TypeFunc, 6, mllib-classes, 319, mllib-methods, 2025, mllib-fields, 528,  
-03/11/2006,  0:53:59.76, fslib-TypeFunc, 0, fslib-classes, 760,  fslib-methods, 3959, ,  fslib-fields, 1013, mllib-TypeFunc, 6, mllib-classes, 320, mllib-methods, 2027, mllib-fields, 528,  
-04/11/2006, 22:29:46.47, fslib-TypeFunc, 0, fslib-classes, 760,  fslib-methods, 3959, ,  fslib-fields, 1013, mllib-TypeFunc, 6, mllib-classes, 320, mllib-methods, 2027, mllib-fields, 528,  
-09/11/2006,  0:22:17.23, fslib-TypeFunc, 0, fslib-classes, 762,  fslib-methods, 3961, ,  fslib-fields, 1015, mllib-TypeFunc, 6, mllib-classes, 320, mllib-methods, 2027, mllib-fields, 528,  
-16/11/2006, 17:09:44.46, fslib-TypeFunc, 0, fslib-classes, 983,  fslib-methods, 5237, ,  fslib-fields, 1367, mllib-TypeFunc, 0, mllib-classes, 111, mllib-methods, 712, mllib-fields, 178,  
-19/11/2006,  1:59:39.80, fslib-TypeFunc, 0, fslib-classes, 959,  fslib-methods, 5142, ,  fslib-fields, 1352, mllib-TypeFunc, 0, mllib-classes, 113, mllib-methods, 742, mllib-fields, 188,  
-19/11/2006, 19:24:00.81, fslib-TypeFunc, 0, fslib-classes, 959,  fslib-methods, 5142, ,  fslib-fields, 1352, mllib-TypeFunc, 0, mllib-classes, 113, mllib-methods, 742, mllib-fields, 188,  
-19/11/2006, 22:39:18.90, fslib-TypeFunc, 0, fslib-classes, 959,  fslib-methods, 5142, ,  fslib-fields, 1352, mllib-TypeFunc, 0, mllib-classes, 113, mllib-methods, 742, mllib-fields, 188,  
-20/11/2006,  4:26:46.74, fslib-TypeFunc, 0, fslib-classes, 986,  fslib-methods, 5254, ,  fslib-fields, 1410, mllib-TypeFunc, 0, mllib-classes, 88, mllib-methods, 640, mllib-fields, 134,  
-23/11/2006, 16:53:35.82, fslib-TypeFunc, 0, fslib-classes, 1018,  fslib-methods, 5365, ,  fslib-fields, 1452, mllib-TypeFunc, 0, mllib-classes, 89, mllib-methods, 643, mllib-fields, 136,  
-23/11/2006, 21:32:21.54, fslib-TypeFunc, 0, fslib-classes, 1023,  fslib-methods, 5368, ,  fslib-fields, 1450, mllib-TypeFunc, 0, mllib-classes, 89, mllib-methods, 643, mllib-fields, 136,  
-24/11/2006,  0:31:23.41, fslib-TypeFunc, 0, fslib-classes, 1023,  fslib-methods, 5368, ,  fslib-fields, 1450, mllib-TypeFunc, 0, mllib-classes, 89, mllib-methods, 643, mllib-fields, 136,  
-24/11/2006,  8:07:04.34, fslib-TypeFunc, 0, fslib-classes, 1024,  fslib-methods, 5371, ,  fslib-fields, 1452, mllib-TypeFunc, 0, mllib-classes, 89, mllib-methods, 643, mllib-fields, 136,  
-21/11/2006,  2:06:48.43, fslib-TypeFunc, 0, fslib-classes, 986,  fslib-methods, 5255, ,  fslib-fields, 1410, mllib-TypeFunc, 0, mllib-classes, 88, mllib-methods, 640, mllib-fields, 134,  
-17/01/2007, 12:02:14.60, fslib-TypeFunc, 0, fslib-classes, 1149,  fslib-methods, 5917, ,  fslib-fields, 1570, mllib-TypeFunc, 0, mllib-classes, 90, mllib-methods, 650, mllib-fields, 137,  
-18/01/2007, 12:00:05.38, fslib-TypeFunc, 0, fslib-classes, 1165,  fslib-methods, 5987, ,  fslib-fields, 1593, mllib-TypeFunc, 0, mllib-classes, 90, mllib-methods, 650, mllib-fields, 137,  
-18/01/2007, 14:31:02.20, fslib-TypeFunc, 0, fslib-classes, 1165,  fslib-methods, 5987, ,  fslib-fields, 1593, mllib-TypeFunc, 0, mllib-classes, 90, mllib-methods, 650, mllib-fields, 137,  
-20/01/2007, 23:01:33.85, fslib-TypeFunc, 0, fslib-classes, 1178,  fslib-methods, 6049, ,  fslib-fields, 1634, mllib-TypeFunc, 0, mllib-classes, 90, mllib-methods, 650, mllib-fields, 137,  
-26/01/2007, 16:18:15.56, fslib-TypeFunc, 0, fslib-classes, 1178,  fslib-methods, 6049, ,  fslib-fields, 1634, mllib-TypeFunc, 0, mllib-classes, 90, mllib-methods, 650, mllib-fields, 137,  
-04/02/2007, 12:40:57.58, fslib-TypeFunc, 0, fslib-classes, 1185,  fslib-methods, 6073, ,  fslib-fields, 1640, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 659, mllib-fields, 140,  
-15/02/2007, 14:26:14.06, fslib-TypeFunc, 0, fslib-classes, 1210,  fslib-methods, 6189, ,  fslib-fields, 1667, mllib-TypeFunc, 0, mllib-classes, 94, mllib-methods, 645, mllib-fields, 140,  
-25/02/2007, 11:33:20.77, fslib-TypeFunc, 0, fslib-classes, 1250,  fslib-methods, 6780, ,  fslib-fields, 1772, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 664, mllib-fields, 140,  
-26/02/2007, 21:00:37.66, fslib-TypeFunc, 0, fslib-classes, 1229,  fslib-methods, 6222, ,  fslib-fields, 1707, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 643, mllib-fields, 139,  
-27/02/2007,  0:45:00.20, fslib-TypeFunc, 0, fslib-classes, 1229,  fslib-methods, 6222, ,  fslib-fields, 1707, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 643, mllib-fields, 139,  
-27/02/2007,  2:18:10.37, fslib-TypeFunc, 0, fslib-classes, 1229,  fslib-methods, 6222, ,  fslib-fields, 1707, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 643, mllib-fields, 139,  
-01/03/2007,  0:43:47.68, fslib-TypeFunc, 0, fslib-classes, 1232,  fslib-methods, 6244, ,  fslib-fields, 1709, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 643, mllib-fields, 139,  
-01/03/2007, 15:12:14.18, fslib-TypeFunc, 0, fslib-classes, 1231,  fslib-methods, 6241, ,  fslib-fields, 1708, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 643, mllib-fields, 139,  
-02/03/2007, 21:38:33.19, fslib-TypeFunc, 0, fslib-classes, 1207,  fslib-methods, 6138, ,  fslib-fields, 1614, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 643, mllib-fields, 139,  
-04/03/2007,  7:47:11.09, fslib-TypeFunc, 0, fslib-classes, 1205,  fslib-methods, 6189, ,  fslib-fields, 1609, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-15/03/2007, 12:13:46.71, fslib-TypeFunc, 0, fslib-classes, 1119,  fslib-methods, 5991, ,  fslib-fields, 1549, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-15/03/2007, 19:04:47.36, fslib-TypeFunc, 0, fslib-classes, 1118,  fslib-methods, 5989, ,  fslib-fields, 1549, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-19/03/2007, 13:36:04.32, fslib-TypeFunc, 0, fslib-classes, 1118,  fslib-methods, 5989, ,  fslib-fields, 1549, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-19/03/2007, 21:12:54.92, fslib-TypeFunc, 0, fslib-classes, 1118,  fslib-methods, 5989, ,  fslib-fields, 1549, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-20/03/2007,  2:06:29.65, fslib-TypeFunc, 0, fslib-classes, 1118,  fslib-methods, 5989, ,  fslib-fields, 1549, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-03/04/2007, 19:14:13.11, fslib-TypeFunc, 0, fslib-classes, 1116,  fslib-methods, 5982, ,  fslib-fields, 1548, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-27/04/2007, 14:09:21.58, fslib-TypeFunc, 0, fslib-classes, 1131,  fslib-methods, 6013, ,  fslib-fields, 1570, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 647, mllib-fields, 139,  
-15/05/2007, 14:54:57.83, fslib-TypeFunc, 0, fslib-classes, 1187,  fslib-methods, 6214, ,  fslib-fields, 1643, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 666, mllib-fields, 141,  
-15/05/2007, 17:47:04.56, fslib-TypeFunc, 0, fslib-classes, 1187,  fslib-methods, 6214, ,  fslib-fields, 1643, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 666, mllib-fields, 141,  
-29/05/2007, 11:35:48.84, fslib-TypeFunc, 0, fslib-classes, 1197,  fslib-methods, 6240, ,  fslib-fields, 1665, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 666, mllib-fields, 141,  
-01/06/2007, 15:11:25.22, fslib-TypeFunc, 0, fslib-classes, 1197,  fslib-methods, 6245, ,  fslib-fields, 1665, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 666, mllib-fields, 141,  
-01/06/2007, 18:51:30.60, fslib-TypeFunc, 0, fslib-classes, 1224,  fslib-methods, 6361, ,  fslib-fields, 1730, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 666, mllib-fields, 141,  
-04/06/2007, 20:53:23.39, fslib-TypeFunc, 0, fslib-classes, 1224,  fslib-methods, 6361, ,  fslib-fields, 1730, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 666, mllib-fields, 141,  
-06/06/2007, 14:00:53.16, fslib-TypeFunc, 0, fslib-classes, 1235,  fslib-methods, 6407, ,  fslib-fields, 1747, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 670, mllib-fields, 143,  
-13/06/2007, 16:27:07.98, fslib-TypeFunc, 0, fslib-classes, 1331,  fslib-methods, 6764, ,  fslib-fields, 1864, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 670, mllib-fields, 143,  
-13/06/2007, 19:57:25.56, fslib-TypeFunc, 0, fslib-classes, 1331,  fslib-methods, 6764, ,  fslib-fields, 1864, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 670, mllib-fields, 143,  
-24/06/2007,  2:52:39.40, fslib-TypeFunc, 0, fslib-classes, 1361,  fslib-methods, 6897, ,  fslib-fields, 1893, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 670, mllib-fields, 143,  
-30/06/2007, 18:13:38.34, fslib-TypeFunc, 0, fslib-classes, 1387,  fslib-methods, 6982, ,  fslib-fields, 1924, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 670, mllib-fields, 143,  
-04/03/2007,  6:06:55.01, fslib-TypeFunc, 0, fslib-classes, 1205,  fslib-methods, 6189, ,  fslib-fields, 1609, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-14/03/2007,  7:48:08.26, fslib-TypeFunc, 0, fslib-classes, 1119,  fslib-methods, 5991, ,  fslib-fields, 1549, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-14/03/2007, 11:22:27.76, fslib-TypeFunc, 0, fslib-classes, 1119,  fslib-methods, 5991, ,  fslib-fields, 1549, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-27/03/2007,  1:25:26.04, fslib-TypeFunc, 0, fslib-classes, 1119,  fslib-methods, 5991, ,  fslib-fields, 1549, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-29/03/2007, 17:03:04.37, fslib-TypeFunc, 0, fslib-classes, 1117,  fslib-methods, 5984, ,  fslib-fields, 1548, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-31/03/2007, 20:01:42.53, fslib-TypeFunc, 0, fslib-classes, 1117,  fslib-methods, 5984, ,  fslib-fields, 1548, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 648, mllib-fields, 139,  
-06/06/2007, 15:21:28.04, fslib-TypeFunc, 0, fslib-classes, 1244,  fslib-methods, 6465, ,  fslib-fields, 1771, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 670, mllib-fields, 143,  
-17/06/2007, 20:54:24.91, fslib-TypeFunc, 0, fslib-classes, 1350,  fslib-methods, 6832, ,  fslib-fields, 1884, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 670, mllib-fields, 143,  
-28/06/2007, 17:29:33.09, fslib-TypeFunc, 0, fslib-classes, 1381,  fslib-methods, 6967, ,  fslib-fields, 1918, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 670, mllib-fields, 143,  
-28/06/2007, 22:17:05.58, fslib-TypeFunc, 0, fslib-classes, 1381,  fslib-methods, 6966, ,  fslib-fields, 1918, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 670, mllib-fields, 143,  
-14/07/2007, 16:24:13.06, fslib-TypeFunc, 0, fslib-classes, 1391,  fslib-methods, 7110, ,  fslib-fields, 1932, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 684, mllib-fields, 143,  
-03/08/2007,  4:17:38.11, fslib-TypeFunc, 0, fslib-classes, 1391,  fslib-methods, 7114, ,  fslib-fields, 1947, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 684, mllib-fields, 143,  
-07/08/2007, 22:08:14.60, fslib-TypeFunc, 0, fslib-classes, 1391,  fslib-methods, 7114, ,  fslib-fields, 1947, mllib-TypeFunc, 0, mllib-classes, 93, mllib-methods, 684, mllib-fields, 143,  
-06/10/2007,  1:01:35.67, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1382,  Microsoft.FSharp-methods, 7186, ,  Microsoft.FSharp-fields, 1952, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 179, Microsoft.FSharp.Compatibility-methods, 1003, Microsoft.FSharp.Compatibility-fields, 244,  
-08/10/2007, 22:24:12.09, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1369,  Microsoft.FSharp-methods, 7062, ,  Microsoft.FSharp-fields, 1935, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 997, Microsoft.FSharp.Compatibility-fields, 239,  
-11/10/2007, 22:18:08.63, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1369,  Microsoft.FSharp-methods, 7064, ,  Microsoft.FSharp-fields, 1935, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 997, Microsoft.FSharp.Compatibility-fields, 239,  
-12/10/2007,  0:34:44.83, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1369,  Microsoft.FSharp-methods, 7064, ,  Microsoft.FSharp-fields, 1935, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 997, Microsoft.FSharp.Compatibility-fields, 239,  
-12/10/2007, 14:18:04.94, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1369,  Microsoft.FSharp-methods, 7062, ,  Microsoft.FSharp-fields, 1935, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 997, Microsoft.FSharp.Compatibility-fields, 239,  
-13/10/2007, 19:19:33.75, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1375,  Microsoft.FSharp-methods, 7080, ,  Microsoft.FSharp-fields, 1941, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 997, Microsoft.FSharp.Compatibility-fields, 239,  
-15/10/2007,  3:41:14.55, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1370,  Microsoft.FSharp-methods, 7091, ,  Microsoft.FSharp-fields, 1926, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 999, Microsoft.FSharp.Compatibility-fields, 237,  
-17/10/2007, 14:26:16.38, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1370,  Microsoft.FSharp-methods, 7092, ,  Microsoft.FSharp-fields, 1926, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 999, Microsoft.FSharp.Compatibility-fields, 237,  
-23/10/2007, 14:07:31.43, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1376,  Microsoft.FSharp-methods, 7122, ,  Microsoft.FSharp-fields, 1930, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 999, Microsoft.FSharp.Compatibility-fields, 237,  
-23/10/2007, 18:37:00.01, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1376,  Microsoft.FSharp-methods, 7122, ,  Microsoft.FSharp-fields, 1930, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 999, Microsoft.FSharp.Compatibility-fields, 237,  
-25/10/2007, 19:38:58.67, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1376,  Microsoft.FSharp-methods, 7123, ,  Microsoft.FSharp-fields, 1932, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 999, Microsoft.FSharp.Compatibility-fields, 237,  
-25/10/2007, 22:27:21.27, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1376,  Microsoft.FSharp-methods, 7123, ,  Microsoft.FSharp-fields, 1932, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 999, Microsoft.FSharp.Compatibility-fields, 237,  
-26/10/2007, 10:54:43.67, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1376,  Microsoft.FSharp-methods, 7123, ,  Microsoft.FSharp-fields, 1932, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 999, Microsoft.FSharp.Compatibility-fields, 237,  
-27/10/2007,  1:35:03.92, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1376,  Microsoft.FSharp-methods, 7123, ,  Microsoft.FSharp-fields, 1932, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 177, Microsoft.FSharp.Compatibility-methods, 999, Microsoft.FSharp.Compatibility-fields, 237,  
-28/01/2008, 13:56:56.83, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1779,  Microsoft.FSharp-methods, 7588, ,  Microsoft.FSharp-fields, 2857, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 201, Microsoft.FSharp.Compatibility-methods, 1047, Microsoft.FSharp.Compatibility-fields, 299,  
-28/01/2008, 23:28:29.61, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1779,  Microsoft.FSharp-methods, 7588, ,  Microsoft.FSharp-fields, 2857, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 201, Microsoft.FSharp.Compatibility-methods, 1047, Microsoft.FSharp.Compatibility-fields, 299,  
-29/01/2008,  5:20:52.58, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1778,  Microsoft.FSharp-methods, 7581, ,  Microsoft.FSharp-fields, 2884, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 200, Microsoft.FSharp.Compatibility-methods, 1045, Microsoft.FSharp.Compatibility-fields, 298,  
-30/01/2008,  2:45:54.75, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1781,  Microsoft.FSharp-methods, 7592, ,  Microsoft.FSharp-fields, 2857, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 201, Microsoft.FSharp.Compatibility-methods, 1047, Microsoft.FSharp.Compatibility-fields, 299,  
-01/02/2008, 23:33:29.73, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1704,  Microsoft.FSharp-methods, 7416, ,  Microsoft.FSharp-fields, 2637, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 189, Microsoft.FSharp.Compatibility-methods, 1022, Microsoft.FSharp.Compatibility-fields, 271,  
-02/02/2008,  3:26:13.24, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1704,  Microsoft.FSharp-methods, 7416, ,  Microsoft.FSharp-fields, 2637, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 189, Microsoft.FSharp.Compatibility-methods, 1022, Microsoft.FSharp.Compatibility-fields, 271,  
-05/02/2008, 19:44:35.12, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1704,  Microsoft.FSharp-methods, 7416, ,  Microsoft.FSharp-fields, 2637, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 189, Microsoft.FSharp.Compatibility-methods, 1022, Microsoft.FSharp.Compatibility-fields, 271,  
-06/02/2008,  3:30:19.32, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1704,  Microsoft.FSharp-methods, 7416, ,  Microsoft.FSharp-fields, 2637, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 189, Microsoft.FSharp.Compatibility-methods, 1022, Microsoft.FSharp.Compatibility-fields, 271,  
-05/04/2008,  1:02:30.34, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1726,  Microsoft.FSharp-methods, 7348, ,  Microsoft.FSharp-fields, 2622, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 188, Microsoft.FSharp.Compatibility-methods, 1031, Microsoft.FSharp.Compatibility-fields, 272,  
-08/04/2008, 20:47:12.39, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1726,  Microsoft.FSharp-methods, 7348, ,  Microsoft.FSharp-fields, 2623, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 188, Microsoft.FSharp.Compatibility-methods, 1031, Microsoft.FSharp.Compatibility-fields, 272,  
-08/04/2008, 22:37:49.01, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1726,  Microsoft.FSharp-methods, 7348, ,  Microsoft.FSharp-fields, 2623, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 188, Microsoft.FSharp.Compatibility-methods, 1031, Microsoft.FSharp.Compatibility-fields, 272,  
-09/04/2008, 20:30:11.29, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1726,  Microsoft.FSharp-methods, 7348, ,  Microsoft.FSharp-fields, 2623, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 188, Microsoft.FSharp.Compatibility-methods, 1031, Microsoft.FSharp.Compatibility-fields, 272,  
-17/04/2008, 11:39:18.77, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1703,  Microsoft.FSharp-methods, 6959, ,  Microsoft.FSharp-fields, 2594, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 202, Microsoft.FSharp.PowerPack-methods, 1163, Microsoft.FSharp.PowerPack-fields, 304,  
-19/04/2008,  0:18:25.24, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1356,  Microsoft.FSharp-methods, 5119, ,  Microsoft.FSharp-fields, 2056, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 578, Microsoft.FSharp.PowerPack-methods, 3273, Microsoft.FSharp.PowerPack-fields, 934,  
-19/04/2008,  1:08:34.41, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1356,  Microsoft.FSharp-methods, 5119, ,  Microsoft.FSharp-fields, 2056, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 578, Microsoft.FSharp.PowerPack-methods, 3273, Microsoft.FSharp.PowerPack-fields, 934,  
-19/04/2008,  2:32:30.92, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1356,  Microsoft.FSharp-methods, 5119, ,  Microsoft.FSharp-fields, 2056, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 578, Microsoft.FSharp.PowerPack-methods, 3273, Microsoft.FSharp.PowerPack-fields, 934,  
-Sun 04/20/2008, 12:00:56.48, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1356,  Microsoft.FSharp-methods, 5119, ,  Microsoft.FSharp-fields, 2056, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 570, Microsoft.FSharp.PowerPack-methods, 3257, Microsoft.FSharp.PowerPack-fields, 918,  
-21/04/2008, 22:21:58.33, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1339,  Microsoft.FSharp-methods, 4999, ,  Microsoft.FSharp-fields, 2039, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 584, Microsoft.FSharp.PowerPack-methods, 3299, Microsoft.FSharp.PowerPack-fields, 932,  
-21/04/2008, 23:21:38.45, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1339,  Microsoft.FSharp-methods, 4999, ,  Microsoft.FSharp-fields, 2039, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 584, Microsoft.FSharp.PowerPack-methods, 3299, Microsoft.FSharp.PowerPack-fields, 932,  
-22/04/2008, 14:49:39.52, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1352,  Microsoft.FSharp-methods, 5022, ,  Microsoft.FSharp-fields, 2060, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 600, Microsoft.FSharp.PowerPack-methods, 3335, Microsoft.FSharp.PowerPack-fields, 961,  
-22/04/2008, 20:50:19.08, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1351,  Microsoft.FSharp-methods, 5021, ,  Microsoft.FSharp-fields, 2060, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 600, Microsoft.FSharp.PowerPack-methods, 3335, Microsoft.FSharp.PowerPack-fields, 961,  
-22/04/2008, 22:37:19.39, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1351,  Microsoft.FSharp-methods, 5021, ,  Microsoft.FSharp-fields, 2060, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 600, Microsoft.FSharp.PowerPack-methods, 3335, Microsoft.FSharp.PowerPack-fields, 961,  
-23/04/2008, 23:08:26.59, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1345,  Microsoft.FSharp-methods, 5003, ,  Microsoft.FSharp-fields, 2052, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 608, Microsoft.FSharp.PowerPack-methods, 3353, Microsoft.FSharp.PowerPack-fields, 971,  
-23/04/2008, 23:44:53.07, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1345,  Microsoft.FSharp-methods, 5003, ,  Microsoft.FSharp-fields, 2052, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 608, Microsoft.FSharp.PowerPack-methods, 3353, Microsoft.FSharp.PowerPack-fields, 971,  
-24/04/2008,  2:00:24.76, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1345,  Microsoft.FSharp-methods, 5003, ,  Microsoft.FSharp-fields, 2052, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 608, Microsoft.FSharp.PowerPack-methods, 3353, Microsoft.FSharp.PowerPack-fields, 971,  
-24/04/2008, 18:52:43.49, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1345,  Microsoft.FSharp-methods, 5003, ,  Microsoft.FSharp-fields, 2052, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 608, Microsoft.FSharp.PowerPack-methods, 3353, Microsoft.FSharp.PowerPack-fields, 971,  
-25/04/2008, 20:07:38.03, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5014, ,  Microsoft.FSharp-fields, 2066, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 608, Microsoft.FSharp.PowerPack-methods, 3353, Microsoft.FSharp.PowerPack-fields, 971,  
-26/04/2008, 15:03:14.31, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5014, ,  Microsoft.FSharp-fields, 2068, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 608, Microsoft.FSharp.PowerPack-methods, 3353, Microsoft.FSharp.PowerPack-fields, 971,  
-Mon 04/28/2008, 10:27:01.99, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1346,  Microsoft.FSharp-methods, 4978, ,  Microsoft.FSharp-fields, 2070, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 599, Microsoft.FSharp.PowerPack-methods, 3312, Microsoft.FSharp.PowerPack-fields, 953,  
-Mon 04/28/2008, 11:54:40.14, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1346,  Microsoft.FSharp-methods, 4978, ,  Microsoft.FSharp-fields, 2070, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 599, Microsoft.FSharp.PowerPack-methods, 3312, Microsoft.FSharp.PowerPack-fields, 953,  
-Mon 04/28/2008, 12:27:16.02, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1346,  Microsoft.FSharp-methods, 4978, ,  Microsoft.FSharp-fields, 2070, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 599, Microsoft.FSharp.PowerPack-methods, 3312, Microsoft.FSharp.PowerPack-fields, 953,  
-Mon 04/28/2008, 14:37:31.54, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1346,  Microsoft.FSharp-methods, 4978, ,  Microsoft.FSharp-fields, 2070, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 603, Microsoft.FSharp.PowerPack-methods, 3336, Microsoft.FSharp.PowerPack-fields, 956,  
-Tue 04/29/2008, 13:40:07.02, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 4952, ,  Microsoft.FSharp-fields, 2066, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 605, Microsoft.FSharp.PowerPack-methods, 3360, Microsoft.FSharp.PowerPack-fields, 957,  
-Wed 05/07/2008, 17:33:36.08, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1343,  Microsoft.FSharp-methods, 4934, ,  Microsoft.FSharp-fields, 2132, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3478, Microsoft.FSharp.PowerPack-fields, 1040,  
-Mon 05/12/2008, 17:40:46.25, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5009, ,  Microsoft.FSharp-fields, 2158, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3486, Microsoft.FSharp.PowerPack-fields, 1044,  
-Tue 05/13/2008, 11:51:11.80, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5009, ,  Microsoft.FSharp-fields, 2158, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3486, Microsoft.FSharp.PowerPack-fields, 1044,  
-11/04/2008, 21:28:34.73, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1731,  Microsoft.FSharp-methods, 7373, ,  Microsoft.FSharp-fields, 2630, Microsoft.FSharp.Compatibility-TypeFunc, 0, Microsoft.FSharp.Compatibility-classes, 188, Microsoft.FSharp.Compatibility-methods, 1034, Microsoft.FSharp.Compatibility-fields, 272,  
-18/04/2008,  2:51:30.01, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1723,  Microsoft.FSharp-methods, 7167, ,  Microsoft.FSharp-fields, 2634, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 202, Microsoft.FSharp.PowerPack-methods, 1163, Microsoft.FSharp.PowerPack-fields, 304,  
-01/05/2008,  5:11:21.48, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1324,  Microsoft.FSharp-methods, 4845, ,  Microsoft.FSharp-fields, 2088, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 626, Microsoft.FSharp.PowerPack-methods, 3395, Microsoft.FSharp.PowerPack-fields, 985,  
-09/05/2008, 16:00:29.98, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1343,  Microsoft.FSharp-methods, 4934, ,  Microsoft.FSharp-fields, 2132, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3478, Microsoft.FSharp.PowerPack-fields, 1040,  
-12/05/2008, 21:57:54.01, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5009, ,  Microsoft.FSharp-fields, 2158, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3478, Microsoft.FSharp.PowerPack-fields, 1040,  
-16/05/2008, 21:13:00.74, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1357,  Microsoft.FSharp-methods, 5184, ,  Microsoft.FSharp-fields, 2165, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3551, Microsoft.FSharp.PowerPack-fields, 1044,  
-17/05/2008, 19:43:22.67, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1357,  Microsoft.FSharp-methods, 5184, ,  Microsoft.FSharp-fields, 2165, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3551, Microsoft.FSharp.PowerPack-fields, 1044,  
-18/05/2008,  5:03:46.26, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1080,  Microsoft.FSharp-methods, 4900, ,  Microsoft.FSharp-fields, 1632, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 560, Microsoft.FSharp.PowerPack-methods, 3457, Microsoft.FSharp.PowerPack-fields, 783,  
-18/05/2008, 15:49:06.86, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1080,  Microsoft.FSharp-methods, 4900, ,  Microsoft.FSharp-fields, 1632, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 560, Microsoft.FSharp.PowerPack-methods, 3457, Microsoft.FSharp.PowerPack-fields, 783,  
-Mon 05/19/2008, 12:10:56.68, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1078,  Microsoft.FSharp-methods, 4889, ,  Microsoft.FSharp-fields, 1623, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 560, Microsoft.FSharp.PowerPack-methods, 3457, Microsoft.FSharp.PowerPack-fields, 783,  
-Fri 05/30/2008, 17:45:01.17, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1084,  Microsoft.FSharp-methods, 4928, ,  Microsoft.FSharp-fields, 1640, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 560, Microsoft.FSharp.PowerPack-methods, 3472, Microsoft.FSharp.PowerPack-fields, 783,  
-Sat 05/31/2008,  9:27:42.59, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1084,  Microsoft.FSharp-methods, 4928, ,  Microsoft.FSharp-fields, 1640, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3458, Microsoft.FSharp.PowerPack-fields, 782,  
-Sat 05/31/2008, 11:10:00.61, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1084,  Microsoft.FSharp-methods, 4928, ,  Microsoft.FSharp-fields, 1640, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3458, Microsoft.FSharp.PowerPack-fields, 782,  
-Sat 05/31/2008, 16:50:04.97, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1084,  Microsoft.FSharp-methods, 4928, ,  Microsoft.FSharp-fields, 1640, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3458, Microsoft.FSharp.PowerPack-fields, 782,  
-Mon 06/09/2008, 17:49:07.09, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1084,  Microsoft.FSharp-methods, 4925, ,  Microsoft.FSharp-fields, 1640, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3459, Microsoft.FSharp.PowerPack-fields, 782,  
-Tue 06/10/2008, 11:23:03.28, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1086,  Microsoft.FSharp-methods, 4931, ,  Microsoft.FSharp-fields, 1640, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3459, Microsoft.FSharp.PowerPack-fields, 782,  
-Wed 06/11/2008, 15:15:05.62, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1086,  Microsoft.FSharp-methods, 4931, ,  Microsoft.FSharp-fields, 1640, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3459, Microsoft.FSharp.PowerPack-fields, 782,  
-Wed 06/11/2008, 18:22:44.74, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1086,  Microsoft.FSharp-methods, 4931, ,  Microsoft.FSharp-fields, 1640, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3459, Microsoft.FSharp.PowerPack-fields, 782,  
-26/04/2008, 17:50:49.19, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5014, ,  Microsoft.FSharp-fields, 2068, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 608, Microsoft.FSharp.PowerPack-methods, 3353, Microsoft.FSharp.PowerPack-fields, 971,  
-27/04/2008, 16:31:19.42, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1347,  Microsoft.FSharp-methods, 4980, ,  Microsoft.FSharp-fields, 2070, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 603, Microsoft.FSharp.PowerPack-methods, 3337, Microsoft.FSharp.PowerPack-fields, 956,  
-28/04/2008, 10:53:36.31, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1346,  Microsoft.FSharp-methods, 4978, ,  Microsoft.FSharp-fields, 2070, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 603, Microsoft.FSharp.PowerPack-methods, 3337, Microsoft.FSharp.PowerPack-fields, 956,  
-28/04/2008, 13:11:36.30, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1346,  Microsoft.FSharp-methods, 4978, ,  Microsoft.FSharp-fields, 2070, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 603, Microsoft.FSharp.PowerPack-methods, 3336, Microsoft.FSharp.PowerPack-fields, 956,  
-28/04/2008, 18:53:04.75, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1329,  Microsoft.FSharp-methods, 4905, ,  Microsoft.FSharp-fields, 2049, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 605, Microsoft.FSharp.PowerPack-methods, 3360, Microsoft.FSharp.PowerPack-fields, 957,  
-28/04/2008, 23:41:37.57, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1329,  Microsoft.FSharp-methods, 4909, ,  Microsoft.FSharp-fields, 2049, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 605, Microsoft.FSharp.PowerPack-methods, 3360, Microsoft.FSharp.PowerPack-fields, 957,  
-29/04/2008,  2:17:59.00, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1329,  Microsoft.FSharp-methods, 4909, ,  Microsoft.FSharp-fields, 2049, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 605, Microsoft.FSharp.PowerPack-methods, 3360, Microsoft.FSharp.PowerPack-fields, 957,  
-29/04/2008, 11:02:11.76, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1329,  Microsoft.FSharp-methods, 4909, ,  Microsoft.FSharp-fields, 2049, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 605, Microsoft.FSharp.PowerPack-methods, 3360, Microsoft.FSharp.PowerPack-fields, 957,  
-29/04/2008, 15:56:21.63, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 4952, ,  Microsoft.FSharp-fields, 2066, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 605, Microsoft.FSharp.PowerPack-methods, 3360, Microsoft.FSharp.PowerPack-fields, 957,  
-29/04/2008, 19:33:35.48, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 4952, ,  Microsoft.FSharp-fields, 2066, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 605, Microsoft.FSharp.PowerPack-methods, 3360, Microsoft.FSharp.PowerPack-fields, 957,  
-30/04/2008, 16:43:04.62, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1340,  Microsoft.FSharp-methods, 4925, ,  Microsoft.FSharp-fields, 2068, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 611, Microsoft.FSharp.PowerPack-methods, 3355, Microsoft.FSharp.PowerPack-fields, 962,  
-30/04/2008, 22:46:00.61, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1337,  Microsoft.FSharp-methods, 4891, ,  Microsoft.FSharp-fields, 2096, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 617, Microsoft.FSharp.PowerPack-methods, 3365, Microsoft.FSharp.PowerPack-fields, 976,  
-30/04/2008, 23:27:44.64, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1331,  Microsoft.FSharp-methods, 4864, ,  Microsoft.FSharp-fields, 2090, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 617, Microsoft.FSharp.PowerPack-methods, 3365, Microsoft.FSharp.PowerPack-fields, 976,  
-01/05/2008,  3:22:23.21, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1324,  Microsoft.FSharp-methods, 4845, ,  Microsoft.FSharp-fields, 2088, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 626, Microsoft.FSharp.PowerPack-methods, 3391, Microsoft.FSharp.PowerPack-fields, 985,  
-01/05/2008,  4:10:49.34, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1324,  Microsoft.FSharp-methods, 4845, ,  Microsoft.FSharp-fields, 2088, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 626, Microsoft.FSharp.PowerPack-methods, 3395, Microsoft.FSharp.PowerPack-fields, 985,  
-01/05/2008, 15:19:36.69, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1331,  Microsoft.FSharp-methods, 4865, ,  Microsoft.FSharp-fields, 2098, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 626, Microsoft.FSharp.PowerPack-methods, 3394, Microsoft.FSharp.PowerPack-fields, 985,  
-03/05/2008,  2:29:46.37, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1337,  Microsoft.FSharp-methods, 4921, ,  Microsoft.FSharp-fields, 2119, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3478, Microsoft.FSharp.PowerPack-fields, 1039,  
-03/05/2008,  2:43:41.27, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1337,  Microsoft.FSharp-methods, 4921, ,  Microsoft.FSharp-fields, 2119, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3478, Microsoft.FSharp.PowerPack-fields, 1039,  
-04/05/2008,  0:45:21.15, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1337,  Microsoft.FSharp-methods, 4921, ,  Microsoft.FSharp-fields, 2119, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3478, Microsoft.FSharp.PowerPack-fields, 1040,  
-04/05/2008,  4:16:08.86, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1337,  Microsoft.FSharp-methods, 4921, ,  Microsoft.FSharp-fields, 2119, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3478, Microsoft.FSharp.PowerPack-fields, 1040,  
-09/05/2008, 13:40:01.26, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1343,  Microsoft.FSharp-methods, 4934, ,  Microsoft.FSharp-fields, 2132, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 659, Microsoft.FSharp.PowerPack-methods, 3492, Microsoft.FSharp.PowerPack-fields, 1041,  
-09/05/2008, 16:34:53.15, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1343,  Microsoft.FSharp-methods, 4934, ,  Microsoft.FSharp-fields, 2132, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3478, Microsoft.FSharp.PowerPack-fields, 1040,  
-12/05/2008, 19:27:48.56, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1358,  Microsoft.FSharp-methods, 5001, ,  Microsoft.FSharp-fields, 2154, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3478, Microsoft.FSharp.PowerPack-fields, 1040,  
-12/05/2008, 22:45:59.53, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5009, ,  Microsoft.FSharp-fields, 2158, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3478, Microsoft.FSharp.PowerPack-fields, 1040,  
-13/05/2008, 16:37:52.63, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5222, ,  Microsoft.FSharp-fields, 2164, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3549, Microsoft.FSharp.PowerPack-fields, 1044,  
-13/05/2008, 20:55:19.50, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1356,  Microsoft.FSharp-methods, 5220, ,  Microsoft.FSharp-fields, 2165, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3549, Microsoft.FSharp.PowerPack-fields, 1044,  
-14/05/2008, 22:50:21.96, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1347,  Microsoft.FSharp-methods, 5173, ,  Microsoft.FSharp-fields, 2155, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 656, Microsoft.FSharp.PowerPack-methods, 3551, Microsoft.FSharp.PowerPack-fields, 1044,  
-08/06/2008, 22:10:41.59, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1005,  Microsoft.FSharp-methods, 4625, ,  Microsoft.FSharp-fields, 1589, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3457, Microsoft.FSharp.PowerPack-fields, 782,  
-12/06/2008, 21:21:34.30, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1005,  Microsoft.FSharp-methods, 4829, ,  Microsoft.FSharp-fields, 1587, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3490, Microsoft.FSharp.PowerPack-fields, 782,  
-27/05/2008, 14:31:08.89, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1084,  Microsoft.FSharp-methods, 4917, ,  Microsoft.FSharp-fields, 1639, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3452, Microsoft.FSharp.PowerPack-fields, 782,  
-29/05/2008,  3:21:14.69, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1084,  Microsoft.FSharp-methods, 4917, ,  Microsoft.FSharp-fields, 1639, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 557, Microsoft.FSharp.PowerPack-methods, 3452, Microsoft.FSharp.PowerPack-fields, 782,  
-13/06/2008, 18:47:51.35, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1039,  Microsoft.FSharp-methods, 4939, ,  Microsoft.FSharp-fields, 1610, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 524, Microsoft.FSharp.PowerPack-methods, 3389, Microsoft.FSharp.PowerPack-fields, 758,  
-Thu 11/06/2008, 17:10:39.51, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5652, ,  Microsoft.FSharp-fields, 1709, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-28/10/2008, 14:10:50.54, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1281,  Microsoft.FSharp-methods, 5644, ,  Microsoft.FSharp-fields, 1707, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-29/10/2008,  8:11:04.08, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5646, ,  Microsoft.FSharp-fields, 1710, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-29/10/2008, 13:55:00.59, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5646, ,  Microsoft.FSharp-fields, 1710, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-29/10/2008, 16:45:49.90, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5646, ,  Microsoft.FSharp-fields, 1710, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-29/10/2008, 21:08:53.39, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5646, ,  Microsoft.FSharp-fields, 1710, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-30/10/2008,  1:54:29.61, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5646, ,  Microsoft.FSharp-fields, 1710, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-30/10/2008, 19:09:04.54, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5646, ,  Microsoft.FSharp-fields, 1710, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-31/10/2008, 18:35:05.02, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5649, ,  Microsoft.FSharp-fields, 1710, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-31/10/2008, 21:10:23.23, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5649, ,  Microsoft.FSharp-fields, 1710, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-01/11/2008,  0:37:50.71, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5649, ,  Microsoft.FSharp-fields, 1710, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-01/11/2008,  9:33:09.01, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1282,  Microsoft.FSharp-methods, 5649, ,  Microsoft.FSharp-fields, 1710, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 559, Microsoft.FSharp.PowerPack-methods, 3556, Microsoft.FSharp.PowerPack-fields, 796,  
-27/11/2008, 19:41:47.09, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1271,  Microsoft.FSharp-methods, 5571, ,  Microsoft.FSharp-fields, 1684, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 586, Microsoft.FSharp.PowerPack-methods, 3629, Microsoft.FSharp.PowerPack-fields, 856,  
-29/11/2008,  2:25:09.66, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1271,  Microsoft.FSharp-methods, 5571, ,  Microsoft.FSharp-fields, 1684, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 586, Microsoft.FSharp.PowerPack-methods, 3629, Microsoft.FSharp.PowerPack-fields, 856,  
-29/11/2008, 23:22:44.59, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1263,  Microsoft.FSharp-methods, 5435, ,  Microsoft.FSharp-fields, 1686, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 583, Microsoft.FSharp.PowerPack-methods, 3626, Microsoft.FSharp.PowerPack-fields, 853,  
-30/11/2008, 11:43:14.09, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1262,  Microsoft.FSharp-methods, 5437, ,  Microsoft.FSharp-fields, 1683, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 583, Microsoft.FSharp.PowerPack-methods, 3626, Microsoft.FSharp.PowerPack-fields, 853,  
-30/11/2008, 22:38:48.52, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1262,  Microsoft.FSharp-methods, 5444, ,  Microsoft.FSharp-fields, 1689, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 583, Microsoft.FSharp.PowerPack-methods, 3626, Microsoft.FSharp.PowerPack-fields, 853,  
-Mon 02/02/2009, 13:15:20.78, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1240,  Microsoft.FSharp-methods, 5330, ,  Microsoft.FSharp-fields, 1700, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 608, Microsoft.FSharp.PowerPack-methods, 3951, Microsoft.FSharp.PowerPack-fields, 1014,  
-Mon 06/01/2009, 21:39:33.48, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5768, ,  Microsoft.FSharp-fields, 1952, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1027,  
-Wed 06/03/2009,  1:44:53.89, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5768, ,  Microsoft.FSharp-fields, 1952, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1027,  
-Wed 06/03/2009, 11:06:09.24, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5768, ,  Microsoft.FSharp-fields, 1952, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1027,  
-Sat 06/06/2009, 10:41:05.18, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5814, ,  Microsoft.FSharp-fields, 1960, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1028,  
-Sat 06/06/2009, 14:21:35.02, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5814, ,  Microsoft.FSharp-fields, 1960, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1028,  
-Sun 06/07/2009,  7:34:23.31, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5814, ,  Microsoft.FSharp-fields, 1960, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1028,  
-Sun 06/07/2009, 16:24:47.92, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5815, ,  Microsoft.FSharp-fields, 1961, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1028,  
-02/12/2008,  4:10:36.35, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1263,  Microsoft.FSharp-methods, 5442, ,  Microsoft.FSharp-fields, 1689, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 583, Microsoft.FSharp.PowerPack-methods, 3618, Microsoft.FSharp.PowerPack-fields, 855,  
-05/12/2008,  2:49:59.14, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1263,  Microsoft.FSharp-methods, 5440, ,  Microsoft.FSharp-fields, 1688, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 583, Microsoft.FSharp.PowerPack-methods, 3618, Microsoft.FSharp.PowerPack-fields, 855,  
-05/12/2008, 17:40:57.25, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1262,  Microsoft.FSharp-methods, 5438, ,  Microsoft.FSharp-fields, 1688, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 583, Microsoft.FSharp.PowerPack-methods, 3618, Microsoft.FSharp.PowerPack-fields, 855,  
-06/12/2008,  5:17:53.43, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1257,  Microsoft.FSharp-methods, 5435, ,  Microsoft.FSharp-fields, 1678, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 641, Microsoft.FSharp.PowerPack-methods, 3916, Microsoft.FSharp.PowerPack-fields, 972,  
-06/12/2008, 20:13:52.82, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1257,  Microsoft.FSharp-methods, 5435, ,  Microsoft.FSharp-fields, 1678, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 641, Microsoft.FSharp.PowerPack-methods, 3916, Microsoft.FSharp.PowerPack-fields, 972,  
-06/12/2008, 22:21:12.82, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1257,  Microsoft.FSharp-methods, 5435, ,  Microsoft.FSharp-fields, 1678, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 641, Microsoft.FSharp.PowerPack-methods, 3916, Microsoft.FSharp.PowerPack-fields, 972,  
-07/12/2008, 17:10:56.86, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1251,  Microsoft.FSharp-methods, 5356, ,  Microsoft.FSharp-fields, 1669, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 648, Microsoft.FSharp.PowerPack-methods, 3967, Microsoft.FSharp.PowerPack-fields, 976,  
-07/12/2008, 19:51:17.91, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1251,  Microsoft.FSharp-methods, 5360, ,  Microsoft.FSharp-fields, 1669, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 648, Microsoft.FSharp.PowerPack-methods, 3969, Microsoft.FSharp.PowerPack-fields, 976,  
-07/12/2008, 21:43:03.76, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1252,  Microsoft.FSharp-methods, 5360, ,  Microsoft.FSharp-fields, 1669, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 648, Microsoft.FSharp.PowerPack-methods, 3969, Microsoft.FSharp.PowerPack-fields, 976,  
-08/12/2008, 20:15:01.27, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1252,  Microsoft.FSharp-methods, 5360, ,  Microsoft.FSharp-fields, 1669, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 648, Microsoft.FSharp.PowerPack-methods, 3969, Microsoft.FSharp.PowerPack-fields, 976,  
-10/12/2008,  1:03:28.88, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1252,  Microsoft.FSharp-methods, 5360, ,  Microsoft.FSharp-fields, 1669, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 648, Microsoft.FSharp.PowerPack-methods, 3969, Microsoft.FSharp.PowerPack-fields, 976,  
-30/12/2008, 22:20:30.07, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1222,  Microsoft.FSharp-methods, 5415, ,  Microsoft.FSharp-fields, 1671, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 622, Microsoft.FSharp.PowerPack-methods, 4033, Microsoft.FSharp.PowerPack-fields, 1027,  
-31/12/2008, 20:49:36.18, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1222,  Microsoft.FSharp-methods, 5415, ,  Microsoft.FSharp-fields, 1671, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 622, Microsoft.FSharp.PowerPack-methods, 4033, Microsoft.FSharp.PowerPack-fields, 1027,  
-02/01/2009,  2:48:27.07, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1222,  Microsoft.FSharp-methods, 5415, ,  Microsoft.FSharp-fields, 1671, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 618, Microsoft.FSharp.PowerPack-methods, 4025, Microsoft.FSharp.PowerPack-fields, 1022,  
-03/01/2009, 15:43:02.29, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1222,  Microsoft.FSharp-methods, 5415, ,  Microsoft.FSharp-fields, 1671, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 618, Microsoft.FSharp.PowerPack-methods, 4025, Microsoft.FSharp.PowerPack-fields, 1022,  
-18/01/2009,  3:32:31.59, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1239,  Microsoft.FSharp-methods, 5355, ,  Microsoft.FSharp-fields, 1698, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 606, Microsoft.FSharp.PowerPack-methods, 3964, Microsoft.FSharp.PowerPack-fields, 1007,  
-18/01/2009, 21:02:38.23, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1239,  Microsoft.FSharp-methods, 5355, ,  Microsoft.FSharp-fields, 1698, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 606, Microsoft.FSharp.PowerPack-methods, 3964, Microsoft.FSharp.PowerPack-fields, 1007,  
-12/02/2009, 14:51:37.28, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1237,  Microsoft.FSharp-methods, 5307, ,  Microsoft.FSharp-fields, 1695, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 608, Microsoft.FSharp.PowerPack-methods, 3948, Microsoft.FSharp.PowerPack-fields, 1014,  
-12/02/2009, 19:03:15.80, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1241,  Microsoft.FSharp-methods, 5392, ,  Microsoft.FSharp-fields, 1758, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 612, Microsoft.FSharp.PowerPack-methods, 3979, Microsoft.FSharp.PowerPack-fields, 1032,  
-13/02/2009,  3:13:54.96, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1241,  Microsoft.FSharp-methods, 5392, ,  Microsoft.FSharp-fields, 1758, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 611, Microsoft.FSharp.PowerPack-methods, 3976, Microsoft.FSharp.PowerPack-fields, 1031,  
-13/02/2009, 18:55:16.50, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1241,  Microsoft.FSharp-methods, 5392, ,  Microsoft.FSharp-fields, 1758, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 611, Microsoft.FSharp.PowerPack-methods, 3976, Microsoft.FSharp.PowerPack-fields, 1031,  
-14/02/2009,  3:17:34.80, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1241,  Microsoft.FSharp-methods, 5392, ,  Microsoft.FSharp-fields, 1758, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 611, Microsoft.FSharp.PowerPack-methods, 3976, Microsoft.FSharp.PowerPack-fields, 1031,  
-19/02/2009, 16:43:20.73, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1239,  Microsoft.FSharp-methods, 5391, ,  Microsoft.FSharp-fields, 1754, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 569, Microsoft.FSharp.PowerPack-methods, 3892, Microsoft.FSharp.PowerPack-fields, 981,  
-19/02/2009, 17:59:25.96, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1239,  Microsoft.FSharp-methods, 5391, ,  Microsoft.FSharp-fields, 1754, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 569, Microsoft.FSharp.PowerPack-methods, 3892, Microsoft.FSharp.PowerPack-fields, 981,  
-20/02/2009,  1:10:31.51, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1239,  Microsoft.FSharp-methods, 5391, ,  Microsoft.FSharp-fields, 1754, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 569, Microsoft.FSharp.PowerPack-methods, 3892, Microsoft.FSharp.PowerPack-fields, 981,  
-20/02/2009,  3:55:50.73, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1239,  Microsoft.FSharp-methods, 5391, ,  Microsoft.FSharp-fields, 1754, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 569, Microsoft.FSharp.PowerPack-methods, 3892, Microsoft.FSharp.PowerPack-fields, 981,  
-20/02/2009, 15:54:48.52, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1239,  Microsoft.FSharp-methods, 5391, ,  Microsoft.FSharp-fields, 1754, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 569, Microsoft.FSharp.PowerPack-methods, 3892, Microsoft.FSharp.PowerPack-fields, 981,  
-21/02/2009,  3:19:27.50, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1239,  Microsoft.FSharp-methods, 5391, ,  Microsoft.FSharp-fields, 1754, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 561, Microsoft.FSharp.PowerPack-methods, 3839, Microsoft.FSharp.PowerPack-fields, 956,  
-23/02/2009, 17:01:14.71, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1239,  Microsoft.FSharp-methods, 5391, ,  Microsoft.FSharp-fields, 1754, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 561, Microsoft.FSharp.PowerPack-methods, 3839, Microsoft.FSharp.PowerPack-fields, 956,  
-24/02/2009,  3:52:19.92, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1239,  Microsoft.FSharp-methods, 5391, ,  Microsoft.FSharp-fields, 1754, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 561, Microsoft.FSharp.PowerPack-methods, 3839, Microsoft.FSharp.PowerPack-fields, 956,  
-25/02/2009,  0:50:07.95, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1324,  Microsoft.FSharp-methods, 5594, ,  Microsoft.FSharp-fields, 1846, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 3973, Microsoft.FSharp.PowerPack-fields, 1011,  
-08/04/2009, 18:46:43.01, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1267,  Microsoft.FSharp-methods, 5446, ,  Microsoft.FSharp-fields, 1714, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 612, Microsoft.FSharp.PowerPack-methods, 4098, Microsoft.FSharp.PowerPack-fields, 1026,  
-13/04/2009,  2:27:39.56, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1267,  Microsoft.FSharp-methods, 5446, ,  Microsoft.FSharp-fields, 1714, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 597, Microsoft.FSharp.PowerPack-methods, 4025, Microsoft.FSharp.PowerPack-fields, 1011,  
-21/04/2009,  4:53:28.65, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1287,  Microsoft.FSharp-methods, 5503, ,  Microsoft.FSharp-fields, 1773, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 618, Microsoft.FSharp.PowerPack-methods, 4068, Microsoft.FSharp.PowerPack-fields, 1035,  
-21/04/2009, 23:36:25.52, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1283,  Microsoft.FSharp-methods, 5494, ,  Microsoft.FSharp-fields, 1757, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 618, Microsoft.FSharp.PowerPack-methods, 4068, Microsoft.FSharp.PowerPack-fields, 1035,  
-22/04/2009,  2:43:59.43, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1283,  Microsoft.FSharp-methods, 5494, ,  Microsoft.FSharp-fields, 1757, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 618, Microsoft.FSharp.PowerPack-methods, 4068, Microsoft.FSharp.PowerPack-fields, 1035,  
-27/04/2009,  0:13:32.76, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1283,  Microsoft.FSharp-methods, 5494, ,  Microsoft.FSharp-fields, 1757, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 618, Microsoft.FSharp.PowerPack-methods, 4068, Microsoft.FSharp.PowerPack-fields, 1035,  
-03/05/2009,  1:24:04.57, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1290,  Microsoft.FSharp-methods, 5533, ,  Microsoft.FSharp-fields, 1781, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 619, Microsoft.FSharp.PowerPack-methods, 4079, Microsoft.FSharp.PowerPack-fields, 1040,  
-03/05/2009, 10:14:02.92, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1290,  Microsoft.FSharp-methods, 5533, ,  Microsoft.FSharp-fields, 1781, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 620, Microsoft.FSharp.PowerPack-methods, 4090, Microsoft.FSharp.PowerPack-fields, 1040,  
-04/05/2009,  1:10:59.48, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1290,  Microsoft.FSharp-methods, 5533, ,  Microsoft.FSharp-fields, 1781, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 620, Microsoft.FSharp.PowerPack-methods, 4090, Microsoft.FSharp.PowerPack-fields, 1040,  
-05/05/2009,  0:50:15.00, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1292,  Microsoft.FSharp-methods, 5537, ,  Microsoft.FSharp-fields, 1782, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 621, Microsoft.FSharp.PowerPack-methods, 4092, Microsoft.FSharp.PowerPack-fields, 1041,  
-05/05/2009, 15:54:28.89, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1292,  Microsoft.FSharp-methods, 5537, ,  Microsoft.FSharp-fields, 1782, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 621, Microsoft.FSharp.PowerPack-methods, 4092, Microsoft.FSharp.PowerPack-fields, 1041,  
-05/05/2009, 17:50:59.22, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1292,  Microsoft.FSharp-methods, 5537, ,  Microsoft.FSharp-fields, 1782, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 621, Microsoft.FSharp.PowerPack-methods, 4092, Microsoft.FSharp.PowerPack-fields, 1041,  
-06/05/2009, 15:47:45.17, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1292,  Microsoft.FSharp-methods, 5537, ,  Microsoft.FSharp-fields, 1782, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 621, Microsoft.FSharp.PowerPack-methods, 4092, Microsoft.FSharp.PowerPack-fields, 1041,  
-06/05/2009, 22:37:03.11, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1292,  Microsoft.FSharp-methods, 5537, ,  Microsoft.FSharp-fields, 1782, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 621, Microsoft.FSharp.PowerPack-methods, 4092, Microsoft.FSharp.PowerPack-fields, 1041,  
-07/05/2009, 13:08:56.07, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1320,  Microsoft.FSharp-methods, 5620, ,  Microsoft.FSharp-fields, 1829, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4094, Microsoft.FSharp.PowerPack-fields, 1042,  
-08/05/2009, 12:51:38.44, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1319,  Microsoft.FSharp-methods, 5627, ,  Microsoft.FSharp-fields, 1830, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4094, Microsoft.FSharp.PowerPack-fields, 1042,  
-08/05/2009, 14:14:30.14, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1319,  Microsoft.FSharp-methods, 5627, ,  Microsoft.FSharp-fields, 1830, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4094, Microsoft.FSharp.PowerPack-fields, 1042,  
-08/05/2009, 15:10:21.43, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1319,  Microsoft.FSharp-methods, 5627, ,  Microsoft.FSharp-fields, 1830, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4094, Microsoft.FSharp.PowerPack-fields, 1042,  
-08/05/2009, 20:16:44.19, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1317,  Microsoft.FSharp-methods, 5600, ,  Microsoft.FSharp-fields, 1828, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4093, Microsoft.FSharp.PowerPack-fields, 1042,  
-08/05/2009, 23:52:33.81, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1317,  Microsoft.FSharp-methods, 5600, ,  Microsoft.FSharp-fields, 1828, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4093, Microsoft.FSharp.PowerPack-fields, 1042,  
-10/05/2009,  1:41:57.02, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1317,  Microsoft.FSharp-methods, 5601, ,  Microsoft.FSharp-fields, 1828, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4093, Microsoft.FSharp.PowerPack-fields, 1042,  
-10/05/2009, 20:15:43.73, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1317,  Microsoft.FSharp-methods, 5601, ,  Microsoft.FSharp-fields, 1828, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4093, Microsoft.FSharp.PowerPack-fields, 1042,  
-11/05/2009, 13:49:08.37, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1319,  Microsoft.FSharp-methods, 5603, ,  Microsoft.FSharp-fields, 1828, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4093, Microsoft.FSharp.PowerPack-fields, 1042,  
-12/05/2009, 16:18:24.79, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1321,  Microsoft.FSharp-methods, 5607, ,  Microsoft.FSharp-fields, 1831, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4093, Microsoft.FSharp.PowerPack-fields, 1042,  
-12/05/2009, 19:28:21.60, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1321,  Microsoft.FSharp-methods, 5608, ,  Microsoft.FSharp-fields, 1831, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4093, Microsoft.FSharp.PowerPack-fields, 1042,  
-12/05/2009, 21:07:48.06, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1321,  Microsoft.FSharp-methods, 5608, ,  Microsoft.FSharp-fields, 1831, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4093, Microsoft.FSharp.PowerPack-fields, 1042,  
-13/05/2009, 19:10:58.20, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1322,  Microsoft.FSharp-methods, 5610, ,  Microsoft.FSharp-fields, 1832, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4093, Microsoft.FSharp.PowerPack-fields, 1042,  
-13/05/2009, 22:43:59.83, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1322,  Microsoft.FSharp-methods, 5610, ,  Microsoft.FSharp-fields, 1832, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4093, Microsoft.FSharp.PowerPack-fields, 1042,  
-14/05/2009, 22:17:09.31, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1322,  Microsoft.FSharp-methods, 5581, ,  Microsoft.FSharp-fields, 1832, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4073, Microsoft.FSharp.PowerPack-fields, 1042,  
-14/05/2009, 22:33:51.25, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1322,  Microsoft.FSharp-methods, 5581, ,  Microsoft.FSharp-fields, 1832, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4073, Microsoft.FSharp.PowerPack-fields, 1042,  
-14/05/2009, 23:45:16.31, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1322,  Microsoft.FSharp-methods, 5581, ,  Microsoft.FSharp-fields, 1832, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4073, Microsoft.FSharp.PowerPack-fields, 1042,  
-15/05/2009,  0:40:59.50, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1322,  Microsoft.FSharp-methods, 5581, ,  Microsoft.FSharp-fields, 1832, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4073, Microsoft.FSharp.PowerPack-fields, 1042,  
-15/05/2009, 14:31:49.46, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1322,  Microsoft.FSharp-methods, 5581, ,  Microsoft.FSharp-fields, 1832, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4073, Microsoft.FSharp.PowerPack-fields, 1042,  
-17/05/2009, 10:59:14.54, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1320,  Microsoft.FSharp-methods, 5578, ,  Microsoft.FSharp-fields, 1831, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 623, Microsoft.FSharp.PowerPack-methods, 4073, Microsoft.FSharp.PowerPack-fields, 1042,  
-18/05/2009, 15:59:37.72, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1346,  Microsoft.FSharp-methods, 5663, ,  Microsoft.FSharp-fields, 1847, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4063, Microsoft.FSharp.PowerPack-fields, 1027,  
-18/05/2009, 23:17:57.38, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1347,  Microsoft.FSharp-methods, 5662, ,  Microsoft.FSharp-fields, 1847, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4063, Microsoft.FSharp.PowerPack-fields, 1027,  
-20/05/2009,  1:41:41.52, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 5647, ,  Microsoft.FSharp-fields, 1847, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4063, Microsoft.FSharp.PowerPack-fields, 1027,  
-20/05/2009, 21:37:48.96, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 5647, ,  Microsoft.FSharp-fields, 1847, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4063, Microsoft.FSharp.PowerPack-fields, 1027,  
-22/05/2009, 18:16:28.67, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1346,  Microsoft.FSharp-methods, 5650, ,  Microsoft.FSharp-fields, 1848, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1027,  
-22/05/2009, 19:15:05.29, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1346,  Microsoft.FSharp-methods, 5650, ,  Microsoft.FSharp-fields, 1848, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1027,  
-26/05/2009, 17:04:52.65, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1346,  Microsoft.FSharp-methods, 5650, ,  Microsoft.FSharp-fields, 1848, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1027,  
-31/05/2009,  0:03:05.14, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1348,  Microsoft.FSharp-methods, 5766, ,  Microsoft.FSharp-fields, 1952, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1027,  
-31/05/2009, 15:33:48.17, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1348,  Microsoft.FSharp-methods, 5768, ,  Microsoft.FSharp-fields, 1952, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1027,  
-31/05/2009, 19:21:35.41, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5770, ,  Microsoft.FSharp-fields, 1950, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1027,  
-31/05/2009, 21:35:03.30, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5770, ,  Microsoft.FSharp-fields, 1950, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4062, Microsoft.FSharp.PowerPack-fields, 1027,  
-04/06/2009,  8:24:45.87, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1349,  Microsoft.FSharp-methods, 5768, ,  Microsoft.FSharp-fields, 1950, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4061, Microsoft.FSharp.PowerPack-fields, 1027,  
-05/06/2009, 13:03:59.35, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1348,  Microsoft.FSharp-methods, 5771, ,  Microsoft.FSharp-fields, 1949, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4061, Microsoft.FSharp.PowerPack-fields, 1027,  
-05/06/2009, 15:01:23.15, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1348,  Microsoft.FSharp-methods, 5771, ,  Microsoft.FSharp-fields, 1949, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4061, Microsoft.FSharp.PowerPack-fields, 1027,  
-08/06/2009, 17:26:50.68, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1348,  Microsoft.FSharp-methods, 5771, ,  Microsoft.FSharp-fields, 1949, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4061, Microsoft.FSharp.PowerPack-fields, 1027,  
-09/06/2009, 15:00:48.93, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1347,  Microsoft.FSharp-methods, 5809, ,  Microsoft.FSharp-fields, 1959, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4061, Microsoft.FSharp.PowerPack-fields, 1027,  
-10/06/2009, 18:21:22.42, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1347,  Microsoft.FSharp-methods, 5810, ,  Microsoft.FSharp-fields, 1959, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4061, Microsoft.FSharp.PowerPack-fields, 1027,  
-11/06/2009, 10:50:34.42, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1347,  Microsoft.FSharp-methods, 5810, ,  Microsoft.FSharp-fields, 1959, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 4061, Microsoft.FSharp.PowerPack-fields, 1027,  
-11/06/2009, 20:04:04.49, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1347,  Microsoft.FSharp-methods, 5635, ,  Microsoft.FSharp-fields, 1959, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 3929, Microsoft.FSharp.PowerPack-fields, 1027,  
-12/06/2009,  1:11:22.72, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1347,  Microsoft.FSharp-methods, 5635, ,  Microsoft.FSharp-fields, 1959, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 3915, Microsoft.FSharp.PowerPack-fields, 1027,  
-12/06/2009, 16:38:40.60, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1347,  Microsoft.FSharp-methods, 5635, ,  Microsoft.FSharp-fields, 1959, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 609, Microsoft.FSharp.PowerPack-methods, 3915, Microsoft.FSharp.PowerPack-fields, 1027,  
-16/06/2009, 12:58:39.36, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1358,  Microsoft.FSharp-methods, 5632, ,  Microsoft.FSharp-fields, 1954, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 603, Microsoft.FSharp.PowerPack-methods, 3897, Microsoft.FSharp.PowerPack-fields, 1027,  
-16/06/2009, 18:41:15.63, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1358,  Microsoft.FSharp-methods, 5632, ,  Microsoft.FSharp-fields, 1955, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3893, Microsoft.FSharp.PowerPack-fields, 1026,  
-17/06/2009, 11:02:07.93, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1358,  Microsoft.FSharp-methods, 5632, ,  Microsoft.FSharp-fields, 1955, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3893, Microsoft.FSharp.PowerPack-fields, 1026,  
-17/06/2009, 18:21:12.45, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1358,  Microsoft.FSharp-methods, 5632, ,  Microsoft.FSharp-fields, 1955, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3891, Microsoft.FSharp.PowerPack-fields, 1026,  
-18/06/2009,  1:03:12.12, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1358,  Microsoft.FSharp-methods, 5630, ,  Microsoft.FSharp-fields, 1953, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3891, Microsoft.FSharp.PowerPack-fields, 1026,  
-18/06/2009, 14:44:09.13, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1358,  Microsoft.FSharp-methods, 5630, ,  Microsoft.FSharp-fields, 1953, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 1026,  
-18/06/2009, 16:34:44.80, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1358,  Microsoft.FSharp-methods, 5630, ,  Microsoft.FSharp-fields, 1953, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 1026,  
-18/06/2009, 22:57:28.60, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1358,  Microsoft.FSharp-methods, 5630, ,  Microsoft.FSharp-fields, 1953, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 1026,  
-19/06/2009, 11:39:48.81, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5636, ,  Microsoft.FSharp-fields, 1943, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 994,  
-20/06/2009, 20:30:55.69, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5636, ,  Microsoft.FSharp-fields, 1943, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 994,  
-22/06/2009, 14:48:24.81, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5634, ,  Microsoft.FSharp-fields, 1943, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 994,  
-24/06/2009, 10:12:25.23, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5634, ,  Microsoft.FSharp-fields, 1943, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 994,  
-24/06/2009, 15:37:33.01, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5634, ,  Microsoft.FSharp-fields, 1943, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 994,  
-25/06/2009, 12:36:10.40, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5634, ,  Microsoft.FSharp-fields, 1943, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 994,  
-Tue 07/14/2009,  6:33:57.56, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1345,  Microsoft.FSharp-methods, 5592, ,  Microsoft.FSharp-fields, 2012, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 997,  
-Tue 07/14/2009,  9:26:43.59, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1345,  Microsoft.FSharp-methods, 5592, ,  Microsoft.FSharp-fields, 2012, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 997,  
-25/06/2009, 16:54:23.64, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1340,  Microsoft.FSharp-methods, 5480, ,  Microsoft.FSharp-fields, 1909, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3892, Microsoft.FSharp.PowerPack-fields, 994,  
-25/06/2009, 18:30:07.97, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1340,  Microsoft.FSharp-methods, 5480, ,  Microsoft.FSharp-fields, 1909, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3892, Microsoft.FSharp.PowerPack-fields, 994,  
-25/06/2009, 20:58:39.27, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1340,  Microsoft.FSharp-methods, 5480, ,  Microsoft.FSharp-fields, 1909, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3892, Microsoft.FSharp.PowerPack-fields, 994,  
-26/06/2009, 21:31:24.01, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1429,  Microsoft.FSharp-methods, 5657, ,  Microsoft.FSharp-fields, 1952, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3892, Microsoft.FSharp.PowerPack-fields, 994,  
-30/06/2009, 12:28:14.74, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 5548, ,  Microsoft.FSharp-fields, 2014, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3892, Microsoft.FSharp.PowerPack-fields, 994,  
-02/07/2009, 22:20:32.05, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 5551, ,  Microsoft.FSharp-fields, 2014, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3875, Microsoft.FSharp.PowerPack-fields, 997,  
-03/07/2009,  1:18:31.89, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 5551, ,  Microsoft.FSharp-fields, 2014, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3875, Microsoft.FSharp.PowerPack-fields, 997,  
-03/07/2009, 14:03:01.05, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 5551, ,  Microsoft.FSharp-fields, 2014, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3875, Microsoft.FSharp.PowerPack-fields, 997,  
-03/07/2009, 22:32:23.17, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 5551, ,  Microsoft.FSharp-fields, 2014, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3875, Microsoft.FSharp.PowerPack-fields, 997,  
-04/07/2009, 13:00:32.40, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1344,  Microsoft.FSharp-methods, 5551, ,  Microsoft.FSharp-fields, 2014, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3875, Microsoft.FSharp.PowerPack-fields, 997,  
-10/07/2009, 18:07:19.07, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1350,  Microsoft.FSharp-methods, 5598, ,  Microsoft.FSharp-fields, 2028, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3877, Microsoft.FSharp.PowerPack-fields, 997,  
-11/07/2009, 18:26:44.80, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1350,  Microsoft.FSharp-methods, 5598, ,  Microsoft.FSharp-fields, 2028, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3877, Microsoft.FSharp.PowerPack-fields, 997,  
-13/07/2009, 16:21:56.57, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1345,  Microsoft.FSharp-methods, 5587, ,  Microsoft.FSharp-fields, 2012, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3877, Microsoft.FSharp.PowerPack-fields, 997,  
-14/07/2009, 23:15:16.27, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1345,  Microsoft.FSharp-methods, 5592, ,  Microsoft.FSharp-fields, 2012, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 997,  
-18/07/2009,  1:12:49.96, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1345,  Microsoft.FSharp-methods, 5592, ,  Microsoft.FSharp-fields, 2012, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 601, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 997,  
-24/07/2009,  1:27:59.49, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1318,  Microsoft.FSharp-methods, 5544, ,  Microsoft.FSharp-fields, 1999, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 600, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 989,  
-25/07/2009,  2:02:09.77, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1318,  Microsoft.FSharp-methods, 5539, ,  Microsoft.FSharp-fields, 1997, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 600, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 989,  
-25/07/2009, 11:36:38.64, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1318,  Microsoft.FSharp-methods, 5541, ,  Microsoft.FSharp-fields, 1998, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 600, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 989,  
-26/07/2009, 18:59:09.87, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1306,  Microsoft.FSharp-methods, 5541, ,  Microsoft.FSharp-fields, 1998, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 573, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 989,  
-26/07/2009, 21:17:47.17, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1306,  Microsoft.FSharp-methods, 5541, ,  Microsoft.FSharp-fields, 1998, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 573, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 989,  
-30/07/2009, 10:34:01.78, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1348,  Microsoft.FSharp-methods, 5567, ,  Microsoft.FSharp-fields, 2016, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 620, Microsoft.FSharp.PowerPack-methods, 3876, Microsoft.FSharp.PowerPack-fields, 989,  
-01/08/2009, 15:30:56.33, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1350,  Microsoft.FSharp-methods, 5560, ,  Microsoft.FSharp-fields, 2018, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 620, Microsoft.FSharp.PowerPack-methods, 3814, Microsoft.FSharp.PowerPack-fields, 989,  
-02/08/2009, 16:27:00.46, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1359,  Microsoft.FSharp-methods, 5552, ,  Microsoft.FSharp-fields, 2015, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 628, Microsoft.FSharp.PowerPack-methods, 3810, Microsoft.FSharp.PowerPack-fields, 988,  
-02/08/2009, 18:34:26.14, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1365,  Microsoft.FSharp-methods, 5552, ,  Microsoft.FSharp-fields, 2021, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 630, Microsoft.FSharp.PowerPack-methods, 3810, Microsoft.FSharp.PowerPack-fields, 990,  
-04/08/2009,  3:34:52.98, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1365,  Microsoft.FSharp-methods, 5552, ,  Microsoft.FSharp-fields, 2021, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 630, Microsoft.FSharp.PowerPack-methods, 3810, Microsoft.FSharp.PowerPack-fields, 990,  
-04/08/2009, 22:59:19.36, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1351,  Microsoft.FSharp-methods, 5689, ,  Microsoft.FSharp-fields, 2057, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 614, Microsoft.FSharp.PowerPack-methods, 3870, Microsoft.FSharp.PowerPack-fields, 988,  
-11/08/2009, 20:47:00.59, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1354,  Microsoft.FSharp-methods, 5733, ,  Microsoft.FSharp-fields, 1864, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 614, Microsoft.FSharp.PowerPack-methods, 3862, Microsoft.FSharp.PowerPack-fields, 915,  
-12/08/2009,  1:15:09.67, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1354,  Microsoft.FSharp-methods, 5733, ,  Microsoft.FSharp-fields, 1864, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 614, Microsoft.FSharp.PowerPack-methods, 3862, Microsoft.FSharp.PowerPack-fields, 915,  
-12/08/2009, 21:20:05.42, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1354,  Microsoft.FSharp-methods, 5715, ,  Microsoft.FSharp-fields, 1864, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 614, Microsoft.FSharp.PowerPack-methods, 3863, Microsoft.FSharp.PowerPack-fields, 916,  
-13/08/2009,  4:09:56.97, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1353,  Microsoft.FSharp-methods, 5715, ,  Microsoft.FSharp-fields, 1864, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 613, Microsoft.FSharp.PowerPack-methods, 3863, Microsoft.FSharp.PowerPack-fields, 916,  
-13/08/2009, 15:09:34.50, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1353,  Microsoft.FSharp-methods, 5716, ,  Microsoft.FSharp-fields, 1864, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 613, Microsoft.FSharp.PowerPack-methods, 3863, Microsoft.FSharp.PowerPack-fields, 916,  
-13/08/2009, 16:37:20.30, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1353,  Microsoft.FSharp-methods, 5716, ,  Microsoft.FSharp-fields, 1864, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 613, Microsoft.FSharp.PowerPack-methods, 3863, Microsoft.FSharp.PowerPack-fields, 916,  
-13/08/2009, 20:34:14.79, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1353,  Microsoft.FSharp-methods, 5716, ,  Microsoft.FSharp-fields, 1864, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 613, Microsoft.FSharp.PowerPack-methods, 3863, Microsoft.FSharp.PowerPack-fields, 916,  
-14/08/2009,  2:56:58.07, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1354,  Microsoft.FSharp-methods, 5721, ,  Microsoft.FSharp-fields, 1868, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 613, Microsoft.FSharp.PowerPack-methods, 3863, Microsoft.FSharp.PowerPack-fields, 916,  
-15/08/2009, 20:53:51.33, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1354,  Microsoft.FSharp-methods, 5728, ,  Microsoft.FSharp-fields, 1870, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 610, Microsoft.FSharp.PowerPack-methods, 3852, Microsoft.FSharp.PowerPack-fields, 913,  
-15/08/2009, 22:04:33.10, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1354,  Microsoft.FSharp-methods, 5728, ,  Microsoft.FSharp-fields, 1870, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 610, Microsoft.FSharp.PowerPack-methods, 3852, Microsoft.FSharp.PowerPack-fields, 913,  
-16/08/2009,  2:00:50.95, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1354,  Microsoft.FSharp-methods, 5730, ,  Microsoft.FSharp-fields, 1870, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 610, Microsoft.FSharp.PowerPack-methods, 3852, Microsoft.FSharp.PowerPack-fields, 913,  
-17/08/2009, 18:59:23.56, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1354,  Microsoft.FSharp-methods, 5730, ,  Microsoft.FSharp-fields, 1870, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 610, Microsoft.FSharp.PowerPack-methods, 3852, Microsoft.FSharp.PowerPack-fields, 913,  
-19/08/2009,  1:58:28.10, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1355,  Microsoft.FSharp-methods, 5732, ,  Microsoft.FSharp-fields, 1872, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 610, Microsoft.FSharp.PowerPack-methods, 3852, Microsoft.FSharp.PowerPack-fields, 913,  
-27/08/2009, 10:22:02.86, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1355,  Microsoft.FSharp-methods, 5759, ,  Microsoft.FSharp-fields, 1872, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 610, Microsoft.FSharp.PowerPack-methods, 3865, Microsoft.FSharp.PowerPack-fields, 913,  
-27/08/2009, 11:56:33.95, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1355,  Microsoft.FSharp-methods, 5759, ,  Microsoft.FSharp-fields, 1872, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 610, Microsoft.FSharp.PowerPack-methods, 3865, Microsoft.FSharp.PowerPack-fields, 913,  
-12/01/2010, 13:52:55.65, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1372,  Microsoft.FSharp-methods, 5722, ,  Microsoft.FSharp-fields, 1934, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 637, Microsoft.FSharp.PowerPack-methods, 3952, Microsoft.FSharp.PowerPack-fields, 939,  
-20/01/2010, 19:59:48.26, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1368,  Microsoft.FSharp-methods, 5716, ,  Microsoft.FSharp-fields, 1933,  
-21/04/2010, 21:42:44.95, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1376,  Microsoft.FSharp-methods, 5730, ,  Microsoft.FSharp-fields, 1945,  
-Sun 11/09/2014, 17:38:09.23, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 2504,  Microsoft.FSharp-methods, 8641, ,  Microsoft.FSharp-fields, 3827,  
diff --git a/tests/fsharp/optimize/tests_optimize.fs b/tests/fsharp/optimize/tests_optimize.fs
new file mode 100644
index 00000000000..a036a0909a3
--- /dev/null
+++ b/tests/fsharp/optimize/tests_optimize.fs
@@ -0,0 +1,277 @@
+module ``FSharp-Tests-Optimize``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open NUnitConf
+open PlatformHelpers
+open FSharpTestSuiteTypes
+
+let testContext = FSharpTestSuite.testContext
+
+module Analyses = 
+
+    let ``fsc >a 2>&1`` cfg dir = 
+        let ``exec >a 2>&1`` outFile p = 
+            Command.exec dir cfg.EnvironmentVariables { Output = OutputAndError(Overwrite(outFile)); Input = None; } p 
+            >> checkResult
+        Printf.ksprintf (fun flags sources out -> Commands.fsc (``exec >a 2>&1`` out) cfg.FSC flags sources)
+
+    let fsdiff cfg dir a b = processor {
+        let out = new ResizeArray()
+        let redirectOutputToFile path args =
+            log "%s %s" path args
+            let toLog = redirectToLog ()
+            Process.exec { RedirectOutput = Some (function null -> () | s -> out.Add(s)); RedirectError = Some toLog.Post; RedirectInput = None; } dir cfg.EnvironmentVariables path args
+        do! (Commands.fsdiff redirectOutputToFile cfg.FSDIFF a b) |> (fun _ -> Success ())
+        return out.ToArray() |> List.ofArray
+        }
+
+    []
+    let functionSizes () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let getfullpath = Commands.getfullpath dir
+        let ``fsc >a 2>&1`` = ``fsc >a 2>&1`` cfg dir  
+        let fsdiff = fsdiff cfg dir
+
+        let outFile = "sizes.FunctionSizes.output.test.txt"
+        let expectedFile = "sizes.FunctionSizes.output.test.bsl"
+
+        // echo == FunctionSizes
+        log "== FunctionSizes"
+        // "%FSC%" %fsc_flags% --nologo -O --test:FunctionSizes sizes.fs >sizes.FunctionSizes.output.test.txt 2>&1
+        do! ``fsc >a 2>&1`` "%s --nologo -O --test:FunctionSizes" cfg.fsc_flags ["sizes.fs"] outFile
+        // if NOT EXIST sizes.FunctionSizes.output.test.bsl COPY sizes.FunctionSizes.output.test.txt sizes.FunctionSizes.output.test.bsl
+        ignore "used only the first time when no expected output file exists, useless"
+        // %FSDIFF% sizes.FunctionSizes.output.test.txt sizes.FunctionSizes.output.test.bsl > sizes.FunctionSizes.output.test.diff
+        let! diff = fsdiff outFile expectedFile
+
+        do! match diff with
+            | [] -> Success
+            | l ->
+                NUnitConf.genericError (sprintf "'%s' and '%s' differ; %A" (getfullpath outFile) (getfullpath expectedFile) diff)
+        })
+
+    []
+    let totalSizes () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let ``fsc >a 2>&1`` = ``fsc >a 2>&1`` cfg dir  
+        let fsdiff = fsdiff cfg dir
+        let getfullpath = Commands.getfullpath dir
+
+        let outFile = "sizes.TotalSizes.output.test.txt"
+        let expectedFile = "sizes.TotalSizes.output.test.bsl"
+
+        // echo == TotalSizes
+        log "== TotalSizes"
+        // "%FSC%" %fsc_flags% --nologo -O --test:TotalSizes sizes.fs >sizes.TotalSizes.output.test.txt 2>&1
+        do! ``fsc >a 2>&1`` "%s --nologo -O --test:TotalSizes" cfg.fsc_flags ["sizes.fs"] outFile
+        // if NOT EXIST sizes.TotalSizes.output.test.bsl COPY sizes.TotalSizes.output.test.txt sizes.TotalSizes.output.test.bsl
+        ignore "used only the first time when no expected output file exists, useless"
+        // %FSDIFF% sizes.TotalSizes.output.test.txt sizes.TotalSizes.output.test.bsl > sizes.TotalSizes.output.test.diff
+        let! diff = fsdiff outFile expectedFile
+
+        do! match diff with
+            | [] -> Success
+            | l ->
+                NUnitConf.genericError (sprintf "'%s' and '%s' differ; %A" (getfullpath outFile) (getfullpath expectedFile) diff)
+        })
+
+    []
+    let hasEffect () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let ``fsc >a 2>&1`` = ``fsc >a 2>&1`` cfg dir  
+        let fsdiff = fsdiff cfg dir
+        let getfullpath = Commands.getfullpath dir
+
+        let outFile = "effects.HasEffect.output.test.txt"
+        let expectedFile = "effects.HasEffect.output.test.bsl"
+
+        // echo == HasEffect
+        log "== HasEffect"
+        // "%FSC%" %fsc_flags% --nologo -O --test:HasEffect effects.fs >effects.HasEffect.output.test.txt 2>&1
+        do! ``fsc >a 2>&1`` "%s --nologo -O --test:HasEffect" cfg.fsc_flags ["effects.fs"] outFile
+        // if NOT EXIST effects.HasEffect.output.test.bsl COPY effects.HasEffect.output.test.txt effects.HasEffect.output.test.bsl
+        ignore "used only the first time when no expected output file exists, useless"
+        // %FSDIFF% effects.HasEffect.output.test.txt effects.HasEffect.output.test.bsl > effects.HasEffect.output.test.diff
+        let! diff = fsdiff outFile expectedFile
+
+        do! match diff with
+            | [] -> Success
+            | l ->
+                NUnitConf.genericError (sprintf "'%s' and '%s' differ; %A" (getfullpath outFile) (getfullpath expectedFile) diff)
+        })
+
+    []
+    let noNeedToTailcall () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let ``fsc >a 2>&1`` = ``fsc >a 2>&1`` cfg dir  
+        let fsdiff = fsdiff cfg dir
+        let getfullpath = Commands.getfullpath dir
+
+        let outFile = "tailcalls.NoNeedToTailcall.output.test.txt"
+        let expectedFile = "tailcalls.NoNeedToTailcall.output.test.bsl"
+
+        // echo == NoNeedToTailcall
+        log "== NoNeedToTailcall"
+        // "%FSC%" %fsc_flags% --nologo -O --test:NoNeedToTailcall tailcalls.fs >tailcalls.NoNeedToTailcall.output.test.txt 2>&1
+        do! ``fsc >a 2>&1`` "%s --nologo -O --test:NoNeedToTailcall" cfg.fsc_flags ["tailcalls.fs"] outFile
+        // if NOT EXIST tailcalls.NoNeedToTailcall.output.test.bsl COPY tailcalls.NoNeedToTailcall.output.test.txt tailcalls.NoNeedToTailcall.output.test.bsl
+        ignore "used only the first time when no expected output file exists, useless"
+        // %FSDIFF% tailcalls.NoNeedToTailcall.output.test.txt tailcalls.NoNeedToTailcall.output.test.bsl > tailcalls.NoNeedToTailcall.output.test.diff
+        let! diff = fsdiff outFile expectedFile
+
+        do! match diff with
+            | [] -> Success
+            | l ->
+                NUnitConf.genericError (sprintf "'%s' and '%s' differ; %A" (getfullpath outFile) (getfullpath expectedFile) diff)
+        })
+
+
+
+
+module Inline = 
+
+    let build cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+
+
+        // "%FSC%" %fsc_flags% -g --optimize- --target:library -o:lib.dll lib.fs lib2.fs
+        do! fsc "%s -g --optimize- --target:library -o:lib.dll" cfg.fsc_flags ["lib.fs"; "lib2.fs"]
+
+        // "%FSC%" %fsc_flags% -g --optimize- --target:library -o:lib3.dll -r:lib.dll lib3.fs
+        do! fsc "%s -g --optimize- --target:library -o:lib3.dll -r:lib.dll " cfg.fsc_flags ["lib3.fs"]
+
+        // "%FSC%" %fsc_flags% -g --optimize- -o:test.exe test.fs -r:lib.dll -r:lib3.dll
+        do! fsc "%s -g --optimize- -o:test.exe -r:lib.dll -r:lib3.dll" cfg.fsc_flags ["test.fs "]
+
+        // "%FSC%" %fsc_flags% --optimize --target:library -o:lib--optimize.dll -g lib.fs  lib2.fs
+        do! fsc "%s --optimize --target:library -o:lib--optimize.dll -g" cfg.fsc_flags ["lib.fs"; "lib2.fs"]
+
+        // "%FSC%" %fsc_flags% --optimize --target:library -o:lib3--optimize.dll -r:lib--optimize.dll -g lib3.fs  
+        do! fsc "%s --optimize --target:library -o:lib3--optimize.dll -r:lib--optimize.dll -g" cfg.fsc_flags ["lib3.fs"]
+
+        // "%FSC%" %fsc_flags% --optimize -o:test--optimize.exe -g test.fs -r:lib--optimize.dll  -r:lib3--optimize.dll
+        do! fsc "%s --optimize -o:test--optimize.exe -g -r:lib--optimize.dll  -r:lib3--optimize.dll" cfg.fsc_flags ["test.fs "]
+
+        }
+
+    let run cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let ildasm = Printf.ksprintf (Commands.ildasm exec cfg.ILDASM)
+        let getfullpath = Commands.getfullpath dir
+
+        // if not exist "%ILDASM%" (
+        //    @echo '%ILDASM%' not found.
+        //     goto Error 
+        // )
+        ignore "already checked at suite startup"
+
+        // "%ILDASM%" /nobar /out=test.il test.exe
+        do! ildasm "/nobar /out=test.il" "test.exe"
+
+        // "%ILDASM%" /nobar /out=test--optimize.il test--optimize.exe
+        do! ildasm "/nobar /out=test--optimize.il" "test--optimize.exe"
+
+        // type test--optimize.il | find /C ".locals init" > count--optimize
+        let ``test--optimize.il`` = 
+            File.ReadLines (getfullpath "test--optimize.il")
+            |> Seq.filter (fun line -> line.Contains(".locals init"))
+            |> List.ofSeq
+
+        // for /f %%c IN (count--optimize) do (if NOT "%%c"=="0" (
+        do! match ``test--optimize.il`` with
+            | [] -> Success
+            | lines -> 
+                // echo Error: optimizations not removed.  Relevant lines from IL file follow:
+                // type test--optimize.il | find ".locals init"
+                // goto SetError)
+                NUnitConf.genericError (sprintf "Error: optimizations not removed.  Relevant lines from IL file follow: %A" lines)
+        // )
+
+        // type test.il | find /C ".locals init" > count
+        // for /f %%c IN (count) do (
+        //    set NUMELIM=%%c
+        // )
+        let numElim = 
+            File.ReadLines (getfullpath "test.il")
+            |> Seq.filter (fun line -> line.Contains(".locals init"))
+            |> Seq.length
+
+        log "Ran ok - optimizations removed %d textual occurrences of optimizable identifiers from target IL" numElim 
+
+        }
+
+    []
+    let ``inline`` () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+module Stats = 
+
+    []
+    let stats () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let ildasm = Commands.ildasm exec cfg.ILDASM
+        let getfullpath = Commands.getfullpath dir
+
+        // if not exist "%ILDASM%" (goto Error)
+        ignore "already checked at suite startup"
+
+        // where sd.exe 2> NUL
+        // if not ERRORLEVEL 1 ( sd edit stats.txt ) else (attrib -r stats.txt )
+        ignore "dont know"
+
+        // "%ILDASM%" /nobar /out=FSharp.Core.il "%FSCOREDLLPATH%"
+        do! ildasm "/nobar /out=FSharp.Core.il" cfg.FSCOREDLLPATH
+
+        let ``FSharp.Core.il`` = File.ReadLines(getfullpath "FSharp.Core.il") |> Seq.toList
+
+        let contains text (s: string) = if s.Contains(text) then 1 else 0
+
+        // echo Counting TypeFuncs...
+        // type FSharp.Core.il | find /C "extends Microsoft.FSharp.TypeFunc"        > count-Microsoft.FSharp-TypeFunc
+        let typeFunc = ``FSharp.Core.il`` |> List.sumBy (contains "extends Microsoft.FSharp.TypeFunc")
+        // echo Counting classes...
+        // type FSharp.Core.il | find /C ".class"                                   > count-Microsoft.FSharp-.class
+        let classes = ``FSharp.Core.il`` |> List.sumBy (contains ".class")
+        // echo Counting methods...
+        // type FSharp.Core.il | find /C ".method"                                  > count-Microsoft.FSharp-.method
+        let methods = ``FSharp.Core.il`` |> List.sumBy (contains ".method")
+        // echo Counting fields...
+        // type FSharp.Core.il | find /C ".field"                                   > count-Microsoft.FSharp-.field
+        let fields = ``FSharp.Core.il`` |> List.sumBy (contains ".field")
+
+        // for /f %%c IN (count-Microsoft.FSharp-TypeFunc) do (
+        //  for /f %%d IN (count-Microsoft.FSharp-.class) do (
+        //   for /f %%e IN (count-Microsoft.FSharp-.method) do (
+        //    for /f %%f IN (count-Microsoft.FSharp-.field) do (
+        //          echo %date%, %time%, Microsoft.FSharp-TypeFunc, %%c, Microsoft.FSharp-classes, %%d,  Microsoft.FSharp-methods, %%e, ,  Microsoft.FSharp-fields, %%f,  >> stats.txt
+        let date = DateTime.Today.ToString("dd/MM/yyyy") // 23/11/2006
+        let time = DateTime.Now.ToString("HH:mm:ss.ff") // 16:03:23.40
+        let m = sprintf "%s, %s, Microsoft.FSharp-TypeFunc, %d, Microsoft.FSharp-classes, %d,  Microsoft.FSharp-methods, %d, ,  Microsoft.FSharp-fields, %d,  " date time typeFunc classes methods fields
+
+        log "now:"
+        log "%s" m
+
+        //    )
+        //   )
+        //  )
+        // )
+                
+        })
diff --git a/tests/fsharp/perf/.gitignore b/tests/fsharp/perf/.gitignore
new file mode 100644
index 00000000000..0255825e78f
--- /dev/null
+++ b/tests/fsharp/perf/.gitignore
@@ -0,0 +1,4 @@
+
+graph/tmptest*
+
+nbody/tmptest*
diff --git a/tests/fsharp/perf/tests_perf.fs b/tests/fsharp/perf/tests_perf.fs
new file mode 100644
index 00000000000..1c57b24bb93
--- /dev/null
+++ b/tests/fsharp/perf/tests_perf.fs
@@ -0,0 +1,35 @@
+module ``FSharp-Tests-Perf``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open FSharpTestSuiteTypes
+open NUnitConf
+open PlatformHelpers
+
+let testContext = FSharpTestSuite.testContext
+
+
+module Graph = 
+
+    []
+    let graph p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+module Nbody = 
+
+    []
+    let nbody p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
diff --git a/tests/fsharp/regression/.gitignore b/tests/fsharp/regression/.gitignore
new file mode 100644
index 00000000000..85ae0bfc163
--- /dev/null
+++ b/tests/fsharp/regression/.gitignore
@@ -0,0 +1,22 @@
+
+26/tmptest*
+
+321/tmptest*
+
+655/pack.dll
+656/pack.exe
+
+83/tmptest*
+
+84/tmptest*
+
+85/petshop.dll
+
+86/tmptest*
+
+ml-1/dbwlib2.dll
+ml-1/dbwlib2--optimize.dll
+ml-1/main.exe
+ml-1/main--optimize.exe
+
+tuple-bug-1/tmptest*
diff --git a/tests/fsharp/regression/tests_regression.fs b/tests/fsharp/regression/tests_regression.fs
new file mode 100644
index 00000000000..90f65f4084f
--- /dev/null
+++ b/tests/fsharp/regression/tests_regression.fs
@@ -0,0 +1,226 @@
+module ``FSharp-Tests-Regression``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open FSharpTestSuiteTypes
+open NUnitConf
+open PlatformHelpers
+
+let testContext = FSharpTestSuite.testContext
+
+
+module ``26`` = 
+
+    []
+    let ``26`` p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+module ``321`` = 
+
+    []
+    let ``321`` p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+module ``655`` = 
+
+    let build cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+
+        // "%FSC%" %fsc_flags% -a -o:pack.dll xlibC.ml
+        do! fsc "%s -a -o:pack.dll" cfg.fsc_flags ["xlibC.ml"]
+
+        // "%PEVERIFY%" pack.dll
+        do! peverify "pack.dll"
+
+        // "%FSC%" %fsc_flags%    -o:test.exe -r:pack.dll main.fs
+        do! fsc "%s    -o:test.exe -r:pack.dll" cfg.fsc_flags ["main.fs"]
+
+        // "%PEVERIFY%" test.exe
+        do! peverify "test.exe"
+
+        }
+
+    let run cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fileguard = (Commands.getfullpath dir) >> FileGuard.create
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = fileguard "test.ok"
+
+        // %CLIX% test.exe
+        do! exec ("."/"test.exe") ""
+
+        // if NOT EXIST test.ok goto SetError
+        do! testOkFile |> NUnitConf.checkGuardExists
+        }
+
+    []
+    let ``655`` () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+
+module ``656`` = 
+
+    let build cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+
+        // "%FSC%" %fsc_flags% -o:pack.exe misc.fs mathhelper.fs filehelper.fs formshelper.fs plot.fs traj.fs playerrecord.fs trackedplayers.fs form.fs
+        do! fsc "%s -o:pack.exe" cfg.fsc_flags ["misc.fs mathhelper.fs filehelper.fs formshelper.fs plot.fs traj.fs playerrecord.fs trackedplayers.fs form.fs"]
+
+        // "%PEVERIFY%" pack.exe
+        do! peverify "pack.exe"
+        }
+
+    let run cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fileguard = (Commands.getfullpath dir) >> FileGuard.create
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = fileguard "test.ok"
+
+        // %CLIX% pack.exe
+        do! exec ("."/"pack.exe") ""
+
+        // if NOT EXIST test.ok goto SetError
+        do! testOkFile |> NUnitConf.checkGuardExists
+        }
+
+    []
+    let ``656`` () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+
+
+module ``83`` = 
+
+    []
+    let ``83`` p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        // if "%CLR_SUPPORTS_WINFORMS%"=="false" ( goto Skip)
+        do! match cfg.EnvironmentVariables |> Map.tryFind "CLR_SUPPORTS_WINFORMS" |> Option.map (fun s -> s.ToLower()) with
+            | Some "false" -> NUnitConf.skip "env var CLR_SUPPORTS_WINFORMS is false"
+            | Some _ | None -> Success
+           
+        // call %~d0%~p0..\..\single-test-build.bat
+        do! SingleTestBuild.singleTestBuild cfg dir p
+
+        // if "%CLR_SUPPORTS_WINFORMS%"=="false" ( goto Skip )
+        ignore "already skipped if CLR_SUPPORTS_WINFORMS == false"
+
+        // if "%COMPLUS_Version%"=="v1.0.3705" ( goto Skip )
+        do! match cfg.EnvironmentVariables |> Map.tryFind "COMPLUS_Version"  |> Option.map (fun s -> s.ToLower()) with
+            | Some "v1.0.3705" -> NUnitConf.skip "env var COMPLUS_Version is v1.0.3705"
+            | Some _ | None -> Success
+
+        // call %~d0%~p0..\..\single-test-run.bat
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+
+module ``84`` = 
+
+    []
+    let ``84`` p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+module ``85`` = 
+
+    let build cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+
+        // if "%CLR_SUPPORTS_GENERICS%"=="false" ( goto Skip)
+        do! match cfg.EnvironmentVariables |> Map.tryFind "CLR_SUPPORTS_GENERICS" |> Option.map (fun s -> s.ToLower()) with
+            | Some "false" -> NUnitConf.skip "env var CLR_SUPPORTS_GENERICS is false"
+            | Some _ | None -> Success
+
+        // if "%CLR_SUPPORTS_SYSTEM_WEB%"=="false" ( goto Skip)
+        do! match cfg.EnvironmentVariables |> Map.tryFind "CLR_SUPPORTS_SYSTEM_WEB" |> Option.map (fun s -> s.ToLower()) with
+            | Some "false" -> NUnitConf.skip "env var CLR_SUPPORTS_SYSTEM_WEB is false"
+            | Some _ | None -> Success
+
+        // "%FSC%" %fsc_flags% -r:Category.dll -a -o:petshop.dll Category.ml
+        do! fsc "%s -r:Category.dll -a -o:petshop.dll" cfg.fsc_flags ["Category.ml"]
+
+        // "%PEVERIFY%" petshop.dll
+        do! peverify "petshop.dll"
+
+        }
+
+    []
+    let ``85`` () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        // REM build.bat produces only dll's. Nothing to run
+                
+        })
+
+
+module ``86`` = 
+
+    []
+    let ``86`` p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+module ``Tuple-bug-1`` = 
+
+    []
+    let ``tuple-bug-1`` p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
diff --git a/tests/fsharp/single-neg-test.bat b/tests/fsharp/single-neg-test.bat
index f097864d48e..77a8680a384 100644
--- a/tests/fsharp/single-neg-test.bat
+++ b/tests/fsharp/single-neg-test.bat
@@ -40,9 +40,23 @@ if exist "%testname%b.ml" (set sources=%sources% %testname%b.ml)
 if exist "%testname%b.fs" (set sources=%sources% %testname%b.fs)
 if exist "helloWorldProvider.dll" (set sources=%sources% -r:helloWorldProvider.dll)
 
+if exist "%testname%-pre.fs" (
+    echo set sources=%sources% -r:%testname%-pre.dll
+    set sources=%sources% -r:%testname%-pre.dll
+)
+
 REM check negative tests for bootstrapped fsc.exe due to line-ending differences
 if "%FSC:fscp=X%" == "%FSC%" ( 
 
+    if exist "%testname%-pre.fs" (
+        echo "sources=%sources%"
+	    "%FSC%" %fsc_flags% -a -o:%testname%-pre.dll  "%testname%-pre.fs" 
+        @if ERRORLEVEL 1 (
+            set ERRORMSG=%ERRORMSG% FSC failed for precursor library code for  %sources%;
+            goto SetError
+		)
+    )
+
     echo Negative typechecker testing: %testname%
     echo "%FSC%" %fsc_flags% --vserrors --warnaserror --nologo --maxerrors:10000 -a -o:%testname%.dll  %sources%
     "%FSC%" %fsc_flags% --vserrors --warnaserror --nologo --maxerrors:10000 -a -o:%testname%.dll  %sources% 2> %testname%.err
diff --git a/tests/fsharp/single-neg-test.fs b/tests/fsharp/single-neg-test.fs
new file mode 100644
index 00000000000..b7ac443fb6c
--- /dev/null
+++ b/tests/fsharp/single-neg-test.fs
@@ -0,0 +1,219 @@
+module SingleNegTest
+
+open System
+open System.IO
+open NUnit.Framework
+
+open PlatformHelpers
+open NUnitConf
+open FSharpTestSuiteTypes
+
+let private singleNegTest' (cfg: TestConfig) workDir testname = processor {
+
+    // call %~d0%~p0..\config.bat
+    ignore "from arguments"
+
+    // if errorlevel 1 (
+    //     set ERRORMSG=%ERRORMSG% config.bat failed;
+    //     goto :ERROR
+    // )
+    ignore "already checked"
+
+    let exec p = Command.exec workDir cfg.EnvironmentVariables { Output = Inherit; Input = None } p >> checkResult
+    let fsdiff = Commands.fsdiff exec cfg.FSDIFF
+    let envOrFail key =
+        cfg.EnvironmentVariables 
+        |> Map.tryFind key 
+        |> function Some x -> (fun () -> Success x) | None -> NUnitConf.genericError (sprintf "environment variable '%s' required " key)
+    let fullpath = Commands.getfullpath workDir
+    let fileExists = fullpath >> Commands.fileExists workDir >> Option.isSome
+    let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+    let fsc_flags = cfg.fsc_flags
+
+    // if not exist "%FSC%" (
+    //   set ERRORMSG=Could not find FSC at path "%FSC%"
+    //   goto :ERROR
+    // )
+    ignore "already checked"
+
+    // set testname=%1
+    ignore "from arguments"
+
+    // REM == Set baseline (fsc vs vs, in case the vs baseline exists)
+    let BSLFILE = 
+        // IF     EXIST %testname%.vsbsl (set BSLFILE=%testname%.vsbsl)
+        // IF NOT EXIST %testname%.vsbsl (set BSLFILE=%testname%.bsl)
+        if (sprintf "%s.vsbsl" testname) |> fileExists 
+        then sprintf "%s.vsbsl" testname
+        else sprintf "%s.bsl" testname
+
+    // %FSDIFF% %~f0 %~f0
+    // @if ERRORLEVEL 1 (
+    //     set ERRORMSG=%ERRORMSG% FSDIFF likely not found;
+    //     goto Error
+    // )
+
+    //REVIEW move to suite smoke tests like fsc/fsi?
+    do! fsdiff BSLFILE BSLFILE
+
+    // set sources=
+    // if exist "%testname%.mli" (set sources=%sources% %testname%.mli)
+    // if exist "%testname%.fsi" (set sources=%sources% %testname%.fsi)
+    // if exist "%testname%.ml" (set sources=%sources% %testname%.ml)
+    // if exist "%testname%.fs" (set sources=%sources% %testname%.fs)
+    // if exist "%testname%.fsx" (set sources=%sources% %testname%.fsx)
+    // if exist "%testname%a.mli" (set sources=%sources% %testname%a.mli)
+    // if exist "%testname%a.fsi" (set sources=%sources% %testname%a.fsi)
+    // if exist "%testname%a.ml" (set sources=%sources% %testname%a.ml)
+    // if exist "%testname%a.fs" (set sources=%sources% %testname%a.fs)
+    // if exist "%testname%b.mli" (set sources=%sources% %testname%b.mli)
+    // if exist "%testname%b.fsi" (set sources=%sources% %testname%b.fsi)
+    // if exist "%testname%b.ml" (set sources=%sources% %testname%b.ml)
+    // if exist "%testname%b.fs" (set sources=%sources% %testname%b.fs)
+    let sources = [
+        let src = 
+            [ testname + ".mli"; testname + ".fsi"; testname + ".ml"; testname + ".fs"; testname +  ".fsx"; 
+              testname + "a.mli"; testname + "a.fsi"; testname + "a.ml"; testname + "a.fs";
+              testname + "b.mli"; testname + "b.fsi"; testname + "b.ml"; testname + "b.fs" ]
+
+        yield! src |> List.filter fileExists
+    
+        // if exist "helloWorldProvider.dll" (set sources=%sources% -r:helloWorldProvider.dll)
+        if fileExists "helloWorldProvider.dll"
+        then yield "-r:helloWorldProvider.dll"
+
+        // if exist "%testname%-pre.fs" (
+        //     set sources=%sources% -r:%testname%-pre.dll
+        // )
+        if fileExists (testname + "-pre.fs")
+        then yield (sprintf "-r:%s-pre.dll" testname)
+
+        ]
+
+    // REM check negative tests for bootstrapped fsc.exe due to line-ending differences
+    // if "%FSC:fscp=X%" == "%FSC%" ( 
+    do! if cfg.FSC.Contains("fscp")
+        then NUnitConf.skip "bootstrapped fsc.exe due to line-ending differences"
+        else Success
+
+    // if exist "%testname%-pre.fs" (
+    do! if fileExists (testname + "-pre.fs")
+    //     "%FSC%" %fsc_flags% -a -o:%testname%-pre.dll  "%testname%-pre.fs" 
+        then fsc "%s -a -o:%s-pre.dll" fsc_flags testname [testname + "-pre.fs"] 
+        else Success ()
+    //     @if ERRORLEVEL 1 (
+    //         set ERRORMSG=%ERRORMSG% FSC failed for precursor library code for  %sources%;
+    //         goto SetError
+    // 	)
+    // )
+
+    // echo Negative typechecker testing: %testname%
+    log "Negative typechecker testing: %s" testname
+
+    let ``fail fsc 2> a`` = 
+        // "%FSC%" %fsc_flags% --vserrors --warnaserror --nologo --maxerrors:10000 -a -o:%testname%.dll  %sources% 2> %testname%.err
+        // @if NOT ERRORLEVEL 1 (
+        //     set ERRORMSG=%ERRORMSG% FSC passed unexpectedly for  %sources%;
+        //     goto SetError
+        // )
+        let ``exec 2>`` errPath = Command.exec workDir cfg.EnvironmentVariables { Output = Error(Overwrite(errPath)); Input = None }
+        let checkErrorLevel1 = function 
+            | CmdResult.ErrorLevel 1 -> Success
+            | CmdResult.Success | CmdResult.ErrorLevel _ -> NUnitConf.genericError (sprintf "FSC passed unexpectedly for  %A" sources)
+
+        Printf.ksprintf (fun flags sources errPath -> Commands.fsc (``exec 2>`` errPath) cfg.FSC flags sources |> checkErrorLevel1)
+        
+    let fsdiff a b = processor {
+        let out = new ResizeArray()
+        let redirectOutputToFile path args =
+            log "%s %s" path args
+            let toLog = redirectToLog ()
+            Process.exec { RedirectOutput = Some (function null -> () | s -> out.Add(s)); RedirectError = Some toLog.Post; RedirectInput = None; } workDir cfg.EnvironmentVariables path args
+        do! (Commands.fsdiff redirectOutputToFile cfg.FSDIFF a b) |> checkResult
+        return out.ToArray() |> List.ofArray
+        }
+
+    // "%FSC%" %fsc_flags% --vserrors --warnaserror --nologo --maxerrors:10000 -a -o:%testname%.dll  %sources% 2> %testname%.err
+    do! ``fail fsc 2> a`` """%s --vserrors --warnaserror --nologo --maxerrors:10000 -a -o:%s.dll""" fsc_flags testname sources (sprintf "%s.err" testname)
+
+    // %FSDIFF% %testname%.err %testname%.bsl > %testname%.diff
+    let! testnameDiff = fsdiff (sprintf "%s.err" testname) (sprintf "%s.bsl" testname)
+
+    // for /f %%c IN (%testname%.diff) do (
+    do! match testnameDiff with
+        | [] -> Success
+        | l ->
+            // echo ***** %testname%.err %testname%.bsl differed: a bug or baseline may neeed updating
+            log "***** %s.err %s.bsl differed: a bug or baseline may neeed updating" testname testname
+            // set ERRORMSG=%ERRORMSG% %testname%.err %testname%.bsl differ;
+            NUnitConf.genericError (sprintf "%s.err %s.bsl differ; %A" testname testname l)
+
+    // echo Good, output %testname%.err matched %testname%.bsl
+    log "Good, output %s.err matched %s.bsl" testname testname
+
+    // "%FSC%" %fsc_flags% --test:ContinueAfterParseFailure --vserrors --warnaserror --nologo --maxerrors:10000 -a -o:%testname%.dll  %sources% 2> %testname%.vserr
+    do! ``fail fsc 2> a`` "%s --test:ContinueAfterParseFailure --vserrors --warnaserror --nologo --maxerrors:10000 -a -o:%s.dll" fsc_flags testname sources (sprintf "%s.vserr" testname)
+    // @if NOT ERRORLEVEL 1 (
+    //     set ERRORMSG=%ERRORMSG% FSC passed unexpectedly for  %sources%;
+    //     goto SetError
+    // )
+
+    // %FSDIFF% %testname%.vserr %BSLFILE% > %testname%.vsdiff
+    let! testnameDiff = fsdiff (sprintf "%s.vserr" testname) BSLFILE
+
+    // for /f %%c IN (%testname%.vsdiff) do (
+    do! match testnameDiff with
+        | [] -> Success
+        | l ->
+            // echo ***** %testname%.vserr %BSLFILE% differed: a bug or baseline may neeed updating
+            log "***** %s.vserr %s differed: a bug or baseline may neeed updating" testname BSLFILE
+            // set ERRORMSG=%ERRORMSG% %testname%.vserr %BSLFILE% differ;
+            NUnitConf.genericError (sprintf "%s.vserr %s differ; %A" testname BSLFILE l)
+
+    // echo Good, output %testname%.vserr matched %BSLFILE%
+    log "Good, output %s.vserr matched %s" testname BSLFILE
+    // )
+    }
+
+let singleNegTest =
+
+    // :Ok
+    let doneOK x =
+        // echo Ran fsharp %~f0 ok.
+        log "Ran fsharp %%~f0 ok"
+        // endlocal
+        // exit /b 0
+        // goto :EOF
+        Success x
+
+    // :Skip
+    let doneSkipped workDir msg x =
+        // echo Skipped %~f0
+        log "Skipped neg run '%s' reason: %s" workDir msg
+        // endlocal
+        // exit /b 0
+        // goto :EOF
+        Success x
+
+    // :Error
+    let doneError err msg =
+        // echo %ERRORMSG%
+        log "%s" msg
+        // exit /b %ERRORLEVEL% 
+        // goto :EOF
+        Failure (err)
+
+    // :SETERROR
+    // set NonexistentErrorLevel 2> nul
+    // goto Error
+    // goto :EOF
+
+    let flow cfg workDir testname () =    
+        singleNegTest' cfg workDir testname
+        |> Attempt.Run
+        |> function
+           | Success () -> doneOK ()
+           | Failure (Skipped msg) -> doneSkipped workDir msg ()
+           | Failure (GenericError msg) -> doneError (GenericError msg) msg
+           | Failure (ProcessExecError (err,msg)) -> doneError (ProcessExecError(err,msg)) msg
+    flow
diff --git a/tests/fsharp/single-test-build.fs b/tests/fsharp/single-test-build.fs
new file mode 100644
index 00000000000..1a158f3e9df
--- /dev/null
+++ b/tests/fsharp/single-test-build.fs
@@ -0,0 +1,404 @@
+module SingleTestBuild
+
+open System
+open System.IO
+open System.Diagnostics
+open NUnit.Framework
+
+open PlatformHelpers
+open NUnitConf
+open FSharpTestSuiteTypes
+
+
+let singleTestBuild cfg testDir =
+
+    let fileExists = Commands.fileExists testDir >> Option.isSome
+    let del = Commands.rm testDir
+
+    //if EXIST build.ok DEL /f /q build.ok
+    let buildOkPath = testDir / "build.ok"
+    do if fileExists "build.ok" then del "build.ok"
+
+    //call %~d0%~p0..\config.bat
+    ignore "param"
+
+    //if NOT "%FSC:NOTAVAIL=X%" == "%FSC%" (
+    //  goto Skip
+    //)
+    ignore "already checked fsc/fsi exists"
+
+    //set source1=
+    //if exist test.ml (set source1=test.ml)
+    //if exist test.fs (set source1=test.fs)
+    let source1 = 
+        ["test.ml"; "test.fs"] 
+        |> List.rev
+        |> List.tryFind fileExists
+
+    //set sources=
+    //if exist testlib.fsi (set sources=%sources% testlib.fsi)
+    //if exist testlib.fs (set sources=%sources% testlib.fs)
+    //if exist test.mli (set sources=%sources% test.mli)
+    //if exist test.ml (set sources=%sources% test.ml)
+    //if exist test.fsi (set sources=%sources% test.fsi)
+    //if exist test.fs (set sources=%sources% test.fs)
+    //if exist test2.mli (set sources=%sources% test2.mli)
+    //if exist test2.ml (set sources=%sources% test2.ml)
+    //if exist test2.fsi (set sources=%sources% test2.fsi)
+    //if exist test2.fs (set sources=%sources% test2.fs)
+    //if exist test.fsx (set sources=%sources% test.fsx)
+    //if exist test2.fsx (set sources=%sources% test2.fsx)
+    let sources =
+        ["testlib.fsi";"testlib.fs";"test.mli";"test.ml";"test.fsi";"test.fs";"test2.mli";"test2.ml";"test2.fsi";"test2.fs";"test.fsx";"test2.fsx"]
+        |> List.filter fileExists
+
+    //set sourceshw=
+    //if exist test-hw.mli (set sourceshw=%sourceshw% test-hw.mli)
+    //if exist test-hw.ml (set sourceshw=%sourceshw% test-hw.ml)
+    //if exist test-hw.fsx (set sourceshw=%sourceshw% test-hw.fsx)
+    //if exist test2-hw.mli (set sourceshw=%sourceshw% test2-hw.mli)
+    //if exist test2-hw.ml (set sourceshw=%sourceshw% test2-hw.ml)
+    //if exist test2-hw.fsx (set sourceshw=%sourceshw% test2-hw.fsx)
+    let sourceshw =
+        ["test-hw.mli";"test-hw.ml";"test-hw.fsx";"test2-hw.mli";"test2-hw.ml";"test2-hw.fsx"]
+        |> List.filter fileExists
+
+    //rem to run the 64 bit version of the code set FSC_BASIC_64=FSC_BASIC_64
+    //set PERMUTATIONS_LIST=FSI_FILE FSI_STDIN FSI_STDIN_OPT FSI_STDIN_GUI FSC_BASIC %FSC_BASIC_64% FSC_HW FSC_O3 GENERATED_SIGNATURE EMPTY_SIGNATURE EMPTY_SIGNATURE_OPT FSC_OPT_MINUS_DEBUG FSC_OPT_PLUS_DEBUG FRENCH SPANISH AS_DLL WRAPPER_NAMESPACE WRAPPER_NAMESPACE_OPT
+
+    //if "%REDUCED_RUNTIME%"=="1" (
+    //    echo REDUCED_RUNTIME set
+    //    
+    //    if not defined PERMUTATIONS (
+    //        powershell.exe %PSH_FLAGS% -command "&{& '%~d0%~p0\PickPermutations.ps1' '%cd%' '%FSC%' '%PERMUTATIONS_LIST%'}" > _perm.txt
+    //        if errorlevel 1 (
+    //            set ERRORMSG=%ERRORMSG% PickPermutations.ps1 failed;
+    //            goto :ERROR
+    //        )
+    //        set /p PERMUTATIONS=<_perm.txt
+    //    )
+    //    
+    //    powershell.exe %PSH_FLAGS% -command "&{& '%~d0%~p0\DecidePEVerify.ps1' '%cd%' '%FSC%'}"
+    //    if errorlevel 1 (
+    //        set ERRORMSG=%ERRORMSG% DecidePEVerify.ps1 failed;
+    //        goto :ERROR
+    //    )
+    //)
+
+    //if not defined PERMUTATIONS (
+    //    echo "PERMUTATIONS not defined. Building everything."
+    //    set PERMUTATIONS=%PERMUTATIONS_LIST%
+    //)
+
+    //for %%A in (%PERMUTATIONS%) do (
+    //    call :%%A
+    //    IF ERRORLEVEL 1 EXIT /B 1
+    //)
+    ignore "permutations useless because build type is an input"
+
+    let exec p = Command.exec testDir cfg.EnvironmentVariables { Output = Inherit; Input = None } p >> checkResult
+
+    let echo_tofile = Commands.echo_tofile testDir
+    let copy_y f = Commands.copy_y testDir f >> checkResult
+    let type_append_tofile = Commands.type_append_tofile testDir
+    let fsc = Printf.ksprintf (fun flags -> Commands.fsc exec cfg.FSC flags)
+    let fsc_flags = cfg.fsc_flags
+    let peverify = Commands.peverify exec cfg.PEVERIFY ""
+    let ``echo._tofile`` = Commands.``echo._tofile`` testDir
+
+    //:Ok
+    let doneOk x =
+        //echo Built fsharp %~f0 ok.
+        log "Built fsharp %s ok." testDir
+        //echo. > build.ok
+        ``echo._tofile`` " " "build.ok"
+        //endlocal
+        //exit /b 0
+        Success x
+
+    //:Skip
+    let doneSkipped msg x =
+        //echo Skipped %~f0
+        log "Skipped build '%s' reason: %s" testDir msg
+        //endlocal
+        ``echo._tofile`` " " "build.ok"
+        //exit /b 0
+        Success x
+
+    //:Error
+    let doneError err msg =
+        //echo Test Script Failed (perhaps test did not emit test.ok signal file?)
+        log "%s" msg
+        //endlocal
+        //exit /b %ERRORLEVEL%
+        Failure (err)
+
+    let genericErrorMessage = "Test Script Failed (perhaps test did not emit test.ok signal file?)"
+
+    //:SETERROR
+    //set NonexistentErrorLevel 2> nul
+    //goto Error
+
+    let skipIfExists file = processor {
+        if fileExists file
+        then return! NUnitConf.skip (sprintf "file '%s' found" file)
+        }
+
+    let skipIfNotExists file = processor {
+        if not (fileExists file)
+        then return! NUnitConf.skip (sprintf "file '%s' not found" file)
+        }
+    
+    /// 
+    /// if NOT EXIST dont.run.peverify (    
+    ///    "%PEVERIFY%" test.exe            
+    ///    @if ERRORLEVEL 1 goto Error      
+    /// )                                   
+    /// 
+    let doPeverify cmd = processor {
+        do! skipIfExists "dont.run.peverify"
+        
+        do! peverify cmd
+        }
+
+    let doNOOP () = processor {
+        //@echo No build action to take for this permutation
+        log "No build action to take for this permutation"
+        }
+
+    let doBasic () = processor { 
+        // FSC %fsc_flags% --define:BASIC_TEST -o:test.exe -g %sources%
+        //if ERRORLEVEL 1 goto Error
+        do! fsc "%s --define:BASIC_TEST -o:test.exe -g" fsc_flags sources 
+
+        //if NOT EXIST dont.run.peverify (
+        //    "%PEVERIFY%" test.exe
+        //    @if ERRORLEVEL 1 goto Error
+        //)
+        do! doPeverify "test.exe"
+        }
+
+    let doBasic64 () = processor {
+        // "%FSC%" %fsc_flags% --define:BASIC_TEST --platform:x64 -o:testX64.exe -g %sources%
+        do! fsc "%s --define:BASIC_TEST --platform:x64 -o:testX64.exe -g" fsc_flags sources
+
+        // if NOT EXIST dont.run.peverify (
+        //     "%PEVERIFY%" testX64.exe
+        // )
+        do! doPeverify "testX64.exe"
+        }
+
+    let doFscHW () = processor {
+        // if exist test-hw.* (
+        if Directory.EnumerateFiles(testDir, "test-hw.*") |> Seq.exists fileExists then
+            // "%FSC%" %fsc_flags% -o:test-hw.exe -g %sourceshw%
+            do! fsc "%s -o:test-hw.exe -g" fsc_flags sourceshw
+
+            // if NOT EXIST dont.run.peverify (
+            //   "%PEVERIFY%" test-hw.exe
+            // )
+            do! doPeverify "test-hw.exe" 
+        //)
+        else
+            do! NUnitConf.skip (sprintf "file '%s' not found" "test-hw.*")
+        }
+
+    let doFscO3 () = processor {
+        //"%FSC%" %fsc_flags% --optimize --define:PERF -o:test--optimize.exe -g %sources%
+        do! fsc "%s --optimize --define:PERF -o:test--optimize.exe -g" fsc_flags sources 
+        //if NOT EXIST dont.run.peverify (
+        //    "%PEVERIFY%" test--optimize.exe
+        //)
+        do! doPeverify "test--optimize.exe"
+        }
+
+    let doGeneratedSignature () = processor {
+        //if NOT EXIST dont.use.generated.signature (
+        do! skipIfExists "dont.use.generated.signature"
+
+        // if exist test.ml (
+        do! skipIfNotExists "test.ml"
+
+        //  echo Generating interface file...
+        log "Generating interface file..."
+        //  copy /y %source1% tmptest.ml
+        do! source1 |> Option.map (fun from -> copy_y from "tmptest.ml")
+        //  REM NOTE: use --generate-interface-file since results may be in Unicode
+        //  "%FSC%" %fsc_flags% --sig:tmptest.mli tmptest.ml
+        do! fsc "%s --sig:tmptest.mli" fsc_flags ["tmptest.ml"]
+
+        //  echo Compiling against generated interface file...
+        log "Compiling against generated interface file..."
+        //  "%FSC%" %fsc_flags% -o:tmptest1.exe tmptest.mli tmptest.ml
+        do! fsc "%s -o:tmptest1.exe" fsc_flags ["tmptest.mli";"tmptest.ml"]
+
+        //  if NOT EXIST dont.run.peverify (
+        //    "%PEVERIFY%" tmptest1.exe
+        //  )
+        do! doPeverify "tmptest1.exe"
+        }
+
+    let doEmptySignature () = processor {
+        //if NOT EXIST dont.use.empty.signature (
+        do! skipIfExists "dont.use.empty.signature"
+
+        // if exist test.ml ( 
+        do! skipIfNotExists "test.ml"
+
+        // echo Compiling against empty interface file...
+        log "Compiling against empty interface file..."
+        // echo // empty file  > tmptest2.mli
+        echo_tofile "// empty file  " "tmptest2.mli"
+        // copy /y %source1% tmptest2.ml
+        do! source1 |> Option.map (fun from -> copy_y from "tmptest2.ml")
+        // "%FSC%" %fsc_flags% --define:COMPILING_WITH_EMPTY_SIGNATURE -o:tmptest2.exe tmptest2.mli tmptest2.ml
+        do! fsc "%s --define:COMPILING_WITH_EMPTY_SIGNATURE -o:tmptest2.exe" fsc_flags ["tmptest2.mli";"tmptest2.ml"]
+
+        // if NOT EXIST dont.run.peverify (
+        //     "%PEVERIFY%" tmptest2.exe
+        // )
+        do! doPeverify "tmptest2.exe"
+        }
+
+
+    let doEmptySignatureOpt () = processor {
+        //if NOT EXIST dont.use.empty.signature (
+        do! skipIfExists "dont.use.empty.signature"
+
+        // if exist test.ml ( 
+        do! skipIfNotExists "test.ml"
+
+        // echo Compiling against empty interface file...
+        log "Compiling against empty interface file..."
+        // echo // empty file  > tmptest2.mli
+        echo_tofile "// empty file  " "tmptest2.mli"
+        // copy /y %source1% tmptest2.ml
+        do! source1 |> Option.map (fun from -> copy_y from "tmptest2.ml")
+        // "%FSC%" %fsc_flags% --define:COMPILING_WITH_EMPTY_SIGNATURE --optimize -o:tmptest2--optimize.exe tmptest2.mli tmptest2.ml
+        do! fsc "%s --define:COMPILING_WITH_EMPTY_SIGNATURE --optimize -o:tmptest2--optimize.exe" fsc_flags ["tmptest2.mli";"tmptest2.ml"]
+
+        // if NOT EXIST dont.run.peverify (
+        //     "%PEVERIFY%" tmptest2--optimize.exe
+        // )
+        do! doPeverify "tmptest2--optimize.exe"
+        }
+
+    let doOptFscMinusDebug () = processor {
+        // "%FSC%" %fsc_flags% --optimize- --debug -o:test--optminus--debug.exe -g %sources%
+        do! fsc "%s --optimize- --debug -o:test--optminus--debug.exe -g" fsc_flags sources
+
+        // if NOT EXIST dont.run.peverify (
+        //     "%PEVERIFY%" test--optminus--debug.exe
+        // )
+        do! doPeverify "test--optminus--debug.exe"
+        }
+
+    let doOptFscPlusDebug () = processor {
+        // "%FSC%" %fsc_flags% --optimize+ --debug -o:test--optplus--debug.exe -g %sources%
+        do! fsc "%s --optimize+ --debug -o:test--optplus--debug.exe -g" fsc_flags sources
+
+        // if NOT EXIST dont.run.peverify (
+        //     "%PEVERIFY%" test--optplus--debug.exe
+        // )
+        do! doPeverify "test--optplus--debug.exe"
+        }
+
+    let doAsDLL () = processor {
+        //REM Compile as a DLL to exercise pickling of interface data, then recompile the original source file referencing this DLL
+        //REM THe second compilation will not utilize the information from the first in any meaningful way, but the
+        //REM compiler will unpickle the interface and optimization data, so we test unpickling as well.
+
+        //if NOT EXIST dont.compile.test.as.dll (
+        do! skipIfExists "dont.compile.test.as.dll"
+
+        // "%FSC%" %fsc_flags% --optimize -a -o:test--optimize-lib.dll -g %sources%
+        do! fsc "%s --optimize -a -o:test--optimize-lib.dll -g" fsc_flags sources
+
+        // "%FSC%" %fsc_flags% --optimize -r:test--optimize-lib.dll -o:test--optimize-client-of-lib.exe -g %sources%
+        do! fsc "%s --optimize -r:test--optimize-lib.dll -o:test--optimize-client-of-lib.exe -g" fsc_flags sources
+
+        // if NOT EXIST dont.run.peverify (
+        //     "%PEVERIFY%" test--optimize-lib.dll
+        // )
+        do! doPeverify "test--optimize-lib.dll"
+
+        // if NOT EXIST dont.run.peverify (
+        //     "%PEVERIFY%" test--optimize-client-of-lib.exe
+        // )
+        do! doPeverify "test--optimize-client-of-lib.exe"
+        }
+
+    let doWrapperNamespace () = processor {
+        // if NOT EXIST dont.use.wrapper.namespace (
+        do! skipIfExists "dont.use.wrapper.namespace"
+
+        // if exist test.ml (
+        do! skipIfNotExists "test.ml"
+         
+        // echo Compiling when wrapped in a namespace declaration...
+        log "Compiling when wrapped in a namespace declaration..."
+        // echo module TestNamespace.TestModule > tmptest3.ml
+        echo_tofile "module TestNamespace.TestModule " "tmptest3.ml"
+        // type %source1%  >> tmptest3.ml
+        source1 |> Option.iter (fun from -> type_append_tofile from "tmptest3.ml")
+        // "%FSC%" %fsc_flags% -o:tmptest3.exe tmptest3.ml
+        do! fsc "%s -o:tmptest3.exe" fsc_flags ["tmptest3.ml"]
+
+        // if NOT EXIST dont.run.peverify (
+        //     "%PEVERIFY%" tmptest3.exe
+        // )
+        do! doPeverify "tmptest3.exe"
+        }
+
+    let doWrapperNamespaceOpt () = processor {
+        //if NOT EXIST dont.use.wrapper.namespace (
+        do! skipIfExists "dont.use.wrapper.namespace"
+
+        // if exist test.ml (
+        do! skipIfNotExists "test.ml"
+
+        // echo Compiling when wrapped in a namespace declaration...
+        log "Compiling when wrapped in a namespace declaration..."
+        // echo module TestNamespace.TestModule > tmptest3.ml
+        echo_tofile "module TestNamespace.TestModule " "tmptest3.ml"
+        // type %source1%  >> tmptest3.ml
+        source1 |> Option.iter (fun from -> type_append_tofile from "tmptest3.ml")
+        // "%FSC%" %fsc_flags% --optimize -o:tmptest3--optimize.exe tmptest3.ml
+        do! fsc "%s --optimize -o:tmptest3--optimize.exe" fsc_flags ["tmptest3.ml"]
+
+        // if NOT EXIST dont.run.peverify (
+        //     "%PEVERIFY%" tmptest3--optimize.exe
+        // )
+        do! doPeverify "tmptest3--optimize.exe"
+        }
+
+    let build = function
+        | FSI_FILE -> doNOOP
+        | FSI_STDIN -> doNOOP
+        | FSI_STDIN_OPT -> doNOOP
+        | FSI_STDIN_GUI -> doNOOP
+        | FRENCH -> doBasic
+        | SPANISH -> doBasic
+        | FSC_BASIC -> doBasic
+        | FSC_BASIC_64 -> doBasic64
+        | FSC_HW -> doFscHW
+        | FSC_O3 -> doFscO3
+        | GENERATED_SIGNATURE -> doGeneratedSignature
+        | EMPTY_SIGNATURE -> doEmptySignature
+        | EMPTY_SIGNATURE_OPT -> doEmptySignatureOpt
+        | FSC_OPT_MINUS_DEBUG -> doOptFscMinusDebug
+        | FSC_OPT_PLUS_DEBUG -> doOptFscPlusDebug
+        | AS_DLL -> doAsDLL
+        | WRAPPER_NAMESPACE -> doWrapperNamespace
+        | WRAPPER_NAMESPACE_OPT -> doWrapperNamespaceOpt
+
+    let flow p () =
+        build p () 
+        |> Attempt.Run 
+        |> function 
+            | Success () -> doneOk () 
+            | Failure (Skipped msg) -> doneSkipped msg ()
+            | Failure (GenericError msg) -> doneError (GenericError msg) msg
+            | Failure (ProcessExecError (err,msg)) -> doneError (ProcessExecError(err,msg)) msg
+    
+    flow
diff --git a/tests/fsharp/single-test-run.fs b/tests/fsharp/single-test-run.fs
new file mode 100644
index 00000000000..4ef0801f425
--- /dev/null
+++ b/tests/fsharp/single-test-run.fs
@@ -0,0 +1,527 @@
+module SingleTestRun
+
+open System
+open System.IO
+open NUnit.Framework
+
+open PlatformHelpers
+open NUnitConf
+open FSharpTestSuiteTypes
+
+let private singleTestRun' cfg testDir =
+
+    let getfullpath = Commands.getfullpath testDir
+    let fileExists = Commands.fileExists testDir >> Option.isSome
+
+    // set sources=
+    // if exist testlib.fsi (set sources=%sources% testlib.fsi)
+    // if exist testlib.fs (set sources=%sources% testlib.fs)
+    // if exist test.mli (set sources=%sources% test.mli)
+    // if exist test.ml (set sources=%sources% test.ml)
+    // if exist test.fsi (set sources=%sources% test.fsi)
+    // if exist test.fs (set sources=%sources% test.fs)
+    // if exist test2.mli (set sources=%sources% test2.mli)
+    // if exist test2.ml (set sources=%sources% test2.ml)
+    // if exist test2.fsi (set sources=%sources% test2.fsi)
+    // if exist test2.fs (set sources=%sources% test2.fs)
+    // if exist test.fsx (set sources=%sources% test.fsx)
+    // if exist test2.fsx (set sources=%sources% test2.fsx)
+    let sources =
+        ["testlib.fsi";"testlib.fs";"test.mli";"test.ml";"test.fsi";"test.fs";"test2.mli";"test2.ml";"test2.fsi";"test2.fs";"test.fsx";"test2.fsx"]
+        |> List.filter fileExists
+
+    // set sourceshw=
+    // if exist test-hw.mli (set sourceshw=%sourceshw% test-hw.mli)
+    // if exist test-hw.ml (set sourceshw=%sourceshw% test-hw.ml)
+    // if exist test2-hw.mli (set sourceshw=%sourceshw% test2-hw.mli)
+    // if exist test2-hw.ml (set sourceshw=%sourceshw% test2-hw.ml)
+    // if exist test-hw.fsi (set sourceshw=%sourceshw% test-hw.fsi)
+    // if exist test-hw.fs (set sourceshw=%sourceshw% test-hw.fs)
+    // if exist test2-hw.fsi (set sourceshw=%sourceshw% test2-hw.fsi)
+    // if exist test2-hw.fs (set sourceshw=%sourceshw% test2-hw.fs)
+    // if exist test-hw.fsx (set sourceshw=%sourceshw% test-hw.fsx)
+    // if exist test2-hw.fsx (set sourceshw=%sourceshw% test2-hw.fsx)
+    let sourceshw =
+        ["test-hw.mli";"test-hw.ml";"test2-hw.mli";"test2-hw.ml";"test-hw.fsi";"test-hw.fs";"test2-hw.fsi";"test2-hw.fs";"test-hw.fsx";"test2-hw.fsx"]
+        |> List.filter fileExists
+
+    // :START
+
+    // set PERMUTATIONS_LIST=FSI_FILE FSI_STDIN FSI_STDIN_OPT FSI_STDIN_GUI FSC_BASIC %FSC_BASIC_64% FSC_HW FSC_O3 GENERATED_SIGNATURE EMPTY_SIGNATURE EMPTY_SIGNATURE_OPT FSC_OPT_MINUS_DEBUG FSC_OPT_PLUS_DEBUG FRENCH SPANISH AS_DLL WRAPPER_NAMESPACE WRAPPER_NAMESPACE_OPT
+    // 
+    // if "%REDUCED_RUNTIME%"=="1" (
+    //     echo REDUCED_RUNTIME set
+    //     
+    //     if not defined PERMUTATIONS (
+    //         powershell.exe %PSH_FLAGS% -command "&{& '%~d0%~p0\PickPermutations.ps1' '%cd%' '%FSC%' '%PERMUTATIONS_LIST%'}" > _perm.txt
+    //         if errorlevel 1 (
+    //             set ERRORMSG=%ERRORMSG% PickPermutations.ps1 failed;
+    //             goto :ERROR
+    //         )
+    //         set /p PERMUTATIONS=<_perm.txt
+    //     )
+    // )
+    ignore "test is parametrized"
+
+    // if not defined PERMUTATIONS (
+    //     echo "PERMUTATIONS not defined. Running everything."
+    //     set PERMUTATIONS=%PERMUTATIONS_LIST%
+    // )
+    ignore "test is parametrized"
+
+    // for %%A in (%PERMUTATIONS%) do (
+    //     call :%%A
+    //     IF ERRORLEVEL 1 EXIT /B 1
+    // )
+    ignore "test is parametrized"
+
+    // if "%ERRORMSG%"==""  goto Ok
+
+    // set NonexistentErrorLevel 2> nul
+    // goto :ERROR
+
+    // :END
+
+    // :EXIT_PATHS
+
+    // REM =========================================
+    // REM THE TESTS
+    // REM =========================================
+
+    let exec p = Command.exec testDir cfg.EnvironmentVariables { Output = Inherit; Input = None } p >> checkResult
+
+    let fsi = Printf.ksprintf (fun flags l -> Commands.fsi exec cfg.FSI flags l)
+    let ``exec <`` l p = Command.exec testDir cfg.EnvironmentVariables { Output = Inherit; Input = Some(RedirectInput(l)) } p >> checkResult
+    let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags [])
+
+    let fsi_flags = cfg.fsi_flags
+
+    let createTestOkFile () = NUnitConf.FileGuard.create (getfullpath "test.ok")
+
+    let skipIfExists file = processor {
+        if fileExists file
+        then return! NUnitConf.skip (sprintf "file '%s' found" file)
+        }
+
+    let skipIfNotExists file = processor {
+        if not (fileExists file)
+        then return! NUnitConf.skip (sprintf "file '%s' not found" file)
+        }
+
+
+    // :FSI_STDIN
+    // @echo do :FSI_STDIN
+    let runFSI_STDIN () = processor {
+        // if NOT EXIST dont.pipe.to.stdin (
+        do! skipIfExists "dont.pipe.to.stdin"
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% "%FSI%" %fsi_flags% < %sources% && (
+        do! ``fsi <`` "%s" fsi_flags (sources |> List.rev |> List.head) //use last file, because `cmd < a.txt b.txt` redirect b.txt only
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo FSI_STDIN failed;
+        // set ERRORMSG=%ERRORMSG% FSI_STDIN failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        // )
+        }
+
+    // :FSI_STDIN_OPT
+    // @echo do :FSI_STDIN_OPT
+    let runFSI_STDIN_OPT () = processor {
+        // if NOT EXIST dont.pipe.to.stdin (
+        do! skipIfExists "dont.pipe.to.stdin"
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% "%FSI%" %fsi_flags% --optimize < %sources% && (
+        do! ``fsi <`` "%s --optimize" fsi_flags (sources |> List.rev |> List.head) //use last file, because `cmd < a.txt b.txt` redirect b.txt only
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo FSI_STDIN_OPT failed
+        // set ERRORMSG=%ERRORMSG% FSI_STDIN_OPT failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        // )
+        }
+
+    // :FSI_STDIN_GUI
+    // @echo do :FSI_STDIN_GUI
+    let runFSI_STDIN_GUI () = processor {
+        // if NOT EXIST dont.pipe.to.stdin (
+        do! skipIfExists "dont.pipe.to.stdin"
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% "%FSI%" %fsi_flags% --gui < %sources% && (
+        do! ``fsi <`` "%s --gui" fsi_flags (sources |> List.rev |> List.head) //use last file, because `cmd < a.txt b.txt` redirect b.txt only
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo FSI_STDIN_GUI failed;
+        // set ERRORMSG=%ERRORMSG% FSI_STDIN_GUI failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        // )
+        }
+
+    // :FSI_FILE
+    // @echo do :FSI_FILE
+    let runFSI_FILE () = processor {
+        // if NOT EXIST dont.run.as.script (
+        do! skipIfExists "dont.run.as.script"
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% "%FSI%" %fsi_flags% %sources% && (
+        do! fsi "%s" fsi_flags sources
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo FSI_FILE failed
+        // set ERRORMSG=%ERRORMSG% FSI_FILE failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        // )
+        }
+
+    // :FSC_BASIC
+    // @echo do :FSC_BASIC
+    let runFSC_BASIC () = processor {
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% .\test.exe && (
+        do! exec ("."/"test.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :FSC_BASIC failed
+        // set ERRORMSG=%ERRORMSG% FSC_BASIC failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        }
+
+    // :FSC_BASIC_64
+    // @echo do :FSC_BASIC_64
+    let runFSC_BASIC_64 () = processor {
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% .\testX64.exe && (
+        do! exec ("."/"testX64.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :FSC_BASIC_64 failed
+        // set ERRORMSG=%ERRORMSG% FSC_BASIC_64 failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        }
+
+    // :FSC_HW
+    // @echo do :FSC_HW
+    let runFSC_HW () = processor {
+        // if exist test-hw.* (
+        if Directory.EnumerateFiles(testDir, "test-hw.*") |> Seq.exists fileExists then 
+            // if exist test.ok (del /f /q test.ok)
+            use testOkFile = createTestOkFile () 
+            // %CLIX% .\test-hw.exe && (
+            do! exec ("."/"test-hw.exe") ""
+            // dir test.ok > NUL 2>&1 ) || (
+            // @echo  :FSC_HW failed
+            // set ERRORMSG=%ERRORMSG% FSC_HW failed;
+            // )
+            do! testOkFile |> NUnitConf.checkGuardExists
+            //)
+        else 
+            do! NUnitConf.skip (sprintf "file '%s' not found" "test-hw.*")
+        }
+
+    // :FSC_O3
+    // @echo do :FSC_O3
+    let runFSC_O3 () = processor {
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% .\test--optimize.exe && (
+        do! exec ("."/"test--optimize.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :FSC_O3 failed
+        // set ERRORMSG=%ERRORMSG% FSC_03 failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        }
+
+    // :FSC_OPT_MINUS_DEBUG
+    // @echo do :FSC_OPT_MINUS_DEBUG
+    let runFSC_OPT_MINUS_DEBUG () = processor {
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% .\test--optminus--debug.exe && (
+        do! exec ("."/"test--optminus--debug.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :FSC_OPT_MINUS_DEBUG failed
+        // set ERRORMSG=%ERRORMSG% FSC_OPT_MINUS_DEBUG failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        }
+
+    // :FSC_OPT_PLUS_DEBUG
+    // @echo do :FSC_OPT_PLUS_DEBUG
+    let runFSC_OPT_PLUS_DEBUG () = processor {
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% .\test--optplus--debug.exe && (
+        do! exec ("."/"test--optplus--debug.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :FSC_OPT_PLUS_DEBUG failed
+        // set ERRORMSG=%ERRORMSG% FSC_OPT_PLUS_DEBUG failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        }
+
+    // :GENERATED_SIGNATURE
+    // @echo do :GENERATED_SIGNATURE
+    let runGENERATED_SIGNATURE () = processor {
+        // if NOT EXIST dont.use.generated.signature (
+        do! skipIfExists "dont.use.generated.signature"
+
+        // if exist test.ml (
+        do! skipIfNotExists "test.ml"
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% tmptest1.exe && (
+        do! exec ("."/"tmptest1.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :GENERATED_SIGNATURE failed
+        // set ERRORMSG=%ERRORMSG% FSC_GENERATED_SIGNATURE failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        // )
+        //)
+        }
+
+    // :EMPTY_SIGNATURE
+    // @echo do :EMPTY_SIGNATURE
+    let runEMPTY_SIGNATURE () = processor {
+        // if NOT EXIST dont.use.empty.signature (
+        do! skipIfExists "dont.use.empty.signature"
+
+        // if exist test.ml (
+        do! skipIfNotExists "test.ml"
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% tmptest2.exe && (
+        do! exec ("."/"tmptest2.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :EMPTY_SIGNATURE failed
+        // set ERRORMSG=%ERRORMSG% FSC_EMPTY_SIGNATURE failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        // )
+        //)
+        }
+
+    // :EMPTY_SIGNATURE_OPT
+    // @echo do :EMPTY_SIGNATURE_OPT
+    let runEMPTY_SIGNATURE_OPT () = processor {
+        // if NOT EXIST dont.use.empty.signature (
+        do! skipIfExists "dont.use.empty.signature"
+
+        // if exist test.ml (
+        do! skipIfNotExists "test.ml"
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% tmptest2--optimize.exe && (
+        do! exec ("."/"tmptest2--optimize.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :EMPTY_SIGNATURE_OPT --optimize failed
+        // set ERRORMSG=%ERRORMSG% EMPTY_SIGNATURE_OPT --optimize failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        // )
+        //)
+        }
+
+    // :FRENCH
+    // @echo do :FRENCH
+    let runFRENCH () = processor {
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% .\test.exe fr-FR && (
+        do! exec ("."/"test.exe") "fr-FR"
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :FRENCH failed
+        // set ERRORMSG=%ERRORMSG% FRENCH failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        }
+
+    // :SPANISH
+    // @echo do :SPANISH
+    let runSPANISH () = processor {
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% .\test.exe es-ES && (
+        do! exec ("."/"test.exe") "es-ES"
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :SPANISH failed
+        // set ERRORMSG=%ERRORMSG% SPANISH failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        }
+
+    // :AS_DLL
+    // @echo do :AS_DLL
+    let runAS_DLL () = processor {
+        //if NOT EXIST dont.compile.test.as.dll (
+        do! skipIfExists "dont.compile.test.as.dll"
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% .\test--optimize-client-of-lib.exe && (
+        do! exec ("."/"test--optimize-client-of-lib.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :AS_DLL failed
+        // set ERRORMSG=%ERRORMSG% AS_DLL failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        //)
+        }
+
+    // :WRAPPER_NAMESPACE
+    // @echo do :WRAPPER_NAMESPACE
+    let runWRAPPER_NAMESPACE () = processor {
+        // if NOT EXIST dont.use.wrapper.namespace (
+        do! skipIfExists "dont.use.wrapper.namespace"
+
+        // if exist test.ml (
+        do! skipIfNotExists "test.ml"
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% .\tmptest3.exe && (
+        do! exec ("."/"tmptest3.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :WRAPPER_NAMESPACE failed
+        // set ERRORMSG=%ERRORMSG% WRAPPER_NAMESPACE failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        // )
+        //)
+        }
+
+    // :WRAPPER_NAMESPACE_OPT
+    // @echo do :WRAPPER_NAMESPACE_OPT
+    let runWRAPPER_NAMESPACE_OPT () = processor {
+        // if NOT EXIST dont.use.wrapper.namespace (
+        do! skipIfExists "dont.use.wrapper.namespace"
+
+        // if exist test.ml (
+        do! skipIfNotExists "test.ml"
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = createTestOkFile () 
+        // %CLIX% .\tmptest3--optimize.exe && (
+        do! exec ("."/"tmptest3--optimize.exe") ""
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :WRAPPER_NAMESPACE_OPT failed
+        // set ERRORMSG=%ERRORMSG% WRAPPER_NAMESPACE_OPT failed;
+        // )
+        do! testOkFile |> NUnitConf.checkGuardExists
+        // )
+        // )
+        }
+
+    let run = function
+        | FSI_FILE -> runFSI_FILE
+        | FSI_STDIN -> runFSI_STDIN
+        | FSI_STDIN_OPT -> runFSI_STDIN_OPT
+        | FSI_STDIN_GUI -> runFSI_STDIN_GUI
+        | FRENCH -> runFRENCH
+        | SPANISH -> runSPANISH
+        | FSC_BASIC -> runFSC_BASIC
+        | FSC_BASIC_64 -> runFSC_BASIC_64
+        | FSC_HW -> runFSC_HW
+        | FSC_O3 -> runFSC_O3
+        | GENERATED_SIGNATURE -> runGENERATED_SIGNATURE
+        | EMPTY_SIGNATURE -> runEMPTY_SIGNATURE
+        | EMPTY_SIGNATURE_OPT -> runEMPTY_SIGNATURE_OPT
+        | FSC_OPT_MINUS_DEBUG -> runFSC_OPT_MINUS_DEBUG
+        | FSC_OPT_PLUS_DEBUG -> runFSC_OPT_PLUS_DEBUG
+        | AS_DLL -> runAS_DLL
+        | WRAPPER_NAMESPACE -> runWRAPPER_NAMESPACE
+        | WRAPPER_NAMESPACE_OPT -> runWRAPPER_NAMESPACE_OPT
+
+    run
+
+let singleTestRun config testDir =
+    let fileExists = Commands.fileExists testDir >> Option.isSome
+
+    //@if "%_echo%"=="" echo off
+    //setlocal
+    ignore "unused"
+
+    //set ERRORMSG=
+    ignore "unused"
+
+    //:Ok
+    let doneOK x =
+        //echo Ran fsharp %~f0 ok.
+        log "Ran fsharp %s ok." testDir
+        //exit /b 0
+        Success x
+
+    //:Skip
+    let doneSkipped msg =
+        //echo Skipped %~f0
+        log "Skipped run '%s' reason: %s" testDir msg
+        //exit /b 0
+        Failure (Skipped msg)
+
+    //:Error
+    let doneError err msg =
+        //echo %ERRORMSG%
+        log "%s" msg
+        //exit /b %ERRORLEVEL% 
+        Failure (err)
+
+    let skipIfNotExists file = processor {
+        if not (fileExists file)
+        then return! NUnitConf.skip (sprintf "file '%s' not found" file)
+        }
+
+    let tests config p = processor {
+        //dir build.ok > NUL ) || (
+        //  @echo 'build.ok' not found.
+        //  set ERRORMSG=%ERRORMSG% Skipped because 'build.ok' not found.
+        //  goto :ERROR
+        //)
+        do! skipIfNotExists "build.ok"
+
+        // call %~d0%~p0..\config.bat
+        let cfg = config
+        // if errorlevel 1 (
+        //   set ERRORMSG=%ERRORMSG% config.bat failed;
+        //   goto :ERROR
+        // )
+
+        // if not exist "%FSC%" (
+        //   set ERRORMSG=%ERRORMSG% fsc.exe not found at the location "%FSC%"
+        //   goto :ERROR
+        // )
+        ignore "already checked at test suite startup"
+
+        // if not exist "%FSI%" (
+        //   set ERRORMSG=%ERRORMSG% fsi.exe not found at the location "%FSI%"
+        //   goto :ERROR
+        // )
+        ignore "already checked at test suite startup"
+
+        do! singleTestRun' cfg testDir p ()
+        }
+
+    let flow p () =    
+        tests config p
+        |> Attempt.Run
+        |> function
+            | Success () -> doneOK ()
+            | Failure (Skipped msg) -> doneSkipped msg
+            | Failure (GenericError msg) -> doneError (GenericError msg) msg
+            | Failure (ProcessExecError (err,msg)) -> doneError (ProcessExecError(err,msg)) msg
+
+
+    flow
diff --git a/tests/fsharp/tools/tests_tools.fs b/tests/fsharp/tools/tests_tools.fs
new file mode 100644
index 00000000000..14956f2f76c
--- /dev/null
+++ b/tests/fsharp/tools/tests_tools.fs
@@ -0,0 +1,62 @@
+module ``FSharp-Tests-Tools``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open FSharpTestSuiteTypes
+open NUnitConf
+open PlatformHelpers
+
+let testContext = FSharpTestSuite.testContext
+
+
+module Bundle = 
+
+    []
+    let bundle () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+
+        // "%FSC%" %fsc_flags% --progress --standalone -o:test-one-fsharp-module.exe -g test-one-fsharp-module.fs
+        do! fsc "%s --progress --standalone -o:test-one-fsharp-module.exe -g" cfg.fsc_flags ["test-one-fsharp-module.fs"]
+   
+        // "%PEVERIFY%"  test-one-fsharp-module.exe
+        do! peverify "test-one-fsharp-module.exe"
+   
+        // "%FSC%" %fsc_flags% -a -o:test_two_fsharp_modules_module_1.dll -g test_two_fsharp_modules_module_1.fs
+        do! fsc "%s -a -o:test_two_fsharp_modules_module_1.dll -g" cfg.fsc_flags ["test_two_fsharp_modules_module_1.fs"]
+   
+        // "%PEVERIFY%"  test_two_fsharp_modules_module_1.dll
+        do! peverify "test_two_fsharp_modules_module_1.dll"
+   
+   
+        // "%FSC%" %fsc_flags% --standalone -r:test_two_fsharp_modules_module_1.dll -o:test_two_fsharp_modules_module_2.exe -g test_two_fsharp_modules_module_2.fs
+        do! fsc "%s --standalone -r:test_two_fsharp_modules_module_1.dll -o:test_two_fsharp_modules_module_2.exe -g" cfg.fsc_flags ["test_two_fsharp_modules_module_2.fs"]
+   
+        // "%PEVERIFY%"  test_two_fsharp_modules_module_2.exe
+        do! peverify "test_two_fsharp_modules_module_2.exe"
+   
+        // "%FSC%" %fsc_flags% -a --standalone -r:test_two_fsharp_modules_module_1.dll -o:test_two_fsharp_modules_module_2_as_dll.dll -g test_two_fsharp_modules_module_2.fs
+        do! fsc "%s -a --standalone -r:test_two_fsharp_modules_module_1.dll -o:test_two_fsharp_modules_module_2_as_dll.dll -g" cfg.fsc_flags ["test_two_fsharp_modules_module_2.fs"]
+   
+        // "%PEVERIFY%"  test_two_fsharp_modules_module_2_as_dll.dll
+        do! peverify "test_two_fsharp_modules_module_2_as_dll.dll"
+                
+        })
+
+
+
+module Eval = 
+
+    []
+    let eval p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
diff --git a/tests/fsharp/typeProviders/.gitignore b/tests/fsharp/typeProviders/.gitignore
new file mode 100644
index 00000000000..204f668cfdd
--- /dev/null
+++ b/tests/fsharp/typeProviders/.gitignore
@@ -0,0 +1,38 @@
+diamondAssembly/provided.dll
+diamondAssembly/provider.dll
+
+globalNamespace/globalNamespaceTP.dll
+globalNamespace/globalNamespaceTP.pdb
+
+helloWorld/provided.dll
+helloWorld/provided.pdb
+helloWorld/provided?.dll
+helloWorld/provided?.pdb
+helloWorld/providedNullAssemblyName.dll
+helloWorld/providedNullAssemblyName.pdb
+helloWorld/provider.dll
+helloWorld/bincompat1
+helloWorld/bincompat2
+
+helloWorldCSharp/magic.dll
+helloWorldCSharp/provider.dll
+
+negTests/*.dll
+negTests/*.bsl
+negTests/*.err
+negTests/*.vserr
+negTests/*.vsbsl
+negTests/*.diff
+negTests/*.vsdiff
+
+splitAssembly/provider.dll
+splitAssembly/providerDesigner.dll
+
+wedgeAssembly/provided.dll
+wedgeAssembly/providedJ.dll
+wedgeAssembly/providedK.dll
+wedgeAssembly/provider.dll
+
+builtin/SqlDataConnection/DataDirectory
+builtin/SqlDataConnection/ExampleResolutionFolder
+
diff --git a/tests/fsharp/typeProviders/build-typeprovider-test.fs b/tests/fsharp/typeProviders/build-typeprovider-test.fs
new file mode 100644
index 00000000000..dc38e806cc4
--- /dev/null
+++ b/tests/fsharp/typeProviders/build-typeprovider-test.fs
@@ -0,0 +1,43 @@
+module BuildTypeProviderTest
+
+open System
+open System.IO
+open NUnit.Framework
+
+open FSharpTestSuiteTypes
+open PlatformHelpers
+open NUnitConf
+
+let build (cfg: TestConfig) (dir: string) p = processor {
+    let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+    let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+    let del = Commands.rm dir
+
+    // if EXIST provided.dll del provided.dll
+    del "provided.dll"
+
+    // "%FSC%" --out:provided.dll -a ..\helloWorld\provided.fs
+    do! fsc "--out:provided.dll -a" [".."/"helloWorld"/"provided.fs"]
+
+    // if EXIST providedJ.dll del providedJ.dll
+    del "providedJ.dll"
+
+    // "%FSC%" --out:providedJ.dll -a ..\helloWorld\providedJ.fs
+    do! fsc "--out:providedJ.dll -a" [".."/"helloWorld"/"providedJ.fs"]
+
+    // if EXIST providedK.dll del providedK.dll
+    del "providedK.dll"
+
+    // "%FSC%" --out:providedK.dll -a ..\helloWorld\providedK.fs
+    do! fsc "--out:providedK.dll -a" [".."/"helloWorld"/"providedK.fs"]
+
+    // if EXIST provider.dll del provider.dll
+    del "provider.dll"
+
+    // "%FSC%" --out:provider.dll -a provider.fsx
+    do! fsc "--out:provider.dll -a" ["provider.fsx"]
+
+    // call %~d0%~p0..\single-test-build.bat
+    do! SingleTestBuild.singleTestBuild cfg dir p
+
+    }
diff --git a/tests/fsharp/typeProviders/builtin/.gitignore b/tests/fsharp/typeProviders/builtin/.gitignore
new file mode 100644
index 00000000000..760ee5a8826
--- /dev/null
+++ b/tests/fsharp/typeProviders/builtin/.gitignore
@@ -0,0 +1,29 @@
+
+FSharp.Data.TypeProviders.dll
+
+EdmxFile/SampleModel01.edmx
+
+EdmxFile/*.exe.config
+EdmxFile/*.dll.config
+
+ODataService/*.exe.config
+ODataService/*.dll.config
+ODataService/svc.csdl
+ODataService/svc2.csdl
+
+SqlDataConnection/*.exe.config
+SqlDataConnection/*.dll.config
+SqlDataConnection/app.config
+SqlDataConnection/NORTHWND.mdf
+SqlDataConnection/NORTHWND_log.ldf
+SqlDataConnection/nwind2.dbml
+SqlDataConnection/nwind3.dbml
+SqlDataConnection/test.config
+
+SqlEntityConnection/*.exe.config
+SqlEntityConnection/*.dll.config
+
+WsdlService/*.exe.config
+WsdlService/*.dll.config
+WsdlService/sfile.wsdlschema
+WsdlService/sfile2.wsdlschema
diff --git a/tests/fsharp/typeProviders/builtin/copyFSharpDataTypeProviderDLL.fs b/tests/fsharp/typeProviders/builtin/copyFSharpDataTypeProviderDLL.fs
new file mode 100644
index 00000000000..960fc915a5a
--- /dev/null
+++ b/tests/fsharp/typeProviders/builtin/copyFSharpDataTypeProviderDLL.fs
@@ -0,0 +1,71 @@
+module CopyFSharpDataTypeProviderDLL
+
+open System
+open System.IO
+open NUnit.Framework
+
+open FSharpTestSuiteTypes
+open PlatformHelpers
+open NUnitConf
+
+let copy (cfg: TestConfig) (dir: string) = processor {
+    let fileExists = Commands.fileExists dir >> Option.isSome
+    let getfullpath = Commands.getfullpath dir
+
+    let copy_y a = Commands.copy_y dir a >> checkResult
+
+    // REM == Find out OS architecture, no matter what cmd prompt
+    // SET OSARCH=%PROCESSOR_ARCHITECTURE%
+    // IF NOT "%PROCESSOR_ARCHITEW6432%"=="" SET OSARCH=%PROCESSOR_ARCHITEW6432%
+    let osArch = WindowsPlatform.osArch cfg.EnvironmentVariables
+
+    // REM == Find out path to native 'Program Files 32bit', no matter what
+    // REM == architecture we are running on and no matter what command
+    // REM == prompt we came from.
+    // IF /I "%OSARCH%"=="x86"   set X86_PROGRAMFILES=%ProgramFiles%
+    // IF /I "%OSARCH%"=="AMD64" set X86_PROGRAMFILES=%ProgramFiles(x86)%
+    let x86ProgramFiles = WindowsPlatform.x86ProgramFilesDirectory cfg.EnvironmentVariables osArch
+
+    // REM == Set path to FSharp.Data.TypeProviders.dll
+    // REM == This binary is frozen at 4.3.0.0 version
+    // set FSDATATYPEPROVIDERSPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\Type Providers\FSharp.Data.TypeProviders.dll
+    // IF EXIST "%FSCBinPath%\FSharp.Data.TypeProviders.dll" set FSDATATYPEPROVIDERSPATH=%FSCBinPath%\FSharp.Data.TypeProviders.dll
+    let FSDATATYPEPROVIDERSPATH =
+        if fileExists (cfg.FSCBinPath/"FSharp.Data.TypeProviders.dll")
+        then cfg.FSCBinPath/"FSharp.Data.TypeProviders.dll"
+        else x86ProgramFiles/"Reference Assemblies"/"Microsoft"/"FSharp"/".NETFramework"/"v4.0"/"4.3.0.0"/"Type Providers"/"FSharp.Data.TypeProviders.dll"
+
+
+    // REM == Copy the FSharp.Data.TypeProvider.dll 
+    // REM == Note: we need this because we are doing white box testing
+    // IF EXIST "%FSDATATYPEPROVIDERSPATH%" copy /y "%FSDATATYPEPROVIDERSPATH%" .
+    do! if fileExists FSDATATYPEPROVIDERSPATH
+        then copy_y FSDATATYPEPROVIDERSPATH ("."/"FSharp.Data.TypeProviders.dll")
+        else Success ()
+
+    // REM == Copy in config files with needed binding redirects
+    let xcopy_ry a b =
+        let removeReadonly p =
+            let attr = File.GetAttributes(p)
+            File.SetAttributes(p, attr &&& (~~~ FileAttributes.ReadOnly))
+
+        if fileExists b then removeReadonly (getfullpath b)
+        copy_y a b
+
+    let ``test.exe.config`` = __SOURCE_DIRECTORY__/"test.exe.config"
+    // xcopy /RY "%~dp0test.exe.config" "%cd%\test.exe.config*"
+    do! xcopy_ry ``test.exe.config`` "test.exe.config"
+    // xcopy /RY "%~dp0test.exe.config" "%cd%\testX64.exe.config*"
+    do! xcopy_ry ``test.exe.config`` "testX64.exe.config"
+    // xcopy /RY "%~dp0test.exe.config" "%cd%\test--optimize.exe.config*"
+    do! xcopy_ry ``test.exe.config`` "test--optimize.exe.config"
+    // xcopy /RY "%~dp0test.exe.config" "%cd%\test--optimize-lib.dll.config*"
+    do! xcopy_ry ``test.exe.config`` "test--optimize-lib.dll.config"
+    // xcopy /RY "%~dp0test.exe.config" "%cd%\test--optimize-client-of-lib.exe.config*"
+    do! xcopy_ry ``test.exe.config`` "test--optimize-client-of-lib.exe.config"
+    // xcopy /RY "%~dp0test.exe.config" "%cd%\test--optminus--debug.exe.config*"
+    do! xcopy_ry ``test.exe.config`` "test--optminus--debug.exe.config"
+    // xcopy /RY "%~dp0test.exe.config" "%cd%\test--optplus--debug.exe.config*"
+    do! xcopy_ry ``test.exe.config`` "test--optplus--debug.exe.config"
+
+    }
diff --git a/tests/fsharp/typeProviders/builtin/test.exe.config b/tests/fsharp/typeProviders/builtin/test.exe.config
index cee22394daa..3acbfe9c743 100644
--- a/tests/fsharp/typeProviders/builtin/test.exe.config
+++ b/tests/fsharp/typeProviders/builtin/test.exe.config
@@ -5,7 +5,7 @@
     
       
         
-        
+        
       
     
   
diff --git a/tests/fsharp/typeProviders/diamondAssembly/run.bat b/tests/fsharp/typeProviders/diamondAssembly/run.bat
index 633ba7e1880..0782f624c4b 100644
--- a/tests/fsharp/typeProviders/diamondAssembly/run.bat
+++ b/tests/fsharp/typeProviders/diamondAssembly/run.bat
@@ -22,10 +22,11 @@ test3.exe
 
 
 if exist test.ok (del /f /q test.ok)
-%CLIX% "%FSI%" %fsi_flags% test1.fsx test2a.fsx test2b.fsx test3.fsx && (
+%CLIX% "%FSI%" %fsi_flags% test3.fsx && (
 dir test.ok > NUL 2>&1 ) || (
 @echo :FSI load failed
 set ERRORMSG=%ERRORMSG% FSI load failed;
+goto :Error
 )
 
 
diff --git a/tests/fsharp/typeProviders/diamondAssembly/test2a.fsx b/tests/fsharp/typeProviders/diamondAssembly/test2a.fsx
index ce7ac90a559..d575a4ad539 100644
--- a/tests/fsharp/typeProviders/diamondAssembly/test2a.fsx
+++ b/tests/fsharp/typeProviders/diamondAssembly/test2a.fsx
@@ -1,6 +1,7 @@
 
 #r "provider.dll"
 #r "test1.dll"
+#load "./test1.fsx"
 
 module ErasedTypes = 
     let f() : FSharp.HelloWorld.HelloWorldType = Unchecked.defaultof<_>
diff --git a/tests/fsharp/typeProviders/diamondAssembly/test2b.fsx b/tests/fsharp/typeProviders/diamondAssembly/test2b.fsx
index ce7ac90a559..a02c10c3081 100644
--- a/tests/fsharp/typeProviders/diamondAssembly/test2b.fsx
+++ b/tests/fsharp/typeProviders/diamondAssembly/test2b.fsx
@@ -1,6 +1,8 @@
 
 #r "provider.dll"
 #r "test1.dll"
+#load "./test1.fsx"
+#load "./test2a.fsx"
 
 module ErasedTypes = 
     let f() : FSharp.HelloWorld.HelloWorldType = Unchecked.defaultof<_>
diff --git a/tests/fsharp/typeProviders/diamondAssembly/test3.fsx b/tests/fsharp/typeProviders/diamondAssembly/test3.fsx
index 7ee57692e2d..19fd86d13bc 100644
--- a/tests/fsharp/typeProviders/diamondAssembly/test3.fsx
+++ b/tests/fsharp/typeProviders/diamondAssembly/test3.fsx
@@ -3,6 +3,9 @@
 #r "test1.dll"
 #r "test2a.dll"
 #r "test2b.dll"
+#load "./test1.fsx"
+#load "./test2a.fsx"
+#load "./test2b.fsx"
 
 
 let mutable failures = []
diff --git a/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Exception.bsl b/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Exception.bsl
new file mode 100644
index 00000000000..7b371ac55d9
--- /dev/null
+++ b/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Exception.bsl
@@ -0,0 +1,2 @@
+
+EVIL_PROVIDER_GetStaticParametersForMethod_Exception.fsx(7,17,7,96): typecheck error FS3033: The type provider 'Provider.EvilProviderWhereGetStaticParametersForMethodRaisesException' reported an error: deliberate error for testing purposes
diff --git a/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Exception.fsx b/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Exception.fsx
new file mode 100644
index 00000000000..d59e8f21734
--- /dev/null
+++ b/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Exception.fsx
@@ -0,0 +1,7 @@
+#r "provider_EVIL_PROVIDER_GetStaticParametersForMethod_Exception.dll"
+
+
+open FSharp.EvilProviderWhereGetStaticParametersForMethodRaisesException
+
+// It is enough to name the type to expose the validation check
+let Negative1 = FSharp.EvilProviderWhereGetStaticParametersForMethodRaisesException.TheType.Boo<3>()
diff --git a/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Null.bsl b/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Null.bsl
new file mode 100644
index 00000000000..bbeb0b31869
--- /dev/null
+++ b/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Null.bsl
@@ -0,0 +1,2 @@
+
+EVIL_PROVIDER_GetStaticParametersForMethod_Null.fsx(7,17,7,92): typecheck error FS3051: The type provider 'Provider.EvilProviderWhereGetStaticParametersForMethodReturnsNull' reported an error: The type provider returned 'null', which is not a valid return value from 'GetStaticParametersForMethod'
diff --git a/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Null.fsx b/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Null.fsx
new file mode 100644
index 00000000000..cee0fd5caa4
--- /dev/null
+++ b/tests/fsharp/typeProviders/negTests/EVIL_PROVIDER_GetStaticParametersForMethod_Null.fsx
@@ -0,0 +1,7 @@
+#r "provider_EVIL_PROVIDER_GetStaticParametersForMethod_Null.dll"
+
+
+open FSharp.EvilProviderWhereGetStaticParametersForMethodReturnsNull
+
+// It is enough to name the type to expose the validation check
+let Negative1 = FSharp.EvilProviderWhereGetStaticParametersForMethodReturnsNull.TheType.Boo<3>()
diff --git a/tests/fsharp/typeProviders/negTests/build.bat b/tests/fsharp/typeProviders/negTests/build.bat
index 3651fa19902..f58e82a0a32 100644
--- a/tests/fsharp/typeProviders/negTests/build.bat
+++ b/tests/fsharp/typeProviders/negTests/build.bat
@@ -60,11 +60,13 @@ set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetTypes_Exception
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_ResolveTypeName_Exception
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetNamespaces_Exception
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetStaticParameters_Exception 
+set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetStaticParametersForMethod_Exception 
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetInvokerExpression_Exception 
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetTypes_Null
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_ResolveTypeName_Null
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetNamespaces_Null
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetStaticParameters_Null
+set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetStaticParametersForMethod_Null
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetInvokerExpression_Null
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_DoesNotHaveConstructor
 set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_ConstructorThrows
diff --git a/tests/fsharp/typeProviders/negTests/provider.fsx b/tests/fsharp/typeProviders/negTests/provider.fsx
index ed359714f78..a312a84c291 100644
--- a/tests/fsharp/typeProviders/negTests/provider.fsx
+++ b/tests/fsharp/typeProviders/negTests/provider.fsx
@@ -91,13 +91,14 @@ type public GoodProviderForNegativeTypeTests1() =
         member this.GetGeneratedAssemblyContents(assembly) = failwith "GetGeneratedAssemblyContents - only erased types were provided!!"
 
 
-type public EvilProviderBase(namespaceName,?GetNestedNamespaces,?get_NamespaceName,?GetTypes,?ResolveTypeName,?GetNamespaces,?GetStaticParameters,?ApplyStaticArguments,?GetInvokerExpression) =
+type public EvilProviderBase(namespaceName,?GetNestedNamespaces,?get_NamespaceName,?GetTypes,?ResolveTypeName,?GetNamespaces,?GetStaticParameters,?GetStaticParametersForMethod,?ApplyStaticArguments,?ApplyStaticArgumentsForMethod,?GetInvokerExpression) =
     let invalidation = new Event()
 
     let modul = typeof.Assembly.GetModules().[0]
     let okType =
         let members (typ:Type) =
             let invoke _ = failwith "Kaboom"
+            let booM = TypeBuilder.CreateMethod(typ, "Boo", typeof, invoke = invoke, isStatic = true)
             let fooP = TypeBuilder.CreateProperty(typ, "Foo", typeof, getInvoke = invoke,isStatic = true)
             fun (_bf:BindingFlags) (mt:MemberTypes) (s:string option) ->
             [|
@@ -106,6 +107,12 @@ type public EvilProviderBase(namespaceName,?GetNestedNamespaces,?get_NamespaceNa
                     |   Some "Foo" -> yield fooP :> MemberInfo
                     |   None -> yield fooP :> MemberInfo
                     |   _ -> ()
+                if mt &&& MemberTypes.Method = MemberTypes.Method then
+                    match s with
+                    |   Some "Boo" -> yield booM :> MemberInfo
+                    |   None -> 
+                          yield booM :> MemberInfo 
+                    |   _ -> ()
             |]
         TypeBuilder.CreateType(TypeContainer.Namespace(modul, namespaceName), "TheType", members = members)       
 
@@ -176,6 +183,11 @@ type public EvilProviderBase(namespaceName,?GetNestedNamespaces,?get_NamespaceNa
         []
         member this.Invalidate = invalidation.Publish
         member this.GetGeneratedAssemblyContents(assembly) = failwith "GetGeneratedAssemblyContents - only erased types were provided!!"
+      
+    member this.GetStaticParametersForMethod(methWithoutArguments: MethodBase) : ParameterInfo[] = 
+        match GetStaticParametersForMethod with Some f -> f() | None -> [| |]
+    member this.ApplyStaticArgumentsForMethod(methWithoutArguments:MethodBase, methNameWithArguments: string, staticArguments: obj[]) = 
+        match ApplyStaticArgumentsForMethod with Some f -> f() | None -> methWithoutArguments
        
 []
 type public EvilProvider() = 
@@ -218,6 +230,12 @@ type public EvilProviderWhereGetStaticParametersRaisesException() =
     inherit EvilProviderBase("FSharp.EvilProviderWhereGetStaticParametersRaisesException",GetStaticParameters=(fun _ -> doEvil()))
 #endif
 
+#if EVIL_PROVIDER_GetStaticParametersForMethod_Exception
+[]
+type public EvilProviderWhereGetStaticParametersForMethodRaisesException() = 
+    inherit EvilProviderBase("FSharp.EvilProviderWhereGetStaticParametersForMethodRaisesException",GetStaticParametersForMethod=(fun _ -> doEvil()))
+#endif
+
 #if EVIL_PROVIDER_GetInvokerExpression_Exception
 []
 type public EvilProviderWhereApplyGetInvokerExpressionRaisesException() = 
@@ -268,6 +286,12 @@ type public EvilProviderWhereGetStaticParametersReturnsNull() =
     inherit EvilProviderBase("FSharp.EvilProviderWhereGetStaticParametersReturnsNull",GetStaticParameters=(fun _ -> null))
 #endif
 
+#if EVIL_PROVIDER_GetStaticParametersForMethod_Null
+[]
+type public EvilProviderWhereGetStaticParametersForMethodReturnsNull() = 
+    inherit EvilProviderBase("FSharp.EvilProviderWhereGetStaticParametersForMethodReturnsNull",GetStaticParametersForMethod=(fun _ -> null))
+#endif
+
 #if EVIL_PROVIDER_GetInvokerExpression_Null
 []
 type public EvilProviderWhereApplyGetInvokerExpressionReturnsNull() = 
diff --git a/tests/fsharp/typeProviders/tests_typeProviders.fs b/tests/fsharp/typeProviders/tests_typeProviders.fs
new file mode 100644
index 00000000000..9e49f8ecd88
--- /dev/null
+++ b/tests/fsharp/typeProviders/tests_typeProviders.fs
@@ -0,0 +1,678 @@
+module ``FSharp-Tests-TypeProviders``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open FSharpTestSuiteTypes
+open NUnitConf
+open PlatformHelpers
+
+let testContext = FSharpTestSuite.testContext
+
+let requireVSUltimate cfg = processor {
+    do! match cfg.INSTALL_SKU with
+        | Some (Ultimate) -> Success
+        | x ->
+            // IF /I "%INSTALL_SKU%" NEQ "ULTIMATE" (
+            //     echo Test not supported except on Ultimate
+            NUnitConf.skip (sprintf "Test not supported except on Ultimate, was %A" x)
+            //     exit /b 0
+            // )
+    }
+
+module Builtin =
+
+    module EdmxFile = 
+
+        []
+        let EdmxFile p = check (processor {
+            let { Directory = dir; Config = cfg } = testContext ()
+        
+            //call %~d0%~p0..\copyFSharpDataTypeProviderDLL.cmd
+            do! CopyFSharpDataTypeProviderDLL.copy cfg dir
+
+            do! SingleTestBuild.singleTestBuild cfg dir p
+        
+            do! SingleTestRun.singleTestRun cfg dir p
+            })
+
+
+    module ODataService = 
+
+        []
+        let oDataService p = check (processor {
+            let { Directory = dir; Config = cfg } = testContext ()
+        
+            //call %~d0%~p0..\copyFSharpDataTypeProviderDLL.cmd
+            do! CopyFSharpDataTypeProviderDLL.copy cfg dir
+        
+            do! SingleTestBuild.singleTestBuild cfg dir p
+        
+            do! SingleTestRun.singleTestRun cfg dir p
+            })
+
+
+    module SqlDataConnection = 
+
+        []
+        let sqlDataConnection p = check (processor {
+            let { Directory = dir; Config = cfg } = testContext ()
+
+            let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+            let fileExists = Commands.fileExists dir >> Option.isSome
+        
+            //call %~d0%~p0..\copyFSharpDataTypeProviderDLL.cmd
+            do! CopyFSharpDataTypeProviderDLL.copy cfg dir
+        
+            do! SingleTestBuild.singleTestBuild cfg dir p
+
+            // IF /I "%INSTALL_SKU%" NEQ "ULTIMATE" (
+            //     echo Test not supported except on Ultimate
+            //     exit /b 0
+            // )
+            do! requireVSUltimate cfg
+
+            // IF EXIST test.exe (
+            //    echo Running test.exe to warm up SQL
+            //    test.exe > nul 2> nul
+            // )
+            do! if fileExists "test.exe"
+                then
+                    // echo Running test.exe to warm up SQL
+                    // test.exe > nul 2> nul
+                    exec ("."/"test.exe") ""
+                else Success ()
+        
+            do! SingleTestRun.singleTestRun cfg dir p
+            })
+
+    module WsdlService = 
+
+        []
+        let wsdlService p = check (processor {
+            let { Directory = dir; Config = cfg } = testContext ()
+        
+            //call %~d0%~p0..\copyFSharpDataTypeProviderDLL.cmd
+            do! CopyFSharpDataTypeProviderDLL.copy cfg dir
+        
+            do! SingleTestBuild.singleTestBuild cfg dir p
+        
+            do! SingleTestRun.singleTestRun cfg dir p
+            })
+
+
+
+module DiamondAssembly = 
+
+    let build cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let del = Commands.rm dir
+
+        // if EXIST provider.dll del provider.dll
+        del "provider.dll"
+
+        // "%FSC%" --out:provided.dll -a ..\helloWorld\provided.fs
+        do! fsc "%s" "--out:provided.dll -a" [".."/"helloWorld"/"provided.fs"]
+
+        // "%FSC%" --out:provider.dll -a ..\helloWorld\provider.fsx
+        do! fsc "%s" "--out:provider.dll -a" [".."/"helloWorld"/"provider.fsx"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test1.dll -a test1.fsx
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test1.dll -a" cfg.fsc_flags ["test1.fsx"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test2a.dll -a -r:test1.dll test2a.fsx
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test2a.dll -a -r:test1.dll" cfg.fsc_flags ["test2a.fsx"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test2b.dll -a -r:test1.dll test2b.fsx
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test2b.dll -a -r:test1.dll" cfg.fsc_flags ["test2b.fsx"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test3.exe -r:test1.dll -r:test2a.dll -r:test2b.dll test3.fsx
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test3.exe -r:test1.dll -r:test2a.dll -r:test2b.dll" cfg.fsc_flags ["test3.fsx"]
+
+        }
+
+    let run cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let fsi = Printf.ksprintf (Commands.fsi exec cfg.FSI)
+        let fileguard = (Commands.getfullpath dir) >> FileGuard.create
+
+        // "%PEVERIFY%" test1.dll
+        do! peverify "test1.dll"
+
+        // "%PEVERIFY%" test2a.dll
+        do! peverify "test2a.dll"
+
+        // "%PEVERIFY%" test2b.dll
+        do! peverify "test2b.dll"
+
+        // "%PEVERIFY%" test3.exe
+        do! peverify "test3.exe"
+
+        // test3.exe
+        do! exec ("."/"test3.exe") ""
+
+
+
+        // if exist test.ok (del /f /q test.ok)
+        use testOkFile = fileguard "test.ok"
+
+        // %CLIX% "%FSI%" %fsi_flags% test3.fsx && (
+        do! fsi "%s" cfg.fsi_flags ["test3.fsx"]
+
+        // dir test.ok > NUL 2>&1 ) || (
+        // @echo :FSI load failed
+        // set ERRORMSG=%ERRORMSG% FSI load failed;
+        do! testOkFile |> NUnitConf.checkGuardExists
+        // )
+
+        }
+
+    []
+    let diamondAssembly () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+
+
+module GlobalNamespace = 
+
+    []
+    let globalNamespace () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let csc = Printf.ksprintf (Commands.csc exec cfg.CSC)
+
+        // %CSC% /out:globalNamespaceTP.dll /debug+ /target:library /r:"%FSCOREDLLPATH%" globalNamespaceTP.cs
+        do! csc """/out:globalNamespaceTP.dll /debug+ /target:library /r:"%s" """ cfg.FSCOREDLLPATH ["globalNamespaceTP.cs"]
+
+        // "%FSC%" %fsc_flags% /debug+ /r:globalNamespaceTP.dll /optimize- test.fsx
+        do! fsc "%s /debug+ /r:globalNamespaceTP.dll /optimize-" cfg.fsc_flags ["test.fsx"]
+                
+        })
+
+
+module HelloWorld = 
+
+    let build cfg dir p = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let del = Commands.rm dir
+        let execIn workDir p = Command.exec workDir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc' execIn = Printf.ksprintf (Commands.fsc execIn cfg.FSC)
+        let mkdir = Commands.mkdir_p dir
+        let getfullpath = Commands.getfullpath dir
+
+        //if EXIST provided.dll del provided.dll
+        del "provided.dll"
+
+        //if EXIST provided1.dll del provided1.dll
+        del "provided1.dll"
+
+        //"%FSC%" --out:provided1.dll -g -a ..\helloWorld\provided.fs
+        do! fsc "%s" "--out:provided1.dll -g -a" [".."/"helloWorld"/"provided.fs"]
+
+        //if EXIST provided2.dll del provided2.dll
+        del "provided2.dll"
+
+        //"%FSC%" --out:provided2.dll -g -a ..\helloWorld\provided.fs
+        do! fsc "%s" "--out:provided2.dll -g -a" [".."/"helloWorld"/"provided.fs"]
+
+        //if EXIST provided3.dll del provided3.dll
+        del "provided3.dll"
+
+        //"%FSC%" --out:provided3.dll -g -a ..\helloWorld\provided.fs
+        do! fsc "%s" "--out:provided3.dll -g -a" [".."/"helloWorld"/"provided.fs"]
+
+        //if EXIST provided4.dll del provided4.dll
+        del "provided4.dll"
+
+        //"%FSC%" --out:provided4.dll -g -a ..\helloWorld\provided.fs
+        do! fsc "%s" "--out:provided4.dll -g -a" [".."/"helloWorld"/"provided.fs"]
+
+        //if EXIST providedJ.dll del providedJ.dll
+        del "providedJ.dll"
+
+        //"%FSC%" --out:providedJ.dll -g -a ..\helloWorld\providedJ.fs
+        do! fsc "%s" "--out:providedJ.dll -g -a" [".."/"helloWorld"/"providedJ.fs"]
+
+        //if EXIST providedK.dll del providedK.dll
+        del "providedK.dll"
+
+        //"%FSC%" --out:providedK.dll -g -a ..\helloWorld\providedK.fs
+        do! fsc "%s" "--out:providedK.dll -g -a" [".."/"helloWorld"/"providedK.fs"]
+
+        //"%FSC%" --out:providedNullAssemblyName.dll -g -a ..\helloWorld\providedNullAssemblyName.fsx
+        do! fsc "%s" "--out:providedNullAssemblyName.dll -g -a" [".."/"helloWorld"/"providedNullAssemblyName.fsx"]
+
+        //call %~d0%~p0\..\build-typeprovider-test.bat
+        do! BuildTypeProviderTest.build cfg dir p
+
+        //if EXIST provider_with_binary_compat_changes.dll del provider_with_binary_compat_changes.dll
+        del "provider_with_binary_compat_changes.dll"
+
+        //mkdir bincompat1
+        mkdir "bincompat1"
+
+        //pushd bincompat1
+        log "pushd bincompat1"
+        let bincompat1 = getfullpath "bincompat1"
+
+        //xcopy /y ..\*.dll .
+        Directory.EnumerateFiles(bincompat1/"..", "*.dll")
+        |> Seq.iter (fun from -> Commands.copy_y bincompat1 from ("."/Path.GetFileName(from)) |> ignore)
+
+        //"%FSC%" -g -a -o:test_lib.dll -r:provider.dll ..\test.fsx
+        do! fsc' (execIn bincompat1) "%s" "-g -a -o:test_lib.dll -r:provider.dll" [".."/"test.fsx"]
+
+        //"%FSC%" -r:test_lib.dll -r:provider.dll ..\testlib_client.fsx
+        do! fsc' (execIn bincompat1) "%s" "-r:test_lib.dll -r:provider.dll" [".."/"testlib_client.fsx"]
+
+        //popd
+        log "popd"
+
+        //mkdir bincompat2
+        mkdir "bincompat2"
+        
+        //pushd bincompat2
+        log "pushd bincompat2"
+        let bincompat2 = getfullpath "bincompat2"
+
+        //xcopy /y ..\bincompat1\*.dll .
+        Directory.EnumerateFiles(bincompat2/".."/"bincompat1", "*.dll")
+        |> Seq.iter (fun from -> Commands.copy_y bincompat2 from ("."/Path.GetFileName(from)) |> ignore)
+
+
+        //REM overwrite provider.dll
+        //"%FSC%" --define:ADD_AN_OPTIONAL_STATIC_PARAMETER --define:USE_IMPLICIT_ITypeProvider2 --out:provider.dll -g -a ..\provider.fsx
+        do! fsc' (execIn bincompat2) "%s" "--define:ADD_AN_OPTIONAL_STATIC_PARAMETER --define:USE_IMPLICIT_ITypeProvider2 --out:provider.dll -g -a" [".."/"provider.fsx"]
+
+        // "%FSC%" -g -a -o:test_lib_recompiled.dll -r:provider.dll ..\test.fsx
+        do! fsc' (execIn bincompat2) "-g -a -o:test_lib_recompiled.dll -r:provider.dll" [".."/"test.fsx"]
+
+        //REM This is the important part of the binary compatibility part of the test: the new provider is being used, but 
+        //REM with a binary that was generated w.r.t. the old provider. The new provider can still resolve the references
+        //REM generated by the old provider which are stored in the F# metadata for test_lib.dll
+        //"%FSC%" --define:ADD_AN_OPTIONAL_STATIC_PARAMETER -r:test_lib.dll -r:provider.dll ..\testlib_client.fsx
+        do! fsc' (execIn bincompat2) "%s" "--define:ADD_AN_OPTIONAL_STATIC_PARAMETER -r:test_lib.dll -r:provider.dll" [".."/"testlib_client.fsx"]
+
+        //"%PEVERIFY%" provider.dll
+        do! peverify (bincompat2/"provider.dll")
+
+        //"%PEVERIFY%" test_lib.dll
+        do! peverify (bincompat2/"test_lib.dll")
+
+        // "%PEVERIFY%" test_lib_recompiled.dll
+        do! peverify (bincompat2/"test_lib_recompiled.dll")
+
+        //"%PEVERIFY%" testlib_client.exe
+        do! peverify (bincompat2/"testlib_client.exe")
+
+        }
+
+    []
+    let helloWorld p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir p
+
+        do! SingleTestRun.singleTestRun cfg dir p
+                
+        })
+
+
+
+module HelloWorldCSharp = 
+
+    let build cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let csc = Printf.ksprintf (Commands.csc exec cfg.CSC)
+        let del = Commands.rm dir
+        let gacutil = Commands.gacutil exec cfg.GACUTIL
+
+        // if EXIST magic.dll del magic.dll
+        del "magic.dll"
+
+        // "%FSC%" --out:magic.dll -a magic.fs --keyfile:magic.snk
+        do! fsc "%s" "--out:magic.dll -a --keyfile:magic.snk" ["magic.fs "]
+
+        // REM == If we are running this test on a lab machine, we may not be running from an elev cmd prompt
+        // REM == In that case, ADMIN_PIPE is set to the tool to invoke the command elevated.
+        // IF DEFINED ADMIN_PIPE %ADMIN_PIPE% %GACUTIL% /if magic.dll
+        
+        //REVIEW check ADMIN_PIPE and elevated gac
+        ignore "useless ADMIN_PIPE, test are run as administrator"
+
+        // if EXIST provider.dll del provider.dll
+        del "provider.dll"
+
+        // %CSC% /out:provider.dll /target:library "/r:%FSCOREDLLPATH%" /r:magic.dll provider.cs
+        do! csc """/out:provider.dll /target:library "/r:%s" /r:magic.dll""" cfg.FSCOREDLLPATH ["provider.cs"]
+
+        // "%GACUTIL%" /if magic.dll
+        do! gacutil "/if" "magic.dll"
+
+        // "%FSC%" %fsc_flags% /debug+ /r:provider.dll /optimize- test.fsx
+        do! fsc "%s /debug+ /r:provider.dll /optimize-" cfg.fsc_flags ["test.fsx"]
+
+        }
+
+    let run cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+
+        // "%PEVERIFY%" magic.dll
+        do! peverify "magic.dll"
+
+        // "%PEVERIFY%" provider.dll
+        do! peverify "provider.dll"
+
+        // "%PEVERIFY%" test.exe
+        do! peverify "test.exe"
+
+        // test.exe
+        do! exec ("."/"test.exe") ""
+
+        }
+
+    []
+    let helloWorldCSharp () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
+
+
+
+module NegTests = 
+
+    let testData () = 
+        // set TESTS_SIMPLE=neg2h neg4 neg1 neg1_a neg2 neg2c neg2e neg2g neg6
+        let testsSimple = 
+            ["neg2h"; "neg4"; "neg1"; "neg1_a"; "neg2"; "neg2c"; "neg2e"; "neg2g"; "neg6"]
+        // REM neg7 - excluded 
+        // set TESTS_SIMPLE=%TESTS_SIMPLE% InvalidInvokerExpression providerAttributeErrorConsume ProviderAttribute_EmptyConsume
+            @ ["InvalidInvokerExpression"; "providerAttributeErrorConsume"; "ProviderAttribute_EmptyConsume"]
+        
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetNestedNamespaces_Exception
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_NamespaceName_Exception
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_NamespaceName_Empty
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetTypes_Exception
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_ResolveTypeName_Exception
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetNamespaces_Exception
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetStaticParameters_Exception 
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetInvokerExpression_Exception 
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetTypes_Null
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_ResolveTypeName_Null
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetNamespaces_Null
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetStaticParameters_Null
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_GetInvokerExpression_Null
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_DoesNotHaveConstructor
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_ConstructorThrows
+        // set TESTS_WITH_DEFINE=%TESTS_WITH_DEFINE% EVIL_PROVIDER_ReturnsTypeWithIncorrectNameFromApplyStaticArguments
+        let testsWithDefine = [
+            "EVIL_PROVIDER_GetNestedNamespaces_Exception";
+            "EVIL_PROVIDER_NamespaceName_Exception";
+            "EVIL_PROVIDER_NamespaceName_Empty";
+            "EVIL_PROVIDER_GetTypes_Exception";
+            "EVIL_PROVIDER_ResolveTypeName_Exception";
+            "EVIL_PROVIDER_GetNamespaces_Exception";
+            "EVIL_PROVIDER_GetStaticParameters_Exception";
+            "EVIL_PROVIDER_GetInvokerExpression_Exception";
+            "EVIL_PROVIDER_GetTypes_Null";
+            "EVIL_PROVIDER_ResolveTypeName_Null";
+            "EVIL_PROVIDER_GetNamespaces_Null";
+            "EVIL_PROVIDER_GetStaticParameters_Null";
+            "EVIL_PROVIDER_GetInvokerExpression_Null";
+            "EVIL_PROVIDER_DoesNotHaveConstructor";
+            "EVIL_PROVIDER_ConstructorThrows";
+            "EVIL_PROVIDER_ReturnsTypeWithIncorrectNameFromApplyStaticArguments" ]
+        
+        (testsSimple @ testsWithDefine)
+        |> List.map (fun t -> FSharpSuiteTestCaseData("typeProviders/negTests", t))
+
+    []
+    let negTests name = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Commands.fsc exec cfg.FSC
+        let del = Commands.rm dir
+        let fileExists = Commands.fileExists dir >> Option.isSome
+        let getfullpath = Commands.getfullpath dir
+
+        // if EXIST provided.dll del provided.dll
+        del "provided.dll"
+
+        // "%FSC%" --out:provided.dll -a ..\helloWorld\provided.fs
+        do! fsc "--out:provided.dll -a" [".."/"helloWorld"/"provided.fs"]
+
+        // if EXIST providedJ.dll del providedJ.dll
+        del "providedJ.dll"
+
+        // "%FSC%" --out:providedJ.dll -a ..\helloWorld\providedJ.fs
+        do! fsc "--out:providedJ.dll -a" [".."/"helloWorld"/"providedJ.fs"]
+
+        // if EXIST providedK.dll del providedK.dll
+        del "providedK.dll"
+
+        // "%FSC%" --out:providedK.dll -a ..\helloWorld\providedK.fs
+        do! fsc "--out:providedK.dll -a" [".."/"helloWorld"/"providedK.fs"]
+
+        // if EXIST provider.dll del provider.dll
+        del "provider.dll"
+
+        // "%FSC%" --out:provider.dll -a  provider.fsx
+        do! fsc "--out:provider.dll -a" ["provider.fsx"]
+
+        // "%FSC%" --out:provider_providerAttributeErrorConsume.dll -a  providerAttributeError.fsx
+        do! fsc "--out:provider_providerAttributeErrorConsume.dll -a" ["providerAttributeError.fsx"]
+
+        // "%FSC%" --out:provider_ProviderAttribute_EmptyConsume.dll -a  providerAttribute_Empty.fsx
+        do! fsc "--out:provider_ProviderAttribute_EmptyConsume.dll -a" ["providerAttribute_Empty.fsx"]
+
+        // if EXIST helloWorldProvider.dll del helloWorldProvider.dll
+        del "helloWorldProvider.dll"
+
+        // "%FSC%" --out:helloWorldProvider.dll -a  ..\helloWorld\provider.fsx
+        do! fsc "--out:helloWorldProvider.dll -a" [".."/"helloWorld"/"provider.fsx"]
+
+        // if EXIST MostBasicProvider.dll del MostBasicProvider.dll
+        del "MostBasicProvider.dll"
+
+        // "%FSC%" --out:MostBasicProvider.dll -a  MostBasicProvider.fsx
+        do! fsc "--out:MostBasicProvider.dll -a" ["MostBasicProvider.fsx"]
+
+        //REVIEW use testfixture setup to run this code ---^ only once?
+
+        // if "%1"=="" goto :RunAllTests
+        // if "%1"=="--withDefine" goto :RunSpecificWithDefine
+        // call :RunTest %1
+        // goto :ReportResults
+        ignore "is a parametrized test, like --withDefine"
+
+        // :Preprocess
+        let preprocess bslppName pref = processor {
+
+            let tempFile = Path.GetTempFileName()
+
+            let ``exec <`` l p = Command.exec dir cfg.EnvironmentVariables { Output = Output(Overwrite(tempFile)); Input = Some(RedirectInput(l)) } p >> checkResult
+            let ``| exec >`` out p = Command.exec dir cfg.EnvironmentVariables { Output = Output(Overwrite(out)); Input = Some(RedirectInput(tempFile)) } p >> checkResult
+
+            let ``fsi <`` = Printf.ksprintf (fun flags l -> Commands.fsi (``exec <`` l) cfg.FSI flags [])
+            let ``| fsi >`` = Printf.ksprintf (fun flags sources out -> Commands.fsi (``| exec >`` out) cfg.FSI flags sources)
+
+            // "%FSI%" --exec sed.fsx "" "%~d0%~p0provider_%1.dll" < %~1.%~2bslpp 
+            do! ``fsi <`` """--exec sed.fsx "" "%s" """ (getfullpath (sprintf "provider_%s.dll" name)) (sprintf "%s.%sbslpp" bslppName pref) 
+
+            // | fsi --exec sed.fsx "" "file:///%CD%\\" > %~1.%~2bsl
+            do! ``| fsi >`` """--exec sed.fsx "" "%O" """ (Uri(dir |> Commands.pathAddBackslash)) [] (sprintf "%s.%sbsl" bslppName pref)
+            }
+
+        // :RunTestWithDefine
+        let runTestWithDefine = processor {
+            // "%FSC%" --define:%1 --out:provider_%1.dll -a  provider.fsx
+            do! fsc (sprintf "--define:%s --out:provider_%s.dll -a" name name) ["provider.fsx"]
+
+            // :RunTest
+            // if EXIST %1.bslpp   call :Preprocess "%1" ""
+            do! if fileExists (sprintf "%s.bslpp" name)
+                then preprocess name ""
+                else Success
+
+            // if EXIST %1.vsbslpp call :Preprocess "%1" "vs"
+            do! if fileExists (sprintf "%s.vsbslpp" name)
+                then preprocess name "vs"
+                else Success
+
+            // :DoRunTest
+            // call ..\..\single-neg-test.bat %1
+            do! SingleNegTest.singleNegTest cfg dir name
+
+            }
+
+        // :RunSpecificWithDefine
+        // call :RunTestWithDefine %2
+        do! runTestWithDefine
+        // goto :ReportResults
+        ignore "useless, checked already"
+
+        // :RunAllTests
+        // for %%T in (%TESTS_SIMPLE%) do call :RunTest %%T
+        // for %%T in (%TESTS_WITH_DEFINE%) do call :RunTestWithDefine %%T
+        ignore "is a parametrized test"
+
+                
+        })
+
+
+module SplitAssembly = 
+
+    []
+    let splitAssembly p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+
+        // "%FSC%" --out:provider.dll -a provider.fs
+        do! fsc "--out:provider.dll -a" ["provider.fs"]
+
+        // "%FSC%" --out:providerDesigner.dll -a providerDesigner.fsx
+        do! fsc "--out:providerDesigner.dll -a" ["providerDesigner.fsx"]
+
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+
+module WedgeAssembly = 
+
+    let build cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let del = Commands.rm dir
+
+        // if EXIST provider.dll del provider.dll
+        del "provider.dll"
+
+        // if EXIST provided.dll del provided.dll
+        del "provided.dll"
+
+        // "%FSC%" --out:provided.dll -a ..\helloWorld\provided.fs
+        do! fsc "%s" "--out:provided.dll -a" [".."/"helloWorld"/"provided.fs"]
+
+        // if EXIST providedJ.dll del providedJ.dll
+        del "providedJ.dll"
+
+        // "%FSC%" --out:providedJ.dll -a ..\helloWorld\providedJ.fs
+        do! fsc "%s" "--out:providedJ.dll -a" [".."/"helloWorld"/"providedJ.fs"]
+
+        // if EXIST providedK.dll del providedK.dll
+        del "providedK.dll"
+
+        // "%FSC%" --out:providedK.dll -a ..\helloWorld\providedK.fs
+        do! fsc "%s" "--out:providedK.dll -a" [".."/"helloWorld"/"providedK.fs"]
+
+        // "%FSC%" --out:provider.dll -a ..\helloWorld\provider.fsx
+        do! fsc "%s" "--out:provider.dll -a" [".."/"helloWorld"/"provider.fsx"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test2a.dll -a test2a.fs
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test2a.dll -a" cfg.fsc_flags ["test2a.fs"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test2b.dll -a test2b.fs
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test2b.dll -a" cfg.fsc_flags ["test2b.fs"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test3.exe test3.fsx
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test3.exe" cfg.fsc_flags ["test3.fsx"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test2a-with-sig.dll -a test2a.fsi test2a.fs
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test2a-with-sig.dll -a" cfg.fsc_flags ["test2a.fsi"; "test2a.fs"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test2b-with-sig.dll -a test2b.fsi test2b.fs
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test2b-with-sig.dll -a" cfg.fsc_flags ["test2b.fsi"; "test2b.fs"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test3-with-sig.exe --define:SIGS test3.fsx
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test3-with-sig.exe --define:SIGS" cfg.fsc_flags ["test3.fsx"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test2a-with-sig-restricted.dll -a test2a-restricted.fsi test2a.fs
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test2a-with-sig-restricted.dll -a" cfg.fsc_flags ["test2a-restricted.fsi"; "test2a.fs"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test2b-with-sig-restricted.dll -a test2b-restricted.fsi test2b.fs
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test2b-with-sig-restricted.dll -a"cfg.fsc_flags ["test2b-restricted.fsi"; "test2b.fs"]
+
+        // "%FSC%" %fsc_flags% --debug+ -r:provider.dll --optimize- -o:test3-with-sig-restricted.exe --define:SIGS_RESTRICTED test3.fsx
+        do! fsc "%s --debug+ -r:provider.dll --optimize- -o:test3-with-sig-restricted.exe --define:SIGS_RESTRICTED" cfg.fsc_flags ["test3.fsx"]
+
+        }
+
+    let run cfg dir = processor {
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+
+        // "%PEVERIFY%" test2a.dll
+        do! peverify "test2a.dll"
+
+        // "%PEVERIFY%" test2b.dll
+        do! peverify "test2b.dll"
+
+        // "%PEVERIFY%" test3.exe
+        do! peverify "test3.exe"
+
+        // test3.exe
+        do! exec ("."/"test3.exe") ""
+
+        }
+
+    []
+    let wedgeAssembly () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        do! build cfg dir
+
+        do! run cfg dir
+                
+        })
diff --git a/tests/fsharp/typecheck/.gitignore b/tests/fsharp/typecheck/.gitignore
new file mode 100644
index 00000000000..4bfefa6abed
--- /dev/null
+++ b/tests/fsharp/typecheck/.gitignore
@@ -0,0 +1,8 @@
+sigs/*.err
+sigs/*.vserr
+sigs/pos*.dll
+sigs/pos*.exe
+
+full-rank-arrays/HighRankArrayTests.dll
+
+misc/tmptest*
diff --git a/tests/fsharp/typecheck/sigs/build.bat b/tests/fsharp/typecheck/sigs/build.bat
index 43708739c74..dfb52df1684 100644
--- a/tests/fsharp/typecheck/sigs/build.bat
+++ b/tests/fsharp/typecheck/sigs/build.bat
@@ -1,18 +1,37 @@
 @if "%_echo%"=="" echo off
 
 setlocal
-REM Configure the sample, i.e. where to find the F# compiler and C# compiler.
 
+REM Configure the sample, i.e. where to find the F# compiler and C# compiler.
 call %~d0%~p0..\..\..\config.bat
 
+call ..\..\single-neg-test.bat neg46
+@if ERRORLEVEL 1 goto Error
+
+call ..\..\single-neg-test.bat neg91
+@if ERRORLEVEL 1 goto Error
+
+call ..\..\single-neg-test.bat neg94
+@if ERRORLEVEL 1 goto Error
+
+"%FSC%" %fsc_flags% --target:exe -o:pos22.exe  pos22.fs 
+@if ERRORLEVEL 1 goto Error
+
+"%PEVERIFY%" pos22.exe
+@if ERRORLEVEL 1 goto Error
+
+pos22.exe
+@if ERRORLEVEL 1 goto Error
+
+call ..\..\single-neg-test.bat neg93
+@if ERRORLEVEL 1 goto Error
+
 "%FSC%" --noframework -r:"%FSCOREDLLPATH%" -r:"%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll" -r:"%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Core.dll" -r:"%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Data.dll" -r:"%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.dll" -r:"%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Numerics.dll" -a -o:pos21.dll  pos21.fs
 @if ERRORLEVEL 1 goto Error
 
 call ..\..\single-neg-test.bat neg92
 @if ERRORLEVEL 1 goto Error
 
-call ..\..\single-neg-test.bat neg91
-@if ERRORLEVEL 1 goto Error
 
 "%FSC%" %fsc_flags% --target:exe -o:pos20.exe  pos20.fs 
 @if ERRORLEVEL 1 goto Error
@@ -259,9 +278,6 @@ call ..\..\single-neg-test.bat neg48
 call ..\..\single-neg-test.bat neg47
 @if ERRORLEVEL 1 goto Error
 
-call ..\..\single-neg-test.bat neg46
-@if ERRORLEVEL 1 goto Error
-
 call ..\..\single-neg-test.bat neg10
 @if ERRORLEVEL 1 goto Error
 
@@ -325,7 +341,6 @@ call ..\..\single-neg-test.bat neg42
 "%PEVERIFY%" pos03a.dll
 @if ERRORLEVEL 1 goto Error
 
-
 call ..\..\single-neg-test.bat neg34
 @if ERRORLEVEL 1 goto Error
 
@@ -523,6 +538,8 @@ call ..\..\single-neg-test.bat neg35
 "%FSC%" %fsc_flags% -a -o:pos05.dll  pos05.fs
 @if ERRORLEVEL 1 goto Error
 
+REM --------Exit points------------------------
+
 :Ok
 echo Built fsharp %~f0 ok.
 endlocal
diff --git a/tests/fsharp/typecheck/sigs/neg46.bsl b/tests/fsharp/typecheck/sigs/neg46.bsl
index 4350b9a6f02..1bdf9fbc95b 100644
--- a/tests/fsharp/typecheck/sigs/neg46.bsl
+++ b/tests/fsharp/typecheck/sigs/neg46.bsl
@@ -23,6 +23,8 @@ neg46.fs(48,8,48,34): typecheck error FS0912: This declaration element is not pe
 
 neg46.fs(52,8,52,39): typecheck error FS0912: This declaration element is not permitted in an augmentation
 
+neg46.fs(56,8,56,11): typecheck error FS3192: Constructors are not permitted as extension members - they must be defined as part of the original definition of the type
+
 neg46.fs(56,8,56,11): typecheck error FS0871: Constructors cannot be defined for this type
 
 neg46.fs(56,17,56,20): typecheck error FS0787: The inherited type is not an object model type
diff --git a/tests/fsharp/typecheck/sigs/neg91.bsl b/tests/fsharp/typecheck/sigs/neg91.bsl
index afa9650ca45..704a7e282b2 100644
--- a/tests/fsharp/typecheck/sigs/neg91.bsl
+++ b/tests/fsharp/typecheck/sigs/neg91.bsl
@@ -10,3 +10,11 @@ neg91.fs(34,13,34,16): typecheck error FS0044: This construct is deprecated. Don
 neg91.fs(44,13,44,16): typecheck error FS3003: Don't touch me
 
 neg91.fs(54,13,54,16): typecheck error FS0057: It was just an experiment!. This warning can be disabled using '--nowarn:57' or '#nowarn "57"'.
+
+neg91.fs(63,11,63,27): typecheck error FS3191: This literal pattern does not take arguments
+
+neg91.fs(72,11,72,27): typecheck error FS3191: This literal pattern does not take arguments
+
+neg91.fs(80,11,80,38): typecheck error FS3191: This literal pattern does not take arguments
+
+neg91.fs(64,29,64,32): typecheck error FS3192: Constructors are not permitted as extension members - they must be defined as part of the original definition of the type
diff --git a/tests/fsharp/typecheck/sigs/neg91.fs b/tests/fsharp/typecheck/sigs/neg91.fs
index 09cb4849173..b0c0bac4e14 100644
--- a/tests/fsharp/typecheck/sigs/neg91.fs
+++ b/tests/fsharp/typecheck/sigs/neg91.fs
@@ -53,3 +53,53 @@ module TestExperimentalSet =
         let test () =
             A.x <- 1     
 
+
+module Bug528_Ex1 = 
+    module Color =
+        let [] Yellow = "Yellow"
+
+    let isRed inp = 
+        match inp with
+        | Color.Yellow arg ->   // should get an error here
+            failwith "Don't know this color"
+        | _ -> ""
+
+module Bug528_Ex2 = 
+    type Color = | Yellow = 1 | Red = 2
+
+    let isRed inp = 
+        match inp with
+        | Color.Yellow arg ->   // should get an error here
+            failwith "Don't know this color"
+        | _ -> ""            
+
+module Bug528_Ex3 = 
+
+    let isRed inp = 
+        match inp with
+        | System.DayOfWeek.Monday arg ->   // should get an error here
+            failwith "Don't know this day"
+        | _ -> ""
+
+module TestExtrinsicExtensionConstructor = 
+    // See https://github.com/Microsoft/visualfsharp/issues/659
+
+    type AugmentMe() = class end
+
+    module M = 
+        type AugmentMe with new(i) = AugmentMe()
+
+// don't expect an error here
+module TestIntrinsicExtensionConstructor1 = 
+    type AugmentMe = val _i : int
+    type AugmentMe with member i.I = i._i
+    type AugmentMe with new(i) = { _i = i } // don't expect an error here
+    let v = AugmentMe(42).I
+
+// don't expect an error here
+module TestIntrinsicExtensionConstructor2 = 
+    type AugmentMe() = class end
+    type AugmentMe with member i.I = 1
+    type AugmentMe with new(i) = AugmentMe()  // don't expect an error here
+    let v = AugmentMe(42).I
+
diff --git a/tests/fsharp/typecheck/sigs/neg93.bsl b/tests/fsharp/typecheck/sigs/neg93.bsl
new file mode 100644
index 00000000000..79c447d1ce2
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg93.bsl
@@ -0,0 +1,6 @@
+
+neg93.fs(8,19,8,22): typecheck error FS3187: Type inference caused the type variable TError to escape its scope. Consider adding an explicit type parameter declaration or adjusting your code to be less generic.
+
+neg93.fs(17,17,17,20): typecheck error FS3187: Type inference caused the type variable TError to escape its scope. Consider adding an explicit type parameter declaration or adjusting your code to be less generic.
+
+neg93.fs(21,10,21,13): typecheck error FS3188: Type inference caused an inference type variable to escape its scope. Consider adding type annotations to make your code less generic.
diff --git a/tests/fsharp/typecheck/sigs/neg93.fs b/tests/fsharp/typecheck/sigs/neg93.fs
new file mode 100644
index 00000000000..dcb4f82c461
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg93.fs
@@ -0,0 +1,23 @@
+namespace Neg93
+
+// See https://github.com/Microsoft/visualfsharp/issues/32
+module Repro1 = 
+ type T1<'TError>(xx:'TError) =
+    member x.Foo() = T2.Bar(xx)
+ and T2 =
+    static member Bar(arg) = 0
+
+//let rec f1<'TError>(xx:'TError) = f2(xx)
+//and f2(arg) = 0
+
+module Repro2 = 
+ type T1<'TError>(thisActuallyHasToBeHere:'TError) =
+  member x.Foo() = T2.Bar(failwith "!" : option<'TError>)
+ and T2 =
+  static member Bar(arg:option<_>) = 0
+
+module Repro3 = 
+
+ let rec foo< > c = bar c
+ and bar c = 0
+
diff --git a/tests/fsharp/typecheck/sigs/neg94-pre.fs b/tests/fsharp/typecheck/sigs/neg94-pre.fs
new file mode 100644
index 00000000000..e17cfa79a68
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg94-pre.fs
@@ -0,0 +1,19 @@
+namespace Neg94Pre
+
+open System
+
+type Class1() =
+  static member inline ($) (r:'R, _) = fun (x:'T) -> ((^R) : (static member method2: ^T -> ^R) x)
+  static member inline method1 x = Unchecked.defaultof<'r> $ Class1()
+
+type IComm = 
+    []
+    abstract CanExecuteChanged : IEvent 
+
+type Interface2<'T> =
+    inherit IComm
+
+type Class<'T>() =
+    interface Interface2<'T> with
+        []
+        member __.CanExecuteChanged : IEvent = Event().Publish
diff --git a/tests/fsharp/typecheck/sigs/neg94.bsl b/tests/fsharp/typecheck/sigs/neg94.bsl
new file mode 100644
index 00000000000..ca49d83c00f
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg94.bsl
@@ -0,0 +1,2 @@
+
+neg94.fs(6,12,6,21): typecheck error FS0039: The value or constructor 'undefined' is not defined
diff --git a/tests/fsharp/typecheck/sigs/neg94.fs b/tests/fsharp/typecheck/sigs/neg94.fs
new file mode 100644
index 00000000000..a95c8943ced
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg94.fs
@@ -0,0 +1,12 @@
+namespace Neg94
+
+module Repro1 = 
+  let v = Neg94Pre.Class1()
+
+  let v2 = undefined  
+  // We're expecting the compile of this file to fail, but the point is that the 
+  // reference of neg94-pre.dll shouldn't give extra warnings about bad definitions.
+  // See 
+  //    https://github.com/Microsoft/visualfsharp/issues/631
+  //    https://github.com/Microsoft/visualfsharp/issues/592
+
diff --git a/tests/fsharp/typecheck/sigs/pos22.fs b/tests/fsharp/typecheck/sigs/pos22.fs
new file mode 100644
index 00000000000..136a2d893fc
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/pos22.fs
@@ -0,0 +1,13 @@
+// https://github.com/Microsoft/visualfsharp/issues/583
+
+let rec recValNeverUsedAtRuntime = recFuncIgnoresFirstArg (fun _ -> recValNeverUsedAtRuntime) 1
+and recFuncIgnoresFirstArg g v = v
+
+// https://github.com/Microsoft/visualfsharp/issues/671
+type Base() =
+    abstract member Method : 't -> unit
+    default this.Method(t) = ()
+
+and Derived() =
+    inherit Base()
+    override this.Method(t) = base.Method(t)
\ No newline at end of file
diff --git a/tests/fsharp/typecheck/tests_typecheck.fs b/tests/fsharp/typecheck/tests_typecheck.fs
new file mode 100644
index 00000000000..fde38747bf0
--- /dev/null
+++ b/tests/fsharp/typecheck/tests_typecheck.fs
@@ -0,0 +1,311 @@
+module ``FSharp-Tests-Typecheck``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open FSharpTestSuiteTypes
+open NUnitConf
+open PlatformHelpers
+
+let testContext = FSharpTestSuite.testContext
+
+
+module ``Full-rank-arrays`` = 
+
+    []
+    let ``full-rank-arrays`` p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let csc = Printf.ksprintf (Commands.csc exec cfg.CSC)
+        
+        // %CSC% /target:library /out:HighRankArrayTests.dll .\Class1.cs
+        do! csc "/target:library /out:HighRankArrayTests.dll" ["Class1.cs"]
+
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+module Misc = 
+
+    []
+    let misc p = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+        
+        do! SingleTestBuild.singleTestBuild cfg dir p
+        
+        do! SingleTestRun.singleTestRun cfg dir p
+        })
+
+
+module Sigs = 
+
+    []
+    let sigs () = check (processor {
+        let { Directory = dir; Config = cfg } = testContext ()
+
+        let exec p = Command.exec dir cfg.EnvironmentVariables { Output = Inherit; Input = None; } p >> checkResult
+        let fsc = Printf.ksprintf (Commands.fsc exec cfg.FSC)
+        let peverify = Commands.peverify exec cfg.PEVERIFY ""
+        let fsc_flags = cfg.fsc_flags
+
+        let singleNegTest = SingleNegTest.singleNegTest cfg dir
+
+
+        // call ..\..\single-neg-test.bat neg91
+        do! singleNegTest "neg91"
+
+        // "%FSC%" %fsc_flags% --target:exe -o:pos20.exe  pos20.fs 
+        do! fsc "%s --target:exe -o:pos20.exe" fsc_flags ["pos20.fs"]
+        // "%PEVERIFY%" pos20.exe
+        do! peverify "pos20.exe"
+        // pos20.exe
+        do! exec ("."/"pos20.exe") ""
+
+        // "%FSC%" %fsc_flags% --target:exe -o:pos19.exe  pos19.fs 
+        do! fsc "%s --target:exe -o:pos19.exe" fsc_flags ["pos19.fs"]
+        // "%PEVERIFY%" pos19.exe
+        do! peverify "pos19.exe"
+        // pos19.exe
+        do! exec ("."/"pos19.exe") ""
+
+        // "%FSC%" %fsc_flags% --target:exe -o:pos18.exe  pos18.fs 
+        do! fsc "%s --target:exe -o:pos18.exe" fsc_flags ["pos18.fs"]
+        // "%PEVERIFY%" pos18.exe
+        do! peverify "pos18.exe"
+        // pos18.exe
+        do! exec ("."/"pos18.exe") ""
+
+        // "%FSC%" %fsc_flags% --target:exe -o:pos16.exe  pos16.fs 
+        do! fsc "%s --target:exe -o:pos16.exe" fsc_flags ["pos16.fs"]
+        // "%PEVERIFY%" pos16.exe
+        do! peverify "pos16.exe"
+        // pos16.exe
+        do! exec ("."/"pos16.exe") ""
+
+        // "%FSC%" %fsc_flags% --target:exe -o:pos17.exe  pos17.fs 
+        do! fsc "%s --target:exe -o:pos17.exe" fsc_flags ["pos17.fs"]
+        // "%PEVERIFY%" pos17.exe
+        do! peverify "pos17.exe"
+        // pos17.exe
+        do! exec ("."/"pos17.exe") ""
+
+        // "%FSC%" %fsc_flags% --target:exe -o:pos15.exe  pos15.fs 
+        do! fsc "%s --target:exe -o:pos15.exe" fsc_flags ["pos15.fs"]
+        // "%PEVERIFY%" pos15.exe
+        do! peverify "pos15.exe"
+        // pos15.exe
+        do! exec ("."/"pos15.exe") ""
+
+        // "%FSC%" %fsc_flags% --target:exe -o:pos14.exe  pos14.fs 
+        do! fsc "%s --target:exe -o:pos14.exe" fsc_flags ["pos14.fs"]
+        // "%PEVERIFY%" pos14.exe
+        do! peverify "pos14.exe"
+        // pos14.exe
+        do! exec ("."/"pos14.exe") ""
+
+        // "%FSC%" %fsc_flags% --target:exe -o:pos13.exe  pos13.fs
+        do! fsc "%s --target:exe -o:pos13.exe" fsc_flags ["pos13.fs"]
+        // "%PEVERIFY%" pos13.exe
+        do! peverify "pos13.exe"
+        // pos13.exe
+        do! exec ("."/"pos13.exe") ""
+
+        // "%FSC%" %fsc_flags% -a -o:pos12.dll  pos12.fs 
+        do! fsc "%s -a -o:pos12.dll" fsc_flags ["pos12.fs"]
+
+        // "%FSC%" %fsc_flags% -a -o:pos11.dll  pos11.fs 
+        do! fsc "%s -a -o:pos11.dll" fsc_flags ["pos11.fs"]
+
+        // "%FSC%" %fsc_flags% -a -o:pos10.dll  pos10.fs
+        do! fsc "%s -a -o:pos10.dll" fsc_flags ["pos10.fs"]
+
+        // "%PEVERIFY%" pos10.dll
+        do! peverify "pos10.dll"
+
+        // call ..\..\single-neg-test.bat neg90
+        // call ..\..\single-neg-test.bat neg89
+        // call ..\..\single-neg-test.bat neg88
+        do! processor.For (["neg90"; "neg89"; "neg88"], singleNegTest)
+
+        // "%FSC%" %fsc_flags% -a -o:pos09.dll  pos09.fs
+        do! fsc "%s -a -o:pos09.dll" fsc_flags ["pos09.fs"]
+
+        // "%PEVERIFY%" pos09.dll
+        do! peverify "pos09.dll"
+
+        // call ..\..\single-neg-test.bat neg87
+        // call ..\..\single-neg-test.bat neg86
+        // call ..\..\single-neg-test.bat neg85
+        // call ..\..\single-neg-test.bat neg84
+        // call ..\..\single-neg-test.bat neg83
+        // call ..\..\single-neg-test.bat neg82
+        // call ..\..\single-neg-test.bat neg81
+        // call ..\..\single-neg-test.bat neg80
+        // call ..\..\single-neg-test.bat neg79
+        // call ..\..\single-neg-test.bat neg78
+        // call ..\..\single-neg-test.bat neg77
+        // call ..\..\single-neg-test.bat neg76
+        // call ..\..\single-neg-test.bat neg75
+        // call ..\..\single-neg-test.bat neg74
+        // call ..\..\single-neg-test.bat neg73
+        // call ..\..\single-neg-test.bat neg72
+        // call ..\..\single-neg-test.bat neg71
+        // call ..\..\single-neg-test.bat neg70
+        // call ..\..\single-neg-test.bat neg69
+        // call ..\..\single-neg-test.bat neg68
+        // call ..\..\single-neg-test.bat neg67
+        // call ..\..\single-neg-test.bat neg66
+        // call ..\..\single-neg-test.bat neg65
+        // call ..\..\single-neg-test.bat neg64
+        // call ..\..\single-neg-test.bat neg61
+        // call ..\..\single-neg-test.bat neg63
+        // call ..\..\single-neg-test.bat neg62
+        // call ..\..\single-neg-test.bat neg20
+        // call ..\..\single-neg-test.bat neg24
+        // call ..\..\single-neg-test.bat neg32
+        // call ..\..\single-neg-test.bat neg37
+        // call ..\..\single-neg-test.bat neg37_a
+        // call ..\..\single-neg-test.bat neg60
+        // call ..\..\single-neg-test.bat neg59
+        // call ..\..\single-neg-test.bat neg58
+        // call ..\..\single-neg-test.bat neg57
+        // call ..\..\single-neg-test.bat neg56
+        // call ..\..\single-neg-test.bat neg56_a
+        // call ..\..\single-neg-test.bat neg56_b
+        // call ..\..\single-neg-test.bat neg55
+        // call ..\..\single-neg-test.bat neg54
+        // call ..\..\single-neg-test.bat neg53
+        // call ..\..\single-neg-test.bat neg52
+        // call ..\..\single-neg-test.bat neg51
+        // call ..\..\single-neg-test.bat neg50
+        // call ..\..\single-neg-test.bat neg49
+        // call ..\..\single-neg-test.bat neg48
+        // call ..\..\single-neg-test.bat neg47
+        // call ..\..\single-neg-test.bat neg46
+        // call ..\..\single-neg-test.bat neg10
+        // call ..\..\single-neg-test.bat neg10_a
+        // call ..\..\single-neg-test.bat neg45
+        // call ..\..\single-neg-test.bat neg44
+        // call ..\..\single-neg-test.bat neg43
+        // call ..\..\single-neg-test.bat neg38
+        // call ..\..\single-neg-test.bat neg39
+        // call ..\..\single-neg-test.bat neg40
+        // call ..\..\single-neg-test.bat neg41
+        // call ..\..\single-neg-test.bat neg42
+        do! processor.For (["neg87"; "neg86"; "neg85"; "neg84"; "neg83"; "neg82"; "neg81"; "neg80"; "neg79"; "neg78"; "neg77"; "neg76"; "neg75"; "neg74"; "neg73"; "neg72"; "neg71"; "neg70"; "neg69"; "neg68"; "neg67"; "neg66"; "neg65"; "neg64"; "neg61"; "neg63"; "neg62"; "neg20"; "neg24"; "neg32"; "neg37"; "neg37_a"; "neg60"; "neg59"; "neg58"; "neg57"; "neg56"; "neg56_a"; "neg56_b"; "neg55"; "neg54"; "neg53"; "neg52"; "neg51"; "neg50"; "neg49"; "neg48"; "neg47"; "neg46"; "neg10"; "neg10_a"; "neg45"; "neg44"; "neg43"; "neg38"; "neg39"; "neg40"; "neg41"; "neg42"], singleNegTest)
+
+        // "%FSC%" %fsc_flags% -a -o:pos07.dll  pos07.fs 
+        do! fsc "%s -a -o:pos07.dll" fsc_flags ["pos07.fs"]
+
+        // "%PEVERIFY%" pos07.dll
+        do! peverify "pos07.dll"
+
+
+        // "%FSC%" %fsc_flags% -a -o:pos08.dll  pos08.fs 
+        do! fsc "%s -a -o:pos08.dll" fsc_flags ["pos08.fs"]
+
+        // "%PEVERIFY%" pos08.dll
+        do! peverify "pos08.dll"
+
+        // "%FSC%" %fsc_flags% -a -o:pos06.dll  pos06.fs 
+        do! fsc "%s -a -o:pos06.dll" fsc_flags ["pos06.fs"]
+
+        // "%PEVERIFY%" pos06.dll
+        do! peverify "pos06.dll"
+
+
+        // "%FSC%" %fsc_flags% -a -o:pos03.dll  pos03.fs 
+        do! fsc "%s -a -o:pos03.dll" fsc_flags ["pos03.fs"]
+
+        // "%PEVERIFY%" pos03.dll
+        do! peverify "pos03.dll"
+
+        // "%FSC%" %fsc_flags% -a -o:pos03a.dll  pos03a.fsi pos03a.fs 
+        do! fsc "%s -a -o:pos03a.dll" fsc_flags ["pos03a.fsi"; "pos03a.fs"]
+
+        // "%PEVERIFY%" pos03a.dll
+        do! peverify "pos03a.dll"
+
+
+        // call ..\..\single-neg-test.bat neg34
+        // call ..\..\single-neg-test.bat neg33
+        // call ..\..\single-neg-test.bat neg30
+        // call ..\..\single-neg-test.bat neg31
+        // call ..\..\single-neg-test.bat neg29
+        // call ..\..\single-neg-test.bat neg28
+        // call ..\..\single-neg-test.bat neg07
+        // call ..\..\single-neg-test.bat neg_byref_20
+        // call ..\..\single-neg-test.bat neg_byref_1
+        // call ..\..\single-neg-test.bat neg_byref_2
+        // call ..\..\single-neg-test.bat neg_byref_3
+        // call ..\..\single-neg-test.bat neg_byref_4
+        // call ..\..\single-neg-test.bat neg_byref_5
+        // call ..\..\single-neg-test.bat neg_byref_6
+        // call ..\..\single-neg-test.bat neg_byref_7
+        // call ..\..\single-neg-test.bat neg_byref_8
+        // call ..\..\single-neg-test.bat neg_byref_10
+        // call ..\..\single-neg-test.bat neg_byref_11
+        // call ..\..\single-neg-test.bat neg_byref_12
+        // call ..\..\single-neg-test.bat neg_byref_13
+        // call ..\..\single-neg-test.bat neg_byref_14
+        // call ..\..\single-neg-test.bat neg_byref_15
+        // call ..\..\single-neg-test.bat neg_byref_16
+        // call ..\..\single-neg-test.bat neg_byref_17
+        // call ..\..\single-neg-test.bat neg_byref_18
+        // call ..\..\single-neg-test.bat neg_byref_19
+        // call ..\..\single-neg-test.bat neg_byref_21
+        // call ..\..\single-neg-test.bat neg_byref_22
+        // call ..\..\single-neg-test.bat neg_byref_23
+        // call ..\..\single-neg-test.bat neg36
+        // call ..\..\single-neg-test.bat neg17
+        // call ..\..\single-neg-test.bat neg26
+        // call ..\..\single-neg-test.bat neg27
+        // call ..\..\single-neg-test.bat neg25
+        // call ..\..\single-neg-test.bat neg03
+        // call ..\..\single-neg-test.bat neg23
+        // call ..\..\single-neg-test.bat neg22
+        // call ..\..\single-neg-test.bat neg21
+        // call ..\..\single-neg-test.bat neg04
+        // call ..\..\single-neg-test.bat neg05
+        // call ..\..\single-neg-test.bat neg06
+        // call ..\..\single-neg-test.bat neg06_a
+        // call ..\..\single-neg-test.bat neg06_b
+        // call ..\..\single-neg-test.bat neg08
+        // call ..\..\single-neg-test.bat neg09
+        // call ..\..\single-neg-test.bat neg11
+        // call ..\..\single-neg-test.bat neg12
+        // call ..\..\single-neg-test.bat neg13
+        // call ..\..\single-neg-test.bat neg14
+        // call ..\..\single-neg-test.bat neg16
+        // call ..\..\single-neg-test.bat neg18
+        // call ..\..\single-neg-test.bat neg19
+        // call ..\..\single-neg-test.bat neg01
+        // call ..\..\single-neg-test.bat neg02
+        // call ..\..\single-neg-test.bat neg15
+
+        do! processor.For(["neg34"; "neg33"; "neg30"; "neg31"; "neg29"; "neg28"; "neg07"; "neg_byref_20"; "neg_byref_1"; "neg_byref_2"; "neg_byref_3"; "neg_byref_4"; "neg_byref_5"; "neg_byref_6"; "neg_byref_7"; "neg_byref_8"; "neg_byref_10"; "neg_byref_11"; "neg_byref_12"; "neg_byref_13"; "neg_byref_14"; "neg_byref_15"; "neg_byref_16"; "neg_byref_17"; "neg_byref_18"; "neg_byref_19"; "neg_byref_21"; "neg_byref_22"; "neg_byref_23"; "neg36"; "neg17"; "neg26"; "neg27"; "neg25"; "neg03"; "neg23"; "neg22"; "neg21"; "neg04"; "neg05"; "neg06"; "neg06_a"; "neg06_b"; "neg08"; "neg09"; "neg11"; "neg12"; "neg13"; "neg14"; "neg16"; "neg18"; "neg19"; "neg01"; "neg02"; "neg15" ], singleNegTest)
+
+        // echo Some random positive cases found while developing the negative tests
+        // "%FSC%" %fsc_flags% -a -o:pos01a.dll  pos01a.fsi pos01a.fs
+        do! fsc "%s -a -o:pos01a.dll" fsc_flags ["pos01a.fsi"; "pos01a.fs"]
+
+        // "%PEVERIFY%" pos01a.dll
+        do! peverify "pos01a.dll"
+
+        // "%FSC%" %fsc_flags% -a -o:pos02.dll  pos02.fs
+        do! fsc "%s -a -o:pos02.dll" fsc_flags ["pos02.fs"]
+
+        // "%PEVERIFY%" pos02.dll
+        do! peverify "pos02.dll"
+
+        // call ..\..\single-neg-test.bat neg35
+        do! singleNegTest "neg35"
+
+        // "%FSC%" %fsc_flags% -a -o:pos05.dll  pos05.fs
+        do! fsc "%s -a -o:pos05.dll" fsc_flags ["pos05.fs"]
+
+        })
diff --git a/tests/fsharpqa/Source/.gitignore b/tests/fsharpqa/Source/.gitignore
new file mode 100644
index 00000000000..d9a2cd109b0
--- /dev/null
+++ b/tests/fsharpqa/Source/.gitignore
@@ -0,0 +1,5 @@
+
+#ignore all build outputs
+*.exe
+*.dll
+*.pdb
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.netfx4.bsl
index 9b6550337d7..70f8fc0cda4 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.netfx4.bsl
@@ -1,5 +1,5 @@
 
-//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.16774
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.33440
 //  Copyright (c) Microsoft Corporation.  All rights reserved.
 
 
@@ -13,7 +13,7 @@
 .assembly extern FSharp.Core
 {
   .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
-  .ver 4:0:0:0
+  .ver 4:4:0:9055
 }
 .assembly ForLoop01
 {
@@ -29,20 +29,20 @@
 }
 .mresource public FSharpSignatureData.ForLoop01
 {
-  // Offset: 0x00000000 Length: 0x00000163
+  // Offset: 0x00000000 Length: 0x00000143
 }
 .mresource public FSharpOptimizationData.ForLoop01
 {
-  // Offset: 0x00000168 Length: 0x00000050
+  // Offset: 0x00000148 Length: 0x00000050
 }
 .module ForLoop01.exe
-// MVID: {4DAC0DD7-1795-791C-A745-0383D70DAC4D}
+// MVID: {542DBE1D-1795-791C-A745-03831DBE2D54}
 .imagebase 0x00400000
 .file alignment 0x00000200
 .stackreserve 0x00100000
 .subsystem 0x0003       // WINDOWS_CUI
 .corflags 0x00000001    //  ILONLY
-// Image base: 0x00000000001F0000
+// Image base: 0x02A30000
 
 
 // =============== CLASS MEMBERS DECLARATION ===================
@@ -63,17 +63,15 @@
   .method public static void  main@() cil managed
   {
     .entrypoint
-    // Code size       116 (0x74)
+    // Code size       81 (0x51)
     .maxstack  5
     .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0,
-             [1] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_1,
-             [2] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_2,
-             [3] int32 wi,
-             [4] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_4,
-             [5] int32 V_5,
-             [6] class [mscorlib]System.IDisposable V_6)
+             [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1,
+             [2] int32 wi,
+             [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_3,
+             [4] int32 V_4)
     .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
-    .line 5,5 : 11,21 
+    .line 5,5 : 11,21
     IL_0000:  nop
     IL_0001:  ldc.i4.1
     IL_0002:  ldc.i4.1
@@ -84,67 +82,39 @@
     IL_0009:  call       class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [mscorlib]System.Collections.Generic.IEnumerable`1)
     IL_000e:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1)
     IL_0013:  stloc.0
-    .line 5,5 : 1,24 
     IL_0014:  ldloc.0
-    IL_0015:  unbox.any  class [mscorlib]System.Collections.Generic.IEnumerable`1
-    IL_001a:  callvirt   instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator()
-    IL_001f:  stloc.1
-    .try
-    {
-      IL_0020:  ldloc.1
-      IL_0021:  callvirt   instance bool [mscorlib]System.Collections.IEnumerator::MoveNext()
-      IL_0026:  brfalse.s  IL_0050
-
-      .line 6,6 : 4,19 
-      IL_0028:  ldloc.1
-      IL_0029:  callvirt   instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current()
-      IL_002e:  stloc.3
-      IL_002f:  ldstr      "%A"
-      IL_0034:  newobj     instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string)
-      IL_0039:  call       !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
-      IL_003e:  stloc.s    V_4
-      IL_0040:  ldloc.3
-      IL_0041:  stloc.s    V_5
-      IL_0043:  ldloc.s    V_4
-      IL_0045:  ldloc.s    V_5
-      IL_0047:  callvirt   instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
-      IL_004c:  pop
-      .line 100001,100001 : 0,0 
-      IL_004d:  nop
-      IL_004e:  br.s       IL_0020
-
-      IL_0050:  ldnull
-      IL_0051:  stloc.2
-      IL_0052:  leave.s    IL_0071
-
-    }  // end .try
-    finally
-    {
-      IL_0054:  ldloc.1
-      IL_0055:  isinst     [mscorlib]System.IDisposable
-      IL_005a:  stloc.s    V_6
-      IL_005c:  ldloc.s    V_6
-      IL_005e:  brfalse.s  IL_0062
-
-      IL_0060:  br.s       IL_0064
-
-      IL_0062:  br.s       IL_006e
-
-      .line 100001,100001 : 0,0 
-      IL_0064:  ldloc.s    V_6
-      IL_0066:  callvirt   instance void [mscorlib]System.IDisposable::Dispose()
-      IL_006b:  ldnull
-      IL_006c:  pop
-      IL_006d:  endfinally
-      .line 100001,100001 : 0,0 
-      IL_006e:  ldnull
-      IL_006f:  pop
-      IL_0070:  endfinally
-      .line 100001,100001 : 0,0 
-    }  // end handler
-    IL_0071:  ldloc.2
-    IL_0072:  pop
-    IL_0073:  ret
+    IL_0015:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_001a:  stloc.1
+    .line 5,5 : 1,24 ''
+    IL_001b:  ldloc.1
+    IL_001c:  ldnull
+    IL_001d:  cgt.un
+    IL_001f:  brfalse.s  IL_0050
+
+    .line 5,5 : 11,21 ''
+    IL_0021:  ldloc.0
+    IL_0022:  call       instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
+    IL_0027:  stloc.2
+    IL_0028:  ldstr      "%A"
+    IL_002d:  newobj     instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string)
+    IL_0032:  call       !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+    IL_0037:  stloc.3
+    IL_0038:  ldloc.2
+    IL_0039:  stloc.s    V_4
+    IL_003b:  ldloc.3
+    IL_003c:  ldloc.s    V_4
+    IL_003e:  callvirt   instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+    IL_0043:  pop
+    IL_0044:  ldloc.1
+    IL_0045:  stloc.0
+    IL_0046:  ldloc.0
+    IL_0047:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_004c:  stloc.1
+    .line 100001,100001 : 0,0 ''
+    IL_004d:  nop
+    IL_004e:  br.s       IL_001b
+
+    IL_0050:  ret
   } // end of method $ForLoop01::main@
 
 } // end of class ''.$ForLoop01
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/env.lst
index 272c8588724..25550a9df48 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/env.lst
@@ -37,7 +37,7 @@
 	SOURCE=Structs01.fs          SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Structs01.exe NetFx40"		# Structs01.fs - NetFx40
 	SOURCE=Structs02.fs          SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Structs02.exe NetFx40"		# Structs02.fs - NetFx40
 
-	SOURCE=cas.fs PRECMD="\$CSC_PIPE /t:library cas.cs" SCFLAGS="-r cas.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd cas.exe NetFx40"	# cas.fs - NetFx40
+	SOURCE=cas.fs PRECMD="\$CSC_PIPE /t:library /reference:System.Core.dll cas.cs" SCFLAGS="-r cas.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd cas.exe NetFx40"	# cas.fs - NetFx40
 
 	SOURCE=Marshal.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Marshal.exe"  # Marshal.fs
 	SOURCE=MethodImplNoInline.fs SCFLAGS="-O" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplNoInline.exe"						# MethodImplNoInline.fs
diff --git a/tests/fsharpqa/Source/CodeGen/Structure/DoNotInlineX.fs b/tests/fsharpqa/Source/CodeGen/Structure/DoNotInlineX.fs
index 2a10b0bf37b..058daf81589 100644
--- a/tests/fsharpqa/Source/CodeGen/Structure/DoNotInlineX.fs
+++ b/tests/fsharpqa/Source/CodeGen/Structure/DoNotInlineX.fs
@@ -12,11 +12,12 @@ let fsc =
     if not (String.IsNullOrEmpty(overridePath)) then 
         overridePath 
     else
-        let fsc45 = programFiles + @"\Microsoft SDKs\F#\4.0\Framework\v4.0\fsc.exe"
-        let fsc40 = programFiles + @"\Microsoft F#\v4.0\fsc.exe"
-        let fsc20 = programFiles + @"\FSharp-2.0.0.0\bin\fsc.exe"
-        
-        match ([fsc45; fsc40; fsc20] |> List.tryFind(fun x -> File.Exists(x))) with
+        let fsc41_SxS = Path.Combine(programFiles, @"Microsoft SDKs\F#\4.1\Framework\v4.0\fsc.exe")
+        let fsc40_SxS = Path.Combine(programFiles, @"Microsoft SDKs\F#\4.0\Framework\v4.0\fsc.exe")
+        let fsc40 = Path.Combine(programFiles, @"Microsoft F#\v4.0\fsc.exe")
+        let fsc20 = Path.Combine(programFiles, @"FSharp-2.0.0.0\bin\fsc.exe")
+
+        match ([fsc41_SxS; fsc40_SxS; fsc40; fsc20] |> List.tryFind(fun x -> File.Exists(x))) with
         | Some(path) -> path
         | None -> "fsc.exe"  // just use what's on the PATH
 
diff --git a/tests/fsharpqa/Source/CodeGen/Structure/env.lst b/tests/fsharpqa/Source/CodeGen/Structure/env.lst
index d2d91721640..f7531107d77 100644
--- a/tests/fsharpqa/Source/CodeGen/Structure/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/Structure/env.lst
@@ -36,7 +36,7 @@
 
 	SOURCE=DiscUnionCodeGen1.fs SCFLAGS="-r:CodeGenHelper.dll"      # DiscUnionCodeGen1.fs
 
-	SOURCE=ReadOnlyStructFromLib.fs SCFLAGS="-r:ReadWriteLib.dll" PRECMD="\$CSC_PIPE /target:library ReadWriteLib.cs"	# ReadOnlyStructFromLib.fs
+	SOURCE=ReadOnlyStructFromLib.fs SCFLAGS="-r:ReadWriteLib.dll" PRECMD="\$CSC_PIPE /target:library /reference:System.Core.dll ReadWriteLib.cs"	# ReadOnlyStructFromLib.fs
 
 	SOURCE=LocalTypeFunctionInIf.fs   # LocalTypeFunctionInIf.fs
 
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs
index 46696689744..d64c26cac0a 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs
@@ -27,6 +27,7 @@
 //section='- ERRORS AND WARNINGS -  ' ! option=warnaserror                    kind=OptionIntListSwitch
 //section='- ERRORS AND WARNINGS -  ' ! option=warn                           kind=OptionInt
 //section='- ERRORS AND WARNINGS -  ' ! option=nowarn                         kind=OptionStringList
+//section='- ERRORS AND WARNINGS -  ' ! option=warnon                         kind=OptionStringList
 //section='- ERRORS AND WARNINGS -  ' ! option=consolecolors                  kind=OptionSwitch
 //section='- LANGUAGE -             ' ! option=checked                        kind=OptionSwitch
 //section='- LANGUAGE -             ' ! option=define                         kind=OptionString
@@ -43,11 +44,14 @@
 //section='- ADVANCED -             ' ! option=staticlink                     kind=OptionString
 //section='- ADVANCED -             ' ! option=pdb                            kind=OptionString
 //section='- ADVANCED -             ' ! option=simpleresolution               kind=OptionUnit
+//section='- ADVANCED -             ' ! option=highentropyva                  kind=OptionSwitch
+//section='- ADVANCED -             ' ! option=subsystemversion               kind=OptionString
+//section='- ADVANCED -             ' ! option=targetprofile                  kind=OptionString
+//section='- ADVANCED -             ' ! option=quotations-debug               kind=OptionSwitch
 //section='NoSection                ' ! option=stamps                         kind=OptionUnit
 //section='NoSection                ' ! option=ranges                         kind=OptionSet
 //section='NoSection                ' ! option=terms                          kind=OptionUnit
 //section='NoSection                ' ! option=termsfile                      kind=OptionUnit
-//section='NoSection                ' ! option=use-incremental-build          kind=OptionUnit
 //section='NoSection                ' ! option=pause                          kind=OptionUnit
 //section='NoSection                ' ! option=detuple                        kind=OptionInt
 //section='NoSection                ' ! option=simulateException              kind=OptionString
@@ -70,15 +74,14 @@
 //section='NoSection                ' ! option=resolutionassemblyfoldersuffix kind=OptionString
 //section='NoSection                ' ! option=resolutionassemblyfoldersconditions kind=OptionString
 //section='NoSection                ' ! option=msbuildresolution              kind=OptionUnit
-//section='NoSection                ' ! option=indirectcallarraymethods       kind=OptionUnit
 //section='NoSection                ' ! option=alwayscallvirt                 kind=OptionSwitch
 //section='NoSection                ' ! option=nodebugdata                    kind=OptionUnit
 //section='NoSection                ' ! option=test                           kind=OptionString
-//section='NoSection                ' ! option=use-incremental-build          kind=OptionUnit
 //section='NoSection                ' ! option=vserrors                       kind=OptionUnit
 //section='NoSection                ' ! option=validate-type-providers        kind=OptionUnit
 //section='NoSection                ' ! option=LCID                           kind=OptionInt
 //section='NoSection                ' ! option=flaterrors                     kind=OptionUnit
+//section='NoSection                ' ! option=sqmsessionguid                 kind=OptionString
 //section='NoSection                ' ! option=jit                            kind=OptionSwitch
 //section='NoSection                ' ! option=localoptimize                  kind=OptionSwitch
 //section='NoSection                ' ! option=splitting                      kind=OptionSwitch
@@ -117,6 +120,8 @@
 //section='NoSection                ' ! option=no-string-interning            kind=OptionUnit
 //section='NoSection                ' ! option=statistics                     kind=OptionUnit
 //section='NoSection                ' ! option=generate-filter-blocks         kind=OptionUnit
+//section='NoSection                ' ! option=gccerrors                      kind=OptionUnit
+//section='NoSection                ' ! option=exename                        kind=OptionString
 //section='NoSection                ' ! option=max-errors                     kind=OptionInt
 //section='NoSection                ' ! option=debug-file                     kind=OptionString
 //section='NoSection                ' ! option=no-debug-file                  kind=OptionUnit
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx
index 21125b7a67a..89fa5e5b152 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx
@@ -19,6 +19,7 @@
 //section='- ERRORS AND WARNINGS -  ' ! option=warnaserror                    kind=OptionIntListSwitch
 //section='- ERRORS AND WARNINGS -  ' ! option=warn                           kind=OptionInt
 //section='- ERRORS AND WARNINGS -  ' ! option=nowarn                         kind=OptionStringList
+//section='- ERRORS AND WARNINGS -  ' ! option=warnon                         kind=OptionStringList
 //section='- ERRORS AND WARNINGS -  ' ! option=consolecolors                  kind=OptionSwitch
 //section='- LANGUAGE -             ' ! option=checked                        kind=OptionSwitch
 //section='- LANGUAGE -             ' ! option=define                         kind=OptionString
@@ -32,7 +33,6 @@
 //section='NoSection                ' ! option=ranges                         kind=OptionSet
 //section='NoSection                ' ! option=terms                          kind=OptionUnit
 //section='NoSection                ' ! option=termsfile                      kind=OptionUnit
-//section='NoSection                ' ! option=use-incremental-build          kind=OptionUnit
 //section='NoSection                ' ! option=stamps                         kind=OptionUnit
 //section='NoSection                ' ! option=pause                          kind=OptionUnit
 //section='NoSection                ' ! option=detuple                        kind=OptionInt
@@ -56,17 +56,22 @@
 //section='NoSection                ' ! option=resolutionassemblyfoldersuffix kind=OptionString
 //section='NoSection                ' ! option=resolutionassemblyfoldersconditions kind=OptionString
 //section='NoSection                ' ! option=msbuildresolution              kind=OptionUnit
-//section='NoSection                ' ! option=indirectcallarraymethods       kind=OptionUnit
+//section='NoSection                ' ! option=alwayscallvirt                 kind=OptionSwitch
+//section='NoSection                ' ! option=nodebugdata                    kind=OptionUnit
 //section='NoSection                ' ! option=test                           kind=OptionString
-//section='NoSection                ' ! option=use-incremental-build          kind=OptionUnit
+//section='NoSection                ' ! option=validate-type-providers        kind=OptionUnit
 //section='NoSection                ' ! option=vserrors                       kind=OptionUnit
 //section='NoSection                ' ! option=LCID                           kind=OptionInt
 //section='NoSection                ' ! option=flaterrors                     kind=OptionUnit
+//section='NoSection                ' ! option=sqmsessionguid                 kind=OptionString
+//section='NoSection                ' ! option=gccerrors                      kind=OptionUnit
+//section='NoSection                ' ! option=exename                        kind=OptionString
 //section='NoSection                ' ! option=jit                            kind=OptionSwitch
 //section='NoSection                ' ! option=localoptimize                  kind=OptionSwitch
 //section='NoSection                ' ! option=splitting                      kind=OptionSwitch
 //section='NoSection                ' ! option=versionfile                    kind=OptionString
 //section='NoSection                ' ! option=times                          kind=OptionUnit
+//section='NoSection                ' ! option=showextensionresolution        kind=OptionUnit
 //section='NoSection                ' ! option=metadataversion                kind=OptionString
 //section='NoSection                ' ! option=d                              kind=OptionString
 //section='NoSection                ' ! option=O                              kind=OptionSwitch
@@ -87,6 +92,8 @@
 //section='- ADVANCED -             ' ! option=gui                            kind=OptionSwitch
 //section='- ADVANCED -             ' ! option=quiet                          kind=OptionUnit
 //section='- ADVANCED -             ' ! option=readline                       kind=OptionSwitch
+//section='- ADVANCED -             ' ! option=quotations-debug               kind=OptionSwitch
+//section='- ADVANCED -             ' ! option=shadowcopyreferences           kind=OptionSwitch
 
 // These are for FSC.EXE ONLY:
 
@@ -137,6 +144,8 @@
 //section='NoSection                ' ! option=no-string-interning            kind=OptionUnit
 //section='NoSection                ' ! option=statistics                     kind=OptionUnit
 //section='NoSection                ' ! option=generate-filter-blocks         kind=OptionUnit
+//section='NoSection                ' ! option=gccerrors                      kind=OptionUnit
+//section='NoSection                ' ! option=exename                        kind=OptionString
 //section='NoSection                ' ! option=max-errors                     kind=OptionInt
 //section='NoSection                ' ! option=debug-file                     kind=OptionString
 //section='NoSection                ' ! option=no-debug-file                  kind=OptionUnit
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/comparer.fsx b/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/comparer.fsx
new file mode 100644
index 00000000000..b61815fc61f
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/comparer.fsx
@@ -0,0 +1,21 @@
+// #NoMT #CompilerOptions #RequiresENU #NETFX20Only #NETFX40Only 
+let fn1 = fsi.CommandLineArgs.[1]
+let fn2 = fsi.CommandLineArgs.[2]
+// Read file into an array
+let File2List(filename : string) = System.IO.File.ReadAllLines filename |> Array.toList
+let f1 = File2List fn1
+let f2 = File2List fn2
+let mutable i = 0
+
+let compare f1 f2 = 
+    (f1, f2) ||> List.forall2 (fun (a : string) (b : string) -> 
+                     i <- i + 1
+                     if (a = b) then true
+                     else 
+                         printfn "Files differ at line %d:" i
+                         printfn "\t>> %s" a
+                         printfn "\t<< %s" b
+                         false)
+
+exit (if (f1.Length = f2.Length && compare f1 f2) then 0
+      else 1)
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/env.lst
new file mode 100644
index 00000000000..e7cc45cb1e0
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/env.lst
@@ -0,0 +1,3 @@
+ReqENU	SOURCE=gccerrors01.fs COMPILE_ONLY=1 SCFLAGS="--gccerrors --nologo gccerrors01.fs >gccerrors01.txt" POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx gccerrors01.txt gccerrors01.bsl"	
+
+
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/gccerrors01.bsl b/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/gccerrors01.bsl
new file mode 100644
index 00000000000..f3a3d40d5e9
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/gccerrors01.bsl
@@ -0,0 +1,4 @@
+
+gccerrors01.fs:7:11: warning FS0025: Incomplete pattern matches on this expression. For example, the value '1' may indicate a case not covered by the pattern(s).
+
+gccerrors01.fs:8:14: warning FS0988: Main module of program is empty: nothing will happen when it is run
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/gccerrors01.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/gccerrors01.fs
new file mode 100644
index 00000000000..91ba04052f7
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/gccerrors/gccerrors01.fs
@@ -0,0 +1,9 @@
+// #Regression #NoMT #CompilerOptions 
+// Regression test for FSHARP1.0:6108
+
+module M
+
+let ff () =
+    match 1 with
+    | 0 -> ()
+
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl
index d33d914dcca..7ed059b54bc 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl
@@ -26,6 +26,8 @@ Copyright (c) Microsoft Corporation. All Rights Reserved.
                                containing F#-specific metadata
 --sig:                   Print the inferred interface of the assembly to
                                a file
+--nocopyfsharpcore             Don't copy FSharp.Core.dll along the produced
+                               binaries
 
 
 		- INPUT FILES -
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat b/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat
index 99bd6097c77..f3757b0fcaf 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/highentropyva/CheckHighEntropyASLR.bat
@@ -8,8 +8,11 @@ IF ERRORLEVEL 1 (
     )
 )
 
+
+SET LINK_EXE=%VS140COMNTOOLS%\..\..\VC\bin\link.exe
+
 REM %1 -- assembly to check
 REM %2 -- expected value ("yes" or "no")
-link /dump /headers %1 | find "High Entropy Virtual Addresses" > NUL
+"%LINK_EXE%" /dump /headers %1 | find "High Entropy Virtual Addresses" > NUL
 IF /I "%2"=="yes" IF     ERRORLEVEL 1 EXIT /B 1
 IF /I "%2"=="no"  IF NOT ERRORLEVEL 1 EXIT /B 1
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/E_responsefile_not_found.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/E_responsefile_not_found.fs
new file mode 100644
index 00000000000..e566097a42c
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/E_responsefile_not_found.fs
@@ -0,0 +1,3 @@
+// #NoMT #CompilerOptions 
+//
+exit 1
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/E_responsefile_path_invalid.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/E_responsefile_path_invalid.fs
new file mode 100644
index 00000000000..860167f29de
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/E_responsefile_path_invalid.fs
@@ -0,0 +1,3 @@
+// #NoMT #CompilerOptions 
+//
+exit 1
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/empty_rs.rsp b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/empty_rs.rsp
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/env.lst
new file mode 100644
index 00000000000..45f9472bb80
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/env.lst
@@ -0,0 +1,8 @@
+	SOURCE="responsefile01.fs"  SCFLAGS="--define:FROM_RESPONSE_FILE_1"		# responsefile01.fs define
+	SOURCE="responsefile01.fs"  SCFLAGS="\@rs1.rsp"							# responsefile01.fs define inside response file
+	SOURCE="responsefile01.fs"  SCFLAGS="\@rs1_multiline_and_comments.rsp"	# responsefile01.fs comments/newline inside response file
+	SOURCE="responsefile01.fs \@rs2.rsp"  									# responsefile01.fs nested response file, different position
+	SOURCE="responsefile01.fs \@empty_rs.rsp \@rs2.rsp \@empty_rs.rsp "  	# responsefile01.fs nested response file
+	SOURCE="responsefile02.fs"  SCFLAGS="\@rs1_multiline_and_comments.rsp"	# responsefile02.fs response file multiline
+	SOURCE="E_responsefile_not_found.fs" COMPILE_ONLY=1 SCFLAGS="\@not_exists"	# E_responsefile_not_found.fs error if response file does not exists
+	SOURCE="E_responsefile_path_invalid.fs" COMPILE_ONLY=1 SCFLAGS="\@"			# E_responsefile_path_invalid.fs error if response file name is empty or invalid
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/responsefile01.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/responsefile01.fs
new file mode 100644
index 00000000000..f6b04c2c5ef
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/responsefile01.fs
@@ -0,0 +1,13 @@
+// #NoMT #CompilerOptions 
+//
+
+[]
+let main args =
+   let expected =
+   #if FROM_RESPONSE_FILE_1
+       "ok"
+   #else
+       "fail"
+   #endif
+
+   exit(if(expected = "ok") then 0 else 1)
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/responsefile02.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/responsefile02.fs
new file mode 100644
index 00000000000..13e56008605
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/responsefile02.fs
@@ -0,0 +1,20 @@
+// #NoMT #CompilerOptions 
+//
+
+[]
+let main args =
+   let expected1 =
+   #if FROM_RESPONSE_FILE_1
+       "ok"
+   #else
+       "fail"
+   #endif
+
+   let expected2 =
+   #if FROM_RESPONSE_FILE_2
+       "ok"
+   #else
+       "fail"
+   #endif
+
+   exit(if(expected1 = "ok" && expected2 = "ok") then 0 else 1)
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/rs1.rsp b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/rs1.rsp
new file mode 100644
index 00000000000..925dca2db44
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/rs1.rsp
@@ -0,0 +1 @@
+--define:FROM_RESPONSE_FILE_1
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/rs1_multiline_and_comments.rsp b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/rs1_multiline_and_comments.rsp
new file mode 100644
index 00000000000..59208bf2fbd
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/rs1_multiline_and_comments.rsp
@@ -0,0 +1,10 @@
+
+# some comments
+
+--define:FROM_RESPONSE_FILE_1
+
+#other comments
+
+--define:FROM_RESPONSE_FILE_2
+
+# end of comments
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/rs2.rsp b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/rs2.rsp
new file mode 100644
index 00000000000..974a1e339af
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/responsefile/rs2.rsp
@@ -0,0 +1 @@
+@rs1.rsp
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat b/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat
index 757fd7d8821..c8b254c9ea1 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/CheckSubsystemVersion.bat
@@ -10,6 +10,8 @@ IF ERRORLEVEL 1 (
     )
 )
 
-link /dump /headers %1 | find "%2 subsystem version" > NUL
+SET LINK_EXE=%VS140COMNTOOLS%\..\..\VC\bin\link.exe
+
+"%LINK_EXE%" /dump /headers %1 | find "%2 subsystem version" > NUL
 IF ERRORLEVEL 1 EXIT /B 1
 EXIT /B 0
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/comparer.fsx b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/comparer.fsx
new file mode 100644
index 00000000000..3fef54600d1
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/comparer.fsx
@@ -0,0 +1,21 @@
+// #NoMT #CompilerOptions #RequiresENU #NETFX20Only #NETFX40Only 
+let fn1 = fsi.CommandLineArgs.[1]
+let fn2 = fsi.CommandLineArgs.[2]
+let File2List(filename : string) = System.IO.File.ReadAllLines filename |> Array.toList
+let f1 = File2List fn1
+let f2 = File2List fn2
+let mutable i = 0
+
+let compare f1 f2 = 
+    (f1,f2) ||> List.forall2 (fun a b -> 
+        i <- i + 1
+        if (a = b) then true
+        else 
+            printfn "Files differ at line %d:" i
+            printfn "\t>> %s" a
+            printfn "\t<< %s" b
+            false) 
+
+exit (if compare f1 f2 then 0
+      else 1)
+
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/dummy.fsx b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/dummy.fsx
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/dummy.fsx
@@ -0,0 +1 @@
+
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/env.lst
new file mode 100644
index 00000000000..58ac3b820a0
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/env.lst
@@ -0,0 +1,5 @@
+
+ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --exename:fsharpi --help >help.txt" FSIMODE=EXEC POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx help.txt help40.437.1033.bsl"	# -?-40
+
+
+
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl
new file mode 100644
index 00000000000..ed3ddc1c1e1
--- /dev/null
+++ b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl
@@ -0,0 +1,63 @@
+
+Usage: fsharpi  [script.fsx []]
+
+
+		- INPUT FILES -
+--use:                   Use the given file on startup as initial input
+--load:                  #load the given file on startup
+--reference:             Reference an assembly (Short form: -r)
+-- ...                         Treat remaining arguments as command line
+                               arguments, accessed using fsi.CommandLineArgs
+
+
+		- CODE GENERATION -
+--debug[+|-]                   Emit debug information (Short form: -g)
+--debug:{full|pdbonly}         Specify debugging type: full, pdbonly. ('full'
+                               is the default and enables attaching a debugger
+                               to a running program).
+--optimize[+|-]                Enable optimizations (Short form: -O)
+--tailcalls[+|-]               Enable or disable tailcalls
+--crossoptimize[+|-]           Enable or disable cross-module optimizations
+
+
+		- ERRORS AND WARNINGS -
+--warnaserror[+|-]             Report all warnings as errors
+--warnaserror[+|-]:  Report specific warnings as errors
+--warn:                     Set a warning level (0-5)
+--nowarn:            Disable specific warning messages
+--warnon:            Enable specific warnings that may be off by
+                               default
+--consolecolors[+|-]           Output warning and error messages in color
+
+
+		- LANGUAGE -
+--checked[+|-]                 Generate overflow checks
+--define:              Define conditional compilation symbols (Short
+                               form: -d)
+--mlcompatibility              Ignore ML compatibility warnings
+
+
+		- MISCELLANEOUS -
+--nologo                       Suppress compiler copyright message
+--help                         Display this usage message (Short form: -?)
+
+
+		- ADVANCED -
+--codepage:                 Specify the codepage used to read source files
+--utf8output                   Output messages in UTF-8 encoding
+--fullpaths                    Output messages with fully qualified paths
+--lib:                Specify a directory for the include path which
+                               is used to resolve source files and assemblies
+                               (Short form: -I)
+--noframework                  Do not reference the default CLI assemblies by
+                               default
+--exec                         Exit fsi after loading the files or running the
+                               .fsx script given on the command line
+--gui[+|-]                     Execute interactions on a Windows Forms event
+                               loop (on by default)
+--quiet                        Suppress fsi writing to stdout
+--readline[+|-]                Support TAB completion in console (on by
+                               default)
+--quotations-debug[+|-]        Emit debug information in quotations
+--shadowcopyreferences[+|-]    Prevents references from being locked by the F#
+                               Interactive process
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/ArgumentsOfAllTypes/env.lst b/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/ArgumentsOfAllTypes/env.lst
index cff630d5bd0..e740078e5a7 100644
--- a/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/ArgumentsOfAllTypes/env.lst
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/ArgumentsOfAllTypes/env.lst
@@ -1,12 +1,12 @@
 # This test builds an F# library with attributes..
 # ... and then it consumes them from C# code
 NoMT	SOURCE=FSharpAttrLibrary.fs SCFLAGS=-a						# FSharpAttrLibrary.fs
-NoMT	SOURCE=dummy.fs PRECMD="\$CSC_PIPE CSharpConsumer.cs /r:FSharpAttrLibrary.dll" POSTCMD=CSharpConsumer.exe	# CSharpConsumer
+NoMT	SOURCE=dummy.fs PRECMD="\$CSC_PIPE CSharpConsumer.cs /reference:System.Core.dll /r:FSharpAttrLibrary.dll" POSTCMD=CSharpConsumer.exe	# CSharpConsumer
 
 # The following tests build a C# library with attributes...
 # .. then consumes them from F# directly and also by creating other attributes inherited from them
 # .. which are eventually consumed again from F#
-NoMT	SOURCE=dummy.fs PRECMD="\$CSC_PIPE /target:library CSLibraryWithAttributes.cs"	# CSLibraryWithAttributes.cs
+NoMT	SOURCE=dummy.fs PRECMD="\$CSC_PIPE /target:library /reference:System.dll CSLibraryWithAttributes.cs"	# CSLibraryWithAttributes.cs
 NoMT	SOURCE=System_Int16.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Int16.fsx
 NoMT	SOURCE=System_Int16_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_Int16.dll"	# System_Int16_Consumer.fsx
 NoMT	SOURCE=System_Int32.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Int32.fsx
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/E_ErrorsforIncompleteTryCatch.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/E_ErrorsforIncompleteTryCatch.fs
index cbe31d9a6f9..78924af32c8 100644
--- a/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/E_ErrorsforIncompleteTryCatch.fs
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/E_ErrorsforIncompleteTryCatch.fs
@@ -1,6 +1,6 @@
 // #Regression #Conformance #DeclarationElements #LetBindings 
 // Regression test for FSharp1.0:4488
-// fsc throws ICE on source code error with --use-incremental-build [was TABs caused ICE]
+// fsc throws ICE on source code error [was TABs caused ICE]
 //Possible incorrect indentation: this token is offside of context started at position \(9:5\)\. Try indenting this token further or using standard formatting conventions\.$
 //Unexpected start of structured construct in expression$
 //Unmatched '\('$
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/env.lst b/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/env.lst
index ac3d3fd7a8c..97702ef99d1 100644
--- a/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/env.lst
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/LetBindings/Basic/env.lst
@@ -22,7 +22,7 @@
 
 	SOURCE=E_GenericTypeAnnotations01.fs    SCFLAGS="--test:ErrorRanges"				# E_GenericTypeAnnotations01.fs
 	SOURCE=E_AttributesOnLet01.fs           SCFLAGS="--test:ErrorRanges"				# E_AttributesOnLet01.fs
-	SOURCE=E_ErrorsforIncompleteTryCatch.fs SCFLAGS="--use-incremental-build --test:ErrorRanges"	# E_ErrorsforIncompleteTryCatch.fs
+	SOURCE=E_ErrorsforIncompleteTryCatch.fs SCFLAGS="--test:ErrorRanges"	# E_ErrorsforIncompleteTryCatch.fs
 	SOURCE=E_InvalidInnerRecursiveBinding.fs        SCFLAGS="--test:ErrorRanges"	#E_InvalidInnerRecursiveBinding.fs
 	SOURCE=E_InvalidInnerRecursiveBinding2.fs       SCFLAGS="--test:ErrorRanges"	#E_InvalidInnerRecursiveBinding2.fs
 	SOURCE=RecursiveBindingGroup.fs         SCFLAGS=""	#RecursiveBindingGroup.fs
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OptionalArguments/TestLib.cs b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OptionalArguments/TestLib.cs
index 9e87bfe99c5..6e677454584 100644
--- a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OptionalArguments/TestLib.cs
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OptionalArguments/TestLib.cs
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 
 namespace TestLib {
     public class T {
@@ -13,11 +14,11 @@ public int ValueTypeOptArg(int x = 100) {
         public int? NullableOptArgNullDefault(int? x = null) {
             return x;
         }
-        
+
         public double? NullableOptArgWithDefault(double? x = 5.7) {
             return x;
-        }        
-           
+        }
+
         public string NullOptArg(string x = null) {
             return x;
         }
@@ -25,14 +26,14 @@ public string NullOptArg(string x = null) {
         public string NonNullOptArg(string x = "abc") {
             return x;
         }
-        
+
         public List GenericOptArg(List x = null) {
             return x;
         }
 
         public string ComboOptionals(string required, string a = null, string b = "abc", int c = 100, int? d = 200, double? e = null, List f = null) {
-            var result = String.Format("[{0}] [{1}] [{2}] [{3}] [{4}] [{5}]", a, b, c, d, e, f);
+            var result = String.Format(CultureInfo.InvariantCulture, "[{0}] [{1}] [{2}] [{3}] [{4}] [{5}]", a, b, c, d, e, f);
             return result;
-        }        
+        }
     }
 }
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst
index 49101543187..39faed87dcb 100644
--- a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst
@@ -13,7 +13,7 @@
 	SOURCE=TieBreakerRule01b.fs	# TieBreakerRule01b.fs
 	SOURCE=TieBreakerRule02.fs	# TieBreakerRule02.fs
 	SOURCE=TieBreakerRule03.fs	# TieBreakerRule03.fs
-NOMONO,NoMT	SOURCE=ConsumeOverloadGenericMethods.fs SCFLAGS="-r:lib.dll" PRECMD="\$CSC_PIPE /t:library lib.cs"	# ConsumeOverloadGenericMethods.fs
+NOMONO,NoMT	SOURCE=ConsumeOverloadGenericMethods.fs SCFLAGS="-r:lib.dll" PRECMD="\$CSC_PIPE /t:library /reference:System.Core.dll lib.cs"	# ConsumeOverloadGenericMethods.fs
 
 	SOURCE=E_InferredTypeNotUnique01.fs SCFLAGS="--test:ErrorRanges"			# E_InferredTypeNotUnique01.fs
 	SOURCE=TooGeneric.fs SCFLAGS="--define:TOO_GENERIC"	# TooGeneric.fs
diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/Comments/E_embeddedString005.fs b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/Comments/E_embeddedString005.fs
index 2fc21e7af38..944e2270832 100644
--- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/Comments/E_embeddedString005.fs
+++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/Comments/E_embeddedString005.fs
@@ -1,7 +1,7 @@
 // #Regression #Conformance #LexicalAnalysis 
 // string embedded in a comment: malformed string
 // which yield to a compilation error
-//Redundant arguments are being ignored in function 'failwith'\. Expected 1 but got 2 arguments\.$
+module M
+let f() = failwith "Used" "Ignored"
+let g() = failwith "Used"
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Diagnostics/General/W_FailwithfRedundantArgs.fs b/tests/fsharpqa/Source/Diagnostics/General/W_FailwithfRedundantArgs.fs
new file mode 100644
index 00000000000..6a60486e5ab
--- /dev/null
+++ b/tests/fsharpqa/Source/Diagnostics/General/W_FailwithfRedundantArgs.fs
@@ -0,0 +1,8 @@
+// #Regression #Diagnostics 
+//Redundant arguments are being ignored in function 'failwithf'\. Expected 3 but got 4 arguments\.$
+module M
+let f() = failwithf "Used %A %s" "this" "but not" "this"
+let g() = failwith "Used %A" "this"
+let h() =
+  let failwithf arg = Printf.ksprintf failwith arg
+  failwithf "Used" "Ignored"
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Diagnostics/General/W_InvalidArgRedundantArgs.fs b/tests/fsharpqa/Source/Diagnostics/General/W_InvalidArgRedundantArgs.fs
new file mode 100644
index 00000000000..be18dc99dd0
--- /dev/null
+++ b/tests/fsharpqa/Source/Diagnostics/General/W_InvalidArgRedundantArgs.fs
@@ -0,0 +1,8 @@
+// #Regression #Diagnostics 
+//Redundant arguments are being ignored in function 'invalidArg'\. Expected 2 but got 3 arguments\.$
+module M
+type T() =
+  member __.M1 source =
+    invalidArg source "Used" "Ignored"
+  member __.M2 source =
+    invalidArg source "Used"
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Diagnostics/General/W_InvalidOpRedundantArgs.fs b/tests/fsharpqa/Source/Diagnostics/General/W_InvalidOpRedundantArgs.fs
new file mode 100644
index 00000000000..8e9bcc705d7
--- /dev/null
+++ b/tests/fsharpqa/Source/Diagnostics/General/W_InvalidOpRedundantArgs.fs
@@ -0,0 +1,7 @@
+// #Regression #Diagnostics 
+//Redundant arguments are being ignored in function 'invalidOp'\. Expected 1 but got 2 arguments\.$
+namespace M0
+module M1 =
+  module M2 =
+    let f source = invalidOp source "Ignored"
+    let g source = invalidOp source
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralIgnored.fs b/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralIgnored.fs
new file mode 100644
index 00000000000..6959ae44400
--- /dev/null
+++ b/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralIgnored.fs
@@ -0,0 +1,13 @@
+// #Regression #Diagnostics 
+//Lowercase literal 'lowerCase' is being shadowed by a new pattern with the same name\. Only uppercase and module-prefixed literals can be used as named patterns\.$
+module M
+
+let [] lowerCase = "lowerCase"
+let [] UpperCase = "UpperCase"
+
+let f = function
+  | UpperCase -> "UpperCase"
+  | lowerCase -> "LowerCase"
+
+f "A" |> ignore
+
diff --git a/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs b/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs
new file mode 100644
index 00000000000..6e45e9cff04
--- /dev/null
+++ b/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs
@@ -0,0 +1,15 @@
+// #Regression #Diagnostics 
+//This rule will never be matched$
+module M0
+
+module m1 =
+  let [] lowerCase = "lowerCase"
+  let [] UpperCase = "UpperCase"
+
+module M2 =
+  let f = function
+    | m1.lowerCase -> "LowerCase"
+    | lowerCase2 -> "LowerCase2"
+    | _ -> "Don't know"
+
+printfn "%A" (M2.f "B")
diff --git a/tests/fsharpqa/Source/Diagnostics/General/W_NullArgRedundantArgs.fs b/tests/fsharpqa/Source/Diagnostics/General/W_NullArgRedundantArgs.fs
new file mode 100644
index 00000000000..6e121c4c31d
--- /dev/null
+++ b/tests/fsharpqa/Source/Diagnostics/General/W_NullArgRedundantArgs.fs
@@ -0,0 +1,7 @@
+// #Regression #Diagnostics 
+//Redundant arguments are being ignored in function 'nullArg'\. Expected 1 but got 2 arguments\.$
+namespace M0
+module M1 =
+  module M2 =
+    let f arg = nullArg "arg" "Ignored"
+    let g arg = nullArg "arg"
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Diagnostics/General/W_RaiseRedundantArgs.fs b/tests/fsharpqa/Source/Diagnostics/General/W_RaiseRedundantArgs.fs
new file mode 100644
index 00000000000..1c9abc9b4a8
--- /dev/null
+++ b/tests/fsharpqa/Source/Diagnostics/General/W_RaiseRedundantArgs.fs
@@ -0,0 +1,8 @@
+// #Regression #Diagnostics 
+//Redundant arguments are being ignored in function 'raise'\. Expected 1 but got 2 arguments\.$
+module M
+type T() =
+  member __.M1() =
+    raise (exn()) "Ignored"
+  member __.M2() =
+    raise (exn())
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Diagnostics/General/env.lst b/tests/fsharpqa/Source/Diagnostics/General/env.lst
index b6d102b9e79..3191a2da92e 100644
--- a/tests/fsharpqa/Source/Diagnostics/General/env.lst
+++ b/tests/fsharpqa/Source/Diagnostics/General/env.lst
@@ -118,4 +118,14 @@ ReqPP	SOURCE=E_UnxpectedMeasureAnnotation01.fs  SCFLAGS="-r:FSharp.PowerPack.dll
 ReqPP	SOURCE=W_WebExtensionsNotInPowerPack01.fs SCFLAGS="--test:ErrorRanges -r:FSharp.PowerPack.dll" COMPILE_ONLY=1		# W_WebExtensionsNotInPowerPack01.fs
 	SOURCE=E_InvalidObjectExpression01.fs     SCFLAGS="--test:ErrorRanges"	#E_InvalidObjectExpression01.fs
 
-	SOURCE=W_CreateIDisposable.fs  SCFLAGS="--test:ErrorRanges -a"	# W_CreateIDisposable.fs
\ No newline at end of file
+	SOURCE=W_CreateIDisposable.fs  SCFLAGS="--test:ErrorRanges -a"	# W_CreateIDisposable.fs
+
+	SOURCE=W_FailwithRedundantArgs.fs  SCFLAGS="--test:ErrorRanges -a"	# W_FailwithRedundantArgs.fs
+	SOURCE=W_FailwithfRedundantArgs.fs  SCFLAGS="--test:ErrorRanges -a"	# W_FailwithfRedundantArgs.fs
+	SOURCE=W_RaiseRedundantArgs.fs  SCFLAGS="--test:ErrorRanges -a"	# W_RaiseRedundantArgs.fs
+	SOURCE=W_InvalidArgRedundantArgs.fs  SCFLAGS="--test:ErrorRanges -a"	# W_InvalidArgRedundantArgs.fs
+	SOURCE=W_NullArgRedundantArgs.fs  SCFLAGS="--test:ErrorRanges -a"	# W_NullArgRedundantArgs.fs
+	SOURCE=W_InvalidOpRedundantArgs.fs  SCFLAGS="--test:ErrorRanges -a"	# W_InvalidOpRedundantArgs.fs
+
+	SOURCE=W_LowercaseLiteralIgnored.fs  SCFLAGS="--test:ErrorRanges"	# W_LowercaseLiteralIgnored.fs
+	SOURCE=W_LowercaseLiteralNotIgnored.fs  SCFLAGS="--test:ErrorRanges"	# W_LowercaseLiteralNotIgnored.fs
diff --git a/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointInLastModuleInsideMultipleNamespace.fs b/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointInLastModuleInsideMultipleNamespace.fs
new file mode 100644
index 00000000000..32816f8ea7c
--- /dev/null
+++ b/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointInLastModuleInsideMultipleNamespace.fs
@@ -0,0 +1,22 @@
+// #Regression #NoMT #EntryPoint 
+// Empty program entry point warning
+// Lack of entry point produces warning with correct source location when compiled to *.exe
+// when multiple namespaces with multiple modules declared in source file 
+//Main module of program is empty: nothing will happen when it is run
+
+#light
+namespace MyNamespace1
+
+module MyModule1 =
+    let irrelevant = 10
+    
+module MyModule2 =
+    let irrelevant = 10
+    
+namespace MyNamespace2
+
+module MyModule3 =
+    let irrelevant = 10
+    
+module MyModule4 =
+    let irrelevant = 10
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointModuleInNamespace.fs b/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointModuleInNamespace.fs
new file mode 100644
index 00000000000..faf53d678e9
--- /dev/null
+++ b/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointModuleInNamespace.fs
@@ -0,0 +1,11 @@
+// #Regression #NoMT #EntryPoint 
+// Empty program entry point warning
+// Lack of entry point produces warning with correct source location when compiled to *.exe
+// when single module declared inside namespace
+//Main module of program is empty: nothing will happen when it is run
+
+#light
+namespace MyNamespace1
+
+module MyModule1 =
+    let irrelevant = 10
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointMultipleModules.fs b/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointMultipleModules.fs
new file mode 100644
index 00000000000..f9f22900900
--- /dev/null
+++ b/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointMultipleModules.fs
@@ -0,0 +1,13 @@
+// #Regression #NoMT #EntryPoint 
+// Empty program entry point warning
+// Lack of entry point produces warning with correct source location when compiled to *.exe
+// when multiple modules declared without declaring namespace
+//Main module of program is empty: nothing will happen when it is run
+
+#light
+
+module MyModule1 =
+    let irrelevant = 10
+
+module MyModule2 =
+    let irrelevant = 10
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointTypeInNamespace.fs b/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointTypeInNamespace.fs
new file mode 100644
index 00000000000..738e43d131e
--- /dev/null
+++ b/tests/fsharpqa/Source/EntryPoint/W_NoEntryPointTypeInNamespace.fs
@@ -0,0 +1,10 @@
+// #Regression #NoMT #EntryPoint 
+// Empty program entry point warning
+// Lack of entry point produces warning with correct source location when compiled to *.exe
+// when source file declares type inside namespace
+//Main module of program is empty: nothing will happen when it is run
+
+#light
+namespace MyNamespace1
+
+type T = T of int
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/EntryPoint/env.lst b/tests/fsharpqa/Source/EntryPoint/env.lst
index b00a225e87a..1055220f89d 100644
--- a/tests/fsharpqa/Source/EntryPoint/env.lst
+++ b/tests/fsharpqa/Source/EntryPoint/env.lst
@@ -16,4 +16,8 @@ NoMT	SOURCE=entrypointandFSI02.fsx FSIMODE=EXEC COMPILE_ONLY=1				# entrypointan
 
 	SOURCE=E_CompilingToALibrary01.fs SCFLAGS="--test:ErrorRanges --target:library"	# E_CompilingToALibrary01.fs
 	SOURCE=E_CompilingToAModule01.fs  SCFLAGS="--test:ErrorRanges --target:module"	# E_CompilingToAModule01.fs
-	SOURCE=EntryPointAndAssemblyCulture.fs								# EntryPointAndAssemblyCulture.fs
\ No newline at end of file
+	SOURCE=EntryPointAndAssemblyCulture.fs								# EntryPointAndAssemblyCulture.fs
+	SOURCE=W_NoEntryPointInLastModuleInsideMultipleNamespace.fs SCFLAGS="--test:ErrorRanges"	# W_NoEntryPointInLastModuleInsideMultipleNamespace.fs
+	SOURCE=W_NoEntryPointModuleInNamespace.fs SCFLAGS="--test:ErrorRanges"	# W_NoEntryPointModuleInNamespace.fs
+	SOURCE=W_NoEntryPointMultipleModules.fs SCFLAGS="--test:ErrorRanges"	# W_NoEntryPointMultipleModules.fs
+	SOURCE=W_NoEntryPointTypeInNamespace.fs SCFLAGS="--test:ErrorRanges"	# W_NoEntryPointTypeInNamespace.fs
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/EnvLst.fs b/tests/fsharpqa/Source/EnvLst.fs
new file mode 100644
index 00000000000..8bb9931b357
--- /dev/null
+++ b/tests/fsharpqa/Source/EnvLst.fs
@@ -0,0 +1,87 @@
+module EnvLst
+
+open System
+
+open PlatformHelpers
+
+type EnvLstFile = EnvLstLine list
+and EnvLstLine =
+    | Comment of string 
+    | Data of EnvLstLineData
+and EnvLstLineData = { 
+    Tags: string list
+    Vars: (string * string) list
+    Comment: string option }
+
+let private (|Comment|_|) (s: string) =
+    match s with
+    | s when s.StartsWith("#") -> Some (s.TrimStart([| '#' |]))
+    | _ -> None
+
+[]
+type private DataPart =
+    | Var of string * string
+    | Comment of string
+
+let private parseDataParts (from: string) =
+    let rec parseDataPartsHelper (v: string) xs =
+        match (v.TrimStart()) with
+        | s when s.Trim() = "" ->
+            Choice1Of2 xs
+        | Comment (comment) ->
+            Choice1Of2 (DataPart.Comment comment :: xs)
+        | s ->
+            match s |> splitAtFirst ((=) '=') with
+            | name, None ->
+                Choice2Of2 (sprintf "Expected '=' after %s" name)
+            | name, Some(v) ->
+                match v.TrimStart() with
+                | a when a.StartsWith("\"") -> //quoted (escape char \ ), like SOURCE="some value with spaces"
+                    let rec innerQuote (alreadyParsed: string) (s: string) =
+                        let current, rest = match s with "" -> "","" | x -> (x.Substring(0,1)), (x.Substring(1))
+                        match alreadyParsed, current, rest with
+                        | pre, "", _ ->
+                            pre, ""
+                        | pre, "\"", xs when pre.EndsWith("\\") -> //escaped "
+                            innerQuote (pre + "\"") xs
+                        | pre, "\"", xs -> //final "
+                            pre, xs
+                        | pre, x, xs ->
+                            innerQuote (pre + x) xs
+                    let value, rest = innerQuote "" (a.Substring(1))
+                    parseDataPartsHelper rest (DataPart.Var(name, value) :: xs)
+                | a ->  //unquoted, like SOURCE=avalue
+                    let value, rest =
+                        match a |> splitAtFirst Char.IsWhiteSpace with
+                        | p0, None -> p0, ""
+                        | p0, Some (rest) -> p0, rest
+                    parseDataPartsHelper rest (DataPart.Var(name, value) :: xs)
+
+    match parseDataPartsHelper from [] with
+    | Choice1Of2 parts -> parts |> List.rev |> Choice1Of2
+    | failure -> failure
+
+let parseLine (line: string) =
+    match line with
+    | s when s.Trim() = "" -> Choice1Of2 None
+    | Comment(comment) -> Comment (comment) |> Some |> Choice1Of2
+    | s ->
+        match s |> splitAtFirst ((=) '\t') with
+        | s, None -> Choice2Of2 (sprintf "Expected '\\t' not found")
+        | tagList, Some rest ->
+            let tags = tagList.Split([| " " |], StringSplitOptions.RemoveEmptyEntries)
+            match parseDataParts rest with
+            | Choice1Of2 parts ->
+                let vars = 
+                    parts 
+                    |> List.choose (function DataPart.Var (k,v) -> Some (k,v) | _ -> None)
+                let comment = 
+                    parts 
+                    |> List.choose (function DataPart.Comment c -> Some c | _ -> None)
+                    |> List.tryHead
+                Data { Tags = tags |> List.ofArray; Vars = vars; Comment = comment }
+                |> Some |> Choice1Of2
+            | Choice2Of2 failure -> 
+                Choice2Of2 failure
+            
+
diff --git a/tests/fsharpqa/Source/FSharpQA.Tests.fsproj b/tests/fsharpqa/Source/FSharpQA.Tests.fsproj
new file mode 100644
index 00000000000..49451a93459
--- /dev/null
+++ b/tests/fsharpqa/Source/FSharpQA.Tests.fsproj
@@ -0,0 +1,88 @@
+
+
+  
+    ..\..\..\src
+    ..\..\..\tests
+    {21958DEB-133B-4760-A238-1293ED9687EC}
+  
+  
+  
+    Debug
+    AnyCPU
+    2.0
+    true
+    true
+    Library
+    FSharp.Tests.FSharpQA
+    SystematicUnitTests
+    
+    false
+    false
+  
+  
+    $(DefineConstants);EXTENSIONTYPING
+    $(NoWarn);3180
+  
+  
+    true
+    full
+    false
+    bin\Debug\
+    DEBUG;TRACE
+    prompt
+    3
+  
+  
+    pdbonly
+    true
+    bin\Release\
+    TRACE
+    prompt
+    3
+  
+  
+  
+    
+      {DED3BBD7-53F4-428A-8C9F-27968E768605}
+      FSharp.Core
+    
+    
+    
+      ..\..\..\packages\NUnit.3.0.0\lib\net45\nunit.framework.dll
+      True
+    
+    
+    
+    
+    
+  
+  
+    
+      PlatformHelpers.fs
+    
+    
+      Commands.fs
+    
+    
+      FSharpTestSuiteTypes.fs
+    
+    
+      windowsPlatform.fs
+    
+    
+      config.fs
+    
+    
+      update.fs
+    
+    
+    
+    
+  
+  
+    
+  
+  
+    
+  
+
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/LoadOrderOfExecution3a.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/LoadOrderOfExecution3a.fsx
index 8c0ce189ca7..b916dbd596e 100644
--- a/tests/fsharpqa/Source/InteractiveSession/Misc/LoadOrderOfExecution3a.fsx
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/LoadOrderOfExecution3a.fsx
@@ -1,6 +1,6 @@
 // #Regression #NoMT #FSI 
 // Regression test for FSHARP1.0:5427
-//
+//
 
 //<val n : NullToString = 
+
+type NullToString() = 
+  override __.ToString() = null;;
+
+let n = NullToString();;
+#q;;
+
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst b/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst
index 40eeabb20c1..a69708f066b 100644
--- a/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst
@@ -27,6 +27,8 @@ ReqENU	SOURCE=E_InterfaceCrossConstrained02.fsx   COMPILE_ONLY=1 FSIMODE=PIPE SC
 
 	SOURCE=EmptyList.fsx COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo"	# EmptyList.fsx
 
+	SOURCE=ToStringNull.fsx COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo"	# ToStringNull.fsx
+
 # These are the regression tests for FSHARP1.0:5427
 # The scenario is a bit convoluted because of the way we end up doing the verification
 # In the last 2 cases, the verification is achieved by dumping the output of FSI to a file
diff --git a/tests/fsharpqa/Source/Libraries/Core/Collections/Seq_Cast_Dispose01.fs b/tests/fsharpqa/Source/Libraries/Core/Collections/Seq_Cast_Dispose01.fs
index f794360a917..9d78863661d 100644
--- a/tests/fsharpqa/Source/Libraries/Core/Collections/Seq_Cast_Dispose01.fs
+++ b/tests/fsharpqa/Source/Libraries/Core/Collections/Seq_Cast_Dispose01.fs
@@ -6,7 +6,7 @@
 // This test should probably go under the SystematicUnitTests suite, but 
 // I could not decide how to make it fit... so I'm leaving it here.
 //
-//
+//
 
 let mutable dispose_called_in_E = 0    // we expect this to be incremented 3 times
 let mutable dispose_called_in_C = 0    // we expect this to be incremented once (=this is what the bug was about, i.e. .Dispose() was never invoked)
diff --git a/tests/fsharpqa/Source/MultiTargeting/MultiTargetMatrix.fsx b/tests/fsharpqa/Source/MultiTargeting/MultiTargetMatrix.fsx
index 7061baf8a86..fb8f5a7269e 100644
--- a/tests/fsharpqa/Source/MultiTargeting/MultiTargetMatrix.fsx
+++ b/tests/fsharpqa/Source/MultiTargeting/MultiTargetMatrix.fsx
@@ -102,7 +102,7 @@ let authorSource, consumerSource, exclusions =
 
 // failsafe to make sure that excluded scenarios are revisited on new versions
 // i.e. exclusions valid for vN/vN-1 will probably no longer be needed for vN+1/vN
-if not ((Helpers.getVer Test.vCurrentRuntime).StartsWith("4.4.0")) then
+if not ((Helpers.getVer Test.vCurrentRuntime).StartsWith("4.4.1")) then
     eprintfn "Runtime version has changed, review exclusions lists for these tests"
     exit 1
 
diff --git a/tests/fsharpqa/Source/MultiTargeting/OptimizedForLoops_author.fs b/tests/fsharpqa/Source/MultiTargeting/OptimizedForLoops_author.fs
new file mode 100644
index 00000000000..1da9fdf77aa
--- /dev/null
+++ b/tests/fsharpqa/Source/MultiTargeting/OptimizedForLoops_author.fs
@@ -0,0 +1,18 @@
+module Test
+open System
+
+let listFor (xs : 'a list) =
+    for x in xs do
+        printfn "%O" x
+        
+let stringFor (xs : string) =
+    for x in xs do
+        printfn "%O" x
+        
+let arrayFor (xs : 'a array) =
+    for x in xs do
+        printfn "%O" x
+        
+let seqFor (xs : seq<'a>) =
+    for x in xs do
+        printfn "%O" x
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/MultiTargeting/OptimizedForLoops_consumer.fsx b/tests/fsharpqa/Source/MultiTargeting/OptimizedForLoops_consumer.fsx
new file mode 100644
index 00000000000..e6b8cc1bb41
--- /dev/null
+++ b/tests/fsharpqa/Source/MultiTargeting/OptimizedForLoops_consumer.fsx
@@ -0,0 +1,26 @@
+#if INTERACTIVE
+#r "author.dll"
+#else
+module Foo
+#endif
+
+open System
+
+let myLst = [ 1 .. 10]
+let myArr = [| 1 .. 10|]
+let mySeq = seq { for i in 1 .. 10 -> i }
+let myStr = "0123456789"
+
+Test.listFor myLst
+Test.stringFor myStr
+Test.arrayFor myArr
+Test.seqFor mySeq
+
+for x in myLst do Console.WriteLine(x)
+for x in myArr do Console.WriteLine(x)
+for x in mySeq do Console.WriteLine(x)
+for x in myStr do Console.WriteLine(x)
+
+#if INTERACTIVE
+#q ;;
+#endif
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/MultiTargeting/env.lst b/tests/fsharpqa/Source/MultiTargeting/env.lst
index 4a7e75349fe..10bdd9d2339 100644
--- a/tests/fsharpqa/Source/MultiTargeting/env.lst
+++ b/tests/fsharpqa/Source/MultiTargeting/env.lst
@@ -1,9 +1,10 @@
-NOMONO,NOOPEN	SOURCE=E_MissingReferenceToFSharpCore20.fs   SCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.dll"					# E_MissingReferenceToFSharpCore20.fs
-NOMONO	SOURCE=E_BadPathToFSharpCore.fs              SCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.dll -r I_DO_NOT_EXIST\\FSharp.Core.dll"	# E_BadPathToFSharpCore.fs
-NOMONO	SOURCE=E_BadPathToFSharpCore.fsx             SCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.dll -r I_DO_NOT_EXIST\\FSharp.Core.dll"	# E_BadPathToFSharpCore.fsx
+NOMONO,NOOPEN	SOURCE=E_MissingReferenceToFSharpCore20.fs   SCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll"					# E_MissingReferenceToFSharpCore20.fs
+NOMONO	SOURCE=E_BadPathToFSharpCore.fs              SCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll -r I_DO_NOT_EXIST\\FSharp.Core.dll"	# E_BadPathToFSharpCore.fs
+NOMONO	SOURCE=E_BadPathToFSharpCore.fsx             SCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll -r I_DO_NOT_EXIST\\FSharp.Core.dll"	# E_BadPathToFSharpCore.fsx
 
 # FSharp.Core is checked in for this test to verify a particular error message related to it. It shouldn't be accidentally picked up by other tests since it isn't in the working directory for them
 NOMONO	SOURCE=E_UseBinaryIncompatibleLibrary.fs     SCFLAGS="--noframework -r ..\\Common\\FSharp.Core.dll"	# E_UseBinaryIncompatibleLibrary.fs
 
 ReqOpen	SOURCE=dummy.fs  POSTCMD="\$FSI_PIPE --nologo --quiet --exec .\\MultiTargetMatrix.fsx   QuotedCommaTypeName_author.fs QuotedCommaTypeName_consumer.fsx 0,8"		#  QuotedCommaTypeName
-ReqOpen	SOURCE=dummy.fs  POSTCMD="\$FSI_PIPE --nologo --quiet --exec .\\MultiTargetMatrix.fsx   InlineCoreResource_author.fs InlineCoreResource_consumer.fsx"		#  InlineCoreResource
\ No newline at end of file
+ReqOpen	SOURCE=dummy.fs  POSTCMD="\$FSI_PIPE --nologo --quiet --exec .\\MultiTargetMatrix.fsx   InlineCoreResource_author.fs InlineCoreResource_consumer.fsx"		#  InlineCoreResource
+ReqOpen	SOURCE=dummy.fs  POSTCMD="\$FSI_PIPE --nologo --quiet --exec .\\MultiTargetMatrix.fsx   OptimizedForLoops_author.fs OptimizedForLoops_consumer.fsx"		#  OptimizedForLoops
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnList01.fs b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnList01.fs
new file mode 100644
index 00000000000..942d99c3234
--- /dev/null
+++ b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnList01.fs
@@ -0,0 +1,51 @@
+// #Regression #CodeGen #Optimizations #ControlFlow #NoMono #ReqNOMT
+// Compiler should turn 'foreach' loops over lists into 'while' loops
+module ForEachOnList01
+
+// Some variations to make sure optimizer can detect the foreach properly
+
+let test1(lst: int list) =
+     let mutable z = 0
+     for x in lst do
+         z <- z + x
+
+let test2() =
+     let mutable z = 0
+     for x in [1;2;3] do
+         z <- z + x
+
+let test3() =
+     let xs = [1;2;3]
+     let mutable z = 0
+     for x in xs do
+         z <- z + x
+
+let test4() =
+     let mutable z = 0
+     let xs = [1;2;3]
+     for x in xs do
+         z <- z + x
+
+let test5() =
+     let xs = [1;2;3]
+     for x in xs do
+         printfn "%A" x
+
+// more complex enumerable expression
+let test6() = 
+    for i in (
+                [1;2;3;4]
+                |> List.map (fun x ->
+                    x + 1)
+                ) do
+        printfn "%O" i
+ 
+// multiline body 
+let test7() = 
+    for i in (
+                [1;2;3;4]
+                |> List.map (fun x ->
+                    x + 1)
+                ) do
+        let tmp = i + 1
+        printfn "%O" tmp
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnList01.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnList01.il.bsl
new file mode 100644
index 00000000000..13e69f9c5fa
--- /dev/null
+++ b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnList01.il.bsl
@@ -0,0 +1,516 @@
+
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.33440
+//  Copyright (c) Microsoft Corporation.  All rights reserved.
+
+
+
+// Metadata version: v4.0.30319
+.assembly extern mscorlib
+{
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
+  .ver 4:0:0:0
+}
+.assembly extern FSharp.Core
+{
+  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
+  .ver 4:4:0:9055
+}
+.assembly ForEachOnList01
+{
+  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32,
+                                                                                                      int32,
+                                                                                                      int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) 
+
+  // --- The following custom attribute is added automatically, do not uncomment -------
+  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) 
+
+  .hash algorithm 0x00008004
+  .ver 0:0:0:0
+}
+.mresource public FSharpSignatureData.ForEachOnList01
+{
+  // Offset: 0x00000000 Length: 0x000002EB
+}
+.mresource public FSharpOptimizationData.ForEachOnList01
+{
+  // Offset: 0x000002F0 Length: 0x000000DB
+}
+.module ForEachOnList01.dll
+// MVID: {54D54537-56DF-F74F-A745-03833745D554}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003       // WINDOWS_CUI
+.corflags 0x00000001    //  ILONLY
+// Image base: 0x014C0000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public abstract auto ansi sealed ForEachOnList01
+       extends [mscorlib]System.Object
+{
+  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
+  .class auto ansi serializable nested assembly beforefieldinit test6@38
+         extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2
+  {
+    .method assembly specialname rtspecialname 
+            instance void  .ctor() cil managed
+    {
+      // Code size       7 (0x7)
+      .maxstack  8
+      IL_0000:  ldarg.0
+      IL_0001:  call       instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor()
+      IL_0006:  ret
+    } // end of method test6@38::.ctor
+
+    .method public strict virtual instance int32 
+            Invoke(int32 x) cil managed
+    {
+      // Code size       5 (0x5)
+      .maxstack  8
+      .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
+      .line 39,39 : 21,26 ''
+      IL_0000:  nop
+      IL_0001:  ldarg.1
+      IL_0002:  ldc.i4.1
+      IL_0003:  add
+      IL_0004:  ret
+    } // end of method test6@38::Invoke
+
+  } // end of class test6@38
+
+  .class auto ansi serializable nested assembly beforefieldinit test7@47
+         extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2
+  {
+    .method assembly specialname rtspecialname 
+            instance void  .ctor() cil managed
+    {
+      // Code size       7 (0x7)
+      .maxstack  8
+      IL_0000:  ldarg.0
+      IL_0001:  call       instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor()
+      IL_0006:  ret
+    } // end of method test7@47::.ctor
+
+    .method public strict virtual instance int32 
+            Invoke(int32 x) cil managed
+    {
+      // Code size       5 (0x5)
+      .maxstack  8
+      .line 48,48 : 21,26 ''
+      IL_0000:  nop
+      IL_0001:  ldarg.1
+      IL_0002:  ldc.i4.1
+      IL_0003:  add
+      IL_0004:  ret
+    } // end of method test7@47::Invoke
+
+  } // end of class test7@47
+
+  .method public static void  test1(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 lst) cil managed
+  {
+    // Code size       42 (0x2a)
+    .maxstack  4
+    .locals init ([0] int32 z,
+             [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1,
+             [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2,
+             [3] int32 x)
+    .line 8,8 : 6,23 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.0
+    .line 9,9 : 15,18 ''
+    IL_0003:  ldarg.0
+    IL_0004:  stloc.1
+    IL_0005:  ldloc.1
+    IL_0006:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_000b:  stloc.2
+    .line 9,9 : 6,21 ''
+    IL_000c:  ldloc.2
+    IL_000d:  ldnull
+    IL_000e:  cgt.un
+    IL_0010:  brfalse.s  IL_0029
+
+    .line 9,9 : 15,18 ''
+    IL_0012:  ldloc.1
+    IL_0013:  call       instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
+    IL_0018:  stloc.3
+    IL_0019:  ldloc.0
+    IL_001a:  ldloc.3
+    IL_001b:  add
+    IL_001c:  stloc.0
+    IL_001d:  ldloc.2
+    IL_001e:  stloc.1
+    IL_001f:  ldloc.1
+    IL_0020:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_0025:  stloc.2
+    IL_0026:  nop
+    IL_0027:  br.s       IL_000c
+
+    IL_0029:  ret
+  } // end of method ForEachOnList01::test1
+
+  .method public static void  test2() cil managed
+  {
+    // Code size       64 (0x40)
+    .maxstack  6
+    .locals init ([0] int32 z,
+             [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1,
+             [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2,
+             [3] int32 x)
+    .line 13,13 : 6,23 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.0
+    .line 14,14 : 15,22 ''
+    IL_0003:  ldc.i4.1
+    IL_0004:  ldc.i4.2
+    IL_0005:  ldc.i4.3
+    IL_0006:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty()
+    IL_000b:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0010:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0015:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_001a:  stloc.1
+    IL_001b:  ldloc.1
+    IL_001c:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_0021:  stloc.2
+    .line 14,14 : 6,25 ''
+    IL_0022:  ldloc.2
+    IL_0023:  ldnull
+    IL_0024:  cgt.un
+    IL_0026:  brfalse.s  IL_003f
+
+    .line 14,14 : 15,22 ''
+    IL_0028:  ldloc.1
+    IL_0029:  call       instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
+    IL_002e:  stloc.3
+    IL_002f:  ldloc.0
+    IL_0030:  ldloc.3
+    IL_0031:  add
+    IL_0032:  stloc.0
+    IL_0033:  ldloc.2
+    IL_0034:  stloc.1
+    IL_0035:  ldloc.1
+    IL_0036:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_003b:  stloc.2
+    IL_003c:  nop
+    IL_003d:  br.s       IL_0022
+
+    IL_003f:  ret
+  } // end of method ForEachOnList01::test2
+
+  .method public static void  test3() cil managed
+  {
+    // Code size       68 (0x44)
+    .maxstack  6
+    .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 xs,
+             [1] int32 z,
+             [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2,
+             [3] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_3,
+             [4] int32 x)
+    .line 18,18 : 6,22 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.1
+    IL_0002:  ldc.i4.2
+    IL_0003:  ldc.i4.3
+    IL_0004:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty()
+    IL_0009:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_000e:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0013:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0018:  stloc.0
+    .line 19,19 : 6,23 ''
+    IL_0019:  ldc.i4.0
+    IL_001a:  stloc.1
+    .line 20,20 : 15,17 ''
+    IL_001b:  ldloc.0
+    IL_001c:  stloc.2
+    IL_001d:  ldloc.2
+    IL_001e:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_0023:  stloc.3
+    .line 20,20 : 6,20 ''
+    IL_0024:  ldloc.3
+    IL_0025:  ldnull
+    IL_0026:  cgt.un
+    IL_0028:  brfalse.s  IL_0043
+
+    .line 20,20 : 15,17 ''
+    IL_002a:  ldloc.2
+    IL_002b:  call       instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
+    IL_0030:  stloc.s    x
+    IL_0032:  ldloc.1
+    IL_0033:  ldloc.s    x
+    IL_0035:  add
+    IL_0036:  stloc.1
+    IL_0037:  ldloc.3
+    IL_0038:  stloc.2
+    IL_0039:  ldloc.2
+    IL_003a:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_003f:  stloc.3
+    IL_0040:  nop
+    IL_0041:  br.s       IL_0024
+
+    IL_0043:  ret
+  } // end of method ForEachOnList01::test3
+
+  .method public static void  test4() cil managed
+  {
+    // Code size       68 (0x44)
+    .maxstack  6
+    .locals init ([0] int32 z,
+             [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 xs,
+             [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2,
+             [3] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_3,
+             [4] int32 x)
+    .line 24,24 : 6,23 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.0
+    .line 25,25 : 6,22 ''
+    IL_0003:  ldc.i4.1
+    IL_0004:  ldc.i4.2
+    IL_0005:  ldc.i4.3
+    IL_0006:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty()
+    IL_000b:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0010:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0015:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_001a:  stloc.1
+    .line 26,26 : 15,17 ''
+    IL_001b:  ldloc.1
+    IL_001c:  stloc.2
+    IL_001d:  ldloc.2
+    IL_001e:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_0023:  stloc.3
+    .line 26,26 : 6,20 ''
+    IL_0024:  ldloc.3
+    IL_0025:  ldnull
+    IL_0026:  cgt.un
+    IL_0028:  brfalse.s  IL_0043
+
+    .line 26,26 : 15,17 ''
+    IL_002a:  ldloc.2
+    IL_002b:  call       instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
+    IL_0030:  stloc.s    x
+    IL_0032:  ldloc.0
+    IL_0033:  ldloc.s    x
+    IL_0035:  add
+    IL_0036:  stloc.0
+    IL_0037:  ldloc.3
+    IL_0038:  stloc.2
+    IL_0039:  ldloc.2
+    IL_003a:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_003f:  stloc.3
+    IL_0040:  nop
+    IL_0041:  br.s       IL_0024
+
+    IL_0043:  ret
+  } // end of method ForEachOnList01::test4
+
+  .method public static void  test5() cil managed
+  {
+    // Code size       91 (0x5b)
+    .maxstack  6
+    .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 xs,
+             [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1,
+             [2] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_2,
+             [3] int32 x,
+             [4] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_4)
+    .line 30,30 : 6,22 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.1
+    IL_0002:  ldc.i4.2
+    IL_0003:  ldc.i4.3
+    IL_0004:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty()
+    IL_0009:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_000e:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0013:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0018:  stloc.0
+    .line 31,31 : 15,17 ''
+    IL_0019:  ldloc.0
+    IL_001a:  stloc.1
+    IL_001b:  ldloc.1
+    IL_001c:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_0021:  stloc.2
+    .line 31,31 : 6,20 ''
+    IL_0022:  ldloc.2
+    IL_0023:  ldnull
+    IL_0024:  cgt.un
+    IL_0026:  brfalse.s  IL_005a
+
+    .line 31,31 : 15,17 ''
+    IL_0028:  ldloc.1
+    IL_0029:  call       instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
+    IL_002e:  stloc.3
+    IL_002f:  ldstr      "%A"
+    IL_0034:  newobj     instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string)
+    IL_0039:  stloc.s    V_4
+    IL_003b:  call       class [mscorlib]System.IO.TextWriter [mscorlib]System.Console::get_Out()
+    IL_0040:  ldloc.s    V_4
+    IL_0042:  call       !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [mscorlib]System.IO.TextWriter,
+                                                                                                                                                                                                                      class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+    IL_0047:  ldloc.3
+    IL_0048:  callvirt   instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+    IL_004d:  pop
+    IL_004e:  ldloc.2
+    IL_004f:  stloc.1
+    IL_0050:  ldloc.1
+    IL_0051:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_0056:  stloc.2
+    IL_0057:  nop
+    IL_0058:  br.s       IL_0022
+
+    IL_005a:  ret
+  } // end of method ForEachOnList01::test5
+
+  .method public static void  test6() cil managed
+  {
+    // Code size       103 (0x67)
+    .maxstack  8
+    .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0,
+             [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1,
+             [2] int32 i,
+             [3] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_3)
+    .line 37,39 : 17,27 ''
+    IL_0000:  nop
+    IL_0001:  newobj     instance void ForEachOnList01/test6@38::.ctor()
+    IL_0006:  ldc.i4.1
+    IL_0007:  ldc.i4.2
+    IL_0008:  ldc.i4.3
+    IL_0009:  ldc.i4.4
+    IL_000a:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty()
+    IL_000f:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0014:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0019:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_001e:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0023:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.ListModule::Map(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,
+                                                                                                                                                                  class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0028:  stloc.0
+    IL_0029:  ldloc.0
+    IL_002a:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_002f:  stloc.1
+    .line 36,40 : 5,21 ''
+    IL_0030:  ldloc.1
+    IL_0031:  ldnull
+    IL_0032:  cgt.un
+    IL_0034:  brfalse.s  IL_0066
+
+    .line 37,39 : 17,27 ''
+    IL_0036:  ldloc.0
+    IL_0037:  call       instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
+    IL_003c:  stloc.2
+    IL_003d:  ldstr      "%O"
+    IL_0042:  newobj     instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string)
+    IL_0047:  stloc.3
+    IL_0048:  call       class [mscorlib]System.IO.TextWriter [mscorlib]System.Console::get_Out()
+    IL_004d:  ldloc.3
+    IL_004e:  call       !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [mscorlib]System.IO.TextWriter,
+                                                                                                                                                                                                                      class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+    IL_0053:  ldloc.2
+    IL_0054:  callvirt   instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+    IL_0059:  pop
+    IL_005a:  ldloc.1
+    IL_005b:  stloc.0
+    IL_005c:  ldloc.0
+    IL_005d:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_0062:  stloc.1
+    IL_0063:  nop
+    IL_0064:  br.s       IL_0030
+
+    IL_0066:  ret
+  } // end of method ForEachOnList01::test6
+
+  .method public static void  test7() cil managed
+  {
+    // Code size       109 (0x6d)
+    .maxstack  8
+    .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0,
+             [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1,
+             [2] int32 i,
+             [3] int32 tmp,
+             [4] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_4)
+    .line 46,48 : 17,27 ''
+    IL_0000:  nop
+    IL_0001:  newobj     instance void ForEachOnList01/test7@47::.ctor()
+    IL_0006:  ldc.i4.1
+    IL_0007:  ldc.i4.2
+    IL_0008:  ldc.i4.3
+    IL_0009:  ldc.i4.4
+    IL_000a:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty()
+    IL_000f:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0014:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0019:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_001e:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0,
+                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0023:  call       class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.ListModule::Map(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,
+                                                                                                                                                                  class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+    IL_0028:  stloc.0
+    IL_0029:  ldloc.0
+    IL_002a:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_002f:  stloc.1
+    .line 45,49 : 5,21 ''
+    IL_0030:  ldloc.1
+    IL_0031:  ldnull
+    IL_0032:  cgt.un
+    IL_0034:  brfalse.s  IL_006c
+
+    .line 46,48 : 17,27 ''
+    IL_0036:  ldloc.0
+    IL_0037:  call       instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
+    IL_003c:  stloc.2
+    .line 50,50 : 9,24 ''
+    IL_003d:  ldloc.2
+    IL_003e:  ldc.i4.1
+    IL_003f:  add
+    IL_0040:  stloc.3
+    .line 51,51 : 9,21 ''
+    IL_0041:  ldstr      "%O"
+    IL_0046:  newobj     instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int32>::.ctor(string)
+    IL_004b:  stloc.s    V_4
+    IL_004d:  call       class [mscorlib]System.IO.TextWriter [mscorlib]System.Console::get_Out()
+    IL_0052:  ldloc.s    V_4
+    IL_0054:  call       !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [mscorlib]System.IO.TextWriter,
+                                                                                                                                                                                                                      class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+    IL_0059:  ldloc.3
+    IL_005a:  callvirt   instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+    IL_005f:  pop
+    IL_0060:  ldloc.1
+    IL_0061:  stloc.0
+    IL_0062:  ldloc.0
+    IL_0063:  call       instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+    IL_0068:  stloc.1
+    IL_0069:  nop
+    IL_006a:  br.s       IL_0030
+
+    IL_006c:  ret
+  } // end of method ForEachOnList01::test7
+
+} // end of class ForEachOnList01
+
+.class private abstract auto ansi sealed ''.$ForEachOnList01
+       extends [mscorlib]System.Object
+{
+} // end of class ''.$ForEachOnList01
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnString01.fs b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnString01.fs
new file mode 100644
index 00000000000..04262a04e63
--- /dev/null
+++ b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnString01.fs
@@ -0,0 +1,67 @@
+// #Regression #CodeGen #Optimizations #ControlFlow #NoMono #ReqNOMT
+// Compiler should turn 'foreach' loops over strings into 'for' loops
+module ForEachOnString01
+
+open System
+
+let test1(str: string) =
+     let mutable z = 0
+     for x in str do
+         z <- z + (int x)
+
+let test2() =
+     let mutable z = 0
+     for x in "123" do
+         z <- z + (int x)
+
+let test3() =
+     let xs = "123"
+     let mutable z = 0
+     for x in xs do
+         z <- z + (int x)
+
+let test4() =
+     let mutable z = 0
+     let xs = "123"
+     for x in xs do
+         z <- z + (int x)
+
+let test5() =
+     let xs = "123"
+     for x in xs do
+         printfn "%A" x
+
+// test6, test7 makes sure the optimization triggers
+// for System.String and String as well.
+// They are the same type as string but internally string
+// is an alias which potentially could make the optimizer
+// miss one case or the other
+let test6(str: System.String) =
+     let mutable z = 0
+     for x in str do
+         z <- z + (int x)
+
+let test7() =
+     let xs : String = "123"
+     let mutable z = 0
+     for x in xs do
+         z <- z + (int x)
+
+// more complex enumerable expression
+let test8() =
+    for i in (
+                "1234"
+                |> String.map (fun x ->
+                    char ((int x) + 1))
+                ) do
+        printfn "%O" i
+
+// multiline body
+let test9() =
+    for i in (
+                "1234"
+                |> String.map (fun x ->
+                    char ((int x) + 1))
+                ) do
+        let tmp = System.String.Format("{0} foo", i)
+        printfn "%O" tmp
diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnString01.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnString01.il.bsl
new file mode 100644
index 00000000000..e576f4a3807
--- /dev/null
+++ b/tests/fsharpqa/Source/Optimizations/ForLoop/ForEachOnString01.il.bsl
@@ -0,0 +1,586 @@
+
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.1
+//  Copyright (c) Microsoft Corporation.  All rights reserved.
+
+
+
+// Metadata version: v4.0.30319
+.assembly extern mscorlib
+{
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
+  .ver 4:0:0:0
+}
+.assembly extern FSharp.Core
+{
+  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
+  .ver 4:4:0:9055
+}
+.assembly ForEachOnString01
+{
+  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32,
+                                                                                                      int32,
+                                                                                                      int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) 
+
+  // 
+  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) 
+
+  .hash algorithm 0x00008004
+  .ver 0:0:0:0
+}
+.mresource public FSharpSignatureData.ForEachOnString01
+{
+  // Offset: 0x00000000 Length: 0x0000036E
+}
+.mresource public FSharpOptimizationData.ForEachOnString01
+{
+  // Offset: 0x00000378 Length: 0x000000FF
+}
+.module ForEachOnString01.dll
+// MVID: {547FB1E9-105C-852B-A745-0383E9B17F54}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003       // WINDOWS_CUI
+.corflags 0x00000001    //  ILONLY
+// Image base: 0x029A0000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public abstract auto ansi sealed ForEachOnString01
+       extends [mscorlib]System.Object
+{
+  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
+  .class auto ansi serializable nested assembly beforefieldinit test8@54
+         extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2
+  {
+    .method assembly specialname rtspecialname 
+            instance void  .ctor() cil managed
+    {
+      // 
+      .maxstack  8
+      IL_0000:  ldarg.0
+      IL_0001:  call       instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor()
+      IL_0006:  ret
+    } // end of method test8@54::.ctor
+
+    .method public strict virtual instance char 
+            Invoke(char x) cil managed
+    {
+      // 
+      .maxstack  8
+      .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
+      .line 55,55 : 21,39 'C:\\Users\\latkin\\Source\\Repos\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\ForLoop\\ForEachOnString01.fs'
+      IL_0000:  nop
+      IL_0001:  ldarg.1
+      IL_0002:  conv.i4
+      IL_0003:  ldc.i4.1
+      IL_0004:  add
+      IL_0005:  conv.u2
+      IL_0006:  ret
+    } // end of method test8@54::Invoke
+
+  } // end of class test8@54
+
+  .class auto ansi serializable nested assembly beforefieldinit test9@63
+         extends class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2
+  {
+    .method assembly specialname rtspecialname 
+            instance void  .ctor() cil managed
+    {
+      // 
+      .maxstack  8
+      IL_0000:  ldarg.0
+      IL_0001:  call       instance void class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::.ctor()
+      IL_0006:  ret
+    } // end of method test9@63::.ctor
+
+    .method public strict virtual instance char 
+            Invoke(char x) cil managed
+    {
+      // 
+      .maxstack  8
+      .line 64,64 : 21,39 ''
+      IL_0000:  nop
+      IL_0001:  ldarg.1
+      IL_0002:  conv.i4
+      IL_0003:  ldc.i4.1
+      IL_0004:  add
+      IL_0005:  conv.u2
+      IL_0006:  ret
+    } // end of method test9@63::Invoke
+
+  } // end of class test9@63
+
+  .method public static void  test1(string str) cil managed
+  {
+    // 
+    .maxstack  5
+    .locals init ([0] int32 z,
+             [1] int32 V_1,
+             [2] int32 V_2,
+             [3] char x)
+    .line 8,8 : 6,23 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.0
+    .line 9,9 : 6,21 ''
+    IL_0003:  ldc.i4.0
+    IL_0004:  stloc.2
+    IL_0005:  ldarg.0
+    IL_0006:  callvirt   instance int32 [mscorlib]System.String::get_Length()
+    IL_000b:  ldc.i4.1
+    IL_000c:  sub
+    IL_000d:  stloc.1
+    IL_000e:  ldloc.1
+    IL_000f:  ldloc.2
+    IL_0010:  blt.s      IL_0029
+
+    .line 10,10 : 10,26 ''
+    IL_0012:  ldarg.0
+    IL_0013:  ldloc.2
+    IL_0014:  callvirt   instance char [mscorlib]System.String::get_Chars(int32)
+    IL_0019:  stloc.3
+    IL_001a:  ldloc.0
+    IL_001b:  ldloc.3
+    IL_001c:  conv.i4
+    IL_001d:  add
+    IL_001e:  stloc.0
+    IL_001f:  ldloc.2
+    IL_0020:  ldc.i4.1
+    IL_0021:  add
+    IL_0022:  stloc.2
+    .line 9,9 : 6,21 ''
+    IL_0023:  ldloc.2
+    IL_0024:  ldloc.1
+    IL_0025:  ldc.i4.1
+    IL_0026:  add
+    IL_0027:  bne.un.s   IL_0012
+
+    IL_0029:  ret
+  } // end of method ForEachOnString01::test1
+
+  .method public static void  test2() cil managed
+  {
+    // 
+    .maxstack  5
+    .locals init ([0] int32 z,
+             [1] int32 V_1,
+             [2] int32 V_2,
+             [3] char x)
+    .line 13,13 : 6,23 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.0
+    .line 14,14 : 6,23 ''
+    IL_0003:  ldc.i4.0
+    IL_0004:  stloc.2
+    IL_0005:  ldstr      "123"
+    IL_000a:  callvirt   instance int32 [mscorlib]System.String::get_Length()
+    IL_000f:  ldc.i4.1
+    IL_0010:  sub
+    IL_0011:  stloc.1
+    IL_0012:  ldloc.1
+    IL_0013:  ldloc.2
+    IL_0014:  blt.s      IL_0031
+
+    .line 15,15 : 10,26 ''
+    IL_0016:  ldstr      "123"
+    IL_001b:  ldloc.2
+    IL_001c:  callvirt   instance char [mscorlib]System.String::get_Chars(int32)
+    IL_0021:  stloc.3
+    IL_0022:  ldloc.0
+    IL_0023:  ldloc.3
+    IL_0024:  conv.i4
+    IL_0025:  add
+    IL_0026:  stloc.0
+    IL_0027:  ldloc.2
+    IL_0028:  ldc.i4.1
+    IL_0029:  add
+    IL_002a:  stloc.2
+    .line 14,14 : 6,23 ''
+    IL_002b:  ldloc.2
+    IL_002c:  ldloc.1
+    IL_002d:  ldc.i4.1
+    IL_002e:  add
+    IL_002f:  bne.un.s   IL_0016
+
+    IL_0031:  ret
+  } // end of method ForEachOnString01::test2
+
+  .method public static void  test3() cil managed
+  {
+    // 
+    .maxstack  5
+    .locals init ([0] int32 z,
+             [1] int32 V_1,
+             [2] int32 V_2,
+             [3] char x)
+    .line 19,19 : 6,23 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.0
+    .line 20,20 : 6,20 ''
+    IL_0003:  ldc.i4.0
+    IL_0004:  stloc.2
+    IL_0005:  ldstr      "123"
+    IL_000a:  callvirt   instance int32 [mscorlib]System.String::get_Length()
+    IL_000f:  ldc.i4.1
+    IL_0010:  sub
+    IL_0011:  stloc.1
+    IL_0012:  ldloc.1
+    IL_0013:  ldloc.2
+    IL_0014:  blt.s      IL_0031
+
+    .line 21,21 : 10,26 ''
+    IL_0016:  ldstr      "123"
+    IL_001b:  ldloc.2
+    IL_001c:  callvirt   instance char [mscorlib]System.String::get_Chars(int32)
+    IL_0021:  stloc.3
+    IL_0022:  ldloc.0
+    IL_0023:  ldloc.3
+    IL_0024:  conv.i4
+    IL_0025:  add
+    IL_0026:  stloc.0
+    IL_0027:  ldloc.2
+    IL_0028:  ldc.i4.1
+    IL_0029:  add
+    IL_002a:  stloc.2
+    .line 20,20 : 6,20 ''
+    IL_002b:  ldloc.2
+    IL_002c:  ldloc.1
+    IL_002d:  ldc.i4.1
+    IL_002e:  add
+    IL_002f:  bne.un.s   IL_0016
+
+    IL_0031:  ret
+  } // end of method ForEachOnString01::test3
+
+  .method public static void  test4() cil managed
+  {
+    // 
+    .maxstack  5
+    .locals init ([0] int32 z,
+             [1] int32 V_1,
+             [2] int32 V_2,
+             [3] char x)
+    .line 24,24 : 6,23 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.0
+    .line 26,26 : 6,20 ''
+    IL_0003:  ldc.i4.0
+    IL_0004:  stloc.2
+    IL_0005:  ldstr      "123"
+    IL_000a:  callvirt   instance int32 [mscorlib]System.String::get_Length()
+    IL_000f:  ldc.i4.1
+    IL_0010:  sub
+    IL_0011:  stloc.1
+    IL_0012:  ldloc.1
+    IL_0013:  ldloc.2
+    IL_0014:  blt.s      IL_0031
+
+    .line 27,27 : 10,26 ''
+    IL_0016:  ldstr      "123"
+    IL_001b:  ldloc.2
+    IL_001c:  callvirt   instance char [mscorlib]System.String::get_Chars(int32)
+    IL_0021:  stloc.3
+    IL_0022:  ldloc.0
+    IL_0023:  ldloc.3
+    IL_0024:  conv.i4
+    IL_0025:  add
+    IL_0026:  stloc.0
+    IL_0027:  ldloc.2
+    IL_0028:  ldc.i4.1
+    IL_0029:  add
+    IL_002a:  stloc.2
+    .line 26,26 : 6,20 ''
+    IL_002b:  ldloc.2
+    IL_002c:  ldloc.1
+    IL_002d:  ldc.i4.1
+    IL_002e:  add
+    IL_002f:  bne.un.s   IL_0016
+
+    IL_0031:  ret
+  } // end of method ForEachOnString01::test4
+
+  .method public static void  test5() cil managed
+  {
+    // 
+    .maxstack  5
+    .locals init ([0] int32 V_0,
+             [1] int32 V_1,
+             [2] char x,
+             [3] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_3)
+    .line 31,31 : 6,20 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.1
+    IL_0003:  ldstr      "123"
+    IL_0008:  callvirt   instance int32 [mscorlib]System.String::get_Length()
+    IL_000d:  ldc.i4.1
+    IL_000e:  sub
+    IL_000f:  stloc.0
+    IL_0010:  ldloc.0
+    IL_0011:  ldloc.1
+    IL_0012:  blt.s      IL_0047
+
+    .line 32,32 : 10,24 ''
+    IL_0014:  ldstr      "123"
+    IL_0019:  ldloc.1
+    IL_001a:  callvirt   instance char [mscorlib]System.String::get_Chars(int32)
+    IL_001f:  stloc.2
+    IL_0020:  ldstr      "%A"
+    IL_0025:  newobj     instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,char>::.ctor(string)
+    IL_002a:  stloc.3
+    IL_002b:  call       class [mscorlib]System.IO.TextWriter [mscorlib]System.Console::get_Out()
+    IL_0030:  ldloc.3
+    IL_0031:  call       !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [mscorlib]System.IO.TextWriter,
+                                                                                                                                                                                                                     class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+    IL_0036:  ldloc.2
+    IL_0037:  callvirt   instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+    IL_003c:  pop
+    IL_003d:  ldloc.1
+    IL_003e:  ldc.i4.1
+    IL_003f:  add
+    IL_0040:  stloc.1
+    .line 31,31 : 6,20 ''
+    IL_0041:  ldloc.1
+    IL_0042:  ldloc.0
+    IL_0043:  ldc.i4.1
+    IL_0044:  add
+    IL_0045:  bne.un.s   IL_0014
+
+    IL_0047:  ret
+  } // end of method ForEachOnString01::test5
+
+  .method public static void  test6(string str) cil managed
+  {
+    // 
+    .maxstack  5
+    .locals init ([0] int32 z,
+             [1] int32 V_1,
+             [2] int32 V_2,
+             [3] char x)
+    .line 40,40 : 6,23 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.0
+    .line 41,41 : 6,21 ''
+    IL_0003:  ldc.i4.0
+    IL_0004:  stloc.2
+    IL_0005:  ldarg.0
+    IL_0006:  callvirt   instance int32 [mscorlib]System.String::get_Length()
+    IL_000b:  ldc.i4.1
+    IL_000c:  sub
+    IL_000d:  stloc.1
+    IL_000e:  ldloc.1
+    IL_000f:  ldloc.2
+    IL_0010:  blt.s      IL_0029
+
+    .line 42,42 : 10,26 ''
+    IL_0012:  ldarg.0
+    IL_0013:  ldloc.2
+    IL_0014:  callvirt   instance char [mscorlib]System.String::get_Chars(int32)
+    IL_0019:  stloc.3
+    IL_001a:  ldloc.0
+    IL_001b:  ldloc.3
+    IL_001c:  conv.i4
+    IL_001d:  add
+    IL_001e:  stloc.0
+    IL_001f:  ldloc.2
+    IL_0020:  ldc.i4.1
+    IL_0021:  add
+    IL_0022:  stloc.2
+    .line 41,41 : 6,21 ''
+    IL_0023:  ldloc.2
+    IL_0024:  ldloc.1
+    IL_0025:  ldc.i4.1
+    IL_0026:  add
+    IL_0027:  bne.un.s   IL_0012
+
+    IL_0029:  ret
+  } // end of method ForEachOnString01::test6
+
+  .method public static void  test7() cil managed
+  {
+    // 
+    .maxstack  5
+    .locals init ([0] int32 z,
+             [1] int32 V_1,
+             [2] int32 V_2,
+             [3] char x)
+    .line 46,46 : 6,23 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.0
+    .line 47,47 : 6,20 ''
+    IL_0003:  ldc.i4.0
+    IL_0004:  stloc.2
+    IL_0005:  ldstr      "123"
+    IL_000a:  callvirt   instance int32 [mscorlib]System.String::get_Length()
+    IL_000f:  ldc.i4.1
+    IL_0010:  sub
+    IL_0011:  stloc.1
+    IL_0012:  ldloc.1
+    IL_0013:  ldloc.2
+    IL_0014:  blt.s      IL_0031
+
+    .line 48,48 : 10,26 ''
+    IL_0016:  ldstr      "123"
+    IL_001b:  ldloc.2
+    IL_001c:  callvirt   instance char [mscorlib]System.String::get_Chars(int32)
+    IL_0021:  stloc.3
+    IL_0022:  ldloc.0
+    IL_0023:  ldloc.3
+    IL_0024:  conv.i4
+    IL_0025:  add
+    IL_0026:  stloc.0
+    IL_0027:  ldloc.2
+    IL_0028:  ldc.i4.1
+    IL_0029:  add
+    IL_002a:  stloc.2
+    .line 47,47 : 6,20 ''
+    IL_002b:  ldloc.2
+    IL_002c:  ldloc.1
+    IL_002d:  ldc.i4.1
+    IL_002e:  add
+    IL_002f:  bne.un.s   IL_0016
+
+    IL_0031:  ret
+  } // end of method ForEachOnString01::test7
+
+  .method public static void  test8() cil managed
+  {
+    // 
+    .maxstack  5
+    .locals init ([0] string V_0,
+             [1] int32 V_1,
+             [2] int32 V_2,
+             [3] char i,
+             [4] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_4)
+    .line 53,55 : 17,40 ''
+    IL_0000:  nop
+    IL_0001:  newobj     instance void ForEachOnString01/test8@54::.ctor()
+    IL_0006:  ldstr      "1234"
+    IL_000b:  call       string [FSharp.Core]Microsoft.FSharp.Core.StringModule::Map(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,
+                                                                                     string)
+    IL_0010:  stloc.0
+    .line 52,56 : 5,21 ''
+    IL_0011:  ldc.i4.0
+    IL_0012:  stloc.2
+    IL_0013:  ldloc.0
+    IL_0014:  callvirt   instance int32 [mscorlib]System.String::get_Length()
+    IL_0019:  ldc.i4.1
+    IL_001a:  sub
+    IL_001b:  stloc.1
+    IL_001c:  ldloc.1
+    IL_001d:  ldloc.2
+    IL_001e:  blt.s      IL_0051
+
+    .line 57,57 : 9,23 ''
+    IL_0020:  ldloc.0
+    IL_0021:  ldloc.2
+    IL_0022:  callvirt   instance char [mscorlib]System.String::get_Chars(int32)
+    IL_0027:  stloc.3
+    IL_0028:  ldstr      "%O"
+    IL_002d:  newobj     instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,char>::.ctor(string)
+    IL_0032:  stloc.s    V_4
+    IL_0034:  call       class [mscorlib]System.IO.TextWriter [mscorlib]System.Console::get_Out()
+    IL_0039:  ldloc.s    V_4
+    IL_003b:  call       !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [mscorlib]System.IO.TextWriter,
+                                                                                                                                                                                                                     class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+    IL_0040:  ldloc.3
+    IL_0041:  callvirt   instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+    IL_0046:  pop
+    IL_0047:  ldloc.2
+    IL_0048:  ldc.i4.1
+    IL_0049:  add
+    IL_004a:  stloc.2
+    .line 52,56 : 5,21 ''
+    IL_004b:  ldloc.2
+    IL_004c:  ldloc.1
+    IL_004d:  ldc.i4.1
+    IL_004e:  add
+    IL_004f:  bne.un.s   IL_0020
+
+    IL_0051:  ret
+  } // end of method ForEachOnString01::test8
+
+  .method public static void  test9() cil managed
+  {
+    // 
+    .maxstack  5
+    .locals init ([0] string V_0,
+             [1] int32 V_1,
+             [2] int32 V_2,
+             [3] char i,
+             [4] string tmp,
+             [5] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> V_5)
+    .line 62,64 : 17,40 ''
+    IL_0000:  nop
+    IL_0001:  newobj     instance void ForEachOnString01/test9@63::.ctor()
+    IL_0006:  ldstr      "1234"
+    IL_000b:  call       string [FSharp.Core]Microsoft.FSharp.Core.StringModule::Map(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,
+                                                                                     string)
+    IL_0010:  stloc.0
+    .line 61,65 : 5,21 ''
+    IL_0011:  ldc.i4.0
+    IL_0012:  stloc.2
+    IL_0013:  ldloc.0
+    IL_0014:  callvirt   instance int32 [mscorlib]System.String::get_Length()
+    IL_0019:  ldc.i4.1
+    IL_001a:  sub
+    IL_001b:  stloc.1
+    IL_001c:  ldloc.1
+    IL_001d:  ldloc.2
+    IL_001e:  blt.s      IL_0064
+
+    .line 66,66 : 13,16 ''
+    IL_0020:  ldloc.0
+    IL_0021:  ldloc.2
+    IL_0022:  callvirt   instance char [mscorlib]System.String::get_Chars(int32)
+    IL_0027:  stloc.3
+    .line 66,66 : 9,53 ''
+    IL_0028:  ldstr      "{0} foo"
+    IL_002d:  ldloc.3
+    IL_002e:  box        [mscorlib]System.Char
+    IL_0033:  call       string [mscorlib]System.String::Format(string,
+                                                                object)
+    IL_0038:  stloc.s    tmp
+    .line 67,67 : 9,21 ''
+    IL_003a:  ldstr      "%O"
+    IL_003f:  newobj     instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string>::.ctor(string)
+    IL_0044:  stloc.s    V_5
+    IL_0046:  call       class [mscorlib]System.IO.TextWriter [mscorlib]System.Console::get_Out()
+    IL_004b:  ldloc.s    V_5
+    IL_004d:  call       !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [mscorlib]System.IO.TextWriter,
+                                                                                                                                                                                                                       class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+    IL_0052:  ldloc.s    tmp
+    IL_0054:  callvirt   instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+    IL_0059:  pop
+    IL_005a:  ldloc.2
+    IL_005b:  ldc.i4.1
+    IL_005c:  add
+    IL_005d:  stloc.2
+    .line 61,65 : 5,21 ''
+    IL_005e:  ldloc.2
+    IL_005f:  ldloc.1
+    IL_0060:  ldc.i4.1
+    IL_0061:  add
+    IL_0062:  bne.un.s   IL_0020
+
+    IL_0064:  ret
+  } // end of method ForEachOnString01::test9
+
+} // end of class ForEachOnString01
+
+.class private abstract auto ansi sealed ''.$ForEachOnString01
+       extends [mscorlib]System.Object
+{
+} // end of class ''.$ForEachOnString01
+
+
+// =============================================================
+
+// 
diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable03.il.bsl b/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable03.il.bsl
index 367749302d1..f95a853d16d 100644
--- a/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable03.il.bsl
+++ b/tests/fsharpqa/Source/Optimizations/ForLoop/NoIEnumerable03.il.bsl
@@ -19,10 +19,10 @@
 {
   .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32,
                                                                                                       int32,
-                                                                                                      int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) 
+                                                                                                      int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 )
 
   // --- The following custom attribute is added automatically, do not uncomment -------
-  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) 
+  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 )
 
   .hash algorithm 0x00008004
   .ver 0:0:0:0
@@ -50,18 +50,18 @@
 .class public abstract auto ansi sealed M
        extends [mscorlib]System.Object
 {
-  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
+  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 )
   .method public static void  loop3(int32 a,
                                     int32 N) cil managed
   {
-    .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 ) 
+    .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00 )
     // Code size       43 (0x2b)
     .maxstack  5
     .locals init ([0] int32 V_0,
              [1] int32 i,
              [2] class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4 V_2)
     .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
-    .line 7,7 : 4,22 
+    .line 7,7 : 4,22
     IL_0000:  nop
     IL_0001:  ldarg.0
     IL_0002:  stloc.1
@@ -71,7 +71,7 @@
     IL_0006:  ldloc.1
     IL_0007:  blt.s      IL_002a
 
-    .line 8,8 : 7,20 
+    .line 8,8 : 7,20
     IL_0009:  ldstr      "aaa"
     IL_000e:  newobj     instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string)
     IL_0013:  stloc.2
@@ -84,7 +84,7 @@
     IL_0021:  ldc.i4.1
     IL_0022:  add
     IL_0023:  stloc.1
-    .line 7,7 : 13,19 
+    .line 7,7 : 18,19
     IL_0024:  ldloc.1
     IL_0025:  ldloc.0
     IL_0026:  ldc.i4.1
diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/env.lst b/tests/fsharpqa/Source/Optimizations/ForLoop/env.lst
index 39dba485c9f..92b38d11765 100644
--- a/tests/fsharpqa/Source/Optimizations/ForLoop/env.lst
+++ b/tests/fsharpqa/Source/Optimizations/ForLoop/env.lst
@@ -1,6 +1,8 @@
 # Exclude the genuine CodeGen tests when doing MT runs
 NOMONO,NoMT	SOURCE=NoAllocationOfTuple01.fs SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoAllocationOfTuple01.dll"	# NoAllocationOfTuple01.fs
 NOMONO,NoMT	SOURCE=ForEachOnArray01.fs      SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForEachOnArray01.dll"		# ForEachOnArray01.fs
+NOMONO,NoMT	SOURCE=ForEachOnList01.fs       SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForEachOnList01.dll"     # ForEachOnList01.fs
+NOMONO,NoMT	SOURCE=ForEachOnString01.fs     SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForEachOnString01.dll"   # ForEachOnString01.fs
 NOMONO,NoMT	SOURCE=ZeroToArrLength01.fs     SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ZeroToArrLength01.dll"	# ZeroToArrLength01.fs
 NOMONO,NoMT	SOURCE=ZeroToArrLength02.fs     SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ZeroToArrLength02.dll"	# ZeroToArrLength02.fs
 
diff --git a/tests/fsharpqa/Source/Simple/hellow.fs b/tests/fsharpqa/Source/Simple/hellow.fs
index ac8a133ce89..e2d89fde3ea 100644
--- a/tests/fsharpqa/Source/Simple/hellow.fs
+++ b/tests/fsharpqa/Source/Simple/hellow.fs
@@ -1,4 +1,4 @@
-//
+//
 
 //<.GetMethod("Run").GetCustomAttributes(false)
+let attr = attrs.[0] :?> System.ServiceModel.FaultContractAttribute
+
+printfn "%A" (attr.ProtectionLevel.ToString())
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/TypeProviders/Attributes/env.lst b/tests/fsharpqa/Source/TypeProviders/Attributes/env.lst
new file mode 100644
index 00000000000..c33663b44f7
--- /dev/null
+++ b/tests/fsharpqa/Source/TypeProviders/Attributes/env.lst
@@ -0,0 +1,2 @@
+NoMT	SOURCE=mirror.fs   SCFLAGS="-a ..\\providedtypes.fs" PRECMD="\$CSC_PIPE /target:library /reference:System.dll /reference:System.ServiceModel.dll library.cs" 	# Attribute_Arg_Type_Scope_Setup
+NoMT	SOURCE=client.fs   SCFLAGS="-r:mirror.dll -r:System.ServiceModel.dll"                                                                        	# Attribute_Arg_Type_Scope_Test
diff --git a/tests/fsharpqa/Source/TypeProviders/Attributes/keep.lst b/tests/fsharpqa/Source/TypeProviders/Attributes/keep.lst
new file mode 100644
index 00000000000..f6c4a769e7a
--- /dev/null
+++ b/tests/fsharpqa/Source/TypeProviders/Attributes/keep.lst
@@ -0,0 +1,2 @@
+mirror.dll
+library.dll
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/TypeProviders/Attributes/library.cs b/tests/fsharpqa/Source/TypeProviders/Attributes/library.cs
new file mode 100644
index 00000000000..15c56a68fad
--- /dev/null
+++ b/tests/fsharpqa/Source/TypeProviders/Attributes/library.cs
@@ -0,0 +1,8 @@
+using System;
+using System.Net.Security;
+using System.ServiceModel;
+
+public class C {
+    [FaultContract(typeof(Exception), ProtectionLevel = ProtectionLevel.Sign)]
+    public static void Run() { Console.WriteLine("In run");}
+}
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/TypeProviders/Attributes/mirror.fs b/tests/fsharpqa/Source/TypeProviders/Attributes/mirror.fs
new file mode 100644
index 00000000000..c667ea7b32c
--- /dev/null
+++ b/tests/fsharpqa/Source/TypeProviders/Attributes/mirror.fs
@@ -0,0 +1,21 @@
+// compile as: fsc --target:library ProvidedTypes.fsi ProvidedTypes.fs Mirror.fs
+namespace Repro
+
+open System.IO
+open System.Reflection
+open ProviderImplementation.ProvidedTypes
+open Microsoft.FSharp.Core.CompilerServices
+
+[]
+do()
+
+[]
+type Mirror() as this =
+    inherit TypeProviderForNamespaces()
+    let thisAssembly = typeof.Assembly
+    let topType = ProvidedTypeDefinition(thisAssembly, "Top", "Repro", Some typeof, IsErased = true)
+    let csAssembly = 
+        let location = Path.GetDirectoryName(thisAssembly.Location)
+        System.Reflection.Assembly.LoadFrom(Path.Combine(location, "library.dll"))
+    do topType.AddAssemblyTypesAsNestedTypesDelayed(fun() -> csAssembly)
+    do this.AddNamespace("Top", [topType])
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/TypeProviders/Fields/Literals/TestTP/TypeProviderInCSharp.csproj b/tests/fsharpqa/Source/TypeProviders/Fields/Literals/TestTP/TypeProviderInCSharp.csproj
index 653f96e5356..a9f2c08a1e6 100644
--- a/tests/fsharpqa/Source/TypeProviders/Fields/Literals/TestTP/TypeProviderInCSharp.csproj
+++ b/tests/fsharpqa/Source/TypeProviders/Fields/Literals/TestTP/TypeProviderInCSharp.csproj
@@ -46,5 +46,11 @@
     
     
   
+
+  
+    Always
+    Always
+  
+
   
 
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/TypeProviders/ProvidedTypes.fs b/tests/fsharpqa/Source/TypeProviders/ProvidedTypes.fs
new file mode 100644
index 00000000000..cc95ca58b5b
--- /dev/null
+++ b/tests/fsharpqa/Source/TypeProviders/ProvidedTypes.fs
@@ -0,0 +1,2736 @@
+#nowarn "40"
+#nowarn "52"
+// Based on code for the F# 3.0 Developer Preview release of September 2011,
+// Copyright (c) Microsoft Corporation 2005-2012.
+// This sample code is provided "as is" without warranty of any kind. 
+// We disclaim all warranties, either express or implied, including the 
+// warranties of merchantability and fitness for a particular purpose. 
+
+// This file contains a set of helper types and methods for providing types in an implementation 
+// of ITypeProvider.
+
+// This code has been modified and is appropriate for use in conjunction with the F# 3.0, F# 3.1, and F# 3.1.1 releases
+
+namespace ProviderImplementation.ProvidedTypes
+
+open System
+open System.Text
+open System.IO
+open System.Reflection
+open System.Reflection.Emit
+open System.Linq.Expressions
+open System.Collections.Generic
+open Microsoft.FSharp.Core.CompilerServices
+
+type E = Quotations.Expr
+module P = Quotations.Patterns
+module ES = Quotations.ExprShape
+module DP = Quotations.DerivedPatterns
+
+type internal ExpectedStackState = 
+    | Empty = 1
+    | Address = 2
+    | Value = 3
+
+[]
+module internal Misc =
+
+    let TypeBuilderInstantiationType = 
+        let runningOnMono = try System.Type.GetType("Mono.Runtime") <> null with e -> false 
+        let typeName = if runningOnMono then "System.Reflection.MonoGenericClass" else "System.Reflection.Emit.TypeBuilderInstantiation"
+        typeof.Assembly.GetType(typeName)
+
+    let GetTypeFromHandleMethod = typeof.GetMethod("GetTypeFromHandle")
+    let LanguagePrimitivesType = typedefof>.Assembly.GetType("Microsoft.FSharp.Core.LanguagePrimitives")
+    let ParseInt32Method = LanguagePrimitivesType.GetMethod "ParseInt32"
+    let DecimalConstructor = typeof.GetConstructor([| typeof; typeof; typeof; typeof; typeof |])
+    let DateTimeConstructor = typeof.GetConstructor([| typeof; typeof |])
+    let DateTimeOffsetConstructor = typeof.GetConstructor([| typeof; typeof |])
+    let TimeSpanConstructor = typeof.GetConstructor([|typeof|])
+    let isEmpty s = s = ExpectedStackState.Empty
+    let isAddress s = s = ExpectedStackState.Address
+
+    let nonNull str x = if x=null then failwith ("Null in " + str) else x
+    
+    let notRequired opname item = 
+        let msg = sprintf "The operation '%s' on item '%s' should not be called on provided type, member or parameter" opname item
+        System.Diagnostics.Debug.Assert (false, msg)
+        raise (System.NotSupportedException msg)
+
+    let mkParamArrayCustomAttributeData() = 
+#if FX_NO_CUSTOMATTRIBUTEDATA
+        { new IProvidedCustomAttributeData with 
+#else
+        { new CustomAttributeData() with 
+#endif 
+            member __.Constructor =  typeof.GetConstructors().[0]
+            member __.ConstructorArguments = upcast [| |]
+            member __.NamedArguments = upcast [| |] }
+
+#if FX_NO_CUSTOMATTRIBUTEDATA
+    let CustomAttributeTypedArgument(ty,v) = 
+        { new IProvidedCustomAttributeTypedArgument with 
+              member x.ArgumentType = ty
+              member x.Value = v }
+    let CustomAttributeNamedArgument(memb,arg:IProvidedCustomAttributeTypedArgument) = 
+        { new IProvidedCustomAttributeNamedArgument with 
+              member x.MemberInfo = memb
+              member x.ArgumentType = arg.ArgumentType
+              member x.TypedValue = arg }
+    type CustomAttributeData = Microsoft.FSharp.Core.CompilerServices.IProvidedCustomAttributeData
+#endif
+
+    let mkEditorHideMethodsCustomAttributeData() = 
+#if FX_NO_CUSTOMATTRIBUTEDATA
+        { new IProvidedCustomAttributeData with 
+#else
+        { new CustomAttributeData() with 
+#endif 
+            member __.Constructor =  typeof.GetConstructors().[0]
+            member __.ConstructorArguments = upcast [| |]
+            member __.NamedArguments = upcast [| |] }
+
+    let mkAllowNullLiteralCustomAttributeData value =
+#if FX_NO_CUSTOMATTRIBUTEDATA
+        { new IProvidedCustomAttributeData with 
+#else
+        { new CustomAttributeData() with 
+#endif 
+            member __.Constructor = typeof.GetConstructors().[0]
+            member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value) |]
+            member __.NamedArguments = upcast [| |] }
+
+    /// This makes an xml doc attribute w.r.t. an amortized computation of an xml doc string.
+    /// It is important that the text of the xml doc only get forced when poking on the ConstructorArguments
+    /// for the CustomAttributeData object.
+    let mkXmlDocCustomAttributeDataLazy(lazyText: Lazy) = 
+#if FX_NO_CUSTOMATTRIBUTEDATA
+        { new IProvidedCustomAttributeData with 
+#else
+        { new CustomAttributeData() with 
+#endif
+            member __.Constructor =  typeof.GetConstructors().[0]
+            member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, lazyText.Force())  |]
+            member __.NamedArguments = upcast [| |] }
+
+    let mkXmlDocCustomAttributeData(s:string) =  mkXmlDocCustomAttributeDataLazy (lazy s)
+
+    let mkDefinitionLocationAttributeCustomAttributeData(line:int,column:int,filePath:string) = 
+#if FX_NO_CUSTOMATTRIBUTEDATA
+        { new IProvidedCustomAttributeData with 
+#else
+        { new CustomAttributeData() with 
+#endif
+            member __.Constructor =  typeof.GetConstructors().[0]
+            member __.ConstructorArguments = upcast [| |]
+            member __.NamedArguments = 
+                upcast [| CustomAttributeNamedArgument(typeof.GetProperty("FilePath"), CustomAttributeTypedArgument(typeof, filePath));
+                            CustomAttributeNamedArgument(typeof.GetProperty("Line"), CustomAttributeTypedArgument(typeof, line)) ;
+                            CustomAttributeNamedArgument(typeof.GetProperty("Column"), CustomAttributeTypedArgument(typeof, column)) 
+                        |] }
+    let mkObsoleteAttributeCustomAttributeData(message:string, isError: bool) = 
+#if FX_NO_CUSTOMATTRIBUTEDATA
+        { new IProvidedCustomAttributeData with 
+#else
+        { new CustomAttributeData() with 
+#endif
+                member __.Constructor =  typeof.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 1)
+                member __.ConstructorArguments = upcast [|CustomAttributeTypedArgument(typeof, message) ; CustomAttributeTypedArgument(typeof, isError)  |]
+                member __.NamedArguments = upcast [| |] }
+
+    type CustomAttributesImpl() =
+        let customAttributes = ResizeArray()
+        let mutable hideObjectMethods = false
+        let mutable nonNullable = false
+        let mutable obsoleteMessage = None
+        let mutable xmlDocDelayed = None
+        let mutable xmlDocAlwaysRecomputed = None
+        let mutable hasParamArray = false
+
+        // XML doc text that we only compute once, if any. This must _not_ be forced until the ConstructorArguments
+        // property of the custom attribute is foced.
+        let xmlDocDelayedText = 
+            lazy 
+                (match xmlDocDelayed with None -> assert false; "" | Some f -> f())
+
+        // Custom atttributes that we only compute once
+        let customAttributesOnce = 
+            lazy 
+               [| if hideObjectMethods then yield mkEditorHideMethodsCustomAttributeData() 
+                  if nonNullable then yield mkAllowNullLiteralCustomAttributeData false
+                  match xmlDocDelayed with None -> () | Some _ -> customAttributes.Add(mkXmlDocCustomAttributeDataLazy xmlDocDelayedText) 
+                  match obsoleteMessage with None -> () | Some s -> customAttributes.Add(mkObsoleteAttributeCustomAttributeData s) 
+                  if hasParamArray then yield mkParamArrayCustomAttributeData()
+                  yield! customAttributes |]
+
+        member __.AddDefinitionLocation(line:int,column:int,filePath:string) = customAttributes.Add(mkDefinitionLocationAttributeCustomAttributeData(line, column, filePath))
+        member __.AddObsolete(message : string, isError) = obsoleteMessage <- Some (message,isError)
+        member __.HasParamArray with get() = hasParamArray and set(v) = hasParamArray <- v
+        member __.AddXmlDocComputed xmlDocFunction = xmlDocAlwaysRecomputed <- Some xmlDocFunction
+        member __.AddXmlDocDelayed xmlDocFunction = xmlDocDelayed <- Some xmlDocFunction
+        member __.AddXmlDoc xmlDoc =  xmlDocDelayed <- Some (fun () -> xmlDoc)
+        member __.HideObjectMethods with set v = hideObjectMethods <- v
+        member __.NonNullable with set v = nonNullable <- v
+        member __.AddCustomAttribute(attribute) = customAttributes.Add(attribute)
+        member __.GetCustomAttributesData() = 
+            [| yield! customAttributesOnce.Force()
+               match xmlDocAlwaysRecomputed with None -> () | Some f -> customAttributes.Add(mkXmlDocCustomAttributeData (f()))  |]
+            :> IList<_>
+
+    let transExpr isGenerated q =     
+        let rec trans q = 
+            match q with 
+            // convert NewTuple to the call to the constructor of the Tuple type (only for generated types)
+            | Quotations.Patterns.NewTuple(items) when isGenerated ->
+                let rec mkCtor args ty = 
+                    let ctor, restTyOpt = Reflection.FSharpValue.PreComputeTupleConstructorInfo ty
+                    match restTyOpt with
+                    | None -> Quotations.Expr.NewObject(ctor, List.map trans args)
+                    | Some restTy ->
+                        let curr = [for a in Seq.take 7 args -> trans a]
+                        let rest = List.ofSeq (Seq.skip 7 args) 
+                        Quotations.Expr.NewObject(ctor, curr @ [mkCtor rest restTy])
+                let tys = [| for e in items -> e.Type |]
+                let tupleTy = Reflection.FSharpType.MakeTupleType tys
+                trans (mkCtor items tupleTy)
+            // convert TupleGet to the chain of PropertyGet calls (only for generated types)
+            | Quotations.Patterns.TupleGet(e, i) when isGenerated ->
+                let rec mkGet ty i (e : Quotations.Expr)  = 
+                    let pi, restOpt = Reflection.FSharpValue.PreComputeTuplePropertyInfo(ty, i)
+                    let propGet = Quotations.Expr.PropertyGet(e, pi)
+                    match restOpt with
+                    | None -> propGet
+                    | Some (restTy, restI) -> mkGet restTy restI propGet
+                trans (mkGet e.Type i (trans e))
+            | Quotations.Patterns.Value(value, ty) ->
+                if value <> null then
+                   let tyOfValue = value.GetType()
+                   transValue(value, tyOfValue, ty)
+                else q
+            // Eliminate F# property gets to method calls
+            | Quotations.Patterns.PropertyGet(obj,propInfo,args) -> 
+                match obj with 
+                | None -> trans (Quotations.Expr.Call(propInfo.GetGetMethod(),args))
+                | Some o -> trans (Quotations.Expr.Call(trans o,propInfo.GetGetMethod(),args))
+            // Eliminate F# property sets to method calls
+            | Quotations.Patterns.PropertySet(obj,propInfo,args,v) -> 
+                 match obj with 
+                 | None -> trans (Quotations.Expr.Call(propInfo.GetSetMethod(),args@[v]))
+                 | Some o -> trans (Quotations.Expr.Call(trans o,propInfo.GetSetMethod(),args@[v]))
+            // Eliminate F# function applications to FSharpFunc<_,_>.Invoke calls
+            | Quotations.Patterns.Application(f,e) -> 
+                trans (Quotations.Expr.Call(trans f, f.Type.GetMethod "Invoke", [ e ]) )
+            | Quotations.Patterns.NewUnionCase(ci, es) ->
+                trans (Quotations.Expr.Call(Reflection.FSharpValue.PreComputeUnionConstructorInfo ci, es) )
+            | Quotations.Patterns.NewRecord(ci, es) ->
+                trans (Quotations.Expr.NewObject(Reflection.FSharpValue.PreComputeRecordConstructorInfo ci, es) )
+            | Quotations.Patterns.UnionCaseTest(e,uc) ->
+                let tagInfo = Reflection.FSharpValue.PreComputeUnionTagMemberInfo uc.DeclaringType
+                let tagExpr = 
+                    match tagInfo with 
+                    | :? PropertyInfo as tagProp ->
+                         trans (Quotations.Expr.PropertyGet(e,tagProp) )
+                    | :? MethodInfo as tagMeth -> 
+                         if tagMeth.IsStatic then trans (Quotations.Expr.Call(tagMeth, [e]))
+                         else trans (Quotations.Expr.Call(e,tagMeth,[]))
+                    | _ -> failwith "unreachable: unexpected result from PreComputeUnionTagMemberInfo"
+                let tagNumber = uc.Tag
+                trans <@@ (%%(tagExpr) : int) = tagNumber @@>
+
+            // Explicitly handle weird byref variables in lets (used to populate out parameters), since the generic handlers can't deal with byrefs
+            | Quotations.Patterns.Let(v,vexpr,bexpr) when v.Type.IsByRef ->
+
+                // the binding must have leaves that are themselves variables (due to the limited support for byrefs in expressions)
+                // therefore, we can perform inlining to translate this to a form that can be compiled
+                inlineByref v vexpr bexpr
+
+            // Eliminate recursive let bindings (which are unsupported by the type provider API) to regular let bindings
+            | Quotations.Patterns.LetRecursive(bindings, expr) ->
+                // This uses a "lets and sets" approach, converting something like
+                //    let rec even = function
+                //    | 0 -> true
+                //    | n -> odd (n-1)
+                //    and odd = function
+                //    | 0 -> false
+                //    | n -> even (n-1)
+                //    X
+                // to something like
+                //    let even = ref Unchecked.defaultof<_>
+                //    let odd  = ref Unchecked.defaultof<_>
+                //    even := function
+                //            | 0 -> true
+                //            | n -> !odd (n-1)
+                //    odd  := function
+                //            | 0 -> false
+                //            | n -> !even (n-1)
+                //    X'
+                // where X' is X but with occurrences of even/odd substituted by !even and !odd (since now even and odd are references)
+                // Translation relies on typedefof<_ ref> - does this affect ability to target different runtime and design time environments?
+                let vars = List.map fst bindings
+                let vars' = vars |> List.map (fun v -> Quotations.Var(v.Name, typedefof<_ ref>.MakeGenericType(v.Type)))
+                
+                // init t generates the equivalent of <@ ref Unchecked.defaultof @>
+                let init (t:Type) =
+                    let r = match <@ ref 1 @> with Quotations.Patterns.Call(None, r, [_]) -> r | _ -> failwith "Extracting MethodInfo from <@ 1 @> failed"
+                    let d = match <@ Unchecked.defaultof<_> @> with Quotations.Patterns.Call(None, d, []) -> d | _ -> failwith "Extracting MethodInfo from <@ Unchecked.defaultof<_> @> failed"
+                    Quotations.Expr.Call(r.GetGenericMethodDefinition().MakeGenericMethod(t), [Quotations.Expr.Call(d.GetGenericMethodDefinition().MakeGenericMethod(t),[])])
+
+                // deref v generates the equivalent of <@ !v @>
+                // (so v's type must be ref)
+                let deref (v:Quotations.Var) = 
+                    let m = match <@ !(ref 1) @> with Quotations.Patterns.Call(None, m, [_]) -> m | _ -> failwith "Extracting MethodInfo from <@ !(ref 1) @> failed"
+                    let tyArgs = v.Type.GetGenericArguments()
+                    Quotations.Expr.Call(m.GetGenericMethodDefinition().MakeGenericMethod(tyArgs), [Quotations.Expr.Var v])
+
+                // substitution mapping a variable v to the expression <@ !v' @> using the corresponding new variable v' of ref type
+                let subst =
+                    let map =
+                        vars'
+                        |> List.map deref
+                        |> List.zip vars
+                        |> Map.ofList
+                    fun v -> Map.tryFind v map
+
+                let expr' = expr.Substitute(subst)
+
+                // maps variables to new variables
+                let varDict = List.zip vars vars' |> dict
+
+                // given an old variable v and an expression e, returns a quotation like <@ v' := e @> using the corresponding new variable v' of ref type
+                let setRef (v:Quotations.Var) e = 
+                    let m = match <@ (ref 1) := 2 @> with Quotations.Patterns.Call(None, m, [_;_]) -> m | _ -> failwith "Extracting MethodInfo from <@ (ref 1) := 2 @> failed"
+                    Quotations.Expr.Call(m.GetGenericMethodDefinition().MakeGenericMethod(v.Type), [Quotations.Expr.Var varDict.[v]; e])
+
+                // Something like 
+                //  <@
+                //      v1 := e1'
+                //      v2 := e2'
+                //      ...
+                //      expr'
+                //  @>
+                // Note that we must substitute our new variable dereferences into the bound expressions
+                let body = 
+                    bindings
+                    |> List.fold (fun b (v,e) -> Quotations.Expr.Sequential(setRef v (e.Substitute subst), b)) expr'
+                
+                // Something like
+                //   let v1 = ref Unchecked.defaultof
+                //   let v2 = ref Unchecked.defaultof
+                //   ...
+                //   body
+                vars
+                |> List.fold (fun b v -> Quotations.Expr.Let(varDict.[v], init v.Type, b)) body                
+                |> trans 
+
+            // Handle the generic cases
+            | Quotations.ExprShape.ShapeLambda(v,body) -> 
+                Quotations.Expr.Lambda(v, trans body)
+            | Quotations.ExprShape.ShapeCombination(comb,args) -> 
+                Quotations.ExprShape.RebuildShapeCombination(comb,List.map trans args)
+            | Quotations.ExprShape.ShapeVar _ -> q
+        and inlineByref v vexpr bexpr =
+            match vexpr with
+            | Quotations.Patterns.Sequential(e',vexpr') ->
+                (* let v = (e'; vexpr') in bexpr => e'; let v = vexpr' in bexpr *)
+                Quotations.Expr.Sequential(e', inlineByref v vexpr' bexpr)
+                |> trans
+            | Quotations.Patterns.IfThenElse(c,b1,b2) ->
+                (* let v = if c then b1 else b2 in bexpr => if c then let v = b1 in bexpr else let v = b2 in bexpr *)
+                Quotations.Expr.IfThenElse(c, inlineByref v b1 bexpr, inlineByref v b2 bexpr)
+                |> trans
+            | Quotations.Patterns.Var _ -> 
+                (* let v = v1 in bexpr => bexpr[v/v1] *)
+                bexpr.Substitute(fun v' -> if v = v' then Some vexpr else None)
+                |> trans
+            | _ -> 
+                failwith (sprintf "Unexpected byref binding: %A = %A" v vexpr)
+        and transValue (v : obj, tyOfValue : Type, expectedTy : Type) = 
+            let rec transArray (o : Array, ty : Type) = 
+                let elemTy = ty.GetElementType()
+                let converter = getConverterForType elemTy
+                let elements = 
+                    [
+                        for el in o do
+                            yield converter el
+                    ]
+                Quotations.Expr.NewArray(elemTy, elements)
+            and transList(o, ty : Type, nil, cons) =
+                let converter = getConverterForType (ty.GetGenericArguments().[0])
+                o
+                |> Seq.cast
+                |> List.ofSeq
+                |> fun l -> List.foldBack(fun o s -> Quotations.Expr.NewUnionCase(cons, [ converter(o); s ])) l (Quotations.Expr.NewUnionCase(nil, []))
+                |> trans
+            and getConverterForType (ty : Type) = 
+                if ty.IsArray then 
+                    fun (v : obj) -> transArray(v :?> Array, ty)
+                elif ty.IsGenericType && ty.GetGenericTypeDefinition() = typedefof<_ list> then 
+                    let nil, cons =
+                        let cases = Reflection.FSharpType.GetUnionCases(ty)
+                        let a = cases.[0]
+                        let b = cases.[1]
+                        if a.Name = "Empty" then a,b
+                        else b,a
+                     
+                    fun v -> transList (v :?> System.Collections.IEnumerable, ty, nil, cons)
+                else 
+                    fun v -> Quotations.Expr.Value(v, ty)
+            let converter = getConverterForType tyOfValue
+            let r = converter v
+            if tyOfValue <> expectedTy then Quotations.Expr.Coerce(r, expectedTy)
+            else r
+        trans q
+
+    let getFastFuncType (args : list) resultType =
+        let types =
+            [|
+                for arg in args -> arg.Type
+                yield resultType
+            |]
+        let fastFuncTy = 
+            match List.length args with
+            | 2 -> typedefof>.MakeGenericType(types)
+            | 3 -> typedefof>.MakeGenericType(types)
+            | 4 -> typedefof>.MakeGenericType(types)
+            | 5 -> typedefof>.MakeGenericType(types)
+            | _ -> invalidArg "args" "incorrect number of arguments"
+        fastFuncTy.GetMethod("Adapt")
+    
+    let inline (===) a b = LanguagePrimitives.PhysicalEquality a b
+    
+    let traverse f = 
+        let rec fallback e = 
+            match e with
+            | P.Let(v, value, body) ->
+                let fixedValue = f fallback value
+                let fixedBody = f fallback body
+                if fixedValue === value && fixedBody === body then 
+                    e
+                else
+                    E.Let(v, fixedValue, fixedBody) 
+            | ES.ShapeVar _ -> e
+            | ES.ShapeLambda(v, body) -> 
+                let fixedBody = f fallback body 
+                if fixedBody === body then 
+                    e
+                else
+                    E.Lambda(v, fixedBody)
+            | ES.ShapeCombination(shape, exprs) -> 
+                let exprs1 = List.map (f fallback) exprs
+                if List.forall2 (===) exprs exprs1 then 
+                    e
+                else
+                    ES.RebuildShapeCombination(shape, exprs1)
+        fun e -> f fallback e
+
+    let RightPipe = <@@ (|>) @@>
+    let inlineRightPipe expr = 
+        let rec loop expr = traverse loopCore expr
+        and loopCore fallback orig = 
+            match orig with
+            | DP.SpecificCall RightPipe (None, _, [operand; applicable]) ->
+                let fixedOperand = loop operand
+                match loop applicable with
+                | P.Lambda(arg, body) ->
+                    let v = Quotations.Var("__temp", operand.Type)
+                    let ev = E.Var v
+
+                    let fixedBody = loop body
+                    E.Let(v, fixedOperand, fixedBody.Substitute(fun v1 -> if v1 = arg then Some ev else None))
+                | fixedApplicable -> E.Application(fixedApplicable, fixedOperand)
+            | x -> fallback x
+        loop expr
+
+    let inlineValueBindings e = 
+        let map = Dictionary(HashIdentity.Reference)
+        let rec loop expr = traverse loopCore expr
+        and loopCore fallback orig = 
+            match orig with
+            | P.Let(id, (P.Value(_) as v), body) when not id.IsMutable ->
+                map.[id] <- v
+                let fixedBody = loop body
+                map.Remove(id) |> ignore
+                fixedBody
+            | ES.ShapeVar v -> 
+                match map.TryGetValue v with
+                | true, e -> e
+                | _ -> orig
+            | x -> fallback x
+        loop e
+
+
+    let optimizeCurriedApplications expr = 
+        let rec loop expr = traverse loopCore expr
+        and loopCore fallback orig = 
+            match orig with
+            | P.Application(e, arg) -> 
+                let e1 = tryPeelApplications e [loop arg]
+                if e1 === e then 
+                    orig 
+                else 
+                    e1
+            | x -> fallback x
+        and tryPeelApplications orig args = 
+            let n = List.length args
+            match orig with
+            | P.Application(e, arg) -> 
+                let e1 = tryPeelApplications e ((loop arg)::args)
+                if e1 === e then 
+                    orig 
+                else 
+                    e1
+            | P.Let(id, applicable, (P.Lambda(_) as body)) when n > 0 -> 
+                let numberOfApplication = countPeelableApplications body id 0
+                if numberOfApplication = 0 then orig
+                elif n = 1 then E.Application(applicable, List.head args)
+                elif n <= 5 then
+                    let resultType = 
+                        applicable.Type 
+                        |> Seq.unfold (fun t -> 
+                            if not t.IsGenericType then None
+                            else
+                            let args = t.GetGenericArguments()
+                            if args.Length <> 2 then None
+                            else
+                            Some (args.[1], args.[1])
+                        )
+                        |> Seq.nth (n - 1)
+
+                    let adaptMethod = getFastFuncType args resultType
+                    let adapted = E.Call(adaptMethod, [loop applicable])
+                    let invoke = adapted.Type.GetMethod("Invoke", [| for arg in args -> arg.Type |])
+                    E.Call(adapted, invoke, args)
+                else
+                    (applicable, args) ||> List.fold (fun e a -> E.Application(e, a))
+            | _ -> 
+                orig
+        and countPeelableApplications expr v n =
+            match expr with
+            // v - applicable entity obtained on the prev step
+            // \arg -> let v1 = (f arg) in rest ==> f 
+            | P.Lambda(arg, P.Let(v1, P.Application(P.Var f, P.Var arg1), rest)) when v = f && arg = arg1 -> countPeelableApplications rest v1 (n + 1)
+            // \arg -> (f arg) ==> f
+            | P.Lambda(arg, P.Application(P.Var f, P.Var arg1)) when v = f && arg = arg1 -> n
+            | _ -> n
+        loop expr
+    
+    // FSharp.Data change: use the real variable names instead of indices, to improve output of Debug.fs
+    let transQuotationToCode isGenerated qexprf (paramNames: string[]) (argExprs: Quotations.Expr[]) = 
+        // add let bindings for arguments to ensure that arguments will be evaluated
+        let vars = argExprs |> Array.mapi (fun i e -> Quotations.Var(paramNames.[i], e.Type))
+        let expr = qexprf ([for v in vars -> Quotations.Expr.Var v])
+
+        let pairs = Array.zip argExprs vars
+        let expr = Array.foldBack (fun (arg, var) e -> Quotations.Expr.Let(var, arg, e)) pairs expr
+        let expr = 
+            if isGenerated then
+                let e1 = inlineRightPipe expr
+                let e2 = optimizeCurriedApplications e1
+                let e3 = inlineValueBindings e2
+                e3
+            else
+                expr
+
+        transExpr isGenerated expr
+
+    let adjustTypeAttributes attributes isNested = 
+        let visibilityAttributes = 
+            match attributes &&& TypeAttributes.VisibilityMask with 
+            | TypeAttributes.Public when isNested -> TypeAttributes.NestedPublic
+            | TypeAttributes.NotPublic when isNested -> TypeAttributes.NestedAssembly
+            | TypeAttributes.NestedPublic when not isNested -> TypeAttributes.Public
+            | TypeAttributes.NestedAssembly 
+            | TypeAttributes.NestedPrivate 
+            | TypeAttributes.NestedFamORAssem
+            | TypeAttributes.NestedFamily
+            | TypeAttributes.NestedFamANDAssem when not isNested -> TypeAttributes.NotPublic
+            | a -> a
+        (attributes &&& ~~~TypeAttributes.VisibilityMask) ||| visibilityAttributes
+        
+type ProvidedStaticParameter(parameterName:string,parameterType:Type,?parameterDefaultValue:obj) = 
+    inherit System.Reflection.ParameterInfo()
+
+    let customAttributesImpl = CustomAttributesImpl()
+
+    member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction
+    member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction
+    member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc
+
+    override __.RawDefaultValue = defaultArg parameterDefaultValue null
+    override __.Attributes = if parameterDefaultValue.IsNone then enum 0 else ParameterAttributes.Optional
+    override __.Position = 0
+    override __.ParameterType = parameterType
+    override __.Name = parameterName 
+
+    override __.GetCustomAttributes(_inherit) = ignore(_inherit); notRequired "GetCustomAttributes" parameterName
+    override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" parameterName
+
+type ProvidedParameter(name:string,parameterType:Type,?isOut:bool,?optionalValue:obj) = 
+    inherit System.Reflection.ParameterInfo()
+    let customAttributesImpl = CustomAttributesImpl()
+    let isOut = defaultArg isOut false
+    member __.IsParamArray with get() = customAttributesImpl.HasParamArray and set(v) = customAttributesImpl.HasParamArray <- v
+    override __.Name = name
+    override __.ParameterType = parameterType
+    override __.Attributes = (base.Attributes ||| (if isOut then ParameterAttributes.Out else enum 0)
+                                              ||| (match optionalValue with None -> enum 0 | Some _ -> ParameterAttributes.Optional ||| ParameterAttributes.HasDefault))
+    override __.RawDefaultValue = defaultArg optionalValue null
+    member __.HasDefaultParameterValue = Option.isSome optionalValue
+    member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData()
+#if FX_NO_CUSTOMATTRIBUTEDATA
+#else
+    override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData()
+#endif
+
+type ProvidedConstructor(parameters : ProvidedParameter list) = 
+    inherit ConstructorInfo()
+    let parameters  = parameters |> List.map (fun p -> p :> ParameterInfo) 
+    let mutable baseCall  = None
+
+    let mutable declaringType = null : System.Type
+    let mutable invokeCode    = None : option Quotations.Expr>
+    let mutable isImplicitCtor  = false
+    let mutable ctorAttributes = MethodAttributes.Public ||| MethodAttributes.RTSpecialName
+    let nameText () = sprintf "constructor for %s" (if declaringType=null then "" else declaringType.FullName)
+    let isStatic() = ctorAttributes.HasFlag(MethodAttributes.Static)
+
+    let customAttributesImpl = CustomAttributesImpl()
+    member __.IsTypeInitializer 
+        with get() = isStatic() && ctorAttributes.HasFlag(MethodAttributes.Private)
+        and set(v) = 
+            let typeInitializerAttributes = MethodAttributes.Static ||| MethodAttributes.Private
+            ctorAttributes <- if v then ctorAttributes ||| typeInitializerAttributes else ctorAttributes &&& ~~~typeInitializerAttributes
+
+    member __.AddXmlDocComputed xmlDocFunction            = customAttributesImpl.AddXmlDocComputed xmlDocFunction
+    member __.AddXmlDocDelayed xmlDocFunction             = customAttributesImpl.AddXmlDocDelayed xmlDocFunction
+    member __.AddXmlDoc xmlDoc                            = customAttributesImpl.AddXmlDoc xmlDoc
+    member __.AddObsoleteAttribute (message,?isError)     = customAttributesImpl.AddObsolete (message,defaultArg isError false)
+    member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath)
+    member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData()
+#if FX_NO_CUSTOMATTRIBUTEDATA
+#else
+    override __.GetCustomAttributesData()                 = customAttributesImpl.GetCustomAttributesData()
+#endif
+
+    member __.DeclaringTypeImpl 
+        with set x = 
+            if declaringType<>null then failwith (sprintf "ProvidedConstructor: declaringType already set on '%s'" (nameText())); 
+            declaringType <- x
+
+    member __.InvokeCode 
+        with set (q:Quotations.Expr list -> Quotations.Expr) = 
+            match invokeCode with
+            | None -> invokeCode <- Some q
+            | Some _ -> failwith (sprintf "ProvidedConstructor: code already given for '%s'" (nameText()))        
+
+    member __.BaseConstructorCall
+        with set (d:Quotations.Expr list -> (ConstructorInfo * Quotations.Expr list)) = 
+            match baseCall with
+            | None -> baseCall <- Some d
+            | Some _ -> failwith (sprintf "ProvidedConstructor: base call already given for '%s'" (nameText()))        
+
+    member __.GetInvokeCodeInternal isGenerated =
+        match invokeCode with
+        | Some f -> 
+            // FSharp.Data change: use the real variable names instead of indices, to improve output of Debug.fs
+            let paramNames = 
+                parameters
+                |> List.map (fun p -> p.Name) 
+                |> List.append (if not isGenerated || isStatic() then [] else ["this"])
+                |> Array.ofList
+            transQuotationToCode isGenerated f paramNames
+        | None -> failwith (sprintf "ProvidedConstructor: no invoker for '%s'" (nameText()))
+
+    member __.GetBaseConstructorCallInternal isGenerated =
+        match baseCall with
+        | Some f -> Some(fun ctorArgs -> let c,baseCtorArgExprs = f ctorArgs in c, List.map (transExpr isGenerated) baseCtorArgExprs)
+        | None -> None
+    member __.IsImplicitCtor with get() = isImplicitCtor and set v = isImplicitCtor <- v
+
+    // Implement overloads
+    override __.GetParameters() = parameters |> List.toArray 
+    override __.Attributes = ctorAttributes
+    override __.Name = if isStatic() then ".cctor" else ".ctor"
+    override __.DeclaringType = declaringType |> nonNull "ProvidedConstructor.DeclaringType"                                   
+    override __.IsDefined(_attributeType, _inherit) = true 
+
+    override __.Invoke(_invokeAttr, _binder, _parameters, _culture)      = notRequired "Invoke" (nameText())
+    override __.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" (nameText())
+    override __.ReflectedType                                        = notRequired "ReflectedType" (nameText())
+    override __.GetMethodImplementationFlags()                       = notRequired "GetMethodImplementationFlags" (nameText())
+    override __.MethodHandle                                         = notRequired "MethodHandle" (nameText())
+    override __.GetCustomAttributes(_inherit)                     = notRequired "GetCustomAttributes" (nameText())
+    override __.GetCustomAttributes(_attributeType, _inherit)      = notRequired "GetCustomAttributes" (nameText())
+
+type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, returnType: Type) =
+    inherit System.Reflection.MethodInfo()
+    let argParams = parameters |> List.map (fun p -> p :> ParameterInfo) 
+
+    // State
+    let mutable declaringType : Type = null
+    let mutable methodAttrs   = MethodAttributes.Public
+    let mutable invokeCode    = None : option Quotations.Expr>
+    let mutable staticParams = [ ] 
+    let mutable staticParamsApply = None
+    let isStatic() = methodAttrs.HasFlag(MethodAttributes.Static)
+    let customAttributesImpl = CustomAttributesImpl()
+
+    member __.AddXmlDocComputed xmlDocFunction            = customAttributesImpl.AddXmlDocComputed xmlDocFunction
+    member __.AddXmlDocDelayed xmlDocFunction             = customAttributesImpl.AddXmlDocDelayed xmlDocFunction
+    member __.AddXmlDoc xmlDoc                            = customAttributesImpl.AddXmlDoc xmlDoc
+    member __.AddObsoleteAttribute (message,?isError)     = customAttributesImpl.AddObsolete (message,defaultArg isError false)
+    member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath)
+    member __.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute)
+    member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData()
+#if FX_NO_CUSTOMATTRIBUTEDATA
+#else
+    override __.GetCustomAttributesData()                 = customAttributesImpl.GetCustomAttributesData()
+#endif
+
+    member __.SetMethodAttrs m = methodAttrs <- m 
+    member __.AddMethodAttrs m = methodAttrs <- methodAttrs ||| m
+    member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice
+    member __.IsStaticMethod 
+        with get()  = isStatic()
+        and set x = if x then methodAttrs <- methodAttrs ||| MethodAttributes.Static
+                    else methodAttrs <- methodAttrs &&& (~~~ MethodAttributes.Static)
+
+    member __.InvokeCode 
+        with set  (q:Quotations.Expr list -> Quotations.Expr) = 
+            match invokeCode with
+            | None -> invokeCode <- Some q
+            | Some _ -> failwith (sprintf "ProvidedConstructor: code already given for %s on type %s" methodName (if declaringType=null then "" else declaringType.FullName))
+
+
+    /// Abstract a type to a parametric-type. Requires "formal parameters" and "instantiation function".
+    member __.DefineStaticParameters(staticParameters : list, apply    : (string -> obj[] -> ProvidedMethod)) =
+        staticParams      <- staticParameters 
+        staticParamsApply <- Some apply
+
+    /// Get ParameterInfo[] for the parametric type parameters (//s GetGenericParameters)
+    member __.GetStaticParameters() = [| for p in staticParams -> p :> ParameterInfo |]
+
+    /// Instantiate parametrics type
+    member __.ApplyStaticArguments(mangledName:string, args:obj[]) =
+        if staticParams.Length>0 then
+            if staticParams.Length <> args.Length then
+                failwith (sprintf "ProvidedTypeDefinition: expecting %d static parameters but given %d for method %s" staticParams.Length args.Length methodName)
+            match staticParamsApply with
+            | None -> failwith "ProvidedTypeDefinition: DefineStaticParameters was not called"
+            | Some f -> f mangledName args
+        else
+            failwith (sprintf "ProvidedTypeDefinition: static parameters supplied but not expected for method %s" methodName)
+
+    member __.GetInvokeCodeInternal isGenerated =
+        match invokeCode with
+        | Some f -> 
+            // FSharp.Data change: use the real variable names instead of indices, to improve output of Debug.fs
+            let paramNames = 
+                parameters
+                |> List.map (fun p -> p.Name) 
+                |> List.append (if isStatic() then [] else ["this"])
+                |> Array.ofList
+            transQuotationToCode isGenerated f paramNames
+        | None -> failwith (sprintf "ProvidedMethod: no invoker for %s on type %s" methodName (if declaringType=null then "" else declaringType.FullName))
+
+   // Implement overloads
+    override __.GetParameters() = argParams |> Array.ofList
+    override __.Attributes = methodAttrs
+    override __.Name = methodName
+    override __.DeclaringType = declaringType |> nonNull "ProvidedMethod.DeclaringType"                                   
+    override __.IsDefined(_attributeType, _inherit) : bool = true
+    override __.MemberType = MemberTypes.Method
+    override __.CallingConvention = 
+        let cc = CallingConventions.Standard
+        let cc = if not (isStatic()) then cc ||| CallingConventions.HasThis else cc
+        cc
+    override __.ReturnType = returnType
+    override __.ReturnParameter = null // REVIEW: Give it a name and type?
+    override __.ToString() = "Method " + methodName
+    
+    // These don't have to return fully accurate results - they are used 
+    // by the F# Quotations library function SpecificCall as a pre-optimization
+    // when comparing methods
+    override __.MetadataToken = hash declaringType + hash methodName
+    override __.MethodHandle = RuntimeMethodHandle()
+
+    override __.ReturnTypeCustomAttributes                           = notRequired "ReturnTypeCustomAttributes" methodName
+    override __.GetBaseDefinition()                                  = notRequired "GetBaseDefinition" methodName
+    override __.GetMethodImplementationFlags()                       = notRequired "GetMethodImplementationFlags" methodName
+    override __.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" methodName
+    override __.ReflectedType                                        = notRequired "ReflectedType" methodName
+    override __.GetCustomAttributes(_inherit)                        = notRequired "GetCustomAttributes" methodName
+    override __.GetCustomAttributes(_attributeType, _inherit)        =  notRequired "GetCustomAttributes" methodName
+
+
+type ProvidedProperty(propertyName: string, propertyType: Type, ?parameters: ProvidedParameter list) = 
+    inherit System.Reflection.PropertyInfo()
+    // State
+
+    let parameters = defaultArg parameters []
+    let mutable declaringType = null
+    let mutable isStatic = false
+    let mutable getterCode = None : option Quotations.Expr>
+    let mutable setterCode = None : option Quotations.Expr>
+
+    let hasGetter() = getterCode.IsSome
+    let hasSetter() = setterCode.IsSome
+
+    // Delay construction - to pick up the latest isStatic
+    let markSpecialName (m:ProvidedMethod) = m.AddMethodAttrs(MethodAttributes.SpecialName); m
+    let getter = lazy (ProvidedMethod("get_" + propertyName,parameters,propertyType,IsStaticMethod=isStatic,DeclaringTypeImpl=declaringType,InvokeCode=getterCode.Value) |> markSpecialName)  
+    let setter = lazy (ProvidedMethod("set_" + propertyName,parameters @ [ProvidedParameter("value",propertyType)],typeof,IsStaticMethod=isStatic,DeclaringTypeImpl=declaringType,InvokeCode=setterCode.Value) |> markSpecialName) 
+ 
+    let customAttributesImpl = CustomAttributesImpl()
+    member __.AddXmlDocComputed xmlDocFunction            = customAttributesImpl.AddXmlDocComputed xmlDocFunction
+    member __.AddXmlDocDelayed xmlDocFunction             = customAttributesImpl.AddXmlDocDelayed xmlDocFunction
+    member __.AddXmlDoc xmlDoc                            = customAttributesImpl.AddXmlDoc xmlDoc
+    member __.AddObsoleteAttribute (message,?isError)     = customAttributesImpl.AddObsolete (message,defaultArg isError false)
+    member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath)
+    member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData()
+    member __.AddCustomAttribute attribute                = customAttributesImpl.AddCustomAttribute attribute
+#if FX_NO_CUSTOMATTRIBUTEDATA
+#else
+    override __.GetCustomAttributesData()                 = customAttributesImpl.GetCustomAttributesData()
+#endif
+
+    member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice
+
+    member __.IsStatic 
+        with get()  = isStatic
+        and set x = isStatic <- x
+
+    member __.GetterCode 
+        with set  (q:Quotations.Expr list -> Quotations.Expr) = 
+            if not getter.IsValueCreated then getterCode <- Some q else failwith "ProvidedProperty: getter MethodInfo has already been created"
+
+    member __.SetterCode 
+        with set (q:Quotations.Expr list -> Quotations.Expr) = 
+            if not (setter.IsValueCreated) then setterCode <- Some q else failwith "ProvidedProperty: setter MethodInfo has already been created"
+
+    // Implement overloads
+    override __.PropertyType = propertyType
+    override __.SetValue(_obj, _value, _invokeAttr, _binder, _index, _culture) = notRequired "SetValue" propertyName
+    override __.GetAccessors _nonPublic  = notRequired "nonPublic" propertyName
+    override __.GetGetMethod _nonPublic = if hasGetter() then getter.Force() :> MethodInfo else null
+    override __.GetSetMethod _nonPublic = if hasSetter() then setter.Force() :> MethodInfo else null
+    override __.GetIndexParameters() = [| for p in parameters -> upcast p |]
+    override __.Attributes = PropertyAttributes.None
+    override __.CanRead = hasGetter()
+    override __.CanWrite = hasSetter()
+    override __.GetValue(_obj, _invokeAttr, _binder, _index, _culture) : obj = notRequired "GetValue" propertyName
+    override __.Name = propertyName
+    override __.DeclaringType = declaringType |> nonNull "ProvidedProperty.DeclaringType"
+    override __.MemberType : MemberTypes = MemberTypes.Property
+
+    override __.ReflectedType                                     = notRequired "ReflectedType" propertyName
+    override __.GetCustomAttributes(_inherit)                  = notRequired "GetCustomAttributes" propertyName
+    override __.GetCustomAttributes(_attributeType, _inherit)   = notRequired "GetCustomAttributes" propertyName
+    override __.IsDefined(_attributeType, _inherit)             = notRequired "IsDefined" propertyName
+
+type ProvidedEvent(eventName:string,eventHandlerType:Type) = 
+    inherit System.Reflection.EventInfo()
+    // State
+
+    let mutable declaringType = null
+    let mutable isStatic = false
+    let mutable adderCode = None : option Quotations.Expr>
+    let mutable removerCode = None : option Quotations.Expr>
+
+    // Delay construction - to pick up the latest isStatic
+    let markSpecialName (m:ProvidedMethod) = m.AddMethodAttrs(MethodAttributes.SpecialName); m
+    let adder = lazy (ProvidedMethod("add_" + eventName, [ProvidedParameter("handler", eventHandlerType)],typeof,IsStaticMethod=isStatic,DeclaringTypeImpl=declaringType,InvokeCode=adderCode.Value) |> markSpecialName)  
+    let remover = lazy (ProvidedMethod("remove_" + eventName, [ProvidedParameter("handler", eventHandlerType)],typeof,IsStaticMethod=isStatic,DeclaringTypeImpl=declaringType,InvokeCode=removerCode.Value) |> markSpecialName) 
+ 
+    let customAttributesImpl = CustomAttributesImpl()
+    member __.AddXmlDocComputed xmlDocFunction            = customAttributesImpl.AddXmlDocComputed xmlDocFunction
+    member __.AddXmlDocDelayed xmlDocFunction             = customAttributesImpl.AddXmlDocDelayed xmlDocFunction
+    member __.AddXmlDoc xmlDoc                            = customAttributesImpl.AddXmlDoc xmlDoc
+    member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath)
+    member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData()
+#if FX_NO_CUSTOMATTRIBUTEDATA
+#else
+    override __.GetCustomAttributesData()                 = customAttributesImpl.GetCustomAttributesData()
+#endif
+
+    member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice
+    member __.IsStatic 
+        with get()  = isStatic
+        and set x = isStatic <- x
+
+    member __.AdderCode 
+        with get() = adderCode.Value
+        and  set f = 
+            if not adder.IsValueCreated then adderCode <- Some f else failwith "ProvidedEvent: Add MethodInfo has already been created"                                         
+
+    member __.RemoverCode
+        with get() = removerCode.Value
+        and  set f = 
+            if not (remover.IsValueCreated) then removerCode <- Some f else failwith "ProvidedEvent: Remove MethodInfo has already been created"
+
+    // Implement overloads
+    override __.EventHandlerType = eventHandlerType
+    override __.GetAddMethod _nonPublic = adder.Force() :> MethodInfo
+    override __.GetRemoveMethod _nonPublic = remover.Force() :> MethodInfo
+    override __.Attributes = EventAttributes.None
+    override __.Name = eventName
+    override __.DeclaringType = declaringType |> nonNull "ProvidedEvent.DeclaringType"
+    override __.MemberType : MemberTypes = MemberTypes.Event
+
+    override __.GetRaiseMethod _nonPublic                      = notRequired "GetRaiseMethod" eventName
+    override __.ReflectedType                                  = notRequired "ReflectedType" eventName
+    override __.GetCustomAttributes(_inherit)                  = notRequired "GetCustomAttributes" eventName
+    override __.GetCustomAttributes(_attributeType, _inherit)  = notRequired "GetCustomAttributes" eventName
+    override __.IsDefined(_attributeType, _inherit)            = notRequired "IsDefined" eventName
+
+type ProvidedLiteralField(fieldName:string,fieldType:Type,literalValue:obj) = 
+    inherit System.Reflection.FieldInfo()
+    // State
+
+    let mutable declaringType = null
+
+    let customAttributesImpl = CustomAttributesImpl()
+    member __.AddXmlDocComputed xmlDocFunction            = customAttributesImpl.AddXmlDocComputed xmlDocFunction
+    member __.AddXmlDocDelayed xmlDocFunction             = customAttributesImpl.AddXmlDocDelayed xmlDocFunction
+    member __.AddXmlDoc xmlDoc                            = customAttributesImpl.AddXmlDoc xmlDoc
+    member __.AddObsoleteAttribute (message,?isError)     = customAttributesImpl.AddObsolete (message,defaultArg isError false)
+    member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath)
+    member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData()
+#if FX_NO_CUSTOMATTRIBUTEDATA
+#else
+    override __.GetCustomAttributesData()                 = customAttributesImpl.GetCustomAttributesData()
+#endif
+
+    member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice
+
+
+    // Implement overloads
+    override __.FieldType = fieldType
+    override __.GetRawConstantValue()  = literalValue
+    override __.Attributes = FieldAttributes.Static ||| FieldAttributes.Literal ||| FieldAttributes.Public
+    override __.Name = fieldName
+    override __.DeclaringType = declaringType |> nonNull "ProvidedLiteralField.DeclaringType"
+    override __.MemberType : MemberTypes = MemberTypes.Field
+
+    override __.ReflectedType                                     = notRequired "ReflectedType" fieldName
+    override __.GetCustomAttributes(_inherit)                  = notRequired "GetCustomAttributes" fieldName
+    override __.GetCustomAttributes(_attributeType, _inherit)   = notRequired "GetCustomAttributes" fieldName
+    override __.IsDefined(_attributeType, _inherit)             = notRequired "IsDefined" fieldName
+
+    override __.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired "SetValue" fieldName
+    override __.GetValue(_obj) : obj = notRequired "GetValue" fieldName
+    override __.FieldHandle = notRequired "FieldHandle" fieldName
+
+type ProvidedField(fieldName:string,fieldType:Type) = 
+    inherit System.Reflection.FieldInfo()
+    // State
+
+    let mutable declaringType = null
+
+    let customAttributesImpl = CustomAttributesImpl()
+    let mutable fieldAttrs = FieldAttributes.Private
+    member __.AddXmlDocComputed xmlDocFunction            = customAttributesImpl.AddXmlDocComputed xmlDocFunction
+    member __.AddXmlDocDelayed xmlDocFunction             = customAttributesImpl.AddXmlDocDelayed xmlDocFunction
+    member __.AddXmlDoc xmlDoc                            = customAttributesImpl.AddXmlDoc xmlDoc
+    member __.AddObsoleteAttribute (message,?isError)     = customAttributesImpl.AddObsolete (message,defaultArg isError false)
+    member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath)
+    member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData()
+#if FX_NO_CUSTOMATTRIBUTEDATA
+#else
+    override __.GetCustomAttributesData()                 = customAttributesImpl.GetCustomAttributesData()
+#endif
+
+    member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice
+
+    member __.SetFieldAttributes attrs = fieldAttrs <- attrs
+    // Implement overloads
+    override __.FieldType = fieldType
+    override __.GetRawConstantValue()  = null
+    override __.Attributes = fieldAttrs
+    override __.Name = fieldName
+    override __.DeclaringType = declaringType |> nonNull "ProvidedField.DeclaringType"
+    override __.MemberType : MemberTypes = MemberTypes.Field
+
+    override __.ReflectedType                                     = notRequired "ReflectedType" fieldName
+    override __.GetCustomAttributes(_inherit)                  = notRequired "GetCustomAttributes" fieldName
+    override __.GetCustomAttributes(_attributeType, _inherit)   = notRequired "GetCustomAttributes" fieldName
+    override __.IsDefined(_attributeType, _inherit)             = notRequired "IsDefined" fieldName
+
+    override __.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired "SetValue" fieldName
+    override __.GetValue(_obj) : obj = notRequired "GetValue" fieldName
+    override __.FieldHandle = notRequired "FieldHandle" fieldName
+
+/// Represents the type constructor in a provided symbol type.
+[]
+type SymbolKind = 
+    | SDArray 
+    | Array of int 
+    | Pointer 
+    | ByRef 
+    | Generic of System.Type 
+    | FSharpTypeAbbreviation of (System.Reflection.Assembly * string * string[])
+
+
+/// Represents an array or other symbolic type involving a provided type as the argument.
+/// See the type provider spec for the methods that must be implemented.
+/// Note that the type provider specification does not require us to implement pointer-equality for provided types.
+type ProvidedSymbolType(kind: SymbolKind, args: Type list) =
+    inherit Type()
+
+    let rec isEquivalentTo (thisTy: Type) (otherTy: Type) =
+        match thisTy, otherTy with
+        | (:? ProvidedSymbolType as thisTy), (:? ProvidedSymbolType as thatTy) -> (thisTy.Kind,thisTy.Args) = (thatTy.Kind, thatTy.Args)
+        | (:? ProvidedSymbolType as thisTy), otherTy | otherTy, (:? ProvidedSymbolType as thisTy) ->
+            match thisTy.Kind, thisTy.Args with
+            | SymbolKind.SDArray, [ty] | SymbolKind.Array _, [ty] when otherTy.IsArray-> ty.Equals(otherTy.GetElementType())
+            | SymbolKind.ByRef, [ty] when otherTy.IsByRef -> ty.Equals(otherTy.GetElementType())
+            | SymbolKind.Pointer, [ty] when otherTy.IsPointer -> ty.Equals(otherTy.GetElementType())
+            | SymbolKind.Generic baseTy, args -> otherTy.IsGenericType && isEquivalentTo baseTy (otherTy.GetGenericTypeDefinition()) && Seq.forall2 isEquivalentTo args (otherTy.GetGenericArguments())
+            | _ -> false
+        | a, b -> a.Equals b
+
+    let nameText() = 
+        match kind,args with 
+        | SymbolKind.SDArray,[arg] -> arg.Name + "[]" 
+        | SymbolKind.Array _,[arg] -> arg.Name + "[*]" 
+        | SymbolKind.Pointer,[arg] -> arg.Name + "*" 
+        | SymbolKind.ByRef,[arg] -> arg.Name + "&"
+        | SymbolKind.Generic gty, args -> gty.Name + (sprintf "%A" args)
+        | SymbolKind.FSharpTypeAbbreviation (_,_,path),_ -> path.[path.Length-1]
+        | _ -> failwith "unreachable"
+
+    static member convType (parameters: Type list) (ty:Type) = 
+        if ty = null then null
+        elif ty.IsGenericType then
+            let args = Array.map (ProvidedSymbolType.convType parameters) (ty.GetGenericArguments())
+            ProvidedSymbolType(Generic (ty.GetGenericTypeDefinition()), Array.toList args)  :> Type
+        elif ty.HasElementType then 
+            let ety = ProvidedSymbolType.convType parameters (ty.GetElementType()) 
+            if ty.IsArray then 
+                let rank = ty.GetArrayRank()
+                if rank = 1 then ProvidedSymbolType(SDArray,[ety]) :> Type
+                else ProvidedSymbolType(Array rank,[ety]) :> Type
+            elif ty.IsPointer then ProvidedSymbolType(Pointer,[ety]) :> Type
+            elif ty.IsByRef then ProvidedSymbolType(ByRef,[ety]) :> Type
+            else ty
+        elif ty.IsGenericParameter then 
+            if ty.GenericParameterPosition <= parameters.Length - 1 then 
+                parameters.[ty.GenericParameterPosition]
+            else
+                ty
+        else ty
+
+    override __.FullName =   
+        match kind,args with 
+        | SymbolKind.SDArray,[arg] -> arg.FullName + "[]" 
+        | SymbolKind.Array _,[arg] -> arg.FullName + "[*]" 
+        | SymbolKind.Pointer,[arg] -> arg.FullName + "*" 
+        | SymbolKind.ByRef,[arg] -> arg.FullName + "&"
+        | SymbolKind.Generic gty, args -> gty.FullName + "[" + (args |> List.map (fun arg -> arg.ToString()) |> String.concat ",") + "]"
+        | SymbolKind.FSharpTypeAbbreviation (_,nsp,path),args -> String.concat "." (Array.append [| nsp |] path) + args.ToString()
+        | _ -> failwith "unreachable"
+   
+    /// Although not strictly required by the type provider specification, this is required when doing basic operations like FullName on
+    /// .NET symbolic types made from this type, e.g. when building Nullable.FullName
+    override __.DeclaringType =                                                                 
+        match kind,args with 
+        | SymbolKind.SDArray,[arg] -> arg
+        | SymbolKind.Array _,[arg] -> arg
+        | SymbolKind.Pointer,[arg] -> arg
+        | SymbolKind.ByRef,[arg] -> arg
+        | SymbolKind.Generic gty,_ -> gty
+        | SymbolKind.FSharpTypeAbbreviation _,_ -> null
+        | _ -> failwith "unreachable"
+
+    override __.IsAssignableFrom(otherTy) = 
+        match kind with
+        | Generic gtd ->
+            if otherTy.IsGenericType then
+                let otherGtd = otherTy.GetGenericTypeDefinition()
+                let otherArgs = otherTy.GetGenericArguments()
+                let yes = gtd.Equals(otherGtd) && Seq.forall2 isEquivalentTo args otherArgs
+                yes
+                else
+                    base.IsAssignableFrom(otherTy)
+        | _ -> base.IsAssignableFrom(otherTy)
+
+    override __.Name = nameText()
+
+    override __.BaseType =
+        match kind with 
+        | SymbolKind.SDArray -> typeof
+        | SymbolKind.Array _ -> typeof
+        | SymbolKind.Pointer -> typeof
+        | SymbolKind.ByRef -> typeof
+        | SymbolKind.Generic gty  ->
+            if gty.BaseType = null then null else
+            ProvidedSymbolType.convType args gty.BaseType
+        | SymbolKind.FSharpTypeAbbreviation _ -> typeof
+
+    override __.GetArrayRank() = (match kind with SymbolKind.Array n -> n | SymbolKind.SDArray -> 1 | _ -> invalidOp "non-array type")
+    override __.IsArrayImpl() = (match kind with SymbolKind.Array _ | SymbolKind.SDArray -> true | _ -> false)
+    override __.IsByRefImpl() = (match kind with SymbolKind.ByRef _ -> true | _ -> false)
+    override __.IsPointerImpl() = (match kind with SymbolKind.Pointer _ -> true | _ -> false)
+    override __.IsPrimitiveImpl() = false
+    override __.IsGenericType = (match kind with SymbolKind.Generic _ -> true | _ -> false)
+    override __.GetGenericArguments() = (match kind with SymbolKind.Generic _ -> args |> List.toArray | _ -> invalidOp "non-generic type")
+    override __.GetGenericTypeDefinition() = (match kind with SymbolKind.Generic e -> e | _ -> invalidOp "non-generic type")
+    override __.IsCOMObjectImpl() = false
+    override __.HasElementTypeImpl() = (match kind with SymbolKind.Generic _ -> false | _ -> true)
+    override __.GetElementType() = (match kind,args with (SymbolKind.Array _  | SymbolKind.SDArray | SymbolKind.ByRef | SymbolKind.Pointer),[e] -> e | _ -> invalidOp "not an array, pointer or byref type")
+    override this.ToString() = this.FullName
+
+    override __.Assembly = 
+        match kind with 
+        | SymbolKind.FSharpTypeAbbreviation (assembly,_nsp,_path) -> assembly
+        | SymbolKind.Generic gty -> gty.Assembly
+        | _ -> notRequired "Assembly" (nameText())
+
+    override __.Namespace = 
+        match kind with 
+        | SymbolKind.FSharpTypeAbbreviation (_assembly,nsp,_path) -> nsp
+        | _ -> notRequired "Namespace" (nameText())
+
+    override __.GetHashCode()                                                                    = 
+        match kind,args with 
+        | SymbolKind.SDArray,[arg] -> 10 + hash arg
+        | SymbolKind.Array _,[arg] -> 163 + hash arg
+        | SymbolKind.Pointer,[arg] -> 283 + hash arg
+        | SymbolKind.ByRef,[arg] -> 43904 + hash arg
+        | SymbolKind.Generic gty,_ -> 9797 + hash gty + List.sumBy hash args
+        | SymbolKind.FSharpTypeAbbreviation _,_ -> 3092
+        | _ -> failwith "unreachable"
+    
+    override __.Equals(other: obj) =
+        match other with
+        | :? ProvidedSymbolType as otherTy -> (kind, args) = (otherTy.Kind, otherTy.Args)
+        | _ -> false
+
+    member __.Kind = kind
+    member __.Args = args
+    
+    override __.Module : Module                                                                   = notRequired "Module" (nameText())
+    override __.GetConstructors _bindingAttr                                                      = notRequired "GetConstructors" (nameText())
+    override __.GetMethodImpl(_name, _bindingAttr, _binderBinder, _callConvention, _types, _modifiers) = 
+        match kind with
+        | Generic gtd -> 
+            let ty = gtd.GetGenericTypeDefinition().MakeGenericType(Array.ofList args)
+            ty.GetMethod(_name, _bindingAttr)
+        | _ -> notRequired "GetMethodImpl" (nameText())
+    override __.GetMembers _bindingAttr                                                           = notRequired "GetMembers" (nameText())
+    override __.GetMethods _bindingAttr                                                           = notRequired "GetMethods" (nameText())
+    override __.GetField(_name, _bindingAttr)                                                     = notRequired "GetField" (nameText())
+    override __.GetFields _bindingAttr                                                            = notRequired "GetFields" (nameText())
+    override __.GetInterface(_name, _ignoreCase)                                                  = notRequired "GetInterface" (nameText())
+    override __.GetInterfaces()                                                                   = notRequired "GetInterfaces" (nameText())
+    override __.GetEvent(_name, _bindingAttr)                                                     = notRequired "GetEvent" (nameText())
+    override __.GetEvents _bindingAttr                                                            = notRequired "GetEvents" (nameText())
+    override __.GetProperties _bindingAttr                                                        = notRequired "GetProperties" (nameText())
+    override __.GetPropertyImpl(_name, _bindingAttr, _binder, _returnType, _types, _modifiers)    = notRequired "GetPropertyImpl" (nameText())
+    override __.GetNestedTypes _bindingAttr                                                       = notRequired "GetNestedTypes" (nameText())
+    override __.GetNestedType(_name, _bindingAttr)                                                = notRequired "GetNestedType" (nameText())
+    override __.GetAttributeFlagsImpl()                                                           = notRequired "GetAttributeFlagsImpl" (nameText())
+    override __.UnderlyingSystemType = 
+        match kind with 
+        | SymbolKind.SDArray
+        | SymbolKind.Array _
+        | SymbolKind.Pointer
+        | SymbolKind.FSharpTypeAbbreviation _
+        | SymbolKind.ByRef -> notRequired "UnderlyingSystemType" (nameText())
+        | SymbolKind.Generic gty -> gty.UnderlyingSystemType      
+#if FX_NO_CUSTOMATTRIBUTEDATA
+#else
+    override __.GetCustomAttributesData()                                                        =  ([| |] :> IList<_>)
+#endif
+    override __.MemberType                                                                       = notRequired "MemberType" (nameText())
+    override __.GetMember(_name,_mt,_bindingAttr)                                                = notRequired "GetMember" (nameText())
+    override __.GUID                                                                             = notRequired "GUID" (nameText())
+    override __.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired "InvokeMember" (nameText())
+    override __.AssemblyQualifiedName                                                            = notRequired "AssemblyQualifiedName" (nameText())
+    override __.GetConstructorImpl(_bindingAttr, _binder, _callConvention, _types, _modifiers)   = notRequired "GetConstructorImpl" (nameText())
+    override __.GetCustomAttributes(_inherit)                                                    = [| |]
+    override __.GetCustomAttributes(_attributeType, _inherit)                                    = [| |]
+    override __.IsDefined(_attributeType, _inherit)                                              = false
+    // FSharp.Data addition: this was added to support arrays of arrays
+    override this.MakeArrayType() = ProvidedSymbolType(SymbolKind.SDArray, [this]) :> Type
+    override this.MakeArrayType arg = ProvidedSymbolType(SymbolKind.Array arg, [this]) :> Type
+
+type ProvidedSymbolMethod(genericMethodDefinition: MethodInfo, parameters: Type list) =
+    inherit System.Reflection.MethodInfo()
+
+    let convParam (p:ParameterInfo) = 
+        { new System.Reflection.ParameterInfo() with
+              override __.Name = p.Name
+              override __.ParameterType = ProvidedSymbolType.convType parameters p.ParameterType
+              override __.Attributes = p.Attributes
+              override __.RawDefaultValue = p.RawDefaultValue
+#if FX_NO_CUSTOMATTRIBUTEDATA
+#else
+              override __.GetCustomAttributesData() = p.GetCustomAttributesData()
+#endif
+        } 
+
+    override this.IsGenericMethod = 
+        (if this.DeclaringType.IsGenericType then this.DeclaringType.GetGenericArguments().Length else 0) < parameters.Length
+
+    override this.GetGenericArguments() = 
+        Seq.skip (if this.DeclaringType.IsGenericType then this.DeclaringType.GetGenericArguments().Length else 0) parameters |> Seq.toArray 
+
+    override __.GetGenericMethodDefinition() = genericMethodDefinition
+
+    override __.DeclaringType = ProvidedSymbolType.convType parameters genericMethodDefinition.DeclaringType
+    override __.ToString() = "Method " + genericMethodDefinition.Name
+    override __.Name = genericMethodDefinition.Name
+    override __.MetadataToken = genericMethodDefinition.MetadataToken
+    override __.Attributes = genericMethodDefinition.Attributes
+    override __.CallingConvention = genericMethodDefinition.CallingConvention
+    override __.MemberType = genericMethodDefinition.MemberType
+
+    override __.IsDefined(_attributeType, _inherit) : bool = notRequired "IsDefined" genericMethodDefinition.Name
+    override __.ReturnType = ProvidedSymbolType.convType parameters genericMethodDefinition.ReturnType
+    override __.GetParameters() = genericMethodDefinition.GetParameters() |> Array.map convParam
+    override __.ReturnParameter = genericMethodDefinition.ReturnParameter |> convParam
+    override __.ReturnTypeCustomAttributes                           = notRequired "ReturnTypeCustomAttributes" genericMethodDefinition.Name
+    override __.GetBaseDefinition()                                  = notRequired "GetBaseDefinition" genericMethodDefinition.Name
+    override __.GetMethodImplementationFlags()                       = notRequired "GetMethodImplementationFlags" genericMethodDefinition.Name
+    override __.MethodHandle                                         = notRequired "MethodHandle" genericMethodDefinition.Name
+    override __.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" genericMethodDefinition.Name
+    override __.ReflectedType                                        = notRequired "ReflectedType" genericMethodDefinition.Name
+    override __.GetCustomAttributes(_inherit)                     = notRequired "GetCustomAttributes" genericMethodDefinition.Name
+    override __.GetCustomAttributes(_attributeType, _inherit)      =  notRequired "GetCustomAttributes" genericMethodDefinition.Name 
+
+
+
+type ProvidedTypeBuilder() =
+    static member MakeGenericType(genericTypeDefinition, genericArguments) = ProvidedSymbolType(Generic genericTypeDefinition, genericArguments) :> Type
+    static member MakeGenericMethod(genericMethodDefinition, genericArguments) = ProvidedSymbolMethod(genericMethodDefinition, genericArguments) :> MethodInfo
+
+[]
+type ProvidedMeasureBuilder() =
+
+    // TODO: this shouldn't be hardcoded, but without creating a dependency on FSharp.Compiler.Service
+    // there seems to be no way to check if a type abbreviation exists
+    let unitNamesTypeAbbreviations = 
+        [ "meter"; "hertz"; "newton"; "pascal"; "joule"; "watt"; "coulomb"; 
+          "volt"; "farad"; "ohm"; "siemens"; "weber"; "tesla"; "henry"
+          "lumen"; "lux"; "becquerel"; "gray"; "sievert"; "katal" ]
+        |> Set.ofList
+
+    let unitSymbolsTypeAbbreviations = 
+        [ "m"; "kg"; "s"; "A"; "K"; "mol"; "cd"; "Hz"; "N"; "Pa"; "J"; "W"; "C"
+          "V"; "F"; "S"; "Wb"; "T"; "lm"; "lx"; "Bq"; "Gy"; "Sv"; "kat"; "H" ]
+        |> Set.ofList
+
+    static let theBuilder = ProvidedMeasureBuilder()
+    static member Default = theBuilder
+    member __.One = typeof 
+    member __.Product (m1,m2) = typedefof>.MakeGenericType [| m1;m2 |] 
+    member __.Inverse m = typedefof>.MakeGenericType [| m |] 
+    member b.Ratio (m1, m2) = b.Product(m1, b.Inverse m2)
+    member b.Square m = b.Product(m, m)
+
+    // FSharp.Data change: if the unit is not a valid type, instead 
+    // of assuming it's a type abbreviation, which may not be the case and cause a
+    // problem later on, check the list of valid abbreviations
+    member __.SI (m:string) = 
+        let mLowerCase = m.ToLowerInvariant()
+        let abbreviation =            
+            if unitNamesTypeAbbreviations.Contains mLowerCase then
+                Some ("Microsoft.FSharp.Data.UnitSystems.SI.UnitNames", mLowerCase)
+            elif unitSymbolsTypeAbbreviations.Contains m then
+                Some ("Microsoft.FSharp.Data.UnitSystems.SI.UnitSymbols", m)
+            else
+                None
+        match abbreviation with
+        | Some (ns, unitName) ->
+            ProvidedSymbolType
+               (SymbolKind.FSharpTypeAbbreviation
+                   (typeof.Assembly,
+                    ns,
+                    [| unitName |]), 
+                []) :> Type
+        | None ->
+            typedefof>.Assembly.GetType("Microsoft.FSharp.Data.UnitSystems.SI.UnitNames." + mLowerCase)
+
+    member __.AnnotateType (basicType, annotation) = ProvidedSymbolType(Generic basicType, annotation) :> Type
+
+
+
+[]
+type TypeContainer =
+  | Namespace of Assembly * string // namespace
+  | Type of System.Type
+  | TypeToBeDecided
+
+module GlobalProvidedAssemblyElementsTable = 
+    let theTable = Dictionary>()
+
+type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType  : Type option) as this =
+    inherit Type()
+
+    do match container, !ProvidedTypeDefinition.Logger with
+       | TypeContainer.Namespace _, Some logger -> logger (sprintf "Creating ProvidedTypeDefinition %s [%d]" className (System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode this))
+       | _ -> ()
+
+    // state
+    let mutable attributes   = 
+        TypeAttributes.Public ||| 
+        TypeAttributes.Class ||| 
+        TypeAttributes.Sealed |||
+        enum (int32 TypeProviderTypeAttributes.IsErased)
+
+
+    let mutable enumUnderlyingType = typeof
+    let mutable baseType   =  lazy baseType
+    let mutable membersKnown   = ResizeArray()
+    let mutable membersQueue   = ResizeArray<(unit -> list)>()       
+    let mutable staticParams = [ ] 
+    let mutable staticParamsApply = None
+    let mutable container = container
+    let mutable interfaceImpls = ResizeArray()
+    let mutable interfaceImplsDelayed = ResizeArray list>()
+    let mutable methodOverrides = ResizeArray()
+
+    // members API
+    let getMembers() = 
+        if membersQueue.Count > 0 then 
+            let elems = membersQueue |> Seq.toArray // take a copy in case more elements get added
+            membersQueue.Clear()
+            for  f in elems do
+                for i in f() do 
+                    membersKnown.Add i       
+                    match i with
+                    | :? ProvidedProperty    as p -> 
+                        if p.CanRead then membersKnown.Add (p.GetGetMethod true)
+                        if p.CanWrite then membersKnown.Add (p.GetSetMethod true)
+                    | :? ProvidedEvent       as e -> 
+                        membersKnown.Add (e.GetAddMethod true)
+                        membersKnown.Add (e.GetRemoveMethod true)
+                    | _ -> ()
+        
+        membersKnown.ToArray()
+
+            // members API
+    let getInterfaces() = 
+        if interfaceImplsDelayed.Count > 0 then 
+            let elems = interfaceImplsDelayed |> Seq.toArray // take a copy in case more elements get added
+            interfaceImplsDelayed.Clear()
+            for  f in elems do
+                for i in f() do 
+                    interfaceImpls.Add i       
+        
+        interfaceImpls.ToArray()
+
+    let mutable theAssembly = 
+      lazy
+        match container with
+        | TypeContainer.Namespace (theAssembly, rootNamespace) ->
+            if theAssembly = null then failwith "Null assemblies not allowed"
+            if rootNamespace<>null && rootNamespace.Length=0 then failwith "Use 'null' for global namespace"
+            theAssembly
+        | TypeContainer.Type superTy -> superTy.Assembly
+        | TypeContainer.TypeToBeDecided -> failwith (sprintf "type '%s' was not added as a member to a declaring type" className)
+    
+    let rootNamespace =
+      lazy 
+        match container with
+        | TypeContainer.Namespace (_,rootNamespace) -> rootNamespace
+        | TypeContainer.Type enclosingTyp           -> enclosingTyp.Namespace
+        | TypeContainer.TypeToBeDecided -> failwith (sprintf "type '%s' was not added as a member to a declaring type" className)
+
+    let declaringType =
+      lazy
+        match container with
+        | TypeContainer.Namespace _ -> null
+        | TypeContainer.Type enclosingTyp           -> enclosingTyp
+        | TypeContainer.TypeToBeDecided -> failwith (sprintf "type '%s' was not added as a member to a declaring type" className)
+
+    let fullName = 
+      lazy
+        match container with
+        | TypeContainer.Type declaringType -> declaringType.FullName + "+" + className
+        | TypeContainer.Namespace (_,namespaceName) ->  
+            if namespaceName="" then failwith "use null for global namespace"
+            match namespaceName with
+            | null -> className
+            | _    -> namespaceName + "." + className
+        | TypeContainer.TypeToBeDecided -> failwith (sprintf "type '%s' was not added as a member to a declaring type" className)
+                                                            
+    let patchUpAddedMemberInfo (this:Type) (m:MemberInfo) = 
+        match m with
+        | :? ProvidedConstructor as c -> c.DeclaringTypeImpl <- this // patch up "declaring type" on provided MethodInfo
+        | :? ProvidedMethod      as m -> m.DeclaringTypeImpl <- this // patch up "declaring type" on provided MethodInfo
+        | :? ProvidedProperty    as p -> p.DeclaringTypeImpl <- this // patch up "declaring type" on provided MethodInfo
+        | :? ProvidedEvent       as e -> e.DeclaringTypeImpl <- this // patch up "declaring type" on provided MethodInfo
+        | :? ProvidedTypeDefinition  as t -> t.DeclaringTypeImpl <- this 
+        | :? ProvidedLiteralField as l -> l.DeclaringTypeImpl <- this
+        | :? ProvidedField as l -> l.DeclaringTypeImpl <- this
+        | _ -> ()
+
+    let customAttributesImpl = CustomAttributesImpl()
+
+    member __.AddXmlDocComputed xmlDocFunction            = customAttributesImpl.AddXmlDocComputed xmlDocFunction
+    member __.AddXmlDocDelayed xmlDocFunction             = customAttributesImpl.AddXmlDocDelayed xmlDocFunction
+    member __.AddXmlDoc xmlDoc                            = customAttributesImpl.AddXmlDoc xmlDoc
+    member __.AddObsoleteAttribute (message,?isError)     = customAttributesImpl.AddObsolete (message,defaultArg isError false)
+    member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath)
+    member __.HideObjectMethods with set v                = customAttributesImpl.HideObjectMethods <- v
+    member __.NonNullable with set v                      = customAttributesImpl.NonNullable <- v
+    member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData()
+    member __.AddCustomAttribute attribute                = customAttributesImpl.AddCustomAttribute attribute
+#if FX_NO_CUSTOMATTRIBUTEDATA
+#else
+    override __.GetCustomAttributesData()                 = customAttributesImpl.GetCustomAttributesData()
+#endif
+
+    member __.ResetEnclosingType (ty) = 
+        container <- TypeContainer.Type ty
+    new (assembly:Assembly,namespaceName,className,baseType) = new ProvidedTypeDefinition(TypeContainer.Namespace (assembly,namespaceName), className, baseType)
+    new (className,baseType) = new ProvidedTypeDefinition(TypeContainer.TypeToBeDecided, className, baseType)
+    // state ops
+
+    override __.UnderlyingSystemType = typeof
+
+    member __.SetEnumUnderlyingType(ty) = enumUnderlyingType <- ty
+
+    override __.GetEnumUnderlyingType() = if this.IsEnum then enumUnderlyingType else invalidOp "not enum type"
+
+    member __.SetBaseType t = baseType <- lazy Some t
+
+    member __.SetBaseTypeDelayed baseTypeFunction = baseType <- lazy (Some (baseTypeFunction()))
+
+    member __.SetAttributes x = attributes <- x
+
+    // Add MemberInfos
+    member __.AddMembersDelayed(membersFunction : unit -> list<#MemberInfo>) =
+        membersQueue.Add (fun () -> membersFunction() |> List.map (fun x -> patchUpAddedMemberInfo this x; x :> MemberInfo ))
+
+    member __.AddMembers(memberInfos:list<#MemberInfo>) = (* strict *)
+        memberInfos |> List.iter (patchUpAddedMemberInfo this) // strict: patch up now
+        membersQueue.Add (fun () -> memberInfos |> List.map (fun x -> x :> MemberInfo))
+
+    member __.AddMember(memberInfo:MemberInfo) = 
+        this.AddMembers [memberInfo]    
+
+    member __.AddMemberDelayed(memberFunction : unit -> #MemberInfo) = 
+        this.AddMembersDelayed(fun () -> [memberFunction()])
+
+    member __.AddAssemblyTypesAsNestedTypesDelayed (assemblyf : unit -> System.Reflection.Assembly)  = 
+        let bucketByPath nodef tipf (items: (string list * 'Value) list) = 
+            // Find all the items with an empty key list and call 'tipf' 
+            let tips = 
+                [ for (keylist,v) in items do 
+                        match keylist with 
+                        | [] -> yield tipf v
+                        | _ -> () ]
+
+            // Find all the items with a non-empty key list. Bucket them together by
+            // the first key. For each bucket, call 'nodef' on that head key and the bucket.
+            let nodes = 
+                let buckets = new Dictionary<_,_>(10)
+                for (keylist,v) in items do
+                    match keylist with 
+                    | [] -> ()
+                    | key::rest -> 
+                        buckets.[key] <- (rest,v) :: (if buckets.ContainsKey key then buckets.[key] else []);
+
+                [ for (KeyValue(key,items)) in buckets -> nodef key items ]
+
+            tips @ nodes
+        this.AddMembersDelayed (fun _ -> 
+            let topTypes = [ for ty in assemblyf().GetTypes() do 
+                                    if not ty.IsNested then
+                                            let namespaceParts = match ty.Namespace with null -> [] | s -> s.Split '.' |> Array.toList
+                                            yield namespaceParts,  ty ]
+            let rec loop types = 
+                types 
+                |> bucketByPath
+                    (fun namespaceComponent typesUnderNamespaceComponent -> 
+                        let t = ProvidedTypeDefinition(namespaceComponent, baseType = Some typeof)
+                        t.AddMembers (loop typesUnderNamespaceComponent)
+                        (t :> Type))
+                    (fun ty -> ty)
+            loop topTypes)
+
+    /// Abstract a type to a parametric-type. Requires "formal parameters" and "instantiation function".
+    member __.DefineStaticParameters(staticParameters : list, apply    : (string -> obj[] -> ProvidedTypeDefinition)) =
+        staticParams      <- staticParameters 
+        staticParamsApply <- Some apply
+
+    /// Get ParameterInfo[] for the parametric type parameters (//s GetGenericParameters)
+    member __.GetStaticParameters() = [| for p in staticParams -> p :> ParameterInfo |]
+
+    /// Instantiate parametrics type
+    member __.MakeParametricType(name:string,args:obj[]) =
+        if staticParams.Length>0 then
+            if staticParams.Length <> args.Length then
+                failwith (sprintf "ProvidedTypeDefinition: expecting %d static parameters but given %d for type %s" staticParams.Length args.Length (fullName.Force()))
+            match staticParamsApply with
+            | None -> failwith "ProvidedTypeDefinition: DefineStaticParameters was not called"
+            | Some f -> f name args
+
+        else
+            failwith (sprintf "ProvidedTypeDefinition: static parameters supplied but not expected for %s" (fullName.Force()))
+
+    member __.DeclaringTypeImpl
+        with set x = 
+            match container with TypeContainer.TypeToBeDecided -> () | _ -> failwith (sprintf "container type for '%s' was already set to '%s'" this.FullName x.FullName); 
+            container <- TypeContainer.Type  x
+
+    // Implement overloads
+    override __.Assembly = theAssembly.Force()
+
+    member __.SetAssembly assembly = theAssembly <- lazy assembly
+
+    member __.SetAssemblyLazy assembly = theAssembly <- assembly
+
+    override __.FullName = fullName.Force()
+
+    override __.Namespace = rootNamespace.Force()
+
+    override __.BaseType = match baseType.Value with Some ty -> ty | None -> null
+    
+    // Constructors
+    override __.GetConstructors bindingAttr = 
+        [| for m in this.GetMembers bindingAttr do                
+                if m.MemberType = MemberTypes.Constructor then
+                    yield (m :?> ConstructorInfo) |]
+    // Methods
+    override __.GetMethodImpl(name, bindingAttr, _binderBinder, _callConvention, _types, _modifiers) : MethodInfo = 
+        let membersWithName = 
+            [ for m in this.GetMembers(bindingAttr) do                
+                if m.MemberType.HasFlag(MemberTypes.Method) && m.Name = name then
+                    yield  m ]
+        match membersWithName with 
+        | []        -> null
+        | [meth]    -> meth :?> MethodInfo
+        | _several   -> failwith "GetMethodImpl. not support overloads"
+
+    override __.GetMethods bindingAttr = 
+        this.GetMembers bindingAttr 
+        |> Array.filter (fun m -> m.MemberType.HasFlag(MemberTypes.Method)) 
+        |> Array.map (fun m -> m :?> MethodInfo)
+
+    // Fields
+    override __.GetField(name, bindingAttr) = 
+        let fields = [| for m in this.GetMembers bindingAttr do
+                            if m.MemberType.HasFlag(MemberTypes.Field) && (name = null || m.Name = name) then // REVIEW: name = null. Is that a valid query?!
+                                yield m |] 
+        if fields.Length > 0 then fields.[0] :?> FieldInfo else null
+
+    override __.GetFields bindingAttr = 
+        [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Field) then yield m :?> FieldInfo |]
+
+    override __.GetInterface(_name, _ignoreCase) = notRequired "GetInterface" this.Name
+
+    override __.GetInterfaces() = 
+        [| yield! getInterfaces()  |]
+
+    member __.GetInterfaceImplementations() = 
+        [| yield! getInterfaces() |]
+
+    member __.AddInterfaceImplementation ityp = interfaceImpls.Add ityp
+
+    member __.AddInterfaceImplementationsDelayed itypf = interfaceImplsDelayed.Add itypf
+
+    member __.GetMethodOverrides() = 
+        [| yield! methodOverrides |]
+
+    member __.DefineMethodOverride (bodyMethInfo,declMethInfo) = methodOverrides.Add (bodyMethInfo, declMethInfo)
+
+    // Events
+    override __.GetEvent(name, bindingAttr) = 
+        let events = this.GetMembers bindingAttr 
+                     |> Array.filter(fun m -> m.MemberType.HasFlag(MemberTypes.Event) && (name = null || m.Name = name)) 
+        if events.Length > 0 then events.[0] :?> EventInfo else null
+
+    override __.GetEvents bindingAttr = 
+        [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Event) then yield downcast m |]    
+
+    // Properties
+    override __.GetProperties bindingAttr = 
+        [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Property) then yield downcast m |]
+
+    override __.GetPropertyImpl(name, bindingAttr, binder, returnType, types, modifiers) = 
+        if returnType <> null then failwith "Need to handle specified return type in GetPropertyImpl"
+        if types      <> null then failwith "Need to handle specified parameter types in GetPropertyImpl"
+        if modifiers  <> null then failwith "Need to handle specified modifiers in GetPropertyImpl"
+        if binder  <> null then failwith "Need to handle binder in GetPropertyImpl"
+        let props = this.GetMembers bindingAttr |> Array.filter(fun m -> m.MemberType.HasFlag(MemberTypes.Property) && (name = null || m.Name = name))  // Review: nam = null, valid query!?
+        if props.Length > 0 then
+            props.[0] :?> PropertyInfo
+        else
+            null
+    // Nested Types
+    override __.MakeArrayType() = ProvidedSymbolType(SymbolKind.SDArray, [this]) :> Type
+    override __.MakeArrayType arg = ProvidedSymbolType(SymbolKind.Array arg, [this]) :> Type
+    override __.MakePointerType() = ProvidedSymbolType(SymbolKind.Pointer, [this]) :> Type
+    override __.MakeByRefType() = ProvidedSymbolType(SymbolKind.ByRef, [this]) :> Type
+
+    // FSharp.Data addition: this method is used by Debug.fs and QuotationBuilder.fs
+    // Emulate the F# type provider type erasure mechanism to get the 
+    // actual (erased) type. We erase ProvidedTypes to their base type
+    // and we erase array of provided type to array of base type. In the
+    // case of generics all the generic type arguments are also recursively
+    // replaced with the erased-to types
+    static member EraseType(t:Type) =
+        match t with
+        | :? ProvidedTypeDefinition -> ProvidedTypeDefinition.EraseType t.BaseType 
+        | :? ProvidedSymbolType as sym ->
+            match sym.Kind, sym.Args with
+            | SymbolKind.SDArray, [typ] -> 
+                let (t:Type) = ProvidedTypeDefinition.EraseType typ
+                t.MakeArrayType()
+            | SymbolKind.Generic genericTypeDefinition, _ when not genericTypeDefinition.IsGenericTypeDefinition -> 
+                // Unit of measure parameters can match here, but not really generic types.
+                genericTypeDefinition.UnderlyingSystemType
+            | SymbolKind.Generic genericTypeDefinition, typeArgs ->
+                let genericArguments =
+                  typeArgs
+                  |> List.toArray
+                  |> Array.map ProvidedTypeDefinition.EraseType
+                genericTypeDefinition.MakeGenericType(genericArguments)
+            | _ -> failwith "getTypeErasedTo: Unsupported ProvidedSymbolType" 
+        | t when t.IsGenericType && not t.IsGenericTypeDefinition ->
+            let genericTypeDefinition = t.GetGenericTypeDefinition()
+            let genericArguments = 
+              t.GetGenericArguments()
+              |> Array.map ProvidedTypeDefinition.EraseType
+            genericTypeDefinition.MakeGenericType(genericArguments)
+        | t -> t
+
+    static member Logger : (string -> unit) option ref = ref None
+
+    // The binding attributes are always set to DeclaredOnly ||| Static ||| Instance ||| Public when GetMembers is called directly by the F# compiler
+    // However, it's possible for the framework to generate other sets of flags in some corner cases (e.g. via use of `enum` with a provided type as the target)
+    override __.GetMembers bindingAttr = 
+        let mems = 
+            getMembers() 
+            |> Array.filter (fun mem -> 
+                                let isStatic, isPublic = 
+                                    match mem with
+                                    | :? FieldInfo as f -> f.IsStatic, f.IsPublic
+                                    | :? MethodInfo as m -> m.IsStatic, m.IsPublic
+                                    | :? ConstructorInfo as c -> c.IsStatic, c.IsPublic
+                                    | :? PropertyInfo as p -> 
+                                        let m = if p.CanRead then p.GetGetMethod() else p.GetSetMethod()
+                                        m.IsStatic, m.IsPublic
+                                    | :? EventInfo as e -> 
+                                        let m = e.GetAddMethod()
+                                        m.IsStatic, m.IsPublic
+                                    | :? Type as ty -> 
+                                        true, ty.IsNestedPublic
+                                    | _ -> failwith (sprintf "Member %O is of unexpected type" mem)
+                                bindingAttr.HasFlag(if isStatic then BindingFlags.Static else BindingFlags.Instance) &&
+                                (
+                                    (bindingAttr.HasFlag(BindingFlags.Public) && isPublic) || (bindingAttr.HasFlag(BindingFlags.NonPublic) && not isPublic)
+                                ))
+
+        if bindingAttr.HasFlag(BindingFlags.DeclaredOnly) || this.BaseType = null then mems
+        else 
+            // FSharp.Data change: just using this.BaseType is not enough in the case of CsvProvider,
+            // because the base type is CsvRow, so we have to erase recursively to CsvRow
+            let baseMems = (ProvidedTypeDefinition.EraseType this.BaseType).GetMembers bindingAttr
+            Array.append mems baseMems
+
+    override __.GetNestedTypes bindingAttr = 
+        this.GetMembers bindingAttr 
+        |> Array.filter(fun m -> 
+            m.MemberType.HasFlag(MemberTypes.NestedType) || 
+            // Allow 'fake' nested types that are actually real .NET types
+            m.MemberType.HasFlag(MemberTypes.TypeInfo)) |> Array.map(fun m -> m :?> Type)
+
+    override __.GetMember(name,mt,_bindingAttr) = 
+        let mt = 
+            if mt &&& MemberTypes.NestedType = MemberTypes.NestedType then 
+                mt ||| MemberTypes.TypeInfo 
+            else
+                mt
+        getMembers() |> Array.filter(fun m->0<>(int(m.MemberType &&& mt)) && m.Name = name)
+        
+    override __.GetNestedType(name, bindingAttr) = 
+        let nt = this.GetMember(name, MemberTypes.NestedType ||| MemberTypes.TypeInfo, bindingAttr)
+        match nt.Length with
+        | 0 -> null
+        | 1 -> downcast nt.[0]
+        | _ -> failwith (sprintf "There is more than one nested type called '%s' in type '%s'" name this.FullName)
+
+    // Attributes, etc..
+    override __.GetAttributeFlagsImpl() = adjustTypeAttributes attributes this.IsNested 
+    override __.IsArrayImpl() = false
+    override __.IsByRefImpl() = false
+    override __.IsPointerImpl() = false
+    override __.IsPrimitiveImpl() = false
+    override __.IsCOMObjectImpl() = false
+    override __.HasElementTypeImpl() = false
+    override __.Name = className
+    override __.DeclaringType = declaringType.Force()
+    override __.MemberType = if this.IsNested then MemberTypes.NestedType else MemberTypes.TypeInfo      
+    override __.GetHashCode() = rootNamespace.GetHashCode() ^^^ className.GetHashCode()
+    override __.Equals(that:obj) = 
+        match that with
+        | null              -> false
+        | :? ProvidedTypeDefinition as ti -> System.Object.ReferenceEquals(this,ti)
+        | _                 -> false
+
+    override __.GetGenericArguments() = [||] 
+    override __.ToString() = this.Name
+    
+
+    override __.Module : Module = notRequired "Module" this.Name
+    override __.GUID                                                                                   = Guid.Empty
+    override __.GetConstructorImpl(_bindingAttr, _binder, _callConvention, _types, _modifiers)         = null
+    override __.GetCustomAttributes(_inherit)                                                          = [| |]
+    override __.GetCustomAttributes(_attributeType, _inherit)                                          = [| |]
+    override __.IsDefined(_attributeType: Type, _inherit)                                              = false
+
+    override __.GetElementType()                                                                                  = notRequired "Module" this.Name
+    override __.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired "Module" this.Name
+    override __.AssemblyQualifiedName                                                                             = notRequired "Module" this.Name
+    member __.IsErased 
+        with get() = (attributes &&& enum (int32 TypeProviderTypeAttributes.IsErased)) <> enum 0
+        and set v = 
+           if v then attributes <- attributes ||| enum (int32 TypeProviderTypeAttributes.IsErased)
+           else attributes <- attributes &&& ~~~(enum (int32 TypeProviderTypeAttributes.IsErased))
+
+    member __.SuppressRelocation 
+        with get() = (attributes &&& enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) <> enum 0
+        and set v = 
+           if v then attributes <- attributes ||| enum (int32 TypeProviderTypeAttributes.SuppressRelocate)
+           else attributes <- attributes &&& ~~~(enum (int32 TypeProviderTypeAttributes.SuppressRelocate))
+
+type AssemblyGenerator(assemblyFileName) = 
+    let assemblyShortName = Path.GetFileNameWithoutExtension assemblyFileName
+    let assemblyName = AssemblyName assemblyShortName
+#if FX_NO_LOCAL_FILESYSTEM
+    let assembly = 
+        System.AppDomain.CurrentDomain.DefineDynamicAssembly(name=assemblyName,access=AssemblyBuilderAccess.Run)
+    let assemblyMainModule = 
+        assembly.DefineDynamicModule("MainModule")
+#else
+    let assembly = 
+        System.AppDomain.CurrentDomain.DefineDynamicAssembly(name=assemblyName,access=(AssemblyBuilderAccess.Save ||| AssemblyBuilderAccess.Run),dir=Path.GetDirectoryName assemblyFileName)
+    let assemblyMainModule = 
+        assembly.DefineDynamicModule("MainModule", Path.GetFileName assemblyFileName)
+#endif
+    let typeMap = Dictionary(HashIdentity.Reference)
+    let typeMapExtra = Dictionary(HashIdentity.Structural)
+    let uniqueLambdaTypeName() = 
+        // lambda name should be unique across all types that all type provider might contribute in result assembly
+        sprintf "Lambda%O" (Guid.NewGuid()) 
+
+    member __.Assembly = assembly :> Assembly
+
+    /// Emit the given provided type definitions into an assembly and adjust 'Assembly' property of all type definitions to return that
+    /// assembly.
+    member __.Generate(providedTypeDefinitions:(ProvidedTypeDefinition * string list option) list) = 
+        let ALL = BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Static ||| BindingFlags.Instance
+        // phase 1 - set assembly fields and emit type definitions
+        begin 
+            let rec typeMembers (tb:TypeBuilder)  (td : ProvidedTypeDefinition) = 
+                for ntd in td.GetNestedTypes(ALL) do
+                    nestedType tb ntd
+
+            and nestedType (tb:TypeBuilder)  (ntd : Type) = 
+                match ntd with 
+                | :? ProvidedTypeDefinition as pntd -> 
+                    if pntd.IsErased then invalidOp ("The nested provided type "+pntd.Name+"is marked as erased and cannot be converted to a generated type. Set 'IsErased' to false on the ProvidedTypeDefinition")
+                    // Adjust the attributes - we're codegen'ing this type as nested
+                    let attributes = adjustTypeAttributes ntd.Attributes true
+                    let ntb = tb.DefineNestedType(pntd.Name,attr=attributes)
+                    pntd.SetAssembly null
+                    typeMap.[pntd] <- ntb
+                    typeMembers ntb pntd
+                | _ -> ()
+                     
+            for (pt,enclosingGeneratedTypeNames) in providedTypeDefinitions do 
+              match enclosingGeneratedTypeNames with 
+              | None -> 
+                // Filter out the additional TypeProviderTypeAttributes flags
+                let attributes = pt.Attributes &&& ~~~(enum (int32 TypeProviderTypeAttributes.SuppressRelocate))
+                                                &&& ~~~(enum (int32 TypeProviderTypeAttributes.IsErased))
+                // Adjust the attributes - we're codegen'ing as non-nested
+                let attributes = adjustTypeAttributes attributes false 
+                let tb = assemblyMainModule.DefineType(name=pt.FullName,attr=attributes) 
+                pt.SetAssembly null
+                typeMap.[pt] <- tb
+                typeMembers tb pt 
+              | Some ns -> 
+                let otb,_ = 
+                    ((None,""),ns) ||> List.fold (fun (otb:TypeBuilder option,fullName) n -> 
+                        let fullName = if fullName = "" then n else fullName + "." + n
+                        let priorType = if typeMapExtra.ContainsKey(fullName) then Some typeMapExtra.[fullName]  else None
+                        let tb = 
+                            match priorType with 
+                            | Some tbb -> tbb 
+                            | None ->
+                            // OK, the implied nested type is not defined, define it now
+                            let attributes = 
+                                  TypeAttributes.Public ||| 
+                                  TypeAttributes.Class ||| 
+                                  TypeAttributes.Sealed 
+                            // Filter out the additional TypeProviderTypeAttributes flags
+                            let attributes = adjustTypeAttributes attributes otb.IsSome
+                            let tb = 
+                                match otb with 
+                                | None -> assemblyMainModule.DefineType(name=n,attr=attributes) 
+                                | Some (otb:TypeBuilder) -> otb.DefineNestedType(name=n,attr=attributes)
+                            typeMapExtra.[fullName] <- tb
+                            tb
+                        (Some tb, fullName))
+                nestedType otb.Value pt
+        end
+        let rec convType (ty:Type) = 
+            match ty with 
+            | :? ProvidedTypeDefinition as ptd ->   
+                if typeMap.ContainsKey ptd then typeMap.[ptd] :> Type else ty
+            | _ -> 
+                if ty.IsGenericType then ty.GetGenericTypeDefinition().MakeGenericType (Array.map convType (ty.GetGenericArguments()))
+                elif ty.HasElementType then 
+                    let ety = convType (ty.GetElementType()) 
+                    if ty.IsArray then 
+                        let rank = ty.GetArrayRank()
+                        if rank = 1 then ety.MakeArrayType() 
+                        else ety.MakeArrayType rank 
+                    elif ty.IsPointer then ety.MakePointerType() 
+                    elif ty.IsByRef then ety.MakeByRefType()
+                    else ty
+                else ty
+
+        let ctorMap = Dictionary(HashIdentity.Reference)
+        let methMap = Dictionary(HashIdentity.Reference)
+        let fieldMap = Dictionary(HashIdentity.Reference)
+
+        let iterateTypes f = 
+            let rec typeMembers (ptd : ProvidedTypeDefinition) = 
+                let tb = typeMap.[ptd] 
+                f tb (Some ptd)
+                for ntd in ptd.GetNestedTypes(ALL) do
+                    nestedType ntd
+
+            and nestedType (ntd : Type) = 
+                match ntd with 
+                | :? ProvidedTypeDefinition as pntd -> typeMembers pntd
+                | _ -> ()
+                     
+            for (pt,enclosingGeneratedTypeNames) in providedTypeDefinitions do 
+              match enclosingGeneratedTypeNames with 
+              | None -> 
+                typeMembers pt 
+              | Some ns -> 
+                let _fullName  = 
+                    ("",ns) ||> List.fold (fun fullName n -> 
+                        let fullName = if fullName = "" then n else fullName + "." + n
+                        f typeMapExtra.[fullName] None
+                        fullName)
+                nestedType pt
+        
+        
+        // phase 1b - emit base types
+        iterateTypes (fun tb ptd -> 
+            match ptd with 
+            | None -> ()
+            | Some ptd -> 
+            match ptd.BaseType with null -> () | bt -> tb.SetParent(convType bt))
+
+        let defineCustomAttrs f (cattrs: IList) = 
+            for attr in cattrs do
+                let constructorArgs = [ for x in attr.ConstructorArguments -> x.Value ]
+                let namedProps,namedPropVals = [ for x in attr.NamedArguments do match x.MemberInfo with :? PropertyInfo as pi -> yield (pi, x.TypedValue.Value) | _ -> () ] |> List.unzip
+                let namedFields,namedFieldVals = [ for x in attr.NamedArguments do match x.MemberInfo with :? FieldInfo as pi -> yield (pi, x.TypedValue.Value) | _ -> () ] |> List.unzip
+                let cab = CustomAttributeBuilder(attr.Constructor, Array.ofList constructorArgs, Array.ofList namedProps, Array.ofList namedPropVals, Array.ofList namedFields, Array.ofList namedFieldVals)
+                f cab
+
+        // phase 2 - emit member definitions
+        iterateTypes (fun tb ptd -> 
+            match ptd with 
+            | None -> ()
+            | Some ptd -> 
+            for cinfo in ptd.GetConstructors(ALL) do
+                match cinfo with 
+                | :? ProvidedConstructor as pcinfo when not (ctorMap.ContainsKey pcinfo)  ->
+                    let cb =
+                        if pcinfo.IsTypeInitializer then
+                            if (cinfo.GetParameters()).Length <> 0 then failwith "Type initializer should not have parameters"
+                            tb.DefineTypeInitializer()
+                        else 
+                            let cb = tb.DefineConstructor(cinfo.Attributes, CallingConventions.Standard, [| for p in cinfo.GetParameters() -> convType p.ParameterType |])
+                            for (i,p) in cinfo.GetParameters() |> Seq.mapi (fun i x -> (i,x)) do
+                                cb.DefineParameter(i+1, ParameterAttributes.None, p.Name) |> ignore
+                            cb
+                    ctorMap.[pcinfo] <- cb
+                | _ -> () 
+                    
+            if ptd.IsEnum then
+                tb.DefineField("value__", ptd.GetEnumUnderlyingType(), FieldAttributes.Public ||| FieldAttributes.SpecialName ||| FieldAttributes.RTSpecialName)
+                |> ignore
+
+            for finfo in ptd.GetFields(ALL) do
+                let fieldInfo = 
+                    match finfo with 
+                        | :? ProvidedField as pinfo -> 
+                            Some (pinfo.Name, convType finfo.FieldType, finfo.Attributes, pinfo.GetCustomAttributesDataImpl(), None)
+                        | :? ProvidedLiteralField as pinfo ->
+                            Some (pinfo.Name, convType finfo.FieldType, finfo.Attributes, pinfo.GetCustomAttributesDataImpl(), Some (pinfo.GetRawConstantValue()))
+                        | _ -> None
+                match fieldInfo with
+                | Some (name, ty, attr, cattr, constantVal) when not (fieldMap.ContainsKey finfo) ->
+                    let fb = tb.DefineField(name, ty, attr)
+                    if constantVal.IsSome then
+                        fb.SetConstant constantVal.Value
+                    defineCustomAttrs fb.SetCustomAttribute cattr
+                    fieldMap.[finfo] <- fb
+                | _ -> () 
+            for minfo in ptd.GetMethods(ALL) do
+                match minfo with 
+                | :? ProvidedMethod as pminfo when not (methMap.ContainsKey pminfo)  -> 
+                    let mb = tb.DefineMethod(minfo.Name, minfo.Attributes, convType minfo.ReturnType, [| for p in minfo.GetParameters() -> convType p.ParameterType |])
+                    for (i, p) in minfo.GetParameters() |> Seq.mapi (fun i x -> (i,x :?> ProvidedParameter)) do
+                        // TODO: check why F# compiler doesn't emit default value when just p.Attributes is used (thus bad metadata is emitted)
+//                        let mutable attrs = ParameterAttributes.None
+//                        
+//                        if p.IsOut then attrs <- attrs ||| ParameterAttributes.Out
+//                        if p.HasDefaultParameterValue then attrs <- attrs ||| ParameterAttributes.Optional
+
+                        let pb = mb.DefineParameter(i+1, p.Attributes, p.Name)
+                        if p.HasDefaultParameterValue then 
+                            do
+                                let ctor = typeof.GetConstructor([|typeof|])
+                                let builder = new CustomAttributeBuilder(ctor, [|p.RawDefaultValue|])
+                                pb.SetCustomAttribute builder
+                            do
+                                let ctor = typeof.GetConstructor([||])
+                                let builder = new CustomAttributeBuilder(ctor, [||])
+                                pb.SetCustomAttribute builder
+                            pb.SetConstant p.RawDefaultValue
+                    methMap.[pminfo] <- mb
+                | _ -> () 
+
+            for ityp in ptd.GetInterfaceImplementations() do
+                tb.AddInterfaceImplementation ityp)
+
+        // phase 3 - emit member code
+        iterateTypes (fun  tb ptd -> 
+            match ptd with 
+            | None -> ()
+            | Some ptd -> 
+            let cattr = ptd.GetCustomAttributesDataImpl() 
+            defineCustomAttrs tb.SetCustomAttribute cattr
+            // Allow at most one constructor, and use its arguments as the fields of the type
+            let ctors =
+                ptd.GetConstructors(ALL) // exclude type initializer
+                |> Seq.choose (function :? ProvidedConstructor as pcinfo when not pcinfo.IsTypeInitializer -> Some pcinfo | _ -> None) 
+                |> Seq.toList
+            let implictCtorArgs =
+                match ctors  |> List.filter (fun x -> x.IsImplicitCtor)  with
+                | [] -> []
+                | [ pcinfo ] -> [ for p in pcinfo.GetParameters() -> p ]
+                | _ -> failwith "at most one implicit constructor allowed"
+
+            let implicitCtorArgsAsFields = 
+                [ for ctorArg in implictCtorArgs -> 
+                      tb.DefineField(ctorArg.Name, convType ctorArg.ParameterType, FieldAttributes.Private) ]
+            
+            let rec emitLambda(callSiteIlg : ILGenerator, v : Quotations.Var, body : Quotations.Expr, freeVars : seq, locals : Dictionary<_, LocalBuilder>, parameters) =
+                let lambda = assemblyMainModule.DefineType(uniqueLambdaTypeName(), TypeAttributes.Class)
+                let baseType = typedefof>.MakeGenericType(v.Type, body.Type)
+                lambda.SetParent(baseType)
+                let ctor = lambda.DefineDefaultConstructor(MethodAttributes.Public)
+                let decl = baseType.GetMethod "Invoke"
+                let paramTypes = [| for p in decl.GetParameters() -> p.ParameterType |]
+                let invoke = lambda.DefineMethod("Invoke", MethodAttributes.Virtual ||| MethodAttributes.Final ||| MethodAttributes.Public, decl.ReturnType, paramTypes)
+                lambda.DefineMethodOverride(invoke, decl)
+
+                // promote free vars to fields
+                let fields = ResizeArray()
+                for v in freeVars do
+                    let f = lambda.DefineField(v.Name, v.Type, FieldAttributes.Assembly)
+                    fields.Add(v, f)
+
+                let copyOfLocals = Dictionary()
+                
+                let ilg = invoke.GetILGenerator()
+                for (v, f) in fields do
+                    let l = ilg.DeclareLocal(v.Type)
+                    ilg.Emit(OpCodes.Ldarg_0)
+                    ilg.Emit(OpCodes.Ldfld, f)
+                    ilg.Emit(OpCodes.Stloc, l)
+                    copyOfLocals.[v] <- l
+
+                let expectedState = if (invoke.ReturnType = typeof) then ExpectedStackState.Empty else ExpectedStackState.Value
+                emitExpr (ilg, copyOfLocals, [| Quotations.Var("this", lambda); v|]) expectedState body
+                ilg.Emit(OpCodes.Ret) 
+
+                lambda.CreateType() |> ignore
+
+                callSiteIlg.Emit(OpCodes.Newobj, ctor)
+                for (v, f) in fields do
+                    callSiteIlg.Emit(OpCodes.Dup)
+                    match locals.TryGetValue v with
+                    | true, loc -> 
+                        callSiteIlg.Emit(OpCodes.Ldloc, loc)
+                    | false, _ -> 
+                        let index = parameters |> Array.findIndex ((=) v)
+                        callSiteIlg.Emit(OpCodes.Ldarg, index)
+                    callSiteIlg.Emit(OpCodes.Stfld, f)
+
+            and emitExpr (ilg: ILGenerator, locals:Dictionary, parameterVars) expectedState expr = 
+                let pop () = ilg.Emit(OpCodes.Pop)
+                let popIfEmptyExpected s = if isEmpty s then pop()
+                let emitConvIfNecessary t1 = 
+                    if t1 = typeof then
+                        ilg.Emit(OpCodes.Conv_I2)
+                    elif t1 = typeof then
+                        ilg.Emit(OpCodes.Conv_U2)
+                    elif t1 = typeof then
+                        ilg.Emit(OpCodes.Conv_I1)
+                    elif t1 = typeof then
+                        ilg.Emit(OpCodes.Conv_U1)
+                /// emits given expression to corresponding IL
+                let rec emit (expectedState : ExpectedStackState) (expr: Quotations.Expr) = 
+                    match expr with 
+                    | Quotations.Patterns.ForIntegerRangeLoop(loopVar, first, last, body) ->
+                      // for(loopVar = first..last) body
+                      let lb = 
+                          match locals.TryGetValue loopVar with
+                          | true, lb -> lb
+                          | false, _ ->
+                              let lb = ilg.DeclareLocal(convType loopVar.Type)
+                              locals.Add(loopVar, lb)
+                              lb
+
+                      // loopVar = first
+                      emit ExpectedStackState.Value first
+                      ilg.Emit(OpCodes.Stloc, lb)
+
+                      let before = ilg.DefineLabel()
+                      let after = ilg.DefineLabel()
+
+                      ilg.MarkLabel before
+                      ilg.Emit(OpCodes.Ldloc, lb)
+                            
+                      emit ExpectedStackState.Value last
+                      ilg.Emit(OpCodes.Bgt, after)
+
+                      emit ExpectedStackState.Empty body
+
+                      // loopVar++
+                      ilg.Emit(OpCodes.Ldloc, lb)
+                      ilg.Emit(OpCodes.Ldc_I4_1)
+                      ilg.Emit(OpCodes.Add)
+                      ilg.Emit(OpCodes.Stloc, lb)
+
+                      ilg.Emit(OpCodes.Br, before)
+                      ilg.MarkLabel(after)
+
+                    | Quotations.Patterns.NewArray(elementTy, elements) ->
+                      ilg.Emit(OpCodes.Ldc_I4, List.length elements)
+                      ilg.Emit(OpCodes.Newarr, convType elementTy)
+
+                      elements 
+                      |> List.iteri (fun i el ->
+                          ilg.Emit(OpCodes.Dup)
+                          ilg.Emit(OpCodes.Ldc_I4, i)
+                          emit ExpectedStackState.Value el
+                          ilg.Emit(OpCodes.Stelem, convType elementTy)
+                          )
+
+                      popIfEmptyExpected expectedState
+
+                    | Quotations.Patterns.WhileLoop(cond, body) ->
+                      let before = ilg.DefineLabel()
+                      let after = ilg.DefineLabel()
+
+                      ilg.MarkLabel before
+                      emit ExpectedStackState.Value cond
+                      ilg.Emit(OpCodes.Brfalse, after)
+                      emit ExpectedStackState.Empty body
+                      ilg.Emit(OpCodes.Br, before)
+
+                      ilg.MarkLabel after
+
+                    | Quotations.Patterns.Var v -> 
+                        if isEmpty expectedState then () else
+                        let methIdx = parameterVars |> Array.tryFindIndex (fun p -> p = v) 
+                        match methIdx with 
+                        | Some idx -> 
+                            ilg.Emit((if isAddress expectedState then OpCodes.Ldarga else OpCodes.Ldarg), idx)
+                        | None -> 
+                        let implicitCtorArgFieldOpt = implicitCtorArgsAsFields |> List.tryFind (fun f -> f.Name = v.Name) 
+                        match implicitCtorArgFieldOpt with 
+                        | Some ctorArgField -> 
+                            ilg.Emit(OpCodes.Ldarg_0)
+                            ilg.Emit(OpCodes.Ldfld, ctorArgField)
+                        | None -> 
+                        match locals.TryGetValue v with 
+                        | true, localBuilder -> 
+                            ilg.Emit((if isAddress expectedState  then OpCodes.Ldloca else OpCodes.Ldloc), localBuilder.LocalIndex)
+                        | false, _ -> 
+                            failwith "unknown parameter/field"
+
+                    | Quotations.Patterns.Coerce (arg,ty) -> 
+                        // castClass may lead to observable side-effects - InvalidCastException
+                        emit ExpectedStackState.Value arg
+                        let argTy = convType arg.Type
+                        let targetTy = convType ty
+                        if argTy.IsValueType && not targetTy.IsValueType then
+                          ilg.Emit(OpCodes.Box, argTy)
+                        elif not argTy.IsValueType && targetTy.IsValueType then
+                          ilg.Emit(OpCodes.Unbox_Any, targetTy)
+                        // emit castclass if 
+                        // - targettype is not obj (assume this is always possible for ref types)
+                        // AND 
+                        // - HACK: targettype is TypeBuilderInstantiationType 
+                        //   (its implementation of IsAssignableFrom raises NotSupportedException so it will be safer to always emit castclass)
+                        // OR
+                        // - not (argTy :> targetTy)
+                        elif targetTy <> typeof && (Misc.TypeBuilderInstantiationType.Equals(targetTy.GetType()) || not (targetTy.IsAssignableFrom(argTy))) then
+                          ilg.Emit(OpCodes.Castclass, targetTy)
+                              
+                        popIfEmptyExpected expectedState
+                    | Quotations.DerivedPatterns.SpecificCall <@ (-) @>(None, [t1; t2; _], [a1; a2]) ->
+                        assert(t1 = t2)
+                        emit ExpectedStackState.Value a1
+                        emit ExpectedStackState.Value a2
+                        if t1 = typeof then
+                            ilg.Emit(OpCodes.Call, typeof.GetMethod "op_Subtraction")
+                        else
+                            ilg.Emit(OpCodes.Sub)
+                            emitConvIfNecessary t1
+
+                        popIfEmptyExpected expectedState
+
+                    | Quotations.DerivedPatterns.SpecificCall <@ (/) @> (None, [t1; t2; _], [a1; a2]) ->
+                        assert (t1 = t2)
+                        emit ExpectedStackState.Value a1
+                        emit ExpectedStackState.Value a2
+                        if t1 = typeof then
+                            ilg.Emit(OpCodes.Call, typeof.GetMethod "op_Division")
+                        else
+                            match Type.GetTypeCode t1 with
+                            | TypeCode.UInt32
+                            | TypeCode.UInt64
+                            | TypeCode.UInt16
+                            | TypeCode.Byte
+                            | _ when t1 = typeof -> ilg.Emit (OpCodes.Div_Un)
+                            | _ -> ilg.Emit(OpCodes.Div)
+
+                            emitConvIfNecessary t1
+
+                        popIfEmptyExpected expectedState
+
+                    | Quotations.DerivedPatterns.SpecificCall <@ int @>(None, [sourceTy], [v]) ->
+                        emit ExpectedStackState.Value v
+                        match Type.GetTypeCode(sourceTy) with
+                        | TypeCode.String -> 
+                            ilg.Emit(OpCodes.Call, Misc.ParseInt32Method)
+                        | TypeCode.Single
+                        | TypeCode.Double
+                        | TypeCode.Int64 
+                        | TypeCode.UInt64
+                        | TypeCode.UInt16
+                        | TypeCode.Char
+                        | TypeCode.Byte
+                        | _ when sourceTy = typeof || sourceTy = typeof ->
+                            ilg.Emit(OpCodes.Conv_I4)
+                        | TypeCode.Int32
+                        | TypeCode.UInt32
+                        | TypeCode.Int16
+                        | TypeCode.SByte -> () // no op
+                        | _ -> failwith "TODO: search for op_Explicit on sourceTy"
+
+                    | Quotations.DerivedPatterns.SpecificCall <@ LanguagePrimitives.IntrinsicFunctions.GetArray @> (None, [ty], [arr; index]) ->
+                        // observable side-effect - IndexOutOfRangeException
+                        emit ExpectedStackState.Value arr
+                        emit ExpectedStackState.Value index
+                        if isAddress expectedState then
+                            ilg.Emit(OpCodes.Readonly)
+                            ilg.Emit(OpCodes.Ldelema, convType ty)
+                        else
+                            ilg.Emit(OpCodes.Ldelem, convType ty)
+
+                        popIfEmptyExpected expectedState
+
+                    | Quotations.DerivedPatterns.SpecificCall <@ LanguagePrimitives.IntrinsicFunctions.GetArray2D @> (None, _ty, arr::indices)
+                    | Quotations.DerivedPatterns.SpecificCall <@ LanguagePrimitives.IntrinsicFunctions.GetArray3D @> (None, _ty, arr::indices)
+                    | Quotations.DerivedPatterns.SpecificCall <@ LanguagePrimitives.IntrinsicFunctions.GetArray4D @> (None, _ty, arr::indices) ->
+                              
+                        let meth = 
+                          let name = if isAddress expectedState then "Address" else "Get"
+                          arr.Type.GetMethod(name)
+
+                        // observable side-effect - IndexOutOfRangeException
+                        emit ExpectedStackState.Value arr
+                        for index in indices do
+                          emit ExpectedStackState.Value index
+                              
+                        if isAddress expectedState then
+                          ilg.Emit(OpCodes.Readonly)
+
+                        ilg.Emit(OpCodes.Call, meth)
+
+                        popIfEmptyExpected expectedState
+
+                    | Quotations.Patterns.FieldGet (objOpt,field) -> 
+                        match field with
+                        | :? ProvidedLiteralField as plf when plf.DeclaringType.IsEnum ->
+                            if expectedState <> ExpectedStackState.Empty then
+                                emit expectedState (Quotations.Expr.Value(field.GetRawConstantValue(), field.FieldType.GetEnumUnderlyingType()))
+                        | _ ->
+                        match objOpt with 
+                        | None -> () 
+                        | Some e -> 
+                          let s = if e.Type.IsValueType then ExpectedStackState.Address else ExpectedStackState.Value
+                          emit s e
+                        let field = 
+                            match field with 
+                            | :? ProvidedField as pf when fieldMap.ContainsKey pf -> fieldMap.[pf] :> FieldInfo 
+                            | m -> m
+                        if field.IsStatic then 
+                            ilg.Emit(OpCodes.Ldsfld, field)
+                        else
+                            ilg.Emit(OpCodes.Ldfld, field)
+
+                    | Quotations.Patterns.FieldSet (objOpt,field,v) -> 
+                        match objOpt with 
+                        | None -> () 
+                        | Some e -> 
+                          let s = if e.Type.IsValueType then ExpectedStackState.Address else ExpectedStackState.Value
+                          emit s e
+                        emit ExpectedStackState.Value v
+                        let field = match field with :? ProvidedField as pf when fieldMap.ContainsKey pf -> fieldMap.[pf] :> FieldInfo | m -> m
+                        if field.IsStatic then 
+                            ilg.Emit(OpCodes.Stsfld, field)
+                        else
+                            ilg.Emit(OpCodes.Stfld, field)
+                    | Quotations.Patterns.Call (objOpt,meth,args) -> 
+                        match objOpt with 
+                        | None -> () 
+                        | Some e -> 
+                          let s = if e.Type.IsValueType then ExpectedStackState.Address else ExpectedStackState.Value
+                          emit s e
+                        for pe in args do 
+                            emit ExpectedStackState.Value pe
+                        let getMeth (m:MethodInfo) = match m with :? ProvidedMethod as pm when methMap.ContainsKey pm -> methMap.[pm] :> MethodInfo | m -> m
+                        // Handle the case where this is a generic method instantiated at a type being compiled
+                        let mappedMeth = 
+                            if meth.IsGenericMethod then 
+                                let args = meth.GetGenericArguments() |> Array.map convType
+                                let gmd = meth.GetGenericMethodDefinition() |> getMeth
+                                gmd.GetGenericMethodDefinition().MakeGenericMethod args
+                            elif meth.DeclaringType.IsGenericType then 
+                                let gdty = convType (meth.DeclaringType.GetGenericTypeDefinition())
+                                let gdtym = gdty.GetMethods() |> Seq.find (fun x -> x.Name = meth.Name)
+                                assert (gdtym <> null) // ?? will never happen - if method is not found - KeyNotFoundException will be raised
+                                let dtym =
+                                    match convType meth.DeclaringType with
+                                    | :? TypeBuilder as dty -> TypeBuilder.GetMethod(dty, gdtym)
+                                    | dty -> MethodBase.GetMethodFromHandle(meth.MethodHandle, dty.TypeHandle) :?> _
+                                
+                                assert (dtym <> null)
+                                dtym
+                            else
+                                getMeth meth
+                        match objOpt with 
+                        | Some obj when mappedMeth.IsAbstract || mappedMeth.IsVirtual  ->
+                            if obj.Type.IsValueType then ilg.Emit(OpCodes.Constrained, convType obj.Type)
+                            ilg.Emit(OpCodes.Callvirt, mappedMeth)
+                        | _ ->
+                            ilg.Emit(OpCodes.Call, mappedMeth)
+
+                        let returnTypeIsVoid = mappedMeth.ReturnType = typeof
+                        match returnTypeIsVoid, (isEmpty expectedState) with
+                        | false, true -> 
+                              // method produced something, but we don't need it
+                              pop()
+                        | true, false when expr.Type = typeof -> 
+                              // if we need result and method produce void and result should be unit - push null as unit value on stack
+                              ilg.Emit(OpCodes.Ldnull)
+                        | _ -> ()
+
+                    | Quotations.Patterns.NewObject (ctor,args) -> 
+                        for pe in args do 
+                            emit ExpectedStackState.Value pe
+                        let meth = match ctor with :? ProvidedConstructor as pc when ctorMap.ContainsKey pc -> ctorMap.[pc] :> ConstructorInfo | c -> c
+                        ilg.Emit(OpCodes.Newobj, meth)
+                              
+                        popIfEmptyExpected expectedState                              
+
+                    | Quotations.Patterns.Value (obj, _ty) -> 
+                        let rec emitC (v:obj) = 
+                            match v with 
+                            | :? string as x -> ilg.Emit(OpCodes.Ldstr, x)
+                            | :? int8 as x -> ilg.Emit(OpCodes.Ldc_I4, int32 x)
+                            | :? uint8 as x -> ilg.Emit(OpCodes.Ldc_I4, int32 (int8 x))
+                            | :? int16 as x -> ilg.Emit(OpCodes.Ldc_I4, int32 x)
+                            | :? uint16 as x -> ilg.Emit(OpCodes.Ldc_I4, int32 (int16 x))
+                            | :? int32 as x -> ilg.Emit(OpCodes.Ldc_I4, x)
+                            | :? uint32 as x -> ilg.Emit(OpCodes.Ldc_I4, int32 x)
+                            | :? int64 as x -> ilg.Emit(OpCodes.Ldc_I8, x)
+                            | :? uint64 as x -> ilg.Emit(OpCodes.Ldc_I8, int64 x)
+                            | :? char as x -> ilg.Emit(OpCodes.Ldc_I4, int32 x)
+                            | :? bool as x -> ilg.Emit(OpCodes.Ldc_I4, if x then 1 else 0)
+                            | :? float32 as x -> ilg.Emit(OpCodes.Ldc_R4, x)
+                            | :? float as x -> ilg.Emit(OpCodes.Ldc_R8, x)
+#if FX_NO_GET_ENUM_UNDERLYING_TYPE
+#else
+                            | :? System.Enum as x when x.GetType().GetEnumUnderlyingType() = typeof -> ilg.Emit(OpCodes.Ldc_I4, unbox v)
+#endif
+                            | :? Type as ty ->
+                                ilg.Emit(OpCodes.Ldtoken, convType ty)
+                                ilg.Emit(OpCodes.Call, Misc.GetTypeFromHandleMethod)
+                            | :? decimal as x ->
+                                let bits = System.Decimal.GetBits x
+                                ilg.Emit(OpCodes.Ldc_I4, bits.[0])
+                                ilg.Emit(OpCodes.Ldc_I4, bits.[1])
+                                ilg.Emit(OpCodes.Ldc_I4, bits.[2])
+                                do
+                                    let sign = (bits.[3] &&& 0x80000000) <> 0
+                                    ilg.Emit(if sign then OpCodes.Ldc_I4_1 else OpCodes.Ldc_I4_0)
+                                do
+                                    let scale = byte ((bits.[3] >>> 16) &&& 0x7F)
+                                    ilg.Emit(OpCodes.Ldc_I4_S, scale)
+                                ilg.Emit(OpCodes.Newobj, Misc.DecimalConstructor)
+                            | :? DateTime as x ->
+                                ilg.Emit(OpCodes.Ldc_I8, x.Ticks)
+                                ilg.Emit(OpCodes.Ldc_I4, int x.Kind)
+                                ilg.Emit(OpCodes.Newobj, Misc.DateTimeConstructor)
+                            | :? DateTimeOffset as x ->
+                                ilg.Emit(OpCodes.Ldc_I8, x.Ticks)
+                                ilg.Emit(OpCodes.Ldc_I8, x.Offset.Ticks)
+                                ilg.Emit(OpCodes.Newobj, Misc.TimeSpanConstructor)
+                                ilg.Emit(OpCodes.Newobj, Misc.DateTimeOffsetConstructor)
+                            | null -> ilg.Emit(OpCodes.Ldnull)
+                            | _ -> failwithf "unknown constant '%A' in generated method" v
+                        if isEmpty expectedState then ()
+                        else emitC obj
+
+                    | Quotations.Patterns.Let(v,e,b) -> 
+                        let lb = ilg.DeclareLocal (convType v.Type)
+                        locals.Add (v, lb) 
+                        emit ExpectedStackState.Value e
+                        ilg.Emit(OpCodes.Stloc, lb.LocalIndex)
+                        emit expectedState b
+                              
+                    | Quotations.Patterns.Sequential(e1, e2) ->
+                        emit ExpectedStackState.Empty e1
+                        emit expectedState e2                          
+
+                    | Quotations.Patterns.IfThenElse(cond, ifTrue, ifFalse) ->
+                        let ifFalseLabel = ilg.DefineLabel()
+                        let endLabel = ilg.DefineLabel()
+
+                        emit ExpectedStackState.Value cond
+
+                        ilg.Emit(OpCodes.Brfalse, ifFalseLabel)
+
+                        emit expectedState ifTrue
+                        ilg.Emit(OpCodes.Br, endLabel)
+
+                        ilg.MarkLabel(ifFalseLabel)
+                        emit expectedState ifFalse
+
+                        ilg.Emit(OpCodes.Nop)
+                        ilg.MarkLabel(endLabel)
+
+                    | Quotations.Patterns.TryWith(body, _filterVar, _filterBody, catchVar, catchBody) ->                                                                                      
+                              
+                        let stres, ldres = 
+                            if isEmpty expectedState then ignore, ignore
+                            else
+                              let local = ilg.DeclareLocal (convType body.Type)
+                              let stres = fun () -> ilg.Emit(OpCodes.Stloc, local)
+                              let ldres = fun () -> ilg.Emit(OpCodes.Ldloc, local)
+                              stres, ldres
+
+                        let exceptionVar = ilg.DeclareLocal(convType catchVar.Type)
+                        locals.Add(catchVar, exceptionVar)
+
+                        let _exnBlock = ilg.BeginExceptionBlock()
+                              
+                        emit expectedState body
+                        stres()
+
+                        ilg.BeginCatchBlock(convType  catchVar.Type)
+                        ilg.Emit(OpCodes.Stloc, exceptionVar)
+                        emit expectedState catchBody
+                        stres()
+                        ilg.EndExceptionBlock()
+
+                        ldres()
+
+                    | Quotations.Patterns.VarSet(v,e) -> 
+                        emit ExpectedStackState.Value e
+                        match locals.TryGetValue v with 
+                        | true, localBuilder -> 
+                            ilg.Emit(OpCodes.Stloc, localBuilder.LocalIndex)
+                        | false, _ -> 
+                            failwith "unknown parameter/field in assignment. Only assignments to locals are currently supported by TypeProviderEmit"
+                    | Quotations.Patterns.Lambda(v, body) ->
+                        emitLambda(ilg, v, body, expr.GetFreeVars(), locals, parameterVars)
+                        popIfEmptyExpected expectedState
+                    | n -> 
+                        failwith (sprintf "unknown expression '%A' in generated method" n)
+                emit expectedState expr
+
+
+            // Emit the constructor (if any)
+            for pcinfo in ctors do 
+                assert ctorMap.ContainsKey pcinfo
+                let cb = ctorMap.[pcinfo]
+                let cattr = pcinfo.GetCustomAttributesDataImpl() 
+                defineCustomAttrs cb.SetCustomAttribute cattr
+                let ilg = cb.GetILGenerator()
+                let locals = Dictionary()
+                let parameterVars = 
+                    [| yield Quotations.Var("this", pcinfo.DeclaringType)
+                       for p in pcinfo.GetParameters() do 
+                            yield Quotations.Var(p.Name, p.ParameterType) |]
+                let parameters = 
+                    [| for v in parameterVars -> Quotations.Expr.Var v |]
+                match pcinfo.GetBaseConstructorCallInternal true with
+                | None ->  
+                    ilg.Emit(OpCodes.Ldarg_0)
+                    let cinfo = ptd.BaseType.GetConstructor(BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance, null, [| |], null)
+                    ilg.Emit(OpCodes.Call,cinfo)
+                | Some f -> 
+                    // argExprs should always include 'this'
+                    let (cinfo,argExprs) = f (Array.toList parameters)
+                    for argExpr in argExprs do 
+                        emitExpr (ilg, locals, parameterVars) ExpectedStackState.Value argExpr
+                    ilg.Emit(OpCodes.Call,cinfo)
+
+                if pcinfo.IsImplicitCtor then
+                    for ctorArgsAsFieldIdx,ctorArgsAsField in List.mapi (fun i x -> (i,x)) implicitCtorArgsAsFields do 
+                        ilg.Emit(OpCodes.Ldarg_0)
+                        ilg.Emit(OpCodes.Ldarg, ctorArgsAsFieldIdx+1)
+                        ilg.Emit(OpCodes.Stfld, ctorArgsAsField)
+                else
+                    let code  = pcinfo.GetInvokeCodeInternal true
+                    let code = code parameters
+                    emitExpr (ilg, locals, parameterVars) ExpectedStackState.Empty code
+                ilg.Emit(OpCodes.Ret)
+            
+            match ptd.GetConstructors(ALL) |> Seq.tryPick (function :? ProvidedConstructor as pc when pc.IsTypeInitializer -> Some pc | _ -> None) with
+            | None -> ()
+            | Some pc ->
+                let cb = ctorMap.[pc]
+                let ilg = cb.GetILGenerator()
+                let cattr = pc.GetCustomAttributesDataImpl() 
+                defineCustomAttrs cb.SetCustomAttribute cattr
+                let expr = pc.GetInvokeCodeInternal true [||]
+                emitExpr(ilg, new Dictionary<_, _>(), [||]) ExpectedStackState.Empty expr
+                ilg.Emit OpCodes.Ret
+
+            // Emit the methods
+            for minfo in ptd.GetMethods(ALL) do
+              match minfo with 
+              | :? ProvidedMethod as pminfo   -> 
+                let mb = methMap.[pminfo]
+                let ilg = mb.GetILGenerator()
+                let cattr = pminfo.GetCustomAttributesDataImpl() 
+                defineCustomAttrs mb.SetCustomAttribute cattr
+
+                let parameterVars = 
+                    [| if not pminfo.IsStatic then 
+                            yield Quotations.Var("this", pminfo.DeclaringType)
+                       for p in pminfo.GetParameters() do 
+                            yield Quotations.Var(p.Name, p.ParameterType) |]
+                let parameters = 
+                    [| for v in parameterVars -> Quotations.Expr.Var v |]
+
+                let expr = pminfo.GetInvokeCodeInternal true parameters 
+
+                let locals = Dictionary()
+                //printfn "Emitting linqCode for %s::%s, code = %s" pminfo.DeclaringType.FullName pminfo.Name (try linqCode.ToString() with _ -> "")
+
+
+                let expectedState = if (minfo.ReturnType = typeof) then ExpectedStackState.Empty else ExpectedStackState.Value
+                emitExpr (ilg, locals, parameterVars) expectedState expr
+                ilg.Emit OpCodes.Ret
+              | _ -> ()
+  
+            for (bodyMethInfo,declMethInfo) in ptd.GetMethodOverrides() do 
+                let bodyMethBuilder = methMap.[bodyMethInfo]
+                tb.DefineMethodOverride(bodyMethBuilder,declMethInfo)
+
+            for evt in ptd.GetEvents(ALL) |> Seq.choose (function :? ProvidedEvent as pe -> Some pe | _ -> None) do
+                let eb = tb.DefineEvent(evt.Name, evt.Attributes, evt.EventHandlerType)
+                defineCustomAttrs eb.SetCustomAttribute (evt.GetCustomAttributesDataImpl())
+                eb.SetAddOnMethod(methMap.[evt.GetAddMethod(true) :?> _])
+                eb.SetRemoveOnMethod(methMap.[evt.GetRemoveMethod(true) :?> _])
+                // TODO: add raiser
+            
+            for pinfo in ptd.GetProperties(ALL) |> Seq.choose (function :? ProvidedProperty as pe -> Some pe | _ -> None) do
+                let pb = tb.DefineProperty(pinfo.Name, pinfo.Attributes, convType pinfo.PropertyType, [| for p in pinfo.GetIndexParameters() -> convType p.ParameterType |])
+                let cattr = pinfo.GetCustomAttributesDataImpl() 
+                defineCustomAttrs pb.SetCustomAttribute cattr
+                if  pinfo.CanRead then 
+                    let minfo = pinfo.GetGetMethod(true)
+                    pb.SetGetMethod (methMap.[minfo :?> ProvidedMethod ])
+                if  pinfo.CanWrite then 
+                    let minfo = pinfo.GetSetMethod(true)
+                    pb.SetSetMethod (methMap.[minfo :?> ProvidedMethod ]))
+
+
+        // phase 4 - complete types
+        iterateTypes (fun tb _ptd -> tb.CreateType() |> ignore)
+
+#if FX_NO_LOCAL_FILESYSTEM
+#else
+        assembly.Save (Path.GetFileName assemblyFileName)
+#endif
+
+        let assemblyLoadedInMemory = assemblyMainModule.Assembly 
+
+        iterateTypes (fun _tb ptd -> 
+            match ptd with 
+            | None -> ()
+            | Some ptd -> ptd.SetAssembly assemblyLoadedInMemory)
+
+#if FX_NO_LOCAL_FILESYSTEM
+#else
+    member __.GetFinalBytes() = 
+        let assemblyBytes = File.ReadAllBytes assemblyFileName
+        let _assemblyLoadedInMemory = System.Reflection.Assembly.Load(assemblyBytes,null,System.Security.SecurityContextSource.CurrentAppDomain)
+        //printfn "final bytes in '%s'" assemblyFileName
+        //File.Delete assemblyFileName
+        assemblyBytes
+#endif
+
+type ProvidedAssembly(assemblyFileName: string) = 
+    let theTypes = ResizeArray<_>()
+    let assemblyGenerator = AssemblyGenerator(assemblyFileName)
+    let assemblyLazy = 
+        lazy 
+            assemblyGenerator.Generate(theTypes |> Seq.toList)
+            assemblyGenerator.Assembly
+#if FX_NO_LOCAL_FILESYSTEM
+#else
+    let theAssemblyBytesLazy = 
+      lazy
+        assemblyGenerator.GetFinalBytes()
+
+    do
+        GlobalProvidedAssemblyElementsTable.theTable.Add(assemblyGenerator.Assembly, theAssemblyBytesLazy) 
+
+#endif
+
+    let add (providedTypeDefinitions:ProvidedTypeDefinition list, enclosingTypeNames: string list option) = 
+        for pt in providedTypeDefinitions do 
+            if pt.IsErased then invalidOp ("The provided type "+pt.Name+"is marked as erased and cannot be converted to a generated type. Set 'IsErased' to false on the ProvidedTypeDefinition")
+            theTypes.Add(pt,enclosingTypeNames)
+            pt.SetAssemblyLazy assemblyLazy
+
+    member x.AddNestedTypes (providedTypeDefinitions, enclosingTypeNames) = add (providedTypeDefinitions, Some enclosingTypeNames)
+    member x.AddTypes (providedTypeDefinitions) = add (providedTypeDefinitions, None)
+#if FX_NO_LOCAL_FILESYSTEM
+#else
+    static member RegisterGenerated (fileName:string) = 
+        //printfn "registered assembly in '%s'" fileName
+        let assemblyBytes = System.IO.File.ReadAllBytes fileName
+        let assembly = Assembly.Load(assemblyBytes,null,System.Security.SecurityContextSource.CurrentAppDomain)
+        GlobalProvidedAssemblyElementsTable.theTable.Add(assembly, Lazy<_>.CreateFromValue assemblyBytes)
+        assembly
+#endif
+
+
+module Local = 
+
+    let makeProvidedNamespace (namespaceName:string) (types:ProvidedTypeDefinition list) =
+        let types = [| for ty in types -> ty :> Type |]
+        {new IProvidedNamespace with
+            member __.GetNestedNamespaces() = [| |]
+            member __.NamespaceName = namespaceName
+            member __.GetTypes() = types |> Array.copy
+            member __.ResolveTypeName typeName : System.Type = 
+                match types |> Array.tryFind (fun ty -> ty.Name = typeName) with
+                | Some ty -> ty
+                | None    -> null
+        }
+
+
+#if FX_NO_LOCAL_FILESYSTEM
+type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list)>) =
+#else
+type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list)>) as this =
+#endif
+    let otherNamespaces = ResizeArray>()
+
+    let providedNamespaces = 
+        lazy [| for (namespaceName,types) in namespacesAndTypes do 
+                     yield Local.makeProvidedNamespace namespaceName types 
+                for (namespaceName,types) in otherNamespaces do 
+                     yield Local.makeProvidedNamespace namespaceName types |]
+
+    let invalidateE = new Event()    
+
+    let disposing = Event()
+
+#if FX_NO_LOCAL_FILESYSTEM
+#else
+    let probingFolders = ResizeArray()
+    let handler = ResolveEventHandler(fun _ args -> this.ResolveAssembly(args))
+    do AppDomain.CurrentDomain.add_AssemblyResolve handler
+#endif
+
+    new (namespaceName:string,types:list) = new TypeProviderForNamespaces([(namespaceName,types)])
+    new () = new TypeProviderForNamespaces([])
+
+    []
+    member __.Disposing = disposing.Publish
+
+#if FX_NO_LOCAL_FILESYSTEM
+    interface System.IDisposable with 
+        member x.Dispose() = 
+            disposing.Trigger(x, EventArgs.Empty)
+#else
+    abstract member ResolveAssembly : args : System.ResolveEventArgs -> Assembly
+
+    default __.ResolveAssembly(args) = 
+        let expectedName = (AssemblyName(args.Name)).Name + ".dll"
+        let expectedLocationOpt = 
+            probingFolders 
+            |> Seq.map (fun f -> IO.Path.Combine(f, expectedName))
+            |> Seq.tryFind IO.File.Exists
+        match expectedLocationOpt with
+        | Some f -> Assembly.LoadFrom f
+        | None -> null
+
+    member __.RegisterProbingFolder (folder) = 
+        // use GetFullPath to ensure that folder is valid
+        ignore(IO.Path.GetFullPath folder)
+        probingFolders.Add folder
+
+    member __.RegisterRuntimeAssemblyLocationAsProbingFolder (config : TypeProviderConfig) =  
+        config.RuntimeAssembly
+        |> IO.Path.GetDirectoryName
+        |> this.RegisterProbingFolder
+
+    interface System.IDisposable with 
+        member x.Dispose() = 
+            disposing.Trigger(x, EventArgs.Empty)
+            AppDomain.CurrentDomain.remove_AssemblyResolve handler
+#endif
+
+    member __.AddNamespace (namespaceName,types:list<_>) = otherNamespaces.Add (namespaceName,types)
+
+    // FSharp.Data addition: this method is used by Debug.fs
+    member __.Namespaces = Seq.readonly otherNamespaces
+
+    member this.Invalidate() = invalidateE.Trigger(this,EventArgs())
+
+    member __.GetStaticParametersForMethod(mb: MethodBase) =
+        printfn "In GetStaticParametersForMethod"
+        match mb with
+        | :? ProvidedMethod as t -> t.GetStaticParameters()
+        | _ -> [| |]
+
+    member __.ApplyStaticArgumentsForMethod(mb: MethodBase, mangledName, objs) = 
+        printfn "In ApplyStaticArgumentsForMethod"
+        match mb with
+        | :? ProvidedMethod as t -> t.ApplyStaticArguments(mangledName, objs) :> MethodBase
+        | _ -> failwith (sprintf "ApplyStaticArguments: static parameters for method %s are unexpected" mb.Name)
+
+    interface ITypeProvider with
+
+        []
+        override __.Invalidate = invalidateE.Publish
+
+        override __.GetNamespaces() = Array.copy providedNamespaces.Value
+
+        member __.GetInvokerExpression(methodBase, parameters) =
+            let rec getInvokerExpression (methodBase : MethodBase) parameters =
+                match methodBase with
+                | :? ProvidedMethod as m when (match methodBase.DeclaringType with :? ProvidedTypeDefinition as pt -> pt.IsErased | _ -> true) ->
+                    m.GetInvokeCodeInternal false parameters
+                    |> expand
+                | :? ProvidedConstructor as m when (match methodBase.DeclaringType with :? ProvidedTypeDefinition as pt -> pt.IsErased | _ -> true) -> 
+                    m.GetInvokeCodeInternal false parameters
+                    |> expand
+                // Otherwise, assume this is a generative assembly and just emit a call to the constructor or method
+                | :?  ConstructorInfo as cinfo ->  
+                    Quotations.Expr.NewObject(cinfo, Array.toList parameters) 
+                | :? System.Reflection.MethodInfo as minfo ->  
+                    if minfo.IsStatic then 
+                        Quotations.Expr.Call(minfo, Array.toList parameters) 
+                    else
+                        Quotations.Expr.Call(parameters.[0], minfo, Array.toList parameters.[1..])
+                | _ -> failwith ("TypeProviderForNamespaces.GetInvokerExpression: not a ProvidedMethod/ProvidedConstructor/ConstructorInfo/MethodInfo, name=" + methodBase.Name + " class=" + methodBase.GetType().FullName)
+            and expand expr = 
+                match expr with
+                | Quotations.Patterns.NewObject(ctor, args) -> getInvokerExpression ctor [| for arg in args -> expand arg|]
+                | Quotations.Patterns.Call(inst, mi, args) ->
+                    let args = 
+                        [|
+                            match inst with
+                            | Some inst -> yield expand inst
+                            | _ -> ()
+                            yield! List.map expand args
+                        |]
+                    getInvokerExpression mi args
+                | Quotations.ExprShape.ShapeVar v -> Quotations.Expr.Var v
+                | Quotations.ExprShape.ShapeLambda(v, body) -> Quotations.Expr.Lambda(v, expand body)
+                | Quotations.ExprShape.ShapeCombination(shape, args) -> Quotations.ExprShape.RebuildShapeCombination(shape, List.map expand args)
+            getInvokerExpression methodBase parameters
+#if FX_NO_CUSTOMATTRIBUTEDATA
+
+        member __.GetMemberCustomAttributesData(methodBase) = 
+            match methodBase with
+            | :? ProvidedTypeDefinition as m  -> m.GetCustomAttributesDataImpl()
+            | :? ProvidedMethod as m  -> m.GetCustomAttributesDataImpl()
+            | :? ProvidedProperty as m  -> m.GetCustomAttributesDataImpl()
+            | :? ProvidedConstructor as m -> m.GetCustomAttributesDataImpl()
+            | :? ProvidedEvent as m -> m.GetCustomAttributesDataImpl()
+            | :?  ProvidedLiteralField as m -> m.GetCustomAttributesDataImpl()
+            | :?  ProvidedField as m -> m.GetCustomAttributesDataImpl()
+            | _ -> [| |] :> IList<_>
+
+        member __.GetParameterCustomAttributesData(methodBase) = 
+            match methodBase with
+            | :? ProvidedParameter as m  -> m.GetCustomAttributesDataImpl()
+            | _ -> [| |] :> IList<_>
+
+
+#endif
+        override __.GetStaticParameters(ty) =
+            match ty with
+            | :? ProvidedTypeDefinition as t ->
+                if ty.Name = t.Name (* REVIEW: use equality? *) then
+                    t.GetStaticParameters()
+                else
+                    [| |]
+            | _ -> [| |]
+
+        override __.ApplyStaticArguments(ty,typePathAfterArguments:string[],objs) = 
+            let typePathAfterArguments = typePathAfterArguments.[typePathAfterArguments.Length-1]
+            match ty with
+            | :? ProvidedTypeDefinition as t -> (t.MakeParametricType(typePathAfterArguments,objs) :> Type)
+            | _ -> failwith (sprintf "ApplyStaticArguments: static params for type %s are unexpected" ty.FullName)
+
+#if FX_NO_LOCAL_FILESYSTEM
+        override __.GetGeneratedAssemblyContents(_assembly) = 
+            // TODO: this is very fake, we rely on the fact it is never needed
+            match System.Windows.Application.GetResourceStream(System.Uri("FSharp.Core.dll",System.UriKind.Relative)) with 
+            | null -> failwith "FSharp.Core.dll not found as Manifest Resource, we're just trying to read some random .NET assembly, ok?"
+            | resStream ->  
+                use stream = resStream.Stream
+                let len = stream.Length
+                let buf = Array.zeroCreate (int len)
+                let rec loop where rem = 
+                    let n = stream.Read(buf, 0, int rem)
+                    if n < rem then loop (where  + n) (rem - n)
+                loop 0 (int len) 
+                buf
+
+            //failwith "no file system"
+#else
+        override __.GetGeneratedAssemblyContents(assembly:Assembly) = 
+            //printfn "looking up assembly '%s'" assembly.FullName
+            match GlobalProvidedAssemblyElementsTable.theTable.TryGetValue assembly with 
+            | true,bytes -> bytes.Force()
+            | _ -> 
+                let bytes = System.IO.File.ReadAllBytes assembly.ManifestModule.FullyQualifiedName
+                GlobalProvidedAssemblyElementsTable.theTable.[assembly] <- Lazy<_>.CreateFromValue bytes
+                bytes
+#endif
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/nunitConf.fs b/tests/fsharpqa/Source/nunitConf.fs
new file mode 100644
index 00000000000..9a18413d6c1
--- /dev/null
+++ b/tests/fsharpqa/Source/nunitConf.fs
@@ -0,0 +1,420 @@
+module NUnitConf
+
+open System
+open System.IO
+open NUnit.Framework
+
+open UpdateCmd
+open TestConfig
+open PlatformHelpers
+open FSharpTestSuiteTypes
+
+let checkTestResult result =
+    match result with
+    | Success () -> ()
+    | Failure (GenericError msg) -> Assert.Fail (msg)
+    | Failure (ProcessExecError (err, msg)) -> Assert.Fail (sprintf "ERRORLEVEL %i %s" err msg)
+    | Failure (Skipped msg) -> Assert.Ignore(sprintf "skipped. Reason: %s" msg)
+
+let checkResult result = 
+    match result with
+    | CmdResult.ErrorLevel err -> let x = err, (sprintf "ERRORLEVEL %d" err) in Failure (RunError.ProcessExecError x)
+    | CmdResult.Success -> Success ()
+
+let skip msg () = Failure (Skipped msg)
+let genericError msg () = Failure (GenericError msg)
+let errorLevel exitCode msg () = Failure (ProcessExecError (exitCode,msg))
+
+let envVars () = 
+    System.Environment.GetEnvironmentVariables () 
+    |> Seq.cast
+    |> Seq.map (fun d -> d.Key :?> string, d.Value :?> string)
+    |> Map.ofSeq
+
+let defaultConfigurationName =
+#if !DEBUG
+    DEBUG
+#else
+    RELEASE
+#endif
+
+let parseConfigurationName (name: string) =
+    match name.ToUpper() with
+    | "RELEASE" -> RELEASE
+    | "DEBUG" -> DEBUG
+    | s -> failwithf "invalid env var FSHARP_TEST_SUITE_CONFIGURATION '%s'" s
+    
+
+let initializeSuite () =
+
+    let configurationName = defaultConfigurationName
+
+    let doNgen = true;
+
+    let FSCBinPath = __SOURCE_DIRECTORY__/".."/".."/(sprintf "%O" configurationName)/"net40"/"bin"
+
+    let mapWithDefaults defaults m =
+        Seq.concat [ (Map.toSeq defaults) ; (Map.toSeq m) ] |> Map.ofSeq
+
+    let env = 
+        envVars ()
+        |> mapWithDefaults ( [ "FSCBINPATH", FSCBinPath ] |> Map.ofList )
+
+    let configurationName =
+        match env |> Map.tryFind "FSHARP_TEST_SUITE_CONFIGURATION" |> Option.map parseConfigurationName with
+        | Some confName -> confName
+        | None -> configurationName
+
+    processor {
+//        do! updateCmd env { Configuration = configurationName; Ngen = doNgen; }
+//            |> Attempt.Run
+//            |> function Success () -> Success () | Failure msg -> genericError msg ()
+
+        let cfg =
+            let c = config env
+            let usedEnvVars =
+                c.EnvironmentVariables 
+                |> Map.add "FSC" c.FSC             
+            { c with EnvironmentVariables = usedEnvVars }
+
+        logConfig cfg
+
+//        let directoryExists = Commands.directoryExists (Path.GetTempPath()) >> Option.isSome 
+//
+//        let checkfscBinPath () = processor {
+//
+//            let fscBinPath = cfg.EnvironmentVariables |> Map.tryFind "FSCBINPATH"
+//            return!
+//                match fscBinPath with
+//                | Some dir when directoryExists dir -> Success
+//                | None -> genericError "environment variable 'FSCBinPath' is required to be a valid directory, is not set"
+//                | Some dir -> genericError (sprintf "environment variable 'FSCBinPath' is required to be a valid directory, but is '%s'" dir)
+//            }
+//
+//        let smokeTest () = processor {
+//            let tempFile ext = 
+//                let p = Path.ChangeExtension( Path.GetTempFileName(), ext)
+//                File.AppendAllText (p, """printfn "ciao"; exit 0""")
+//                p
+//
+//            let tempDir = Commands.createTempDir ()
+//            let exec exe args =
+//                log "%s %s" exe args
+//                use toLog = redirectToLog ()
+//                Process.exec { RedirectError = Some toLog.Post; RedirectOutput = Some toLog.Post; RedirectInput = None } tempDir cfg.EnvironmentVariables exe args
+//
+//            do! Commands.fsc exec cfg.FSC "" [ tempFile ".fs" ] |> checkResult
+//
+//            do! Commands.fsi exec cfg.FSI "" [ tempFile ".fsx" ] |> checkResult
+//        
+//            }
+//    
+//        do! checkfscBinPath ()
+//
+//        do! smokeTest ()
+
+        return cfg
+    } 
+
+
+let suiteHelpers = lazy (
+    initializeSuite ()
+    |> Attempt.Run 
+    |> function Success x -> x | Failure err -> failwith (sprintf "Error %A" err)
+)
+
+[]
+type public InitializeSuiteAttribute () =
+    inherit TestActionAttribute()
+
+    override x.BeforeTest details =
+        if details.IsSuite 
+        then suiteHelpers.Force() |> ignore
+
+    override x.AfterTest details =
+        ()
+
+    override x.Targets with get() = ActionTargets.Test ||| ActionTargets.Suite
+
+
+[]
+[]
+()
+
+module FSharpTestSuite =
+
+    let getTagsOfFile path =
+        match File.ReadLines(path) |> Seq.truncate 5 |> Seq.tryFind (fun s -> s.StartsWith("// #")) with
+        | None -> []
+        | Some line -> 
+            line.TrimStart('/').Split([| '#' |], StringSplitOptions.RemoveEmptyEntries)
+            |> Seq.map (fun s -> s.Trim())
+            |> Seq.filter (fun s -> s.Length > 0)
+            |> Seq.distinct
+            |> Seq.toList
+
+    let getTestFileMetadata dir =
+        Directory.EnumerateFiles(dir, "*.fs*")
+        |> Seq.toList
+        |> List.collect getTagsOfFile
+
+    let parseTestLst path =
+        let dir = Path.GetDirectoryName(path)
+        let commentLine (t: string) = t.StartsWith("#")
+        let lines =
+            File.ReadAllLines(path)
+            |> Array.filter (not << commentLine)
+            |> Array.filter (not << String.IsNullOrWhiteSpace)
+        let parse (t: string) =
+            let a = t.Split([| '\t'; '\t' |], StringSplitOptions.RemoveEmptyEntries)
+            let testDir = Commands.getfullpath dir a.[1]
+            [| for x in a.[0].Split(',') do yield (x, testDir) |]
+
+        lines |> Array.collect parse |> List.ofArray
+
+    let ``test.lst`` = lazy ( 
+        parseTestLst ( __SOURCE_DIRECTORY__/"test.lst" ) 
+        )
+
+    let getTestLstTags db dir =
+        let normalizePath path =
+            Uri(path).LocalPath
+            |> (fun s -> s.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar))
+            |> (fun s -> s.ToUpperInvariant())
+
+        let sameDir a = (normalizePath dir) = (normalizePath a)
+        let normalizedPath = normalizePath dir
+        db
+        |> List.choose (fun (tag, d) -> if sameDir d then Some tag else None)
+
+    let fsharpSuiteDirectory = __SOURCE_DIRECTORY__
+
+    let setProps dir (props: NUnit.Framework.Interfaces.IPropertyBag) =
+        let testDir = dir |> Commands.getfullpath fsharpSuiteDirectory
+
+        if not (Directory.Exists(testDir)) then failwithf "test directory '%s' does not exists" testDir
+
+        let categories = [ dir ] @ (testDir |> getTestFileMetadata) @ (testDir |> getTestLstTags ``test.lst``.Value)
+        categories |> List.iter (fun (c: string) -> props.Add(NUnit.Framework.Internal.PropertyNames.Category, c))
+
+        props.Set("DIRECTORY", testDir)
+
+    let testContext () =
+        let test = NUnit.Framework.TestContext.CurrentContext.Test
+        { Directory = test.Properties.Get("DIRECTORY") :?> string;
+          Config = suiteHelpers.Value }
+
+// parametrized test cases does not inherits properties of test ( see https://github.com/nunit/nunit/issues/548 )
+// and properties is where the custom context data is saved
+
+type FSharpSuiteTestAttribute(dir: string) =
+    inherit NUnitAttribute()
+    interface NUnit.Framework.Interfaces.IApplyToTest with
+        member x.ApplyToTest(test: NUnit.Framework.Internal.Test) =
+            try
+                test.Properties |> FSharpTestSuite.setProps dir
+            with ex ->
+                test.RunState <- NUnit.Framework.Interfaces.RunState.NotRunnable
+                test.Properties.Set(NUnit.Framework.Internal.PropertyNames.SkipReason, NUnit.Framework.Internal.ExceptionHelper.BuildMessage(ex))
+                test.Properties.Set(NUnit.Framework.Internal.PropertyNames.ProviderStackTrace, NUnit.Framework.Internal.ExceptionHelper.BuildStackTrace(ex))
+
+type EnvLstLineTestCaseData =
+    inherit TestCaseData
+
+    new (dir: string, envLstLine: string, [] arguments: Object array) as this = 
+        { inherit TestCaseData(arguments) }
+        then
+            this.Properties |> FSharpTestSuite.setProps dir
+            this.Properties.Set("ENVLSTLINE", envLstLine)
+
+
+[]
+type EnvLstLineTestCaseAttribute =
+    inherit TestCaseAttribute
+
+    new (dir: string, envLstLine: string, [] arguments: Object array) as this = 
+        { inherit TestCaseAttribute(arguments) }
+        then
+            this.Properties |> FSharpTestSuite.setProps dir
+            this.Properties.Set("ENVLSTLINE", envLstLine)
+
+
+open EnvLst
+
+type FSharpQASuiteTestAttribute(dir: string) =
+    inherit NUnitAttribute()
+
+    let _builder = NUnit.Framework.Internal.Builders.NUnitTestCaseBuilder()
+    interface NUnit.Framework.Interfaces.ITestBuilder with
+        member x.BuildFrom(methodInfo, suite) =
+            let rootDir = __SOURCE_DIRECTORY__
+            let path = Path.Combine(Path.Combine(rootDir, dir), "env.lst")
+
+            let lines =
+                path
+                |> IO.File.ReadAllLines
+                |> Array.map (fun l -> l, EnvLst.parseLine l)
+
+            let errors = lines |> Array.choose (function l, Choice2Of2 e -> Some(l,e) | _ -> None)
+            match errors with
+            | [| |] -> ()
+            | err ->
+                log "Invalid env.lst file '%s'" path
+                log "Errors:"
+                err |> Array.iter (fun (l,e) -> log "- %s. Line '%s'" e l)
+                failwithf "Invalid env.lst file '%s'. Errors: %A" path err
+
+            match lines |> Array.choose (function l, Choice1Of2(Some(EnvLstLine.Data(d))) -> Some(l,d) | _ -> None) with
+            | [| |] ->
+                failwithf "No valid lines inside env.lst file '%s'" path
+            | validLines ->
+                validLines
+                |> Array.map (fun (line,data) ->
+                    let tc = EnvLstLineTestCaseData (dir, line)
+                    
+                    //the id of test, it's the comment string
+                    let testName =
+                        data.Comment
+                        |> Option.map (fun s -> s.Trim())
+                        |> Option.map (fun s -> s.Replace(".", "_")) //test name is a full class name, the dot mean nesting
+                    
+                    testName
+                    |> Option.iter (fun testName -> tc.SetName(testName) |> ignore)
+
+                    _builder.BuildTestMethod(methodInfo, suite, tc) )
+                |> Seq.ofArray
+
+
+module FSharpQATestSuite =
+
+    let envLstData () = attempt {
+        let test = NUnit.Framework.TestContext.CurrentContext.Test
+        let line = test.Properties.Get("ENVLSTLINE") :?> string
+        
+        return! 
+            match line |> EnvLst.parseLine with
+            | Choice1Of2 (Some(Data(a))) -> succeed a.Vars
+            | Choice1Of2 (Some(Comment(c))) -> genericError (sprintf "The env.lst line '%s' is a comment" line)
+            | Choice1Of2 None -> genericError (sprintf "Invalid env.lst line '%s'" line)
+            | Choice2Of2 f -> genericError (sprintf "Invalid env.lst line '%s': %A" line f)
+
+        }
+
+module FileGuard =
+    let private remove path = if File.Exists(path) then Commands.rm (Path.GetTempPath()) path
+
+    []
+    type T (path: string) =
+        member x.Path = path
+        interface IDisposable with
+            member x.Dispose () = remove path
+
+    let create path =
+        if not (Path.IsPathRooted(path)) then failwithf "path '%s' must be absolute" path
+        remove path
+        new T(path)
+    
+    let exists (guard: T) = guard.Path |> File.Exists
+        
+
+let checkGuardExists guard = processor {
+    if not <| (guard |> FileGuard.exists)
+    then return! genericError (sprintf "exit code 0 but %s file doesn't exists" (guard.Path |> Path.GetFileName))
+    }
+
+
+let check (f: Attempt<_,_>) =
+    f |> Attempt.Run |> checkTestResult
+
+
+type RedirectInfo = 
+    { Output : RedirectTo
+      Input : RedirectFrom option }
+
+and RedirectTo = 
+    | Inherit
+    | Output of RedirectToType
+    | OutputAndError of RedirectToType
+    | Error of RedirectToType
+
+and RedirectToType = 
+    | Overwrite of FilePath
+    | Append of FilePath
+
+and RedirectFrom = 
+    | RedirectInput of FilePath
+
+
+module Command =
+
+    let logExec dir path args redirect =
+        let inF =
+            function
+            | None -> ""
+            | Some(RedirectInput l) -> sprintf " <%s" l
+        let redirectType = function Overwrite x -> sprintf ">%s" x | Append x -> sprintf ">>%s" x
+        let outF =
+            function
+            | Inherit -> ""
+            | Output r-> sprintf " 1%s" (redirectType r)
+            | OutputAndError r -> sprintf " 1%s 2>&1" (redirectType r)
+            | Error r -> sprintf " 2%s" (redirectType r)
+        sprintf "%s%s%s%s" path (match args with "" -> "" | x -> " " + x) (inF redirect.Input) (outF redirect.Output)
+
+    let exec dir envVars redirect path args =
+        let { Output = o; Input = i} = redirect
+
+        let inputWriter sources (writer: StreamWriter) =
+            let pipeFile name = async {
+                let path = Commands.getfullpath dir name
+                use reader = File.OpenRead (path)
+                use ms = new MemoryStream()
+                do! reader.CopyToAsync (ms) |> (Async.AwaitIAsyncResult >> Async.Ignore)
+                ms.Position <- 0L
+                try
+                    do! ms.CopyToAsync(writer.BaseStream) |> (Async.AwaitIAsyncResult >> Async.Ignore)
+                    do! writer.FlushAsync() |> (Async.AwaitIAsyncResult >> Async.Ignore)
+                with
+                | :? System.IO.IOException as ex -> //input closed is ok if process is closed
+                    ()
+                }
+            sources |> pipeFile |> Async.RunSynchronously
+
+        let inF fCont cmdArgs =
+            match i with
+            | None -> fCont cmdArgs
+            | Some(RedirectInput l) -> fCont { cmdArgs with RedirectInput = Some (inputWriter l) }
+
+        let openWrite rt =
+            let fullpath = Commands.getfullpath dir
+            match rt with 
+            | Append p -> new StreamWriter (p |> fullpath, true) 
+            | Overwrite p -> new StreamWriter (p |> fullpath, false)
+
+        let outF fCont cmdArgs =
+            match o with
+            | RedirectTo.Inherit ->  
+                use toLog = redirectToLog ()
+                fCont { cmdArgs with RedirectOutput = Some (toLog.Post); RedirectError = Some (toLog.Post) }
+            | Output r ->
+                use writer = openWrite r
+                use outFile = redirectTo writer
+                use toLog = redirectToLog ()
+                fCont { cmdArgs with RedirectOutput = Some (outFile.Post); RedirectError = Some (toLog.Post) }
+            | OutputAndError r ->
+                use writer = openWrite r
+                use outFile = redirectTo writer
+                fCont { cmdArgs with RedirectOutput = Some (outFile.Post); RedirectError = Some (outFile.Post) }
+            | Error r ->
+                use writer = openWrite r
+                use outFile = redirectTo writer
+                use toLog = redirectToLog ()
+                fCont { cmdArgs with RedirectOutput = Some (toLog.Post); RedirectError = Some (outFile.Post) }
+            
+        let exec cmdArgs =
+            log "%s" (logExec dir path args redirect)
+            Process.exec cmdArgs dir envVars path args
+
+        { RedirectOutput = None; RedirectError = None; RedirectInput = None }
+        |> (outF (inF exec))
+
diff --git a/tests/fsharpqa/Source/run.fs b/tests/fsharpqa/Source/run.fs
new file mode 100644
index 00000000000..58b17b34693
--- /dev/null
+++ b/tests/fsharpqa/Source/run.fs
@@ -0,0 +1,1479 @@
+module RunPl
+
+open System
+
+open PlatformHelpers
+
+let TODO f = ignore f
+
+open System.Text.RegularExpressions
+
+let (|Regex|_|) pattern input =
+    let m = Regex.Match(input, pattern)
+    if m.Success then Some(List.tail [ for g in m.Groups -> g.Value ])
+    else None
+
+let lc (s: string) = s.ToLower()
+
+(** PERL NOTES
+
+`-e $path`
+mean file exists at $path ( or a directory/named pipe/symlink )
+
+`my 	( $_sources, $_SCFLAGS ) = @_;`
+deconstruct arguments of function ( @_ ) into variables $_sources, $_SCFLAGS
+
+**)
+
+
+//use strict;
+//use IO::Socket;
+//use Cwd;
+ignore "useless requires"
+    
+//use constant COMPILER_NAME => 'fsc';
+let COMPILER_NAME = "fsc"
+//use constant FSI_NAME      => 'fsiAnyCPU';
+let FSI_NAME      = "fsiAnyCPU"
+//use constant FSI32_NAME    => 'fsi';
+let FSI32_NAME    = "fsi"
+//use constant CSC_NAME      => 'csc';
+let CSC_NAME      = "csc"
+//use constant VBC_NAME      => 'vbc';
+let VBC_NAME      = "vbc"
+    
+// # Constant values for test result
+//use constant TEST_PASS     => 0;
+let TEST_PASS     = 0
+//use constant TEST_FAIL     => 1;
+let TEST_FAIL     = 1
+//use constant TEST_SKIPPED  => 2;
+let TEST_SKIPPED  = 2
+//use constant TEST_CASCADE  => 3;
+let TEST_CASCADE  = 3
+//use constant TEST_NORESULT => 4;
+let TEST_NORESULT = 4
+    
+// # Constant values for target type
+//use constant TARGET_EXE => 0;
+let TARGET_EXE = 0
+//use constant TARGET_DLL => 1;
+let TARGET_DLL = 1
+//use constant TARGET_MOD => 2;
+let TARGET_MOD = 2
+    
+// # Constant values for platform type
+//use constant PLATFORM_X86 => 1;
+let PLATFORM_X86 = 1
+//use constant PLATFORM_IA64 => 2;
+let PLATFORM_IA64 = 2
+//use constant PLATFORM_AMD64 => 3;
+let PLATFORM_AMD64 = 3
+//use constant PLATFORM_WIN9X => 4;
+let PLATFORM_WIN9X = 4
+//use constant PLATFORM_WOW_IA64 => 5;
+let PLATFORM_WOW_IA64 = 5
+//use constant PLATFORM_WOW_AMD64 => 6;
+let PLATFORM_WOW_AMD64 = 6
+    
+    
+    
+//# Constant values used internally to determine if the compile/run should succeed or fail
+//use constant TEST_SEEK_SUCCESS  => 0;
+let TEST_SEEK_SUCCESS  = 0
+//use constant TEST_SEEK_WARN     => 1;
+let TEST_SEEK_WARN     = 1
+//use constant TEST_SEEK_ERROR    => 2;
+let TEST_SEEK_ERROR    = 2
+
+//use constant ASSERT_FILE => '_assert.$$$'; # where we store the VSASSERT file
+let ASSERT_FILE = "_assert.$$$" // # where we store the VSASSERT file
+
+
+// ################################################################################
+// #
+// # SUB ROUTINES
+// #
+// ################################################################################
+
+// #############################################################
+// # RunCommand -- execute a cmd, redirecting stdout, stderr.
+// #
+// # Redirects STDERR to STDOUT, and then redirects STDOUT to the
+// # argument named in $redirect.  It is done this way since
+// # invoking system() with i/o redirection under Win9x masks
+// # the return code, always yielding a 0.
+// #
+// # The return value is the actual return value from the test.
+// #
+//sub RunCommand {
+let RunCommand cwd envVars msg (exe, cmdArgs) dumpOutput = attempt {
+    let unlink = Commands.rm cwd
+    let fileExists = Commands.fileExists cwd
+    let getfullpath = Commands.getfullpath cwd
+    let ``exec 2>1 1>a`` a = NUnitConf.Command.exec cwd envVars { Output = NUnitConf.RedirectTo.OutputAndError(NUnitConf.RedirectToType.Overwrite(a)); Input = None; }
+
+    // #add Win9x Hack here
+    
+    //unlink ASSERT_FILE;
+    unlink ASSERT_FILE
+
+    //my ($msg,$cmd,$dumpOutput) = @_;
+    ignore "arguments"
+    
+    // #  open SAVEERR, ">&STDERR"; open STDOUT, ">&STDOUT"; 	# save a copy of stderr and redirect to stdout
+    
+    //print("$msg: [$cmd]\n");
+    printfn "%s: [%s]\n" msg (sprintf "%s %s" exe cmdArgs)
+
+    //select STDERR; $| = 1; select STDOUT; $| = 1;		# enable autoflush
+    //open(COMMAND,"$cmd 2>&1 |") or RunExit(TEST_FAIL, "Command Process Couldn't Be Created: $! Returned $? \n");
+    //@CommandOutput = ;
+    //close COMMAND;
+    let tempOut = IO.Path.GetTempFileName()
+    let result = ``exec 2>1 1>a`` tempOut exe cmdArgs
+    let cmdExitCode = match result with CmdResult.ErrorLevel(x) -> x | CmdResult.Success -> 0
+    let CommandOutput = tempOut |> IO.File.ReadAllText
+
+    // #  close STDERR; open STDERR, ">&SAVEERR"; #resore stderr
+    
+    //print @CommandOutput if ($dumpOutput == 1);
+    do if dumpOutput then printfn "%s" CommandOutput
+    
+    // # Test for an assertion failure
+    //if (-e ASSERT_FILE) {
+    return! 
+        if fileExists ASSERT_FILE |> Option.isSome then
+            //print("Failing Test: Assertion detected. Dump Follows:\n");
+            printfn "Failing Test: Assertion detected. Dump Follows:"
+
+            //open ASSERT, ASSERT_FILE or RunExit(TEST_SKIPPED, "Can't open:" . ASSERT_FILE . " : $!\n");
+            //while (){ print; }
+            //close ASSERT;
+            try
+                ASSERT_FILE
+                |> getfullpath
+                |> System.IO.File.ReadLines
+                |> Seq.iter (printfn "%s")
+                NUnitConf.genericError "Command Unexpectedly Failed with ASSERT \n"
+            with e ->
+                NUnitConf.skip (sprintf "Can't open: %s : %s" ASSERT_FILE (e.Message))
+        else
+            succeed (cmdExitCode, CommandOutput)
+    }
+
+// #############################################################
+// # RunCompilerCommand -- runs a compiler command line, either directly or through external host
+// #
+let RunCompilerCommand cwd envVars useHosted msg (exe, cmd) dumpOutput =
+    //my ($useHosted, $msg, $cmd, $dumpOutput) = @_;
+    ignore "are arguments"
+    
+    //if($useHosted){
+    if useHosted then
+        //my $port = "11000";
+        //if($ENV{HOSTED_COMPILER_PORT} ne ""){
+        //   $port = $ENV{HOSTED_COMPILER_PORT};
+        //}
+        //
+        //my $attempts = 0;
+        //my $remote = undef;
+        //until($remote || ($attempts == 10)) {
+        //    $remote = IO::Socket::INET->new(
+        //                        Proto    => "tcp",
+        //                        PeerAddr => "localhost",
+        //                        PeerPort => $port,
+        //                    ) or sleep(1);
+        //    $attempts++;                            
+        //}
+        //RunExit(TEST_FAIL, "Unable to connect to hosted compiler \n") unless $remote;
+        //
+        //my $currDir = getcwd();
+        //
+        //# send current directory and full command line to the compiler host process
+        //print $remote "$currDir|||$compiler_command";
+        //
+        //# first line of respone is the exit code
+        //my $ExitCode = 0 + <$remote>;
+        //
+        //# remainder of response is output of compiler
+        //@CommandOutput = <$remote>;
+        //
+        //# still some issues with reliability of hosted compiler.
+        //# if compilation unexpectedly fails, try again with standard compiler
+        //if ($ExitCode && ($Type < TEST_SEEK_ERROR)) {
+        //  return RunCommand($msg, $cmd);
+        //}
+        //
+        //return $ExitCode;
+        TODO "useHosted not supported, let's run the command as is"
+
+        RunCommand cwd envVars msg (exe, cmd) dumpOutput
+
+    //}else{
+    else
+        //return RunCommand($msg, $cmd);
+        RunCommand cwd envVars msg (exe, cmd) dumpOutput
+    //}
+
+// #############################################################
+// # GetSrc -- Find the source file to build
+// #
+//sub GetSrc() {
+let GetSrc cwd (envVarSOURCE: string) = attempt {
+    //my $cwd = cwd();
+    ignore "from arguments"
+    
+    // # The environment SOURCE var usually defines what to compile
+    //$_ = $ENV{SOURCE};
+    let mutable s = envVarSOURCE
+
+    //s/\$CWD/$cwd/;
+    s <- s.Replace("$CWD", cwd)
+
+    //my $source = $_;
+    let source = s
+
+    //return($source) if defined($source);
+    return! 
+        if not(System.String.IsNullOrWhiteSpace(source)) then
+            succeed source
+        else
+            // # Or if there's only one source file in the directory
+            //my @src = glob("*.fs *.fsx *.fsscript");
+            //@src <= 1 || RunExit(TEST_SKIPPED, "No SOURCE env var and > 1 source files in the dir: @src \n");
+            //return(shift @src);
+            TODO "choose a file from directory"
+            //failwith "SOURCE var is required, choose a file from directory is not supported"
+            NUnitConf.skip "SOURCE var is required, choose a file from directory is not supported"
+
+    }
+
+type ExpectedResults =
+     | CmdLine of string
+     | ExpectMatch of string * string
+     | ExpectNotMatch of string
+     | ExeOutputMatch of string list
+
+// #############################################################
+// # GetExpectedResults -- 
+// #
+// # This routine scans the source for magic cookies that show
+// # the expected results of the compile.  The format of a cookie
+// # line is:
+// # //# Expects: [success|warning|error|skip|notin] : [optional text to search for]
+// # or
+// # // [optional text to search for]
+// # or
+// # //
+// #
+// # The second colon is not required if there is no text to search for.
+// # case is insensitive for success|warning|error.  Note that there is
+// # no semantic difference between success and warning. It's strictly
+// # for readability in the source.
+// #
+// # Skip is a special state that has higher priority than even Error.
+// # This allows a skip expectation to be added without removing or
+// # editing any success, warning or error states.  This will be most
+// # useful when developing tests for features NYI, or, perhaps, for
+// # features with known bug entries that you don't want showing
+// # up on the failure list.  Runall will be given a skip status for
+// # this test.
+// #
+// # Note that multiple 'Expects' lines are legal. The most severe
+// # status wins. If there are 23 success tags and one error tag, then
+// # error is the assumed condition, and they all might as well have
+// # said error.  This is useful for documentation purposes if you have
+// # a file that has 10 warnings, and 2 errors and you want it to be
+// # clear in the source 'Expects' line.
+// #
+// # '//# Expects:' is a literal to make it readable in the source.
+// #
+// # Examples:
+// # //# Expects: Error
+// #		Compile should fail. No other criteria.
+// #
+// # //# Expects: Success
+// #		Compile should succeed. No other criteria.
+// #
+// # //# Expects: Warning: warning C4244: '=' : conversion from 'int' to 'char', possible loss of data
+// # //# Expects: Warning: warning C4508: 'main' : function should return a value; 'void' return type assumed
+// #		This will cause run.pl to expect an executable and expect it to run successfully.
+// #		Compilation will only be considered successful if both of the strings after
+// #		Warning: are found.  If both strings are not found, the executable is not run.
+// #		If the above had been errors instead of warnings, it would not look for
+// #		an executable.
+// #
+// # Getting the OUTPUT
+// # A source file also documents its expected output.  It does so
+// # in the style of a perl here document.  The startup line takes the
+// # form '//[optional white space]<<[optional white space][string]
+// # followed by the expected output, exactly as expected.  No variable
+// # substitution currently, and newline occur as they will in the output.
+// # Then on a blank line by itself: [string] is again placed.
+// # Please make sure the closing line has no white space before or
+// # after it.  It will be stripped from the front and back of the source.
+//sub GetExpectedResults(){
+let GetExpectedResults cwd (srcListSepByBlank: string) =
+    let getfullpath = Commands.getfullpath cwd
+
+    //my $src = shift @_;
+    let mutable src = srcListSepByBlank
+
+    //my $TEST_SEEK_SKIP = 99;
+    let TEST_SEEK_SKIP = 99
+    //my $_skip = 0;
+    let _skip = 0
+    //my $level;
+    let level = 0
+    //my $expect = TEST_SEEK_SUCCESS;
+    let expect = TEST_SEEK_SUCCESS
+    //my (@expected, @dontmatch);
+    TODO "declare but not assigned"
+
+    //my %seekHash = ( "success", TEST_SEEK_SUCCESS,
+    //     "warning", TEST_SEEK_WARN,
+    //     "error",   TEST_SEEK_ERROR,
+    //     "skip",    $TEST_SEEK_SKIP
+    //   );
+    let seekHash = 
+       [ "success", TEST_SEEK_SUCCESS
+         "warning", TEST_SEEK_WARN
+         "error",   TEST_SEEK_ERROR
+         "skip",    TEST_SEEK_SKIP
+       ] |> Map.ofList
+
+    //$src =~ s/\s.*//; #grab only the first source file
+    let first,_ = src |> PlatformHelpers.splitAtFirst System.Char.IsWhiteSpace
+    src <- first //grab only the first source file
+    
+    let srcPath = src |> getfullpath
+
+    //open SRC, $src or RunExit(TEST_FAIL, "GetExpectedResults::Can't open source file: $src: $!\n");
+    let SRC () = srcPath |> System.IO.File.ReadLines
+
+    // parse //< Seq.skipWhile ((<>) "//< List.ofSeq
+        |> function x :: xs -> xs | [] -> []
+        |> List.takeWhile ((<>) "//Output")
+        |> List.map (fun line -> line.TrimStart('/'))
+
+    //##########################################################
+    
+    //push @dontmatch, "internal error";
+    ignore "useless, it's a failfast"
+    
+    //let's simplify a bit the loop below, it's xml after //
+    let parseXml (s: string) = 
+        try
+            Choice1Of2 (System.Xml.Linq.XElement.Parse(s))
+        with e ->
+            Choice2Of2 e
+
+    //ITEM: while() {
+    SRC ()
+    |> Seq.map (fun line -> line.TrimStart()) //ignore whitespace before //
+    |> Seq.choose (fun line -> if line.StartsWith("//") then Some (line.TrimStart('/')) else None) //only comments `//`
+    |> Seq.choose (fun line ->
+        // # Looking for output tags
+        //if (m@//\s*<<\s*(\S+\n)@i) {
+        //  my $here = $1;
+        //  while(){
+        //    s@^\s*//@@;
+        //    next ITEM if ($here eq $_);
+        //    push @expected, $_;
+        //  }
+        //  # Detect unterminated expected output tags
+        //  RunExit(TEST_FAIL, "Unterminated output mark: $here  \n");
+        //}
+        TODO "for example < parseXml with
+        | Choice2Of2 e ->
+
+            if line.TrimStart().StartsWith("
+            let xn name = System.Xml.Linq.XName.Get(name)
+            let tryAttr name (x: System.Xml.Linq.XElement) = 
+                x.Attributes(xn name) |> Seq.tryHead |> Option.map (fun a -> a.Value)
+
+            match xml.Name.LocalName with
+
+            // # test for command lines
+            // # test full xml form
+            //elsif (m@//\s*(.*?)\s*<(/CmdLine|/)>@i) {
+            | "CmdLine" ->
+              // if (defined($CmdLine)) # Currently support one command line param
+              // {
+              //   RunExit(TEST_SKIPPED, " tag found more than once \n");
+              // }
+              TODO "add this check after the list is processed"
+
+              let d1 = xml.Value
+              //$CmdLine = $1 if defined($1);
+              Some (Choice1Of2(CmdLine(d1)))
+            //}
+
+            // # test full xml form
+            | "Expect"
+            | "Expects" ->
+            //elsif (m@//\s*\s*(.*?)\s*<(/Expect|/)\w*>@i) {
+
+                match xml |> tryAttr "status" |> Option.map lc with
+                | None ->
+                    TODO "status has a default?"
+                    Some (Choice2Of2(sprintf "status attribute required for  ( file '%s', line '%s' )" src line))
+
+                //if ($TEST_SEEK_SKIP == $seekHash{$level = lc($1)}) {
+                | Some "skip" ->
+                    TODO " found ( file '%s', line '%s' )" src line))
+
+                //} else {
+                | Some statusAttrValue when ["success"; "warning"; "error" ] |> List.contains statusAttrValue ->
+
+                    let level = lc statusAttrValue
+                    let status = seekHash |> Map.tryFind statusAttrValue
+
+                    //my $text = $2;      # save text for later
+                    let mutable text = xml.Value
+
+                    //my $id =   $1 if (m@//\s*]@i);
+                    let idAttr = xml |> tryAttr "id"
+                    let mutable idValue = idAttr |> function Some s -> s | None -> ""
+
+                    //my $span = $1 if (m@//\s*]@i);
+                    let spanAttr = xml |> tryAttr "span"
+
+                    //$_ = $span; s/\(/\\\(/; s/\)/\\\)/; $span = $_;
+                    let span = 
+                        spanAttr 
+                        |> Option.map (fun s -> s.Replace("(", "\\(").Replace(")", "\\)"))
+                        |> function Some s -> s | None -> ""
+
+                    // # Ignore the actual text and only look at ID and SPAN X_SKIPFULLDIAGCHECK is set to 1
+                    
+                    // # This is typically for LOC or PLOC runs. Unless we are matching for "success", we
+                    // # disregard the text, because it is most likely a localized string.
+                    //my $res;
+                    let mutable res = ""
+
+                    let ENV_X_SKIPFULLDIAGCHECK = 0 //X_SKIPFULLDIAGCHECK it's unused in fsharpqa tests, so it's false
+
+                    //if( ($ENV{X_SKIPFULLDIAGCHECK} == 1) && ($level ne "success")) {
+                    if ( (ENV_X_SKIPFULLDIAGCHECK = 1) && (level <> "success")) then
+                        //$res = "";
+                        res <- ""
+                        //$text = "";
+                        text <- ""
+
+                    //} else {
+                    else
+                        //$res = $text;
+                        res <- text
+
+                        //$id = $level . " " . $id if(($level eq "warning") || ($level eq "error"));
+                        if (level = "warning") || (level = "error") then
+                            idValue <- level + " " + idValue
+                    //}
+                    
+                    //$res = $id . ":.+" . $res if($id ne "");
+                    if (idValue <> "") then res <- idValue + ":.+" + res
+
+                    //$res = $span . ":.+" . $res if($span ne "");
+                    if (span <> "") then res <- span + ":.+" + res
+                    
+                    //if (($text ne "") || ($id ne "") || ($span ne "")){
+                    //    push @match, $res;
+                    //}
+                    if ( (text <> "") || (idValue <> "") || (span <> "")) then
+                        Some (Choice1Of2(ExpectMatch(statusAttrValue,res)))
+
+                    // # test short xml form
+                    //elsif (m@//\s*@i) { 
+                    //  $level = lc($1);
+                    //}
+                    else
+                        TODO "same as full xml form, not needed, it's the empty "
+                        Some (Choice1Of2(ExpectMatch(statusAttrValue,res)))
+
+                // # test full xml form
+                //elsif (m@//\s*\s*(.*?)\s*<(/Expect|/)\w*>@i) {
+                | Some "notin" ->
+                    //push @dontmatch, $2 if $2;
+                    let d2 = xml.Value
+                    Some (Choice1Of2(ExpectNotMatch d2))
+                //} else {
+                | Some s ->
+                    //next;
+                    Some (Choice2Of2(sprintf "invalid status attribute '%s' for " s))
+                //})
+            
+            //}
+            | unsupportedXml -> 
+                log "not supported xml '%s' in comment" unsupportedXml
+                Some (Choice2Of2(sprintf "not supported xml '%s' in comment" unsupportedXml))
+        )
+    |> List.ofSeq
+    |> (fun l ->
+            let failed = l |> List.choose (function Choice2Of2 x -> Some x | _ -> None)
+            match failed with
+            | [] ->
+
+                let expects = l |> List.choose (function Choice1Of2 x -> Some x | _ -> None)
+
+                // # Actual work!
+                //$level = $seekHash{$level};
+                //if ($level == $TEST_SEEK_SKIP) {
+                //  $_skip = 1;
+                //} else {
+                //  $expect = $level if ($level > $expect); # max
+                //}
+                
+                let levelMax =
+                    expects
+                    |> List.choose (function ExpectMatch (level,_) -> Some level | _ -> None)
+                    |> List.choose (fun level -> seekHash |> Map.tryFind level)
+                    |> List.fold max 0
+
+                let expectExeOutput = 
+                    match Output with
+                    | [] -> []
+                    | l -> [ExeOutputMatch l]
+
+                succeed (levelMax, expects @ expectExeOutput)
+            | f :: fs ->
+                fs |> List.iter (log "test spec error: %s")
+                NUnitConf.genericError f 
+        )
+    //}
+    
+    //return($expect, $_skip, \@expected, \@dontmatch);
+    //TODO "unused"
+
+
+// #############################################################
+// #
+// # GetExpectedTargetInfo
+// #
+// # Parse the /out /t(arget) options from $SCFLAGS:
+// # 1. If /t(arget) is specified then $targetType is set based on the value of the last /t(arget) in 
+// # $SCFLAGS. If /t(arget) is not specified then we $targetType is automatically set to TARGET_EXE.
+// #
+// # 2. If /out is specified then $targetName is set to the value of the last /out in $SCFLAGS else.
+// # If /out is not specified, $targetName is determined based on $Sources; this is done by appending 
+// # the appropriate extension to the extension stripped source name and testing if the file exists until   
+// # we find a match or we expire all possibilities.  
+// #
+//sub GetExpectedTargetInfo()
+let GetExpectedTargetInfo cwd (_sources: string) _SCFLAGS = attempt {
+    let fileExists = Commands.fileExists cwd
+
+    //my 	( $_sources, $_SCFLAGS ) = @_;
+    ignore "arguments"
+    
+    //use File::Basename;
+    ignore "useless require"
+
+    //my %target_extension_hash = (
+    //           exe     => ['.exe', TARGET_EXE],
+    //           winexe  => ['.exe', TARGET_EXE],
+    //           library => ['.dll', TARGET_DLL],
+    //           module  => ['.netmodule', TARGET_MOD]
+    //          );
+    let target_extension_hash =
+        [ "exe",     ( ".exe", TARGET_EXE )
+          "winexe",  ( ".exe", TARGET_EXE )
+          "library", ( ".dll", TARGET_DLL )
+          "module",  ( ".netmodule", TARGET_MOD ) ]
+        |> Map.ofList
+
+    //my $target_name;
+    let mutable target_name = ""
+    //my $target_type = 'exe';
+    let mutable target_type = "exe"
+    //my $target_extension = $target_extension_hash{$target_type}[0];
+    let mutable target_extension = target_extension_hash |> Map.find target_type |> fst;
+    
+    do match _SCFLAGS with
+       //if ($_SCFLAGS =~ /.*(--target:|-a)((\w*)|$)/i) {
+       | Regex @".*(--target:|-a)((\w*)|$)" [ d1; d2 ] ->
+           // #figure out targetname from SCFLAGS
+           //if("$1" eq "-a") {
+           if (d1 = "-a") then
+               //$target_extension = $target_extension_hash{"library"}[0];
+               target_extension <- target_extension_hash |> Map.find "library" |> fst
+               //target_type = "library";
+               target_type <- "library"
+           //} else {
+           else
+               //$target_extension = $target_extension_hash{lc($2)}[0] if (defined($2));
+               if (not(System.String.IsNullOrWhiteSpace(d2))) then
+                   target_extension <- target_extension_hash |> Map.find (lc d2) |> fst
+               //$target_type = $2 if (defined($2));
+               if (not(System.String.IsNullOrWhiteSpace(d2))) then
+                   target_type <- d2
+           //}
+       //}
+       | _ -> ()
+
+    do match _SCFLAGS with
+       //if ($_SCFLAGS =~ /.*(-out:|-o )(\".*?\"|\S*)/i) {
+       | Regex """.*(-out:|-o )(\".*?\"|\S*)""" [ _d1; d2 ] ->
+           //#grab what is after out:
+           //$target_name = $2;
+           target_name <- d2
+       //}
+       | _ ->
+           ()
+
+    //if (defined($target_name)) {
+    do if (not(System.String.IsNullOrWhiteSpace(target_name))) then
+            //$target_name =~ s/(^\"|$\")//g;     #remove enclosing "s before testing file if exists. '"' is not a valid file name character
+            target_name <- target_name.Trim().TrimStart('"').TrimEnd('"') // remove enclosing "s before testing file if exists. '"' is not a valid file name character
+
+            //return undef unless( -e $target_name );
+            ignore "useless, it's already checked below"
+        //} else { # Figure it out from sources
+        else // Figure it out from sources
+            //foreach my $source (split(/[\s+]/,$_sources)){
+            //    $source = basename( $source );
+            //    $source =~ s/(\w+)\.\w*$/$1$target_extension/;
+            //    $target_name = $source if (-e $source);
+            //    last if ($target_name);
+            //}
+            _sources.Split([| ' ' |], StringSplitOptions.RemoveEmptyEntries)
+            |> Array.tryPick fileExists
+            |> Option.map (fun p -> IO.Path.ChangeExtension(p, target_extension))
+            |> Option.iter (fun p -> target_name <- p)
+
+        //}
+    
+    return!
+        if String.IsNullOrWhiteSpace(target_name) then
+            //return undef unless ( -e $target_name);
+            NUnitConf.genericError "target_name required"
+        else
+            //return ($target_name, $target_extension_hash{$target_type}[1]);
+            succeed (target_name, target_extension_hash |> Map.find target_type |> snd )
+    }
+
+// #############################################################
+// #
+// # LogTime -- Log the time it took for a test to execute...
+// #
+//sub LogTime{
+let LogTime logFile src (compileTime: TimeSpan) (runTime: TimeSpan) =
+    //my($Src, $CompileTime, $RunTime) = @_;
+    ignore "arguments"
+
+    //my($dir) = $main::root;
+    //open(TIMELOGFILE, ">>$dir\\timing.log");
+    //print TIMELOGFILE "$Src\t$CompileTime\t$RunTime\n";
+    //close TIMELOGFILE;
+    System.IO.File.AppendAllLines(logFile, [| sprintf "%s\t%A\t%A" src compileTime runTime |])
+
+// #############################################################
+// #
+// # RunExit -- Exits the script with the specified value.  
+// # 
+//sub RunExit {
+let RunExit envPOSTCMD (exitVal: int) (cmtStr: string) = attempt {
+    //my (
+    //    $exitVal,		# Our exit value
+    //    $cmtStr,		# Comment string to print before exit
+    //   ) = @_;
+    ignore "are arguments"    
+
+    //my %status_hash = (
+    //       0 => "PASS",
+    //       1 => "FAIL",
+    //       2 => "SKIP"
+    //      );
+    let status_hash =
+        [ 0, "PASS"
+          1, "FAIL"
+          2, "SKIP" ]
+        |> Map.ofList
+              
+    //print("$cmtStr") if ($cmtStr);
+    do if (not(System.String.IsNullOrWhiteSpace(cmtStr))) then
+           printf "%s" cmtStr
+    
+    //my $exit_str;
+    let exit_str = ""
+    //my $test_result = $exitVal;
+    let test_result = exitVal
+    
+    // # Run POSTCMD if any
+    //if (defined($ENV{POSTCMD})) {
+    do! if (not(System.String.IsNullOrWhiteSpace(envPOSTCMD))) then
+            // # Do the magic to replace known tokens in the
+            // # PRECMD/POSTCMD: for now you can write in env.lst
+            // # something like:
+            // #    SOURCE=foo.fs POSTCMD="\$FSC_PIPE bar.fs"
+            // # and it will expanded into $FSC_PIPE before invoking it
+            //$_ = $ENV{POSTCMD};
+            //s/^\$FSC_PIPE/$FSC_PIPE/;
+            //s/^\$FSI_PIPE/$FSI_PIPE/;
+            //s/^\$FSI32_PIPE/$FSI32_PIPE/;
+            //s/^\$CSC_PIPE/$CSC_PIPE/;
+            //s/^\$VBC_PIPE/$VBC_PIPE/;
+            TODO "implement replace"
+            
+            //if (RunCommand("POSTCMD",$_,1)){
+            //     $exitVal = TEST_FAIL;
+            //     $test_result = TEST_FAIL;
+            //     $exit_str .= "Fail to execute the POSTCMD. ";
+            //}
+            TODO "implement POSTCMD"
+
+            NUnitConf.skip "POSTCMD not implemented"
+        else
+            Success
+    //}
+    
+    //if (exists($ENV{SKIPTEST})) {
+    //    $exit_str = "Test Marked: SKIP using Environment Variable SKIPTEST , Tested as: ";
+    //    $exitVal = TEST_SKIPPED;
+    //} elsif ($Skip) {
+    //    my @platforms;
+    //    $Skip_platforms=~s/\s//g;
+    //    # skip all platforms if no platforms specified
+    //    if ($Skip_platforms eq "") {
+    //        $exit_str = "Test Marked: SKIP, Tested as: ";
+    //        $exitVal = TEST_SKIPPED;
+    //    }
+    //    # treat garbage comas as fatal error
+    //    elsif (!scalar(@platforms = split(/,/,$Skip_platforms))) {
+    //        $exit_str = "Expects Skip Tag Has Errors: \"$Skip_platforms\" Test Was $status_hash{$test_result}, Tested as: ";
+    //        $exitVal = TEST_FAIL;
+    //        $test_result = TEST_FAIL;
+    //    } else {  
+    //        my $platform_to_skip;
+    //        foreach my $match (@platforms) {
+    //            # treat unrecognized platform or garbage as fatal error
+    //            unless ($platform_to_skip = $Platform_Hash{$match}) {
+    //                $exit_str = "Expects Skip Tag Has Errors: \"$Skip_platforms\" Test Was $status_hash{$test_result}, Tested as: ";
+    //                $exitVal = TEST_FAIL;
+    //                $test_result = TEST_FAIL;
+    //                last;
+    //            }
+    //            # don't break here even if we match because we might run into garbage later on
+    //            elsif ($platform_to_skip == $platform) {
+    //                $exit_str = "Test Marked: SKIP, Tested as: ";
+    //                $exitVal = TEST_SKIPPED;
+    //            }
+    //        }
+    //    }
+    //}
+    TODO "implement SKIP? or it's the runner filter?"
+    
+    //print $exit_str . $status_hash{$test_result} . "\n";
+    printfn "%s %s" exit_str (status_hash |> Map.find test_result)
+    
+    //exit($exitVal);
+    return exitVal
+    }
+
+// #############################################################
+// #
+// # GetCurrentPlatform
+// #
+//sub GetCurrentPlatform(){
+let GetCurrentPlatform () =
+    // # Get current platform and fail if we don't support it
+      
+    //my %proc_hash = (
+    //     _ => 'WIN9X',
+    //     X86_ => 'X86',
+    //     AMD64_ => 'AMD64',
+    //     IA64_ => 'IA64',
+    //     X86_AMD64 => 'WOW_AMD64',
+    //     X86_IA64 => 'WOW_IA64',
+    //    );
+    //
+    //my $platform_string = uc($ENV{PROCESSOR_ARCHITECTURE})."_".uc($ENV{PROCESSOR_ARCHITEW6432});
+    //my $res = $Platform_Hash{$proc_hash{$platform_string}};
+    //
+    //unless (defined($res)) {
+    //  my $error_string = "PROCESSOR_ARCHITECTURE:" . $ENV{PROCESSOR_ARCHITECTURE} . " with PROCESSOR_ARCHITEW6432:" . $ENV{PROCESSOR_ARCHITEW6432};
+    //  RunExit(TEST_FAIL, "GetCurrentPlatform::Fatal Error: Run.pl does not support the current $error_string \n");
+    //}
+    //return $res;
+    ignore "useless, it's calculated from another function"      
+
+
+let runpl cwd initialEnvVars = attempt {
+
+    let mutable envVars = initialEnvVars
+
+    let env key = envVars |> Map.tryFind key
+    let envOrDefault key def = env key |> Option.fold (fun s t -> t) def
+    let envOrFail key = env key |> function Some x -> x | None -> failwithf "environment variable '%s' required " key
+    let envSet key value = envVars <- envVars |> Map.add key value
+
+    
+    let unlink = Commands.rm cwd
+    let fileExists = Commands.fileExists cwd
+    let getfullpath = Commands.getfullpath cwd
+    
+    //shadow some function, to have same argument as perl script
+    let RunCommand = RunCommand cwd envVars
+    let RunCompilerCommand = RunCompilerCommand cwd envVars
+    let GetExpectedTargetInfo = GetExpectedTargetInfo cwd
+    let GetExpectedResults = GetExpectedResults cwd
+
+    let LogTime = 
+        //my($dir) = $main::root;
+        //open(TIMELOGFILE, ">>$dir\\timing.log");
+        let logFile = __SOURCE_DIRECTORY__ ++ "timing.log"
+        LogTime logFile
+
+    // # run.pl
+    
+    //my %Platform_Hash = (
+    //         WIN9X => PLATFORM_WIN9X,
+    //         X86 => PLATFORM_X86,
+    //         AMD64 => PLATFORM_AMD64, 
+    //         IA64 => PLATFORM_IA64,
+    //         WOW_AMD64 => PLATFORM_WOW_AMD64,
+    //         WOW_IA64 => PLATFORM_WOW_IA64,     
+    //        );    
+    //
+    //my $platform = &GetCurrentPlatform();
+    let platform = PLATFORM_X86
+    
+    //unlink ASSERT_FILE if ( -e ASSERT_FILE );
+    fileExists ASSERT_FILE |> Option.iter unlink
+    //$ENV{VSASSERT//} = ASSERT_FILE;
+    envSet "VSASSERT" ASSERT_FILE
+
+    // #global variable for command output
+    //my @CommandOutput=();
+    TODO "CommandOutput it's not anymore a global variable, it's returned from Command"
+    
+    // # Is this a compile-only run?
+    //my $compileOnlyRun = 0;
+    //$compileOnlyRun = 1 if (exists($ENV{COMPILE_ONLY}));
+    let compileOnlyRun =
+        match env "COMPILE_ONLY" with
+        | None -> false
+        | Some _ -> true
+    
+    // # Process EXCLUDEIF items
+    do! match env "EXCLUDEIF" with
+        | None -> Success
+        //if (defined($ENV{EXCLUDEIF})){
+        | Some _ ->
+            //  foreach my $EXCLUDE_ITEM ( split(/;/,$ENV{EXCLUDEIF}) ) {
+            //    if ($ENV{TARGET} eq $EXCLUDE_ITEM) {
+            //      RunExit(TEST_SKIPPED, "Test excluded for target $ENV{TARGET}\n")
+            //    }
+            //  }
+            TODO "EXCLUDEIF not supported, not used in fsharpqa tests"
+            NUnitConf.skip "EXCLUDEIF not supported"
+        //}
+    
+    //# See if we are doing strong name verification
+    //my $VerifyStrongName = 0;
+    //$VerifyStrongName = 1 if ($ENV{VERIFYSTRONGNAME} =~ /TRUE/i);
+    let VerifyStrongName =
+        match env "VERIFYSTRONGNAME" |> Option.map (fun s -> s.ToUpper()) with
+        | Some "TRUE" -> true
+        | None | Some _ -> false
+    
+    // # Check for any compiler flags
+    //my $SCFLAGS = $ENV{SCFLAGS};
+    let SCFLAGS = env "SCFLAGS"
+    
+    // # Check for any compiler 'tail' flags
+    //my $TAILFLAGS = $ENV{TAILFLAGS};
+    let TAILFLAGS = env "TAILFLAGS"
+    
+    // # Check for any global compiler flags
+    //my $ISCFLAGS = $ENV{ISCFLAGS};
+    //unless( defined($ISCFLAGS) ){
+    //  $ISCFLAGS = " ";
+    //}
+    let ISCFLAGS = envOrDefault "ISCFLAGS" " "
+    
+    // # Filter out flags that don't make sense in FSI (e.g. --standalone)
+    // # We will add more in the future, if needed.
+    //my $IFSIFLAGS = $ENV{IFSIFLAGS};
+    //unless( defined($IFSIFLAGS) ){
+    //  $IFSIFLAGS = $ISCFLAGS;
+    //}
+    let mutable IFSIFLAGS =
+        match env "IFSIFLAGS" with
+        | Some s -> s 
+        | None -> ISCFLAGS
+
+    //$_ = $IFSIFLAGS;
+    //s/[ ]+--standalone[ ]+/ /; s/[ ]+--standalone$//; s/^--standalone[ ]+//;
+    //$IFSIFLAGS = $_;
+    IFSIFLAGS <- IFSIFLAGS.Replace("--standalone", " ")
+    
+    // #Take care of timing
+    //my $TimeTests = 0;
+    //$TimeTests = 1 if (exists($ENV{TimeTests}));
+    let TimeTests = env "TimeTests" |> Option.isSome
+    
+    //# Running on Vista (or later)?
+    //my $isVistaOrLater = 0;
+    //$_ = `ver`;
+    //$isVistaOrLater = 1 if(/([0-9]+)\.[0-9]+\.[0-9]/ && ($1>=6));
+    let isVistaOrLater = 1 //it's always vista or later
+
+    // # Is this a Vista-only test?
+    //my $VISTA_ONLY = $ENV{VISTA_ONLY};
+    //if($VISTA_ONLY && !$isVistaOrLater)
+    do! match env "VISTA_ONLY" with
+        | None -> Success
+        | Some _ ->
+            //{
+            //   RunExit(TEST_SKIPPED, "Test skipped: This test only run on Vista (or later)\n");
+            //}
+            ignore "unused, it's always vista or later, better remove it?"
+            NUnitConf.skip "VISTA_ONLY not supported"
+    
+    // # Are we using a 'special' compiler? By default, we simply invoke "fsc" expecting it to be in the PATH
+    // # This new env variable would allow enable the following scenarios:
+    // # - specify a private compiler
+    // # - apply a stopit kind of logic (to prevent runaway tests to hose a run)
+    // # - possibly app compat / bin compat scenarios
+    // # By default, we revert to the old behavior (i.e. COMPILER_NAME)
+    //my $FSC_PIPE=$ENV{FSC_PIPE};
+    //unless( defined($FSC_PIPE) ){
+    //  $FSC_PIPE = COMPILER_NAME;
+    //  $ENV{FSC_PIPE}=COMPILER_NAME;
+    //}
+    let FSC_PIPE = envOrDefault "FSC_PIPE" COMPILER_NAME
+    envSet "FSC_PIPE" FSC_PIPE
+    
+    //my $FSI_PIPE=$ENV{FSI_PIPE};
+    //unless( defined($FSI_PIPE) ){
+    //  $FSI_PIPE = FSI_NAME;
+    //  $ENV{FSI_PIPE}=FSI_NAME;
+    //}
+    let FSI_PIPE = envOrDefault "FSI_PIPE" FSI_NAME
+    envSet "FSI_PIPE" FSI_PIPE
+    
+    //my $FSI32_PIPE=$ENV{FSI32_PIPE};
+    //unless( defined($FSI32_PIPE) ){
+    //  $FSI32_PIPE = FSI32_NAME;
+    //  $ENV{FSI32_PIPE}=FSI32_NAME;
+    //}
+    let FSI32_PIPE = envOrDefault "FSI32_PIPE" FSI32_NAME
+    envSet "FSI32_PIPE" FSI32_PIPE
+    
+    //my $CSC_PIPE=$ENV{CSC_PIPE};
+    //unless( defined($CSC_PIPE) ){
+    //  $CSC_PIPE = CSC_NAME;
+    //  $ENV{CSC_PIPE}=CSC_NAME;
+    //}
+    let CSC_PIPE = envOrDefault "CSC_PIPE" CSC_NAME
+    envSet "CSC_PIPE" CSC_PIPE
+    
+    //my $VBC_PIPE=$ENV{VBC_PIPE};
+    //unless( defined($VBC_PIPE) ){
+    //  $VBC_PIPE = VBC_NAME;
+    //  $ENV{VBC_PIPE}=VBC_NAME;
+    //}
+    let VBC_PIPE = envOrDefault "VBC_PIPE" VBC_NAME
+    envSet "VBC_PIPE" VBC_PIPE
+
+    let skipIfContainsRedirection varName (exe, cmdArgs: string) = attempt {
+        if cmdArgs.Contains(">") then
+            return! NUnitConf.skip (sprintf "output/error redirection is not implemented. Var %s => '%s %s'" varName exe cmdArgs)
+        }
+        
+    
+    //#
+    //# Run pre-command if any
+    //#
+    //if (exists($ENV{PRECMD})) {
+    do! match env "PRECMD" with
+        | None -> Success
+        | Some envPRECMD -> attempt {
+            let replace (a: string) b (s: string) = s.Replace(a, b)
+            // # Do the magic to replace known tokens in the
+            // # PRECMD/POSTCMD: for now you can write in env.lst
+            // # something like:
+            // #    SOURCE=foo.fs PRECMD="\$FSC_PIPE bar.fs"
+            // # and it will expanded into $FSC_PIPE before invoking it
+            //$_ = $ENV{PRECMD};
+            let pre =
+                envPRECMD
+                //s/^\$FSC_PIPE/$FSC_PIPE/;
+                |> replace "$FSC_PIPE" FSC_PIPE 
+                //s/^\$FSI_PIPE/$FSI_PIPE/;
+                |> replace "$FSI_PIPE" FSI_PIPE
+                //s/^\$FSI32_PIPE/$FSI32_PIPE/;
+                |> replace "$FSI32_PIPE" FSI32_PIPE
+                //s/\$ISCFLAGS/$ISCFLAGS/;
+                |> replace "$ISCFLAGS" ISCFLAGS
+                //s/^\$CSC_PIPE/$CSC_PIPE/;
+                |> replace "$CSC_PIPE" CSC_PIPE
+                //s/^\$VBC_PIPE/$VBC_PIPE/;
+                |> replace "$VBC_PIPE" VBC_PIPE
+
+            let exe, cmdArgs = pre |> splitAtFirst Char.IsWhiteSpace
+            let cmdArgsString = cmdArgs |> function Some s -> s | None -> ""
+
+            do! skipIfContainsRedirection "PRECMD" (exe, cmdArgsString)
+
+            let! e,o = RunCommand "PRECMD" (exe, cmdArgsString) true
+            //RunExit(TEST_FAIL, "Fail to execute the PRECMD" . @CommandOutput . "\n")  if RunCommand("PRECMD",$_ ,1); 
+            if e <> 0
+            then return! NUnitConf.genericError (sprintf "Fail to execute the PRECMD %s" o)
+            }
+        //}
+    
+    //# Normal testing begins 
+    //my $Sources = &GetSrc();
+    let! sources = GetSrc cwd (envOrDefault "SOURCE" "")
+    
+    //my ( $Skip_platforms, @match, $CmdLine, @NotExpectedOutput);
+    TODO "support $Skip_platforms, @match, $CmdLine, @NotExpectedOutput"
+
+    //my ( $Type, $Skip, $Output, $Dontmatch ) = &GetExpectedResults($Sources);
+    ignore "let's simplify a bit"
+
+    let! mType, dd = GetExpectedResults sources
+    let Type = mType
+    
+    //#################################################################################
+    //# Compiling..........
+    //#
+    
+    //# if env variable is set, use external hosted compiler for FSC tests
+    //my $useHostedCompiler = ($ENV{HOSTED_COMPILER} eq "1");
+    let mutable useHostedCompiler = env "HOSTED_COMPILER" |> function Some "1" -> true | _ -> false
+
+    //my $compiler_command = "Unknown";
+    let! compiler_command = attempt {
+        let concatEmpty = Array.ofList >> Array.choose id >> String.concat " "
+        //if ($ENV{FSIMODE} eq "") {
+        match env "FSIMODE" with
+        | None | Some "" ->
+            //$compiler_command = "$FSC_PIPE $ISCFLAGS $SCFLAGS $Sources $TAILFLAGS";
+            return FSC_PIPE, [ Some ISCFLAGS; SCFLAGS; Some sources; TAILFLAGS ] |> concatEmpty
+        //} else {
+        | Some _ ->
+            // # don't use hosted compiler for FSI tests
+            //$useHostedCompiler = 0;
+            useHostedCompiler <- false
+            match env "FSIMODE" with
+            //if($ENV{FSIMODE} eq "PIPE") {
+            | Some "PIPE" ->
+                //$compiler_command = "$FSI_PIPE<$Sources $IFSIFLAGS $SCFLAGS $TAILFLAGS";
+                return! NUnitConf.skip (sprintf "FSIMODE=PIPE it's not implemented")
+            //} elsif($ENV{FSIMODE} eq "EXEC") {
+            | Some "EXEC" ->
+                //$compiler_command = "$FSI_PIPE --exec $IFSIFLAGS $SCFLAGS $Sources $TAILFLAGS";
+                return FSI_PIPE, [ Some "--exec"; Some IFSIFLAGS; SCFLAGS; Some sources; TAILFLAGS ] |> concatEmpty 
+            //} elsif($ENV{FSIMODE} eq "FEED") {
+            | Some "FEED" ->
+                //$compiler_command = "$FSI_PIPE $IFSIFLAGS $SCFLAGS $Sources $TAILFLAGS";
+                return FSI_PIPE, [ Some IFSIFLAGS; SCFLAGS; Some sources; TAILFLAGS ] |> concatEmpty
+            //} else { # default to FEED
+            | _ ->
+                //$compiler_command = "$FSI_PIPE $IFSIFLAGS $SCFLAGS $Sources $TAILFLAGS";
+                return FSI_PIPE, [ Some IFSIFLAGS; SCFLAGS; Some sources; TAILFLAGS ] |> concatEmpty
+            //}
+        //}
+        }
+    
+    //my($CompilerStartTime) = time();
+    let CompilerStartTime = System.Diagnostics.Stopwatch.StartNew()
+    //my $ExitCode = RunCompilerCommand($useHostedCompiler, "Compiling", "$compiler_command");
+    let! exitCode,commandOutput = RunCompilerCommand useHostedCompiler "Compiling" compiler_command false
+    //my($CompileTime) = $CompilerStartTime - time();
+    let CompileTime = CompilerStartTime.Elapsed
+    
+    printfn "Checking Expected results (%i): " (dd |> List.length)
+    dd |> List.iter (printfn "- %A")
+
+    do! if dd |> List.exists (function ExpectedResults.CmdLine _ -> true | _ -> false) then
+            NUnitConf.skip (sprintf " not implemented")
+        else    
+            Success
+
+    //foreach (@CommandOutput) {
+    //  my $n_remaining_to_match = scalar(@match);
+    //  my $matched = 0;
+    //  for (my $i = 0; $i < $n_remaining_to_match; $i++) {
+    //    if (m/$match[$i]/) {
+    //      splice(@match, $i, 1);
+    //      print("[matched] ");
+    //      $matched = 1;
+    //      last;
+    //    }
+    //  }
+    //  unless($matched){
+    //    foreach my $notin (@{$Dontmatch}){
+    //      # print ",$notin,\n";
+    //      push(@NotExpectedOutput,$_) if (/$notin/);
+    //    }
+    //  }
+    //  print;
+    //}
+    //
+    //# Expected match lines were never matched
+    //if (scalar(@match) || scalar(@NotExpectedOutput)){		# something went wrong
+    //  print("\n*** The following necessary lines were never matched:\n");
+    //  foreach my $line (@match) {
+    //    print("***\t$line\n");
+    //  }
+    //
+    //  print("\n\n*** The following necessary lines were incorrectly matched:\n");
+    //  foreach my $line (@NotExpectedOutput){
+    //    print("***\t$line\n");
+    //  }
+    //  print("\n");
+    //  RunExit(TEST_FAIL, "Unexpected Compiler Output \n");
+    //}
+
+    let checkMatchOutput regexPattern = 
+        let outputNormalized = commandOutput.Replace("\r\n","\n") //regex $ multiline doesnt match \r\n, only \n
+        (Regex(regexPattern, RegexOptions.Multiline)).Match(outputNormalized).Success
+
+    let matchLines = 
+        dd 
+        |> List.choose (function ExpectedResults.ExpectMatch(_, s) -> Some s | _ -> None)
+        |> List.filter (not << String.IsNullOrWhiteSpace)
+
+    do! match matchLines |> List.filter (not << checkMatchOutput) with
+        | [] -> 
+            printfn "Expect match: [passed]"
+            Success
+        | notMatched ->
+            printfn "Expect match: [failed]"
+            notMatched |> List.iter (printfn "Expected match '%s' not found")
+            printfn "Output:"
+            printfn "%s" commandOutput
+            NUnitConf.genericError (sprintf "expect match failed: %A" notMatched)
+
+
+    let notMatchLines = 
+        dd 
+        |> List.choose (function ExpectedResults.ExpectNotMatch s -> Some s | _ -> None)
+        |> List.filter (not << String.IsNullOrWhiteSpace)
+
+    do! match notMatchLines |> List.filter (checkMatchOutput) with
+        | [] -> 
+            printfn "Expect not match: [passed]"
+            Success
+        | matched ->
+            printfn "Expect not match: [failed]"
+            matched |> List.iter (printfn "Expected not match '%s' but found")
+            printfn "Output:"
+            printfn "%s" commandOutput
+            NUnitConf.genericError (sprintf "expect not match failed: %A" matched)
+    
+    //my ($targetName, $targetType) = &GetExpectedTargetInfo($Sources, $SCFLAGS);
+    let! targetName, targetType = GetExpectedTargetInfo sources (SCFLAGS |> function Some s -> s | None -> "")
+    
+    //if ($ExitCode && ($Type < TEST_SEEK_ERROR)) {
+    do! if ((exitCode <> 0) && (Type < TEST_SEEK_ERROR)) then
+            //RunExit(TEST_FAIL, "Compile Unexpectedly Failed: $ExitCode \n");
+            NUnitConf.genericError (sprintf "Compile Unexpectedly Failed: %i" exitCode)
+        else
+            Success
+    //}
+    
+    //if (($ExitCode == 0) && ($Type == TEST_SEEK_ERROR)) {
+    do! if ((exitCode = 0) && (Type = TEST_SEEK_ERROR)) then
+            // # If this happens, your failure messages in the source
+            // # aren't rich enough since the first test checking to
+            // # see if scalar(@match) was non-zero should have triggered.
+            //RunExit(TEST_FAIL, "Compile Succeeded, Designed To Fail. \n");
+            NUnitConf.genericError (sprintf "Compile Succeeded, Designed To Fail.")
+        else
+            Success
+    //}
+
+    
+    //if ($ExitCode) {
+    do! if (exitCode <> 0) then
+            //RunExit(TEST_SKIPPED, "Internal Logic Error(1)") if ($Type != TEST_SEEK_ERROR);
+            if (Type <> TEST_SEEK_ERROR) then
+                //RunExit(TEST_SKIPPED, "Internal Logic Error(1)") 
+                NUnitConf.skip "Internal Logic Error(1)"
+            else
+                //RunExit(TEST_PASS);		# Designed to fail, and it did
+                ignore "make it pass, it's going to be a big if"
+                NUnitConf.genericError "Not implemented: Designed to fail, and it did"
+        else
+            Success
+    //}
+    
+    //RunExit(TEST_SKIPPED, "Internal Logic Error(2)") if ($Type == TEST_SEEK_ERROR);
+    do! if (Type = TEST_SEEK_ERROR) then
+            NUnitConf.skip "Internal Logic Error(2)"
+        else
+            Success
+
+    //RunExit(TEST_SKIPPED, "Internal Logic Error(3)") if ($ExitCode);
+    do! if (exitCode <> 0) then
+            NUnitConf.skip "Internal Logic Error(3)"
+        else
+            Success
+    
+    //if($ENV{REDUCED_RUNTIME} ne "1"){
+    do! match env "REDUCED_RUNTIME" with
+        | Some "1" ->
+            Success
+        | _ ->
+            //if((defined $targetName) && (defined $targetType)) {
+            // # check/set PEVerify
+            // my $PEVERIFY = $ENV{PEVERIFY}; 
+            // unless(defined($PEVERIFY)) {
+            //   # Only use peverify if it is in the path
+            //   foreach $_ (split /;/, $ENV{PATH}) {
+            //     $PEVERIFY = "peverify.exe" if(-e "$_\\peverify.exe");
+            //   }
+            //   $ENV{PEVERIFY} = $PEVERIFY;
+            // }
+            //
+            // # Use $ENV{PEVER} if it is defined
+            // my $PEVER_ARG = $ENV{PEVER};
+            //
+            //if (!defined($PEVERIFY)) {
+            //  print "PEVerify ($PEVERIFY) not defined/found, skipping...\n";
+            //} elsif ($PEVER_ARG =~ /\/Exp_Fail/i) {
+            //   # do not run if Exp_Fail
+            //   print "PEVerify not run because test is marked as an expected failure...\n";
+            // } elsif($targetType <= TARGET_DLL) {
+            //   RunExit(TEST_FAIL, "PeVerify Failed the test\n") if (RunCommand("Peverify","$PEVERIFY $targetName $ENV{PEVER}",1));
+            // }
+            //}
+            TODO "REDUCED_RUNTIME <> 1 not implemented"
+            NUnitConf.skip "REDUCED_RUNTIME not implemented"
+    //}
+    
+    // ################################################################################
+    // #
+    // # Running the EXE
+    // #
+    // # Now we scan the output of the EXE if we must
+    let checkRunningExe expectedExeOutput () = attempt {
+        
+        //my $status = TEST_PASS;
+        let status = TEST_PASS
+        //my $param = "";
+        let mutable param = ""
+        //RunExit(TEST_FAIL, "Failed to Find Any Target: $targetName \n") unless ( -e $targetName );
+        do! match fileExists targetName with
+            | None ->
+                NUnitConf.genericError (sprintf "Failed to Find Any Target: %s \n" targetName)
+            | Some _ ->
+                Success
+
+        //$param = $CmdLine if defined($CmdLine);
+        TODO "$CmdLine is declare, but it's not initialized before"
+        
+        //@CommandOutput = ();
+        ignore "unused, the CommandOutput now is a return value"
+        
+        //my($StartTime) = time();
+        let StartTime = System.Diagnostics.Stopwatch.StartNew();
+        
+        //# For /3Gb runs, we need to mark exe with /LARGEADDRESSAWARE
+        let markLargAddress exeName = attempt {
+            //RunCommand("Marking exe with /LARGEADDRESSAWARE...","editbin.exe /LARGEADDRESSAWARE $targetName");
+            let! e,o = RunCommand "Marking exe with /LARGEADDRESSAWARE..." ("editbin.exe", (sprintf "/LARGEADDRESSAWARE %s" exeName)) false
+            if e <> 0 then 
+                return! NUnitConf.errorLevel e (sprintf "Failed mark exe with /LARGEADDRESSAWARE: %s" o)
+            }
+
+        //if(defined($ENV{LARGEADDRESSAWARE})) {
+        do! if env "LARGEADDRESSAWARE" |> Option.isSome then
+                markLargAddress targetName
+            else 
+                Success
+        //}
+
+        //my $sim = "";
+        ignore "unused variable"
+        
+        let! exePath = 
+            //if (defined($ENV{SIMULATOR_PIPE})) {
+            if env "SIMULATOR_PIPE" |> Option.isSome then
+                //# replace known tokens
+                //$_ = $ENV{SIMULATOR_PIPE};
+                //s/^\$FSC_PIPE/$FSC_PIPE/;
+                //s/^\$FSI_PIPE/$FSI_PIPE/;
+                //s/^\$FSI32_PIPE/$FSI32_PIPE/;
+                //s/\$ISCFLAGS/$ISCFLAGS/;
+                //s/^\$CSC_PIPE/$CSC_PIPE/;
+                //s/^\$VBC_PIPE/$VBC_PIPE/;
+                //s/\$PLATFORM/$ENV{PLATFORM}/;
+                TODO "replace variables"
+            
+                //$sim = $_;
+                //$ExitCode = RunCommand("Running","$sim $targetName $param");
+                TODO "SIMULATOR_PIPE not supported, it's not used in fsharpqa tests"
+            
+                NUnitConf.skip "var SIMULATOR_PIPE not supported"
+            //}
+            else 
+                let exePath = targetName |> getfullpath
+                succeed exePath
+
+        do! skipIfContainsRedirection "SOURCE" (exePath, param)
+
+        //$ExitCode = RunCommand("Running","$sim $targetName $param");
+        //NOTE there the $sim is blank
+        let! exitCode, commandOutput = RunCommand "Running" (exePath, param) false
+          
+        
+        //my($DeltaTime) = time() - $StartTime;
+        let DeltaTime = StartTime.Elapsed
+        
+        //LogTime($Sources, $CompileTime, $DeltaTime) if ($TimeTests);
+        do if TimeTests then
+              LogTime sources CompileTime DeltaTime
+        
+    
+        //my $check_output = scalar(@{$Output});
+
+        //my ($LinesMatched) = 0;
+        //my ($LinesToMatch) = $check_output;
+        //
+        //#parse the output
+        //foreach (@CommandOutput) {
+        //  if ($check_output) {
+        //    my $line = shift @{$Output};
+        //    chop $line eq "\n" || RunExit(TEST_SKIPPED, "Internal error in perl script, expecting newline in \$line \n");
+        //    chop $_ eq "\n" || RunExit(TEST_SKIPPED, "Internal error in perl script, expecting newline in \$_ \n");
+        //
+        //    if (((length($_) == 0) && (length($line) == 0)) ||
+        //         (($_ =~ /$line/) && (length($line) != 0))) {
+        //       # The good
+        //       print("[matched] $_\n");
+        //       $LinesMatched++;  
+        //           } else {
+        //       # The bad
+        //       print("  Error: Expected: [$line]\n");
+        //       print("  Error: Received: [$_]\n\n");
+        //       $status = TEST_FAIL;
+        //    }
+        //
+        //    $check_output = scalar(@{$Output});
+        //  } else {
+        //    # redirect outputs from the exe to runpl.log
+        //    print;
+        //  }
+        //}
+        //print("\n");
+        do! match expectedExeOutput with
+            | None ->
+                Success
+            | Some [] ->
+                Success
+            | Some (x :: xs) ->
+                let possible =
+                    commandOutput.Split([| System.Environment.NewLine |], StringSplitOptions.RemoveEmptyEntries)
+                    |> Array.skipWhile ((<>) x)
+                    |> Array.truncate (x::xs |> List.length)
+                    |> List.ofArray
+
+                if (x :: xs) = possible then
+                    printfn "Output match: [passed]"
+                    Success
+                else
+                    printfn "Output match: [failed]"
+                    printfn "Output:"
+                    printfn "%s" commandOutput
+                    NUnitConf.genericError "exe output doesnt match"
+                    
+        
+        //RunExit(TEST_FAIL, "Generated Test EXE Failed \n") if ($ExitCode);
+        do! if (exitCode <> 0) then
+                NUnitConf.genericError "Generated Test EXE Failed"
+            else
+                Success
+
+        //RunExit(TEST_FAIL, "Test EXE had bad output \n") if ($status != TEST_PASS);
+        do! if (status <> TEST_PASS) then
+                NUnitConf.genericError "Test EXE had bad output"
+            else
+                Success
+
+        //RunExit(TEST_FAIL, "Test EXE had bad output \n") if ($LinesMatched != $LinesToMatch);
+        TODO "match ouput"
+    //}
+        }
+
+    let checkVerifyStrongName () = attempt {
+        let verifyStrongName () = attempt {
+            //RunExit(TEST_FAIL, "Assembly failed verification:\n") if RunCommand("VerifyStroingName","sn -q -vf $targetName",1);
+            let! e,_ = RunCommand "VerifyStroingName" ("sn", "-q -vf $targetName") true
+            if e <> 0 then
+                return! NUnitConf.genericError "Assembly failed verification:\n"
+        }
+
+        //if ($VerifyStrongName && $targetType <= TARGET_MOD) {
+        if VerifyStrongName && (targetType <= TARGET_MOD) then
+            return! verifyStrongName()
+        }
+    //}
+
+    let expectedExeOutput =
+        dd |> List.tryPick (function ExeOutputMatch(l) -> Some l | _ -> None)
+
+    // # If this is a compile only run, call post command and exit
+    //if ($compileOnlyRun) {
+    return!
+        if compileOnlyRun then
+            Success
+        else attempt {
+            //if ($targetType == TARGET_EXE) {
+            do! if targetType = TARGET_EXE then
+                    checkRunningExe expectedExeOutput ()
+                else
+                    Success
+
+            return! checkVerifyStrongName ()
+            }
+    //}
+    
+    //exit (1); #safe stop
+    //safe stop
+    
+    }
diff --git a/tests/fsharpqa/Source/test.lst b/tests/fsharpqa/Source/test.lst
index d8948a6d9b9..6982358348f 100644
--- a/tests/fsharpqa/Source/test.lst
+++ b/tests/fsharpqa/Source/test.lst
@@ -40,6 +40,7 @@ CompilerOptions01,NoMT				CompilerOptions\fsc\crossoptimize
 CompilerOptions01,NoMT				CompilerOptions\fsc\debug
 CompilerOptions01,NoMT				CompilerOptions\fsc\dumpAllCommandLineOptions
 CompilerOptions01,NoMT				CompilerOptions\fsc\flaterrors
+CompilerOptions02,NoMT				CompilerOptions\fsc\gccerrors
 CompilerOptions01,NoMT				CompilerOptions\fsc\help
 CompilerOptions01,NoMT				CompilerOptions\fsc\highentropyva
 CompilerOptions01,NoMT				CompilerOptions\fsc\lib
@@ -60,11 +61,13 @@ CompilerOptions01,NoMT				CompilerOptions\fsc\times
 CompilerOptions01,NoMT				CompilerOptions\fsc\warn
 CompilerOptions01,NoMT				CompilerOptions\fsc\warnaserror
 CompilerOptions01,NoMT				CompilerOptions\fsc\warnon
+CompilerOptions01,NoMT				CompilerOptions\fsc\responsefile
 CompilerOptions01,NoMT				CompilerOptions\fsi\help
 CompilerOptions01,NoMT				CompilerOptions\fsi\highentropyva
 CompilerOptions01,NoMT				CompilerOptions\fsi\nologo
 CompilerOptions01,NoMT				CompilerOptions\fsi\subsystemversion
 CompilerOptions01,NoMT				CompilerOptions\fsi\times
+CompilerOptions02,NoMT				CompilerOptions\fsi\exename
 
 
 Conformance01			Conformance\BasicGrammarElements\Constants
@@ -238,6 +241,7 @@ Conformance08			Conformance\UnitsOfMeasure\WithOOP
 
 
 NoHostedCompiler,TypeProviders01			TypeProviders\Arrays
+NoHostedCompiler,TypeProviders01			TypeProviders\Attributes
 NoHostedCompiler,TypeProviders01			..\..\..\testsprivate\fsharpqa\Source\TypeProviders\BuiltIn\EdmxFile
 NoHostedCompiler,TypeProviders01			TypeProviders\BuiltIn\OdataService\Diagnostics
 NoHostedCompiler,TypeProviders01			TypeProviders\BuiltIn\OdataService\StaticParam
@@ -315,3 +319,4 @@ Misc02			Stress
 Misc02			XmlDoc\Basic
 Misc02			XmlDoc\OCamlDoc
 Misc02			XmlDoc\UnitOfMeasure
+Diagnostics		Diagnostics\General
diff --git a/tests/fsharpqa/Source/test_EnvLst.fs b/tests/fsharpqa/Source/test_EnvLst.fs
new file mode 100644
index 00000000000..ef57fb159e9
--- /dev/null
+++ b/tests/fsharpqa/Source/test_EnvLst.fs
@@ -0,0 +1,31 @@
+module ``FSharpQA-Tests-EnvLst``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open EnvLst
+
+module ParseLine =
+
+    let permutations () =
+        [ TestCaseData("\tSOURCE=a", [ "SOURCE", "a" ])
+          TestCaseData("\tSOURCE=\"a file\"", [ "SOURCE", "a file" ])
+          TestCaseData("\tSOURCE=\"a file with \\\"escaped values\\\" \"", [ "SOURCE", "a file with \\\"escaped values\\\" " ])
+          TestCaseData("\tV1=parse V2=multiple V3=\"values works\"", [ "V1","parse"; "V2","multiple"; "V3","values works" ])
+        ]
+
+    []
+    let ``parse should split vars`` line expected =
+        match line |> EnvLst.parseLine with
+        | Choice2Of2 error -> Assert.Fail(sprintf "expected valid line, but got error '%s'" error)
+        | Choice1Of2 None -> Assert.Fail("expected some vars parsed, but noone found")
+        | Choice1Of2 (Some l) -> 
+            let emptyData = { Tags = []; Vars = []; Comment = None } 
+            let expectedData = EnvLstLine.Data { emptyData with Vars = expected }
+            Assert.IsTrue((l = expectedData), (sprintf "Expected '%A', but was '%A'" expected l))
+
+
+
+
+
diff --git a/tests/fsharpqa/Source/test_simple.fs b/tests/fsharpqa/Source/test_simple.fs
new file mode 100644
index 00000000000..9ea853f302e
--- /dev/null
+++ b/tests/fsharpqa/Source/test_simple.fs
@@ -0,0 +1,168 @@
+module ``FSharp-Tests-Optimize``
+
+open System
+open System.IO
+open NUnit.Framework
+
+open NUnitConf
+open PlatformHelpers
+open FSharpTestSuiteTypes
+
+let runpl = attempt {
+
+    let { Directory = dir; Config = cfg } = FSharpTestSuite.testContext ()
+    let! vars = FSharpQATestSuite.envLstData ()
+
+    printfn "Directory: %s" dir
+    printfn "%A" vars
+
+    let allVars = 
+        vars
+        |> List.append (cfg.EnvironmentVariables |> Map.toList)
+        |> List.append ["FSC_PIPE",   cfg.FSC]
+        |> List.append ["FSI_PIPE",   cfg.FSI] //that should be fsiAnyCpu
+        |> List.append ["FSI32_PIPE", cfg.FSI]
+        |> List.append ["CSC_PIPE",   cfg.CSC]
+        |> List.append ["REDUCED_RUNTIME", "1"] //the peverify it's not implemented
+        |> Map.ofList
+
+    do! RunPl.runpl dir allVars 
+
+    }
+
+
+module Simple = 
+
+    []
+    let ``Simple`` () =
+        runpl |> check 
+
+module Libraries_Core_Collections =
+
+    []
+    let ``Libraries/Core/Collections`` () =
+        runpl |> check 
+
+
+module CompilerOptions_fsc_Removed =
+
+    []
+    let Removed () =
+        runpl |> check 
+
+module CompilerOptions_fsc_checked =
+
+    []
+    let ``checked`` () =
+        runpl |> check 
+
+module CompilerOptions_fsc_cliversion =
+
+    []
+    let cliversion () =
+        runpl |> check 
+
+module CompilerOptions_fsc_codepage =
+
+    []
+    let codepage () =
+        runpl |> check 
+
+module CompilerOptions_fsc_crossoptimize =
+
+    []
+    let crossoptimize () =
+        runpl |> check 
+
+
+module CompilerOptions_fsc_debug =
+
+    []
+    let debug () =
+        runpl |> check 
+
+module CompilerOptions_fsc_dumpAllCommandLineOptions =
+
+    []
+    let dumpAllCommandLineOptions () =
+        runpl |> check 
+
+module CompilerOptions_fsc_flaterrors =
+
+    []
+    let flaterrors () =
+        runpl |> check 
+
+module CompilerOptions_fsc_gccerrors =
+
+    []
+    let gccerrors () =
+        runpl |> check 
+
+module CompilerOptions_fsc_help =
+
+    []
+    let help () =
+        runpl |> check 
+
+module CompilerOptions_fsc_highentropyva =
+
+    []
+    let highentropyva () =
+        runpl |> check 
+
+module CompilerOptions_fsc_invalid =
+
+    []
+    let invalid () =
+        runpl |> check 
+
+module CompilerOptions_fsc_lib =
+
+    []
+    let lib () =
+        runpl |> check 
+
+module CompilerOptions_fsc_noframework =
+
+    []
+    let noframework () =
+        runpl |> check 
+
+module CompilerOptions_fsc_nologo =
+
+    []
+    let nologo () =
+        runpl |> check 
+
+//optimize
+
+
+module CompilerOptions_fsc_out =
+
+    []
+    let ``CompilerOptions/fsc/out`` () =
+        runpl |> check 
+
+//pdb
+//platform
+//reference
+//simpleresolution
+//standalone
+//staticlink
+//subsystemversion
+//tailcalls
+//target
+//times
+//warn
+//warnaserror
+
+module CompilerOptions_fsc_warnon =
+
+    []
+    let ``CompilerOptions/fsc/warnon`` () =
+        runpl |> check 
+
+//win32res
+
+
diff --git a/tests/fsharpqa/testenv/bin/.gitignore b/tests/fsharpqa/testenv/bin/.gitignore
index e766b8d9231..33bea0f1862 100644
--- a/tests/fsharpqa/testenv/bin/.gitignore
+++ b/tests/fsharpqa/testenv/bin/.gitignore
@@ -1,7 +1,8 @@
-FSharp.Compiler.*
-FSharp.Core.*
-HostedCompilerServer.*
-ILComparer.*
-diff.*
-x86
-AMD64
\ No newline at end of file
+/FSharp.Compiler.*
+/FSharp.Core.*
+/HostedCompilerServer.*
+/ILComparer.*
+/diff.*
+/x86/
+/AMD64/
+/nunit/
diff --git a/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx b/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx
index 1b3b05f6487..39803afe2c8 100644
--- a/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx
+++ b/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx
@@ -100,7 +100,7 @@ module FSharpInfo =
 
     // Are we running a CHK build?
     let IsFSharpCompilerDebug () = 
-        let o = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FSharp\4.0\Runtime\v4.0", null, null)
+        let o = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FSharp\4.1\Runtime\v4.0", null, null)
         if o <> null then
             let path = System.IO.Path.Combine( o :?> string, "FSharp.Compiler.dll")
             let asm = System.Reflection.Assembly.LoadFrom(path)
diff --git a/tests/fsharpqa/testenv/src/ExecAssembly/ExecAssembly.fsproj b/tests/fsharpqa/testenv/src/ExecAssembly/ExecAssembly.fsproj
index c3634fa6f1d..c087f1d7d71 100644
--- a/tests/fsharpqa/testenv/src/ExecAssembly/ExecAssembly.fsproj
+++ b/tests/fsharpqa/testenv/src/ExecAssembly/ExecAssembly.fsproj
@@ -13,7 +13,7 @@
     true
     True
     ..\..\..\..\..\$(Configuration)\net40\bin
-    4.4.0.0
+    4.4.1.0
     ExecAssembly
   
   
diff --git a/tests/fsharpqa/testenv/src/ExecAssembly/closed/App.config b/tests/fsharpqa/testenv/src/ExecAssembly/closed/App.config
index 2da6fd3ac61..f37299246de 100644
--- a/tests/fsharpqa/testenv/src/ExecAssembly/closed/App.config
+++ b/tests/fsharpqa/testenv/src/ExecAssembly/closed/App.config
@@ -11,8 +11,8 @@
             publicKeyToken="b03f5f7f11d50a3a"
             culture="neutral"/>
           
+            oldVersion="2.0.0.0-4.4.0.0"
+            newVersion="4.4.1.0"/>
         
       
     
diff --git a/tests/fsharpqa/testenv/src/ExecAssembly/open/App.config b/tests/fsharpqa/testenv/src/ExecAssembly/open/App.config
index 244c0243fa1..abd7174cadd 100644
--- a/tests/fsharpqa/testenv/src/ExecAssembly/open/App.config
+++ b/tests/fsharpqa/testenv/src/ExecAssembly/open/App.config
@@ -11,8 +11,8 @@
             publicKeyToken="b03f5f7f11d50a3a"
             culture="neutral"/>
           
+            oldVersion="2.0.0.0-4.4.1.0"
+            newVersion="4.4.1.9055"/>
         
       
     
diff --git a/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs b/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs
index 9cf04457823..0aa7ac3bb42 100644
--- a/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs
+++ b/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs
@@ -50,9 +50,9 @@ type FscCompiler() =
         }
 
     /// converts short and long issue types to the same CompilationIssue reprsentation
-    let convert (issue : Microsoft.FSharp.Compiler.Build.ErrorOrWarning) : CompilationIssue = 
+    let convert issue : CompilationIssue = 
         match issue with
-        | Microsoft.FSharp.Compiler.Build.ErrorOrWarning.Short(isError, text) -> 
+        | Microsoft.FSharp.Compiler.CompileOps.ErrorOrWarning.Short(isError, text) -> 
             {
                 Location = emptyLocation
                 Code = ""
@@ -61,7 +61,7 @@ type FscCompiler() =
                 Text = text
                 Type = if isError then CompilationIssueType.Error else CompilationIssueType.Warning
             }
-        | Microsoft.FSharp.Compiler.Build.ErrorOrWarning.Long(isError, details) ->
+        | Microsoft.FSharp.Compiler.CompileOps.ErrorOrWarning.Long(isError, details) ->
             let loc, file = 
                 match details.Location with
                 | Some l when not l.IsEmpty -> 
diff --git a/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/FSharp.Compiler.Hosted.fsproj b/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/FSharp.Compiler.Hosted.fsproj
index 089587ca086..2e22a5b0bd1 100644
--- a/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/FSharp.Compiler.Hosted.fsproj
+++ b/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/FSharp.Compiler.Hosted.fsproj
@@ -15,7 +15,7 @@
     ..\..\..\..\..\$(Configuration)\net40\bin
     $(OtherFlags) --delaysign+ --keyfile:"..\..\bin\msft.pubkey"
     $(OtherFlags) --delaysign+ --keyfile:"..\..\..\..\..\src\fsharp\msft.pubkey"
-    4.4.0.0
+    4.4.1.0
     FSharp.Compiler.Hosted
   
   
diff --git a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj
index 8683f6b3886..2cb0144988d 100644
--- a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj
+++ b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj
@@ -13,7 +13,7 @@
     true
     True
     ..\..\..\..\..\$(Configuration)\net40\bin
-    4.4.0.0
+    4.4.1.0
     HostedCompilerServer
   
   
diff --git a/tests/fsharpqa/testenv/src/ILComparer/ILComparer.fsproj b/tests/fsharpqa/testenv/src/ILComparer/ILComparer.fsproj
index 256fc7b80fc..99db1da8c19 100644
--- a/tests/fsharpqa/testenv/src/ILComparer/ILComparer.fsproj
+++ b/tests/fsharpqa/testenv/src/ILComparer/ILComparer.fsproj
@@ -13,7 +13,7 @@
     true
     True
     ..\..\..\..\..\$(Configuration)\net40\bin
-    4.4.0.0
+    4.4.1.0
     HostedCompilerServer
   
   
diff --git a/tests/fsharpqa/testenv/src/ILComparer/Program.fs b/tests/fsharpqa/testenv/src/ILComparer/Program.fs
index d7abc7929a2..1b2d33b24c3 100644
--- a/tests/fsharpqa/testenv/src/ILComparer/Program.fs
+++ b/tests/fsharpqa/testenv/src/ILComparer/Program.fs
@@ -19,10 +19,9 @@ let main (argv : string array) =
     let f1 = File2List fn1
     let f2 = File2List fn2
 
-    let mutable i = 0
-    let compare (f1:string list) (f2:string list) =
-        try
-            List.forall2 (fun (a:string) (b:string) ->
+    let rec compareAux (f1:string list) (f2:string list) i =
+        match f1, f2 with 
+        | a :: resta, b :: restb -> 
                 let aa = Regex.Replace(a, @"(.*\.line[^'$]*)('.+)?", "$1")
                 let bb = Regex.Replace(b, @"(.*\.line[^'$]*)('.+)?", "$1")
 
@@ -47,15 +46,28 @@ let main (argv : string array) =
                 let aa = Regex.Replace(aa, @"^\s+", "")
                 let bb = Regex.Replace(bb, @"^\s+", "")
 
-                i <- i + 1
                 if ((if Regex.IsMatch(aa, @"^[ \t]*//") then "//" else aa) = (if Regex.IsMatch(bb, @"^[ \t]*//") then "//" else bb)) then
-                    true
+                    compareAux resta restb (i+1)
                 else
                     printfn "Files differ at line %d:" i
-                    printfn "\t>> %s" a
-                    printfn "\t<< %s" b
+                    for x in (a::resta) do printfn "\t>> %s" x
+                    for x in (b::restb) do printfn "\t<< %s" x
+                    false
+        | [], b :: restb -> 
+                    printfn "Files differ at line %d:" i
+                    printfn "\t>> %s" "EOF"
+                    for x in (b::restb) do printfn "\t<< %s" x
                     false
-            ) f1 f2
+        | a :: resta, [] -> 
+                    printfn "Files differ at line %d:" i
+                    for x in (a::resta) do printfn "\t>> %s" x
+                    printfn "\t<< %s" "EOF"
+                    false
+        | [], [] -> true
+
+    let compare f1 f2 =
+        try
+           compareAux f1 f2 1
         with
         | e ->
             printfn "%s" (e.ToString())
diff --git a/tests/fsharpqa/testenv/src/diff/diff.fsproj b/tests/fsharpqa/testenv/src/diff/diff.fsproj
index ea81676500f..cb79fba9f13 100644
--- a/tests/fsharpqa/testenv/src/diff/diff.fsproj
+++ b/tests/fsharpqa/testenv/src/diff/diff.fsproj
@@ -13,7 +13,7 @@
     true
     True
     ..\..\..\..\..\$(Configuration)\net40\bin
-    4.4.0.0
+    4.4.1.0
     HostedCompilerServer
   
   
diff --git a/tests/fsharpqa/testenv/src/nunit/nunit-console-x86.exe.config b/tests/fsharpqa/testenv/src/nunit/nunit-console-x86.exe.config
new file mode 100644
index 00000000000..5120c0dc91d
--- /dev/null
+++ b/tests/fsharpqa/testenv/src/nunit/nunit-console-x86.exe.config
@@ -0,0 +1,24 @@
+
+
+
+    
+        
+    
+	
+		
+		
+		
+		
+		
+		
+			
+		
+	
+
diff --git a/tests/fsharpqa/testenv/src/nunit/nunit-console.exe.config b/tests/fsharpqa/testenv/src/nunit/nunit-console.exe.config
new file mode 100644
index 00000000000..22ef7d3b63d
--- /dev/null
+++ b/tests/fsharpqa/testenv/src/nunit/nunit-console.exe.config
@@ -0,0 +1,24 @@
+
+
+	
+    
+        
+    
+	
+		
+		
+		
+		
+		
+		
+			
+		
+	
+
diff --git a/tests/service/Common.fs b/tests/service/Common.fs
new file mode 100644
index 00000000000..ca2f411ab3a
--- /dev/null
+++ b/tests/service/Common.fs
@@ -0,0 +1,171 @@
+module internal FSharp.Compiler.Service.Tests.Common
+
+open System.IO
+open System.Collections.Generic
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.SourceCodeServices
+
+// Create one global interactive checker instance 
+let checker = FSharpChecker.Create()
+
+let parseAndTypeCheckFileInProject (file, input) = 
+    let checkOptions = checker.GetProjectOptionsFromScript(file, input) |> Async.RunSynchronously
+    let parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, input, checkOptions) |> Async.RunSynchronously
+    match typedRes with
+    | FSharpCheckFileAnswer.Succeeded(res) -> parseResult, res
+    | res -> failwithf "Parsing did not finish... (%A)" res
+
+type TempFile(ext, contents) = 
+    let tmpFile =  Path.ChangeExtension(System.IO.Path.GetTempFileName() , ext)
+    do File.WriteAllText(tmpFile, contents)
+    interface System.IDisposable with 
+        member x.Dispose() = try File.Delete tmpFile with _ -> ()
+    member x.Name = tmpFile
+
+#nowarn "57"
+
+let getBackgroundParseResultsForScriptText (input) = 
+    use file =  new TempFile("fsx", input)
+    let checkOptions = checker.GetProjectOptionsFromScript(file.Name, input) |> Async.RunSynchronously
+    checker.GetBackgroundParseResultsForFileInProject(file.Name, checkOptions)  |> Async.RunSynchronously
+
+
+let getBackgroundCheckResultsForScriptText (input) = 
+    use file =  new TempFile("fsx", input)
+    let checkOptions = checker.GetProjectOptionsFromScript(file.Name, input) |> Async.RunSynchronously
+    checker.GetBackgroundCheckResultsForFileInProject(file.Name, checkOptions) |> Async.RunSynchronously
+
+
+let sysLib nm = 
+    if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows 
+        @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\" + nm + ".dll"
+    else
+        let sysDir = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
+        let (++) a b = System.IO.Path.Combine(a,b)
+        sysDir ++ nm + ".dll" 
+
+let fsCoreDefaultReference() = 
+    UnitTests.TestLib.Utils.Helpers.PathRelativeToTestAssembly "FSharp.Core.dll"
+    // if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows 
+    //    @"C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll"  
+    //else 
+    //    sysLib "FSharp.Core"
+
+
+let mkProjectCommandLineArgs (dllName, fileNames) = 
+    [|  yield "--simpleresolution" 
+        yield "--noframework" 
+        yield "--debug:full" 
+        yield "--define:DEBUG" 
+        yield "--optimize-" 
+        yield "--out:" + dllName
+        yield "--doc:test.xml" 
+        yield "--warn:3" 
+        yield "--fullpaths" 
+        yield "--flaterrors" 
+        yield "--target:library" 
+        for x in fileNames do 
+            yield x
+        let references = 
+            [ yield sysLib "mscorlib"
+              yield sysLib "System"
+              yield sysLib "System.Core"
+              yield fsCoreDefaultReference() ]
+        for r in references do
+                yield "-r:" + r |]
+
+/// Extract range info 
+let tups (m:Range.range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn)
+
+/// Extract range info  and convert to zero-based line  - please don't use this one any more
+let tupsZ (m:Range.range) = (m.StartLine-1, m.StartColumn), (m.EndLine-1, m.EndColumn)
+
+let attribsOfSymbolUse (s:FSharpSymbolUse) = 
+    [ if s.IsFromDefinition then yield "defn" 
+      if s.IsFromType then yield "type"
+      if s.IsFromAttribute then yield "attribute"
+      if s.IsFromDispatchSlotImplementation then yield "override"
+      if s.IsFromPattern then yield "pattern" 
+      if s.IsFromComputationExpression then yield "compexpr" ] 
+
+let attribsOfSymbol (s:FSharpSymbol) = 
+    [ match s with 
+        | :? FSharpField as v -> 
+            yield "field"
+            if v.IsCompilerGenerated then yield "compgen"
+            if v.IsDefaultValue then yield "default"
+            if v.IsMutable then yield "mutable"
+            if v.IsVolatile then yield "volatile"
+            if v.IsStatic then yield "static"
+            if v.IsLiteral then yield sprintf "%A" v.LiteralValue.Value
+
+
+        | :? FSharpEntity as v -> 
+            v.TryFullName |> ignore // check there is no failure here
+            if v.IsNamespace then yield "namespace"
+            if v.IsFSharpModule then yield "module"
+            if v.IsByRef then yield "byref"
+            if v.IsClass then yield "class"
+            if v.IsDelegate then yield "delegate"
+            if v.IsEnum then yield "enum"
+            if v.IsFSharpAbbreviation then yield "abbrev"
+            if v.IsFSharpExceptionDeclaration then yield "exn"
+            if v.IsFSharpRecord then yield "record"
+            if v.IsFSharpUnion then yield "union"
+            if v.IsInterface then yield "interface"
+            if v.IsMeasure then yield "measure"
+            if v.IsProvided then yield "provided"
+            if v.IsStaticInstantiation then yield "staticinst"
+            if v.IsProvidedAndErased then yield "erased"
+            if v.IsProvidedAndGenerated then yield "generated"
+            if v.IsUnresolved then yield "unresolved"
+            if v.IsValueType then yield "valuetype"
+
+        | :? FSharpMemberOrFunctionOrValue as v -> 
+            if v.IsActivePattern then yield "apat"
+            if v.IsDispatchSlot then yield "slot"
+            if v.IsModuleValueOrMember && not v.IsMember then yield "val"
+            if v.IsMember then yield "member"
+            if v.IsProperty then yield "prop"
+            if v.IsExtensionMember then yield "extmem"
+            if v.IsPropertyGetterMethod then yield "getter"
+            if v.IsPropertySetterMethod then yield "setter"
+            if v.IsEvent then yield "event"
+            if v.EventForFSharpProperty.IsSome then yield "clievent"
+            if v.IsEventAddMethod then yield "add"
+            if v.IsEventRemoveMethod then yield "remove"
+            if v.IsTypeFunction then yield "typefun"
+            if v.IsCompilerGenerated then yield "compgen"
+            if v.IsImplicitConstructor then yield "ctor"
+            if v.IsMutable then yield "mutable" 
+            if v.IsOverrideOrExplicitInterfaceImplementation then yield "overridemem"
+            if v.IsInstanceMember && not v.IsInstanceMemberInCompiledCode && not v.IsExtensionMember then yield "funky"
+            if v.IsExplicitInterfaceImplementation then yield "intfmem"
+//            if v.IsConstructorThisValue then yield "ctorthis"
+//            if v.IsMemberThisValue then yield "this"
+//            if v.LiteralValue.IsSome then yield "literal"
+        | _ -> () ]
+
+let rec allSymbolsInEntities compGen (entities: IList) = 
+    [ for e in entities do 
+          yield (e :> FSharpSymbol) 
+          for gp in e.GenericParameters do 
+            if compGen || not gp.IsCompilerGenerated then 
+             yield (gp :> FSharpSymbol)
+          for x in e.MembersFunctionsAndValues do
+             if compGen || not x.IsCompilerGenerated then 
+               yield (x :> FSharpSymbol)
+             for gp in x.GenericParameters do 
+              if compGen || not gp.IsCompilerGenerated then 
+               yield (gp :> FSharpSymbol)
+          for x in e.UnionCases do
+             yield (x :> FSharpSymbol)
+             for f in x.UnionCaseFields do
+                 if compGen || not f.IsCompilerGenerated then 
+                     yield (f :> FSharpSymbol)
+          for x in e.FSharpFields do
+             if compGen || not x.IsCompilerGenerated then 
+                 yield (x :> FSharpSymbol)
+          yield! allSymbolsInEntities compGen e.NestedEntities ]
+
+
diff --git a/tests/service/EditorTests.fs b/tests/service/EditorTests.fs
new file mode 100644
index 00000000000..c198d23faef
--- /dev/null
+++ b/tests/service/EditorTests.fs
@@ -0,0 +1,521 @@
+
+#if INTERACTIVE
+#r "../../Debug/net40/bin/FSharp.LanguageService.Compiler.dll"
+#r "../../Debug/net40/bin/nunit.framework.dll"
+#load "FsUnit.fs"
+#load "Common.fs"
+#else
+module Tests.Service.Editor
+#endif
+
+open NUnit.Framework
+open FsUnit
+open System
+open System.IO
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.SourceCodeServices
+open FSharp.Compiler.Service.Tests.Common
+
+
+let input = 
+  """
+  open System
+
+  let foo() = 
+    let msg = String.Concat("Hello"," ","world")
+    if true then 
+      printfn "%s" msg.
+  """
+
+[]
+let ``Intro test`` () = 
+
+    // Split the input & define file name
+    let inputLines = input.Split('\n')
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults =  parseAndTypeCheckFileInProject(file, input) 
+    let identToken = FSharpTokenTag.IDENT
+
+    // We only expect one reported error. However,
+    // on Unix, using filenames like /home/user/Test.fsx gives a second copy of all parse errors due to the
+    // way the load closure for scripts is generated. So this returns two identical errors
+    (match typeCheckResults.Errors.Length with 1 | 2 -> true | _ -> false)  |> shouldEqual true
+
+    // So we check that the messages are the same
+    for msg in typeCheckResults.Errors do 
+        printfn "Good! got an error, hopefully with the right text: %A" msg
+        msg.Message.Contains("Missing qualification after '.'") |> shouldEqual true
+
+    // Get tool tip at the specified location
+    let tip = typeCheckResults.GetToolTipTextAlternate(4, 7, inputLines.[1], ["foo"], identToken) |> Async.RunSynchronously
+    // Get declarations (autocomplete) for a location
+    let decls =  typeCheckResults.GetDeclarationListInfo(Some untyped, 7, 23, inputLines.[6], [], "msg", fun _ -> false)|> Async.RunSynchronously
+    [ for item in decls.Items -> item.Name ] |> shouldEqual
+          ["Chars"; "Clone"; "CompareTo"; "Contains"; "CopyTo"; "EndsWith"; "Equals";
+           "GetEnumerator"; "GetHashCode"; "GetType"; "GetTypeCode"; "IndexOf";
+           "IndexOfAny"; "Insert"; "IsNormalized"; "LastIndexOf"; "LastIndexOfAny";
+           "Length"; "Normalize"; "PadLeft"; "PadRight"; "Remove"; "Replace"; "Split";
+           "StartsWith"; "Substring"; "ToCharArray"; "ToLower"; "ToLowerInvariant";
+           "ToString"; "ToUpper"; "ToUpperInvariant"; "Trim"; "TrimEnd"; "TrimStart"]
+    // Get overloads of the String.Concat method
+    let methods = typeCheckResults.GetMethodsAlternate(5, 27, inputLines.[4], Some ["String"; "Concat"]) |> Async.RunSynchronously
+
+    methods.MethodName  |> shouldEqual "Concat"
+
+    // Print concatenated parameter lists
+    [ for mi in methods.Methods do
+        yield methods.MethodName , [ for p in mi.Parameters do yield p.Display ] ]
+        |> shouldEqual
+              [("Concat", ["[] args: obj []"]);
+               ("Concat", ["[] values: string []"]);
+               ("Concat", ["values: Collections.Generic.IEnumerable<'T>"]);
+               ("Concat", ["values: Collections.Generic.IEnumerable"]);
+               ("Concat", ["arg0: obj"]); ("Concat", ["arg0: obj"; "arg1: obj"]);
+               ("Concat", ["str0: string"; "str1: string"]);
+               ("Concat", ["arg0: obj"; "arg1: obj"; "arg2: obj"]);
+               ("Concat", ["str0: string"; "str1: string"; "str2: string"]);
+               ("Concat", ["arg0: obj"; "arg1: obj"; "arg2: obj"; "arg3: obj"]);
+               ("Concat", ["str0: string"; "str1: string"; "str2: string"; "str3: string"])]
+
+[]
+let ``GetMethodsAsSymbols should return all overloads of a method as FSharpSymbolUse`` () =
+
+    let extractCurriedParams (symbol:FSharpSymbolUse) =
+        match symbol.Symbol with
+        | :? FSharpMemberOrFunctionOrValue as mvf ->
+            [for pg in mvf.CurriedParameterGroups do 
+                for (p:FSharpParameter) in pg do 
+                    yield p.DisplayName, p.Type.Format (symbol.DisplayContext)]
+        | _ -> []
+
+    // Split the input & define file name
+    let inputLines = input.Split('\n')
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults =  parseAndTypeCheckFileInProject(file, input)
+    let methodsSymbols = typeCheckResults.GetMethodsAsSymbols(5, 27, inputLines.[4], ["String"; "Concat"]) |> Async.RunSynchronously
+    match methodsSymbols with
+    | Some methods ->
+        [ for ms in methods do
+            yield ms.Symbol.DisplayName, extractCurriedParams ms ]
+        |> List.sortBy (fun (_name, parameters) -> parameters.Length, (parameters |> List.map snd ))
+        |> shouldEqual
+            [("Concat", [("values", "Collections.Generic.IEnumerable<'T>")]);
+             ("Concat", [("values", "Collections.Generic.IEnumerable")]);
+             ("Concat", [("arg0", "obj")]);
+             ("Concat", [("args", "obj []")]);
+             ("Concat", [("values", "string []")]);
+             ("Concat", [("arg0", "obj"); ("arg1", "obj")]);
+             ("Concat", [("str0", "string"); ("str1", "string")]);
+             ("Concat", [("arg0", "obj"); ("arg1", "obj"); ("arg2", "obj")]);
+             ("Concat", [("str0", "string"); ("str1", "string"); ("str2", "string")]);
+             ("Concat", [("arg0", "obj"); ("arg1", "obj"); ("arg2", "obj"); ("arg3", "obj")]);
+             ("Concat", [("str0", "string"); ("str1", "string"); ("str2", "string"); ("str3", "string")])]
+    | None -> failwith "No symbols returned"
+
+
+let input2 = 
+        """
+[]
+let foo(x, y) = 
+    let msg = String.Concat("Hello"," ","world")
+    if true then 
+        printfn "x = %d, y = %d" x y 
+        printfn "%s" msg
+
+type C() = 
+    member x.P = 1
+        """
+
+[]
+let ``Symbols basic test`` () = 
+
+    let file = "/home/user/Test.fsx"
+    let untyped2, typeCheckResults2 = parseAndTypeCheckFileInProject(file, input2)
+
+    let partialAssemblySignature = typeCheckResults2.PartialAssemblySignature
+    
+    partialAssemblySignature.Entities.Count |> shouldEqual 1  // one entity
+
+[]
+let ``Symbols many tests`` () = 
+
+    let file = "/home/user/Test.fsx"
+    let untyped2, typeCheckResults2 = parseAndTypeCheckFileInProject(file, input2)
+
+    let partialAssemblySignature = typeCheckResults2.PartialAssemblySignature
+    
+    partialAssemblySignature.Entities.Count |> shouldEqual 1  // one entity
+    let moduleEntity = partialAssemblySignature.Entities.[0]
+
+    moduleEntity.DisplayName |> shouldEqual "Test"
+
+    let classEntity = moduleEntity.NestedEntities.[0]
+
+    let fnVal = moduleEntity.MembersFunctionsAndValues.[0]
+
+    fnVal.Accessibility.IsPublic |> shouldEqual true
+    fnVal.Attributes.Count |> shouldEqual 1
+    fnVal.CurriedParameterGroups.Count |> shouldEqual 1
+    fnVal.CurriedParameterGroups.[0].Count |> shouldEqual 2
+    fnVal.CurriedParameterGroups.[0].[0].Name.IsSome |> shouldEqual true
+    fnVal.CurriedParameterGroups.[0].[1].Name.IsSome |> shouldEqual true
+    fnVal.CurriedParameterGroups.[0].[0].Name.Value |> shouldEqual "x"
+    fnVal.CurriedParameterGroups.[0].[1].Name.Value |> shouldEqual "y"
+    fnVal.DeclarationLocation.StartLine |> shouldEqual 3
+    fnVal.DisplayName |> shouldEqual "foo"
+    fnVal.EnclosingEntity.DisplayName |> shouldEqual "Test"
+    fnVal.EnclosingEntity.DeclarationLocation.StartLine |> shouldEqual 1
+    fnVal.GenericParameters.Count |> shouldEqual 0
+    fnVal.InlineAnnotation |> shouldEqual FSharpInlineAnnotation.OptionalInline
+    fnVal.IsActivePattern |> shouldEqual false
+    fnVal.IsCompilerGenerated |> shouldEqual false
+    fnVal.IsDispatchSlot |> shouldEqual false
+    fnVal.IsExtensionMember |> shouldEqual false
+    fnVal.IsPropertyGetterMethod |> shouldEqual false
+    fnVal.IsImplicitConstructor |> shouldEqual false
+    fnVal.IsInstanceMember |> shouldEqual false
+    fnVal.IsMember |> shouldEqual false
+    fnVal.IsModuleValueOrMember |> shouldEqual true
+    fnVal.IsMutable |> shouldEqual false
+    fnVal.IsPropertySetterMethod |> shouldEqual false
+    fnVal.IsTypeFunction |> shouldEqual false
+
+    fnVal.FullType.IsFunctionType |> shouldEqual true // int * int -> unit
+    fnVal.FullType.GenericArguments.[0].IsTupleType |> shouldEqual true // int * int 
+    let argTy1 = fnVal.FullType.GenericArguments.[0].GenericArguments.[0]
+
+    argTy1.TypeDefinition.DisplayName |> shouldEqual "int" // int
+
+    argTy1.HasTypeDefinition |> shouldEqual true
+    argTy1.TypeDefinition.IsFSharpAbbreviation |> shouldEqual true // "int"
+
+    let argTy1b = argTy1.TypeDefinition.AbbreviatedType
+    argTy1b.TypeDefinition.Namespace |> shouldEqual (Some "Microsoft.FSharp.Core")
+    argTy1b.TypeDefinition.CompiledName |> shouldEqual "int32" 
+
+    let argTy1c = argTy1b.TypeDefinition.AbbreviatedType
+    argTy1c.TypeDefinition.Namespace |> shouldEqual (Some "System")
+    argTy1c.TypeDefinition.CompiledName |> shouldEqual "Int32" 
+
+    let typeCheckContext = typeCheckResults2.ProjectContext
+    
+    typeCheckContext.GetReferencedAssemblies() |> List.exists (fun s -> s.FileName.Value.Contains("mscorlib")) |> shouldEqual true
+    
+
+let input3 = 
+  """
+let date = System.DateTime.Now.ToString().PadRight(25)
+  """
+
+[]
+let ``Expression typing test`` () = 
+
+    // Split the input & define file name
+    let inputLines = input3.Split('\n')
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults =  parseAndTypeCheckFileInProject(file, input3) 
+    let identToken = FSharpTokenTag.IDENT
+
+    // We only expect one reported error. However,
+    // on Unix, using filenames like /home/user/Test.fsx gives a second copy of all parse errors due to the
+    // way the load closure for scripts is generated. So this returns two identical errors
+    typeCheckResults.Errors.Length |> shouldEqual 0
+
+    // Get declarations (autocomplete) for a location
+    //
+    // Getting the declarations at columns 42 to 43 with [], "" for the names and residue 
+    // gives the results for the string type. 
+    // 
+    for col in 42..43 do 
+        let decls =  typeCheckResults.GetDeclarationListInfo(Some untyped, 2, col, inputLines.[1], [], "", fun _ -> false)|> Async.RunSynchronously
+        set [ for item in decls.Items -> item.Name ] |> shouldEqual
+           (set
+              ["Chars"; "Clone"; "CompareTo"; "Contains"; "CopyTo"; "EndsWith"; "Equals";
+               "GetEnumerator"; "GetHashCode"; "GetType"; "GetTypeCode"; "IndexOf";
+               "IndexOfAny"; "Insert"; "IsNormalized"; "LastIndexOf"; "LastIndexOfAny";
+               "Length"; "Normalize"; "PadLeft"; "PadRight"; "Remove"; "Replace"; "Split";
+               "StartsWith"; "Substring"; "ToCharArray"; "ToLower"; "ToLowerInvariant";
+               "ToString"; "ToUpper"; "ToUpperInvariant"; "Trim"; "TrimEnd"; "TrimStart"])
+
+// The underlying problem is that the parser error recovery doesn't include _any_ information for
+// the incomplete member:
+//    member x.Test = 
+
+[]
+let ``Find function from member 1`` () = 
+    let input = 
+      """
+type Test() = 
+    let abc a b c = a + b + c
+    member x.Test = """ 
+
+    // Split the input & define file name
+    let inputLines = input.Split('\n')
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults =  parseAndTypeCheckFileInProject(file, input) 
+
+    let decls = typeCheckResults.GetDeclarationListInfo(Some untyped, 4, 21, inputLines.[3], [], "", fun _ -> false)|> Async.RunSynchronously
+    let item = decls.Items |> Array.tryFind (fun d -> d.Name = "abc")
+    match item with
+    | Some item -> 
+       printf "%s" item.Name
+    | _ -> ()
+    decls.Items |> Seq.exists (fun d -> d.Name = "abc") |> shouldEqual true
+
+[]
+let ``Find function from member 2`` () = 
+    let input = 
+      """
+type Test() = 
+    let abc a b c = a + b + c
+    member x.Test = a""" 
+
+    // Split the input & define file name
+    let inputLines = input.Split('\n')
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults =  parseAndTypeCheckFileInProject(file, input) 
+
+    let decls = typeCheckResults.GetDeclarationListInfo(Some untyped, 4, 22, inputLines.[3], [], "", fun _ -> false)|> Async.RunSynchronously
+    let item = decls.Items |> Array.tryFind (fun d -> d.Name = "abc")
+    match item with
+    | Some item -> 
+       printf "%s" item.Name
+    | _ -> ()
+    decls.Items |> Seq.exists (fun d -> d.Name = "abc") |> shouldEqual true
+ 
+[]
+let ``Find function from var`` () = 
+    let input = 
+      """
+type Test() = 
+    let abc a b c = a + b + c
+    let test = """ 
+
+    // Split the input & define file name
+    let inputLines = input.Split('\n')
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults =  parseAndTypeCheckFileInProject(file, input) 
+
+    let decls = typeCheckResults.GetDeclarationListInfo(Some untyped, 4, 15, inputLines.[3], [], "", fun _ -> false)|> Async.RunSynchronously
+    decls.Items |> Seq.exists (fun d -> d.Name = "abc") |> shouldEqual true
+
+[]
+let ``Symbol based find function from member 1`` () = 
+    let input = 
+      """
+type Test() = 
+    let abc a b c = a + b + c
+    member x.Test = """ 
+
+    // Split the input & define file name
+    let inputLines = input.Split('\n')
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults =  parseAndTypeCheckFileInProject(file, input) 
+
+    let decls = typeCheckResults.GetDeclarationListSymbols(Some untyped, 4, 21, inputLines.[3], [], "", fun _ -> false)|> Async.RunSynchronously
+    let item = decls |> List.tryFind (fun d -> d.Head.Symbol.DisplayName = "abc")
+    match item with
+    | Some items -> 
+       for symbolUse in items do
+           printf "%s" symbolUse.Symbol.DisplayName
+    | _ -> ()
+    decls |> Seq.exists (fun d -> d.Head.Symbol.DisplayName = "abc") |> shouldEqual true
+
+[]
+let ``Symbol based find function from member 2`` () = 
+    let input = 
+      """
+type Test() = 
+    let abc a b c = a + b + c
+    member x.Test = a""" 
+
+    // Split the input & define file name
+    let inputLines = input.Split('\n')
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults =  parseAndTypeCheckFileInProject(file, input) 
+
+    let decls = typeCheckResults.GetDeclarationListSymbols(Some untyped, 4, 22, inputLines.[3], [], "", fun _ -> false)|> Async.RunSynchronously
+    let item = decls |> List.tryFind (fun d -> d.Head.Symbol.DisplayName = "abc")
+    match item with
+    | Some items -> 
+       for symbolUse in items do
+           printf "%s" symbolUse.Symbol.DisplayName
+    | _ -> ()
+    decls |> Seq.exists (fun d -> d.Head.Symbol.DisplayName = "abc") |> shouldEqual true
+    true |> should equal true
+
+[]
+let ``Symbol based find function from var`` () = 
+    let input = 
+      """
+type Test() = 
+    let abc a b c = a + b + c
+    let test = """ 
+
+    // Split the input & define file name
+    let inputLines = input.Split('\n')
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults =  parseAndTypeCheckFileInProject(file, input) 
+
+    let decls = typeCheckResults.GetDeclarationListSymbols(Some untyped, 4, 15, inputLines.[3], [], "", fun _ -> false)|> Async.RunSynchronously
+    decls|> Seq .exists (fun d -> d.Head.Symbol.DisplayName = "abc") |> shouldEqual true
+
+[]
+let ``Printf specifiers for regular and verbatim strings`` () = 
+    let input = 
+      """
+let _ = Microsoft.FSharp.Core.Printf.printf "%A" 0
+let _ = Printf.printf "%A" 0
+let _ = Printf.kprintf (fun _ -> ()) "%A" 1
+let _ = Printf.bprintf null "%A" 1
+let _ = sprintf "%*d" 1
+let _ = sprintf "%7.1f" 1.0
+let _ = sprintf "%-8.1e+567" 1.0
+let _ = sprintf @"%-5s" "value"
+let _ = printfn @"%-A" -10
+let _ = printf @"
+            %-O" -10
+let _ = sprintf "
+
+            %-O" -10
+let _ = List.map (sprintf @"%A
+                           ")
+let _ = (10, 12) ||> sprintf "%A
+                              %O"
+let _ = sprintf "\n%-8.1e+567" 1.0
+let _ = sprintf @"%O\n%-5s" "1" "2" """
+
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults = parseAndTypeCheckFileInProject(file, input) 
+
+    typeCheckResults.Errors |> shouldEqual [||]
+    typeCheckResults.GetFormatSpecifierLocations() 
+    |> Array.map (fun range -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn)
+    |> shouldEqual [|(2, 45, 2, 46); 
+                     (3, 23, 3, 24); 
+                     (4, 38, 4, 39); 
+                     (5, 29, 5, 30); 
+                     (6, 17, 6, 19);
+                     (7, 17, 7, 21); 
+                     (8, 17, 8, 22);
+                     (9, 18, 9, 21); 
+                     (10, 18, 10, 20);
+                     (12, 12, 12, 14); 
+                     (15, 12, 15, 14);
+                     (16, 28, 16, 29); 
+                     (18, 30, 18, 31);
+                     (19, 30, 19, 31);
+                     (20, 19, 20, 24); 
+                     (21, 18, 21, 19); (21, 22, 21, 25)|]
+
+[]
+let ``Printf specifiers for triple-quote strings`` () = 
+    let input = 
+      "
+let _ = sprintf \"\"\"%-A\"\"\" -10
+let _ = printfn \"\"\"
+            %-A
+                \"\"\" -10
+let _ = List.iter(printfn \"\"\"%-A
+                             %i\\n%O
+                             \"\"\" 1 2)"
+
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults = parseAndTypeCheckFileInProject(file, input) 
+
+    typeCheckResults.Errors |> shouldEqual [||]
+    typeCheckResults.GetFormatSpecifierLocations() 
+    |> Array.map (fun range -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn)
+    |> shouldEqual [|(2, 19, 2, 21);
+                     (4, 12, 4, 14);
+                     (6, 29, 6, 31);
+                     (7, 29, 7, 30); (7, 33, 7, 34)|]
+ 
+[]
+let ``Printf specifiers for user-defined functions`` () = 
+    let input = 
+      """
+let debug msg = Printf.kprintf System.Diagnostics.Debug.WriteLine msg
+let _ = debug "Message: %i - %O" 1 "Ok"
+let _ = debug "[LanguageService] Type checking fails for '%s' with content=%A and %A.\nResulting exception: %A" "1" "2" "3" "4"
+"""
+
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults = parseAndTypeCheckFileInProject(file, input) 
+
+    typeCheckResults.Errors |> shouldEqual [||]
+    typeCheckResults.GetFormatSpecifierLocations() 
+    |> Array.map (fun range -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn)
+    |> shouldEqual [|(3, 24, 3, 25); 
+                     (3, 29, 3, 30);
+                     (4, 58, 4, 59); (4, 75, 4, 76); (4, 82, 4, 83); (4, 108, 4, 109)|]
+
+[]
+let ``should not report format specifiers for illformed format strings`` () = 
+    let input = 
+      """
+let _ = sprintf "%.7f %7.1A %7.f %--8.1f"
+let _ = sprintf "%%A"
+let _ = sprintf "ABCDE"
+"""
+
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults = parseAndTypeCheckFileInProject(file, input) 
+    typeCheckResults.GetFormatSpecifierLocations() 
+    |> Array.map (fun range -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn)
+    |> shouldEqual [||]
+
+[]
+let ``Single case discreminated union type definition`` () = 
+    let input = 
+      """
+type DU = Case1
+"""
+
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults = parseAndTypeCheckFileInProject(file, input) 
+    typeCheckResults.GetAllUsesOfAllSymbolsInFile()
+    |> Async.RunSynchronously
+    |> Array.map (fun su -> 
+        let r = su.RangeAlternate 
+        r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)
+    |> shouldEqual [|(2, 10, 2, 15); (2, 5, 2, 7); (1, 0, 1, 0)|]
+
+[]
+let ``Synthetic symbols should not be reported`` () = 
+    let input = 
+      """
+let arr = [|1|]
+let number1, number2 = 1, 2
+let _ = arr.[0..number1]
+let _ = arr.[..number2]
+"""
+
+    let file = "/home/user/Test.fsx"
+    let untyped, typeCheckResults = parseAndTypeCheckFileInProject(file, input) 
+    typeCheckResults.GetAllUsesOfAllSymbolsInFile()
+    |> Async.RunSynchronously
+    |> Array.map (fun su -> 
+        let r = su.RangeAlternate 
+        su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn))
+    |> shouldEqual 
+        [|("val arr", (2, 4, 2, 7)); 
+          ("val number2", (3, 13, 3, 20));
+          ("val number1", (3, 4, 3, 11)); 
+          ("val arr", (4, 8, 4, 11));
+          ("OperatorIntrinsics", (4, 11, 4, 12)); 
+          ("Operators", (4, 11, 4, 12));
+          ("Core", (4, 11, 4, 12)); 
+          ("FSharp", (4, 11, 4, 12));
+          ("Microsoft", (4, 11, 4, 12)); 
+          ("val number1", (4, 16, 4, 23));
+          ("val arr", (5, 8, 5, 11)); 
+          ("OperatorIntrinsics", (5, 11, 5, 12));
+          ("Operators", (5, 11, 5, 12)); 
+          ("Core", (5, 11, 5, 12));
+          ("FSharp", (5, 11, 5, 12)); 
+          ("Microsoft", (5, 11, 5, 12));
+          ("val number2", (5, 15, 5, 22)); 
+          ("Test", (1, 0, 1, 0))|]
+
+ 
\ No newline at end of file
diff --git a/tests/service/FileSystemTests.fs b/tests/service/FileSystemTests.fs
new file mode 100644
index 00000000000..9880fdeffa8
--- /dev/null
+++ b/tests/service/FileSystemTests.fs
@@ -0,0 +1,111 @@
+#if INTERACTIVE
+#r "../../Debug/net40/bin/FSharp.LanguageService.Compiler.dll"
+#r "../../Debug/net40/bin/nunit.framework.dll"
+#load "FsUnit.fs"
+#load "Common.fs"
+#else
+module Tests.Service.FileSystemTests
+#endif
+
+
+open NUnit.Framework
+open FsUnit
+open System
+open System.IO
+open System.Collections.Generic
+open System.Text
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.SourceCodeServices
+open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
+open FSharp.Compiler.Service.Tests.Common
+
+let fileName1 = @"c:\mycode\test1.fs" // note, the path doesn' exist
+let fileName2 = @"c:\mycode\test2.fs" // note, the path doesn' exist
+
+type internal MyFileSystem(defaultFileSystem:IFileSystem) = 
+    let file1 = """
+module File1
+
+let A = 1"""
+    let file2 = """
+module File2
+let B = File1.A + File1.A"""
+    let files = dict [(fileName1, file1); (fileName2, file2)]
+
+    interface IFileSystem with
+        // Implement the service to open files for reading and writing
+        member __.FileStreamReadShim(fileName) = 
+            match files.TryGetValue(fileName) with
+            | true, text -> new MemoryStream(Encoding.UTF8.GetBytes(text)) :> Stream
+            | _ -> defaultFileSystem.FileStreamReadShim(fileName)
+
+        member __.FileStreamCreateShim(fileName) = 
+            defaultFileSystem.FileStreamCreateShim(fileName)
+
+        member __.FileStreamWriteExistingShim(fileName) = 
+            defaultFileSystem.FileStreamWriteExistingShim(fileName)
+
+        member __.ReadAllBytesShim(fileName) = 
+            match files.TryGetValue(fileName) with
+            | true, text -> Encoding.UTF8.GetBytes(text)
+            | _ -> defaultFileSystem.ReadAllBytesShim(fileName)
+
+        // Implement the service related to temporary paths and file time stamps
+        member __.GetTempPathShim() = defaultFileSystem.GetTempPathShim()
+        member __.GetLastWriteTimeShim(fileName) = defaultFileSystem.GetLastWriteTimeShim(fileName)
+        member __.GetFullPathShim(fileName) = defaultFileSystem.GetFullPathShim(fileName)
+        member __.IsInvalidPathShim(fileName) = defaultFileSystem.IsInvalidPathShim(fileName)
+        member __.IsPathRootedShim(fileName) = defaultFileSystem.IsPathRootedShim(fileName)
+
+        // Implement the service related to file existence and deletion
+        member __.SafeExists(fileName) = files.ContainsKey(fileName) || defaultFileSystem.SafeExists(fileName)
+        member __.FileDelete(fileName) = defaultFileSystem.FileDelete(fileName)
+
+        // Implement the service related to assembly loading, used to load type providers
+        // and for F# interactive.
+        member __.AssemblyLoadFrom(fileName) = defaultFileSystem.AssemblyLoadFrom fileName
+        member __.AssemblyLoad(assemblyName) = defaultFileSystem.AssemblyLoad assemblyName 
+
+let UseMyFileSystem() = 
+    let myFileSystem = MyFileSystem(Shim.FileSystem)
+    Shim.FileSystem <- myFileSystem
+    { new IDisposable with member x.Dispose() = Shim.FileSystem <- myFileSystem }
+
+[]
+let ``FileSystem compilation test``() = 
+  if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows 
+    use myFileSystem =  UseMyFileSystem()
+
+    let projectOptions = 
+        let allFlags = 
+            [| yield "--simpleresolution"; 
+               yield "--noframework"; 
+               yield "--debug:full"; 
+               yield "--define:DEBUG"; 
+               yield "--optimize-"; 
+               yield "--doc:test.xml"; 
+               yield "--warn:3"; 
+               yield "--fullpaths"; 
+               yield "--flaterrors"; 
+               yield "--target:library"; 
+               for r in [ @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll"; 
+                          @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll"; 
+                          @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll"; 
+                          @"C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll"] do 
+                     yield "-r:" + r |]
+ 
+        { ProjectFileName = @"c:\mycode\compilation.fsproj" // Make a name that is unique in this directory.
+          ProjectFileNames = [| fileName1; fileName2 |]
+          OtherOptions = allFlags 
+          ReferencedProjects = [| |];
+          IsIncompleteTypeCheckEnvironment = false
+          UseScriptResolutionRules = true 
+          LoadTime = System.DateTime.Now // Not 'now', we don't want to force reloading
+          UnresolvedReferences = None }
+
+    let results = checker.ParseAndCheckProject(projectOptions) |> Async.RunSynchronously
+
+    results.Errors.Length |> shouldEqual 0
+    results.AssemblySignature.Entities.Count |> shouldEqual 2
+    results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.Count |> shouldEqual 1
+    results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.[0].DisplayName |> shouldEqual "B"
diff --git a/tests/service/FsUnit.fs b/tests/service/FsUnit.fs
new file mode 100644
index 00000000000..26997463698
--- /dev/null
+++ b/tests/service/FsUnit.fs
@@ -0,0 +1,49 @@
+module FsUnit
+
+open System.Diagnostics
+open NUnit.Framework
+open NUnit.Framework.Constraints
+
+[]
+let should (f : 'a -> #Constraint) x (y : obj) =
+    let c = f x
+    let y =
+        match y with
+        | :? (unit -> unit) -> box (new TestDelegate(y :?> unit -> unit))
+        | _                 -> y
+    Assert.That(y, c)
+
+let equal x = new EqualConstraint(x)
+
+// like "should equal", but validates same-type
+let shouldEqual (x: 'a) (y: 'a) = Assert.AreEqual(x, y, sprintf "Expected: %A\nActual: %A" x y)
+
+let notEqual x = new NotConstraint(new EqualConstraint(x))
+
+let contain x = new ContainsConstraint(x)
+
+let haveLength n = Has.Length.EqualTo(n)
+
+let haveCount n = Has.Count.EqualTo(n)
+
+let endWith (s:string) = new EndsWithConstraint(s)
+
+let startWith (s:string) = new StartsWithConstraint(s)
+
+let be = id
+
+let Null = new NullConstraint()
+
+let Empty = new EmptyConstraint()
+
+let EmptyString = new EmptyStringConstraint()
+
+//let NullOrEmptyString = new NullOrEmptyStringConstraint()
+
+let True = new TrueConstraint()
+
+let False = new FalseConstraint()
+
+let sameAs x = new SameAsConstraint(x)
+
+let throw = Throws.TypeOf
\ No newline at end of file
diff --git a/tests/service/MultiProjectAnalysisTests.fs b/tests/service/MultiProjectAnalysisTests.fs
new file mode 100644
index 00000000000..86f4ef50819
--- /dev/null
+++ b/tests/service/MultiProjectAnalysisTests.fs
@@ -0,0 +1,733 @@
+
+#if INTERACTIVE
+#r "../../Debug/net40/bin/FSharp.LanguageService.Compiler.dll"
+#r "../../Debug/net40/bin/nunit.framework.dll"
+#load "FsUnit.fs"
+#load "Common.fs"
+#else
+module Tests.Service.MultiProjectAnalysisTests
+#endif
+
+open NUnit.Framework
+open FsUnit
+open System
+open System.IO
+open System.Collections.Generic
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.SourceCodeServices
+open FSharp.Compiler.Service.Tests.Common
+
+
+module Project1A = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let baseName = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(baseName, ".dll")
+    let projFileName = Path.ChangeExtension(baseName, ".fsproj")
+    let fileSource1 = """
+module Project1A
+
+type C() = 
+    static member M(arg1: int, arg2: int, ?arg3 : int) = arg1 + arg2 + defaultArg arg3 4
+
+let x1 = C.M(arg1 = 3, arg2 = 4, arg3 = 5)
+
+let x2 = C.M(arg1 = 3, arg2 = 4, ?arg3 = Some 5)
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+
+//-----------------------------------------------------------------------------------------
+module Project1B = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let baseName = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(baseName, ".dll")
+    let projFileName = Path.ChangeExtension(baseName, ".fsproj")
+    let fileSource1 = """
+module Project1B
+
+type A = B of xxx: int * yyy : int
+let b = B(xxx=1, yyy=2)
+
+let x = 
+    match b with
+    // does not find usage here
+    | B (xxx = a; yyy = b) -> ()
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+// A project referencing two sub-projects
+module MultiProject1 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let baseName = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(baseName, ".dll")
+    let projFileName = Path.ChangeExtension(baseName, ".fsproj")
+    let fileSource1 = """
+
+module MultiProject1
+
+open Project1A
+open Project1B
+
+let p = (Project1A.x1, Project1B.b)
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options = 
+        let options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+        { options with 
+            OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project1A.dllName); ("-r:" + Project1B.dllName) |]
+            ReferencedProjects = [| (Project1A.dllName, Project1A.options);
+                                    (Project1B.dllName, Project1B.options); |] }
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+
+
+[]
+let ``Test multi project 1 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(MultiProject1.options) |> Async.RunSynchronously
+
+    wholeProjectResults .Errors.Length |> shouldEqual 0
+    wholeProjectResults.ProjectContext.GetReferencedAssemblies().Length |> shouldEqual 6
+
+[]
+let ``Test multi project 1 basic`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(MultiProject1.options) |> Async.RunSynchronously
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual ["MultiProject1"]
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual []
+
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] 
+        |> shouldEqual ["p"]
+
+[]
+let ``Test multi project 1 all symbols`` () = 
+
+    let p1A = checker.ParseAndCheckProject(Project1A.options) |> Async.RunSynchronously
+    let p1B = checker.ParseAndCheckProject(Project1B.options) |> Async.RunSynchronously
+    let mp = checker.ParseAndCheckProject(MultiProject1.options) |> Async.RunSynchronously
+
+    let x1FromProject1A = 
+        [ for s in p1A.GetAllUsesOfAllSymbols() |> Async.RunSynchronously do
+             if  s.Symbol.DisplayName = "x1" then 
+                 yield s.Symbol ]   |> List.head
+
+    let x1FromProjectMultiProject = 
+        [ for s in mp.GetAllUsesOfAllSymbols() |> Async.RunSynchronously do
+             if  s.Symbol.DisplayName = "x1" then 
+                 yield s.Symbol ]   |> List.head
+
+    let bFromProjectMultiProject = 
+        [ for s in mp.GetAllUsesOfAllSymbols() |> Async.RunSynchronously do
+             if  s.Symbol.DisplayName = "b" then 
+                 yield s.Symbol ]   |> List.head
+
+    x1FromProject1A.Assembly.FileName.IsNone |> shouldEqual true // For now, the assembly being analyzed doesn't return a filename
+    x1FromProject1A.Assembly.QualifiedName |> shouldEqual "" // For now, the assembly being analyzed doesn't return a qualified name
+    x1FromProject1A.Assembly.SimpleName |> shouldEqual (Path.GetFileNameWithoutExtension Project1A.dllName) 
+    x1FromProjectMultiProject.Assembly.FileName |> shouldEqual (Some Project1A.dllName)
+    bFromProjectMultiProject.Assembly.FileName |> shouldEqual  (Some Project1B.dllName)
+
+    let usesOfx1FromProject1AInMultiProject1 = 
+       mp.GetUsesOfSymbol(x1FromProject1A) 
+            |> Async.RunSynchronously
+            |> Array.map (fun s -> s.Symbol.DisplayName, MultiProject1.cleanFileName  s.FileName, tups s.Symbol.DeclarationLocation.Value) 
+
+    let usesOfx1FromMultiProject1InMultiProject1 = 
+       mp.GetUsesOfSymbol(x1FromProjectMultiProject) 
+            |> Async.RunSynchronously
+            |> Array.map (fun s -> s.Symbol.DisplayName, MultiProject1.cleanFileName  s.FileName, tups s.Symbol.DeclarationLocation.Value) 
+
+    usesOfx1FromProject1AInMultiProject1 |> shouldEqual usesOfx1FromMultiProject1InMultiProject1
+
+//------------------------------------------------------------------------------------
+
+
+// A project referencing many sub-projects
+module internal ManyProjectsStressTest = 
+    open System.IO
+
+    let numProjectsForStressTest = 100
+  
+    type Project = { ModuleName: string; FileName: string; Options: FSharpProjectOptions; DllName: string } 
+    let projects = 
+        [ for i in 1 .. numProjectsForStressTest do 
+                let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+                let moduleName = "Project" + string i
+                let fileSource1 = "module " + moduleName + """
+
+// Some random code
+open System
+
+type C() = 
+    static member Print() = System.Console.WriteLine("Hello World")
+    
+let v = C()
+
+let p = C.Print()
+
+    """
+                File.WriteAllText(fileName1, fileSource1)
+                let baseName = Path.GetTempFileName()
+                let dllName = Path.ChangeExtension(baseName, ".dll")
+                let projFileName = Path.ChangeExtension(baseName, ".fsproj")
+                let fileNames = [fileName1 ]
+                let args = mkProjectCommandLineArgs (dllName, fileNames)
+                let options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+                yield { ModuleName = moduleName; FileName=fileName1; Options = options; DllName=dllName } ]
+
+    let jointProject = 
+        let fileName = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+        let dllBase = Path.GetTempFileName()
+        let dllName = Path.ChangeExtension(dllBase, ".dll")
+        let projFileName = Path.ChangeExtension(dllBase, ".fsproj")
+        let fileSource = 
+            """
+
+module JointProject
+
+"""          + String.concat "\r\n" [ for p in projects -> "open " + p.ModuleName ] +  """
+
+let p = (""" 
+             + String.concat ",\r\n         " [ for p in projects -> p.ModuleName  + ".v" ] +  ")"
+        File.WriteAllText(fileName, fileSource)
+
+        let fileNames = [fileName]
+        let args = mkProjectCommandLineArgs (dllName, fileNames)
+        let options = 
+            let options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+            { options with 
+                OtherOptions = Array.append options.OtherOptions [| for p in  projects -> ("-r:" + p.DllName) |]
+                ReferencedProjects = [| for p in projects -> (p.DllName, p.Options); |] }
+        { ModuleName = "JointProject"; FileName=fileName; Options = options; DllName=dllName } 
+
+    let cleanFileName a = 
+        projects |> List.tryPick (fun m -> if a = m.FileName then Some m.ModuleName else None)
+        |> function Some x -> x | None -> if a = jointProject.FileName then "fileN" else "??"
+
+
+    let makeCheckerForStressTest ensureBigEnough = 
+        let size = (if ensureBigEnough then numProjectsForStressTest + 10 else numProjectsForStressTest / 2 )
+        FSharpChecker.Create(projectCacheSize=size)
+
+[]
+let ``Test ManyProjectsStressTest whole project errors`` () = 
+
+    let checker = ManyProjectsStressTest.makeCheckerForStressTest true
+    let wholeProjectResults = checker.ParseAndCheckProject(ManyProjectsStressTest.jointProject.Options) |> Async.RunSynchronously
+
+    wholeProjectResults .Errors.Length |> shouldEqual 0
+    wholeProjectResults.ProjectContext.GetReferencedAssemblies().Length |> shouldEqual (ManyProjectsStressTest.numProjectsForStressTest + 4)
+
+[]
+let ``Test ManyProjectsStressTest basic`` () = 
+
+    let checker = ManyProjectsStressTest.makeCheckerForStressTest true
+
+    let wholeProjectResults = checker.ParseAndCheckProject(ManyProjectsStressTest.jointProject.Options) |> Async.RunSynchronously
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual ["JointProject"]
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual []
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] 
+        |> shouldEqual ["p"]
+
+[]
+let ``Test ManyProjectsStressTest cache too small`` () = 
+
+    let checker = ManyProjectsStressTest.makeCheckerForStressTest false
+
+    // Because the cache is too small, we need explicit calls to KeepAlive to avoid disposal of project information
+    let disposals = 
+        [ for p in ManyProjectsStressTest.jointProject :: ManyProjectsStressTest.projects do
+             yield checker.KeepProjectAlive p.Options |> Async.RunSynchronously ]
+
+    let wholeProjectResults = checker.ParseAndCheckProject(ManyProjectsStressTest.jointProject.Options) |> Async.RunSynchronously
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual ["JointProject"]
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual []
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] 
+        |> shouldEqual ["p"]
+
+    for d in disposals do d.Dispose()
+
+[]
+let ``Test ManyProjectsStressTest all symbols`` () = 
+
+  let checker = ManyProjectsStressTest.makeCheckerForStressTest true
+  for i in 1 .. 10 do 
+    printfn "stress test iteration %d (first may be slow, rest fast)" i
+    let projectsResults = [ for p in ManyProjectsStressTest.projects -> p, checker.ParseAndCheckProject(p.Options) |> Async.RunSynchronously ]
+    let jointProjectResults = checker.ParseAndCheckProject(ManyProjectsStressTest.jointProject.Options) |> Async.RunSynchronously
+
+    let vsFromJointProject = 
+        [ for s in jointProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously do
+             if  s.Symbol.DisplayName = "v" then 
+                 yield s.Symbol ]   
+
+    for (p,pResults) in projectsResults do 
+        let vFromProject = 
+            [ for s in pResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously do
+                if  s.Symbol.DisplayName = "v" then 
+                   yield s.Symbol ]   |> List.head 
+        vFromProject.Assembly.FileName.IsNone |> shouldEqual true // For now, the assembly being analyzed doesn't return a filename
+        vFromProject.Assembly.QualifiedName |> shouldEqual "" // For now, the assembly being analyzed doesn't return a qualified name
+        vFromProject.Assembly.SimpleName |> shouldEqual (Path.GetFileNameWithoutExtension p.DllName) 
+
+        let usesFromJointProject = 
+            jointProjectResults.GetUsesOfSymbol(vFromProject) 
+                |> Async.RunSynchronously
+                |> Array.map (fun s -> s.Symbol.DisplayName, ManyProjectsStressTest.cleanFileName  s.FileName, tups s.Symbol.DeclarationLocation.Value) 
+
+        usesFromJointProject.Length |> shouldEqual 1
+
+//-----------------------------------------------------------------------------------------
+
+module internal MultiProjectDirty1 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let baseName = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(baseName, ".dll")
+    let projFileName = Path.ChangeExtension(baseName, ".fsproj")
+    let content = """module Project1
+
+let x = "F#"
+"""                   
+    
+    File.WriteAllText(fileName1, content)
+
+    let cleanFileName a = if a = fileName1 then "Project1" else "??"
+
+    let fileNames = [fileName1]
+    
+    let getOptions() = 
+        let args = mkProjectCommandLineArgs (dllName, fileNames)
+        checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+module internal MultiProjectDirty2 = 
+    open System.IO
+
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let baseName = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(baseName, ".dll")
+    let projFileName = Path.ChangeExtension(baseName, ".fsproj")
+    
+    let content = """module Project2
+
+open Project1
+
+let y = x
+let z = Project1.x
+"""
+    File.WriteAllText(fileName1, content)
+
+    let cleanFileName a = if a = fileName1 then "Project2" else "??"
+
+    let fileNames = [fileName1]    
+   
+    let getOptions() = 
+        let args = mkProjectCommandLineArgs (dllName, fileNames)
+        let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+        { options with 
+            OtherOptions = Array.append options.OtherOptions [| ("-r:" + MultiProjectDirty1.dllName) |]
+            ReferencedProjects = [| (MultiProjectDirty1.dllName, MultiProjectDirty1.getOptions()) |] }
+
+[]
+let ``Test multi project symbols should pick up changes in dependent projects`` () = 
+
+    //  register to count the file checks
+    let count = ref 0
+    checker.FileChecked.Add (fun _ -> incr count)
+
+    //---------------- Write the first version of the file in project 1 and check the project --------------------
+
+    let proj1options = MultiProjectDirty1.getOptions()
+
+    let wholeProjectResults1 = checker.ParseAndCheckProject(proj1options) |> Async.RunSynchronously
+
+    count.Value |> shouldEqual 1
+
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) 
+        |> Async.RunSynchronously    
+
+    count.Value |> shouldEqual 1
+
+    //---------------- Get a symbol from project 1 and look up its uses in both projects --------------------
+
+    let xSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(3, 4, "", ["x"]) |> Async.RunSynchronously
+    xSymbolUse.IsSome |> shouldEqual true  
+    let xSymbol = xSymbolUse.Value.Symbol
+
+    printfn "Symbol found. Checking symbol uses in another project..."
+
+    let proj2options = MultiProjectDirty2.getOptions()
+
+    let wholeProjectResults2 = checker.ParseAndCheckProject(proj2options) |> Async.RunSynchronously
+
+    count.Value |> shouldEqual 2
+    
+    let _ = checker.ParseAndCheckProject(proj2options) |> Async.RunSynchronously
+
+    count.Value |> shouldEqual 2 // cached
+
+    let usesOfXSymbolInProject1 = 
+        wholeProjectResults1.GetUsesOfSymbol(xSymbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.RangeAlternate)
+
+    usesOfXSymbolInProject1
+    |> shouldEqual 
+        [|("val x", "Project1", ((3, 4), (3, 5))) |]
+
+    let usesOfXSymbolInProject2 = 
+        wholeProjectResults2.GetUsesOfSymbol(xSymbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.RangeAlternate)
+
+    usesOfXSymbolInProject2 
+    |> shouldEqual 
+        [|("val x", "Project2", ((5, 8), (5, 9)));
+          ("val x", "Project2", ((6, 8), (6, 18)))|]
+
+    //---------------- Change the file by adding a line, then re-check everything --------------------
+    
+    let wt0 = System.DateTime.Now
+    let wt1 = File.GetLastWriteTime MultiProjectDirty1.fileName1
+    printfn "Writing new content to file '%s'" MultiProjectDirty1.fileName1
+
+    System.Threading.Thread.Sleep(1000)
+    File.WriteAllText(MultiProjectDirty1.fileName1, System.Environment.NewLine + MultiProjectDirty1.content)
+    printfn "Wrote new content to file '%s'"  MultiProjectDirty1.fileName1
+    let wt2 = File.GetLastWriteTime MultiProjectDirty1.fileName1
+    printfn "Current time: '%A', ticks = %d"  wt0 wt0.Ticks
+    printfn "Old write time: '%A', ticks = %d"  wt1 wt1.Ticks
+    printfn "New write time: '%A', ticks = %d"  wt2 wt2.Ticks
+
+    let wholeProjectResults1AfterChange1 = checker.ParseAndCheckProject(proj1options) |> Async.RunSynchronously
+    count.Value |> shouldEqual 3
+
+    let backgroundParseResults1AfterChange1, backgroundTypedParse1AfterChange1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) 
+        |> Async.RunSynchronously    
+
+    let xSymbolUseAfterChange1 = backgroundTypedParse1AfterChange1.GetSymbolUseAtLocation(4, 4, "", ["x"]) |> Async.RunSynchronously
+    xSymbolUseAfterChange1.IsSome |> shouldEqual true  
+    let xSymbolAfterChange1 = xSymbolUseAfterChange1.Value.Symbol
+
+
+    printfn "Checking project 2 after first change, options = '%A'" proj2options
+
+    let wholeProjectResults2AfterChange1 = checker.ParseAndCheckProject(proj2options) |> Async.RunSynchronously
+
+    count.Value |> shouldEqual 4
+
+    let usesOfXSymbolInProject1AfterChange1 = 
+        wholeProjectResults1AfterChange1.GetUsesOfSymbol(xSymbolAfterChange1) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.RangeAlternate)
+    
+    usesOfXSymbolInProject1AfterChange1
+    |> shouldEqual 
+        [|("val x", "Project1", ((4, 4), (4, 5))) |]
+
+    let usesOfXSymbolInProject2AfterChange1 = 
+        wholeProjectResults2AfterChange1.GetUsesOfSymbol(xSymbolAfterChange1) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.RangeAlternate)
+
+    usesOfXSymbolInProject2AfterChange1 
+    |> shouldEqual 
+        [|("val x", "Project2", ((5, 8), (5, 9)));
+          ("val x", "Project2", ((6, 8), (6, 18)))|]
+
+    //---------------- Revert the change to the file --------------------
+
+    let wt0b = System.DateTime.Now
+    let wt1b = File.GetLastWriteTime MultiProjectDirty1.fileName1
+    printfn "Writing old content to file '%s'" MultiProjectDirty1.fileName1
+    System.Threading.Thread.Sleep(1000)
+    File.WriteAllText(MultiProjectDirty1.fileName1, MultiProjectDirty1.content)
+    printfn "Wrote old content to file '%s'"  MultiProjectDirty1.fileName1
+    let wt2b = File.GetLastWriteTime MultiProjectDirty1.fileName1
+    printfn "Current time: '%A', ticks = %d"  wt0b wt0b.Ticks
+    printfn "Old write time: '%A', ticks = %d"  wt1b wt1b.Ticks
+    printfn "New write time: '%A', ticks = %d"  wt2b wt2b.Ticks
+
+    count.Value |> shouldEqual 4
+
+    let wholeProjectResults2AfterChange2 = checker.ParseAndCheckProject(proj2options) |> Async.RunSynchronously
+
+    System.Threading.Thread.Sleep(1000)
+    count.Value |> shouldEqual 6 // note, causes two files to be type checked, one from each project
+
+
+    let wholeProjectResults1AfterChange2 = checker.ParseAndCheckProject(proj1options) |> Async.RunSynchronously
+
+    count.Value |> shouldEqual 6 // the project is already checked
+
+    let backgroundParseResults1AfterChange2, backgroundTypedParse1AfterChange2 = 
+        checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) 
+        |> Async.RunSynchronously    
+
+    let xSymbolUseAfterChange2 = backgroundTypedParse1AfterChange2.GetSymbolUseAtLocation(4, 4, "", ["x"]) |> Async.RunSynchronously
+    xSymbolUseAfterChange2.IsSome |> shouldEqual true  
+    let xSymbolAfterChange2 = xSymbolUseAfterChange2.Value.Symbol
+
+
+    let usesOfXSymbolInProject1AfterChange2 = 
+        wholeProjectResults1AfterChange2.GetUsesOfSymbol(xSymbolAfterChange2) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.RangeAlternate)
+
+    usesOfXSymbolInProject1AfterChange2
+    |> shouldEqual 
+        [|("val x", "Project1", ((3, 4), (3, 5))) |]
+
+
+    let usesOfXSymbolInProject2AfterChange2 = 
+        wholeProjectResults2AfterChange2.GetUsesOfSymbol(xSymbolAfterChange2) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.RangeAlternate)
+
+    usesOfXSymbolInProject2AfterChange2
+    |> shouldEqual 
+        [|("val x", "Project2", ((5, 8), (5, 9)));
+          ("val x", "Project2", ((6, 8), (6, 18)))|]
+
+
+//------------------------------------------------------------------
+
+
+module Project2A = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let baseName1 = Path.GetTempFileName()
+    let baseName2 = Path.GetTempFileName()
+    let baseName3 = Path.GetTempFileName() // this one doesn't get InternalsVisibleTo rights
+    let dllShortName = Path.GetFileNameWithoutExtension(baseName2)
+    let dllName = Path.ChangeExtension(baseName1, ".dll")
+    let projFileName = Path.ChangeExtension(baseName1, ".fsproj")
+    let fileSource1 = """
+module Project2A
+
+[]
+do()
+
+type C() = 
+    member internal x.InternalMember = 1
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+//Project2A.fileSource1
+// A project referencing Project2A
+module Project2B = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let dllName = Path.ChangeExtension(Project2A.baseName2, ".dll")
+    let projFileName = Path.ChangeExtension(Project2A.baseName2, ".fsproj")
+    let fileSource1 = """
+
+module Project2B
+
+let v = Project2A.C().InternalMember // access an internal symbol
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options = 
+        let options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+        { options with 
+            OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project2A.dllName);  |]
+            ReferencedProjects = [| (Project2A.dllName, Project2A.options); |] }
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+//Project2A.fileSource1
+// A project referencing Project2A but without access to the internals of A
+module Project2C = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let dllName = Path.ChangeExtension(Project2A.baseName3, ".dll")
+    let projFileName = Path.ChangeExtension(Project2A.baseName3, ".fsproj")
+    let fileSource1 = """
+
+module Project2C
+
+let v = Project2A.C().InternalMember // access an internal symbol
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options = 
+        let options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+        { options with 
+            OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project2A.dllName);  |]
+            ReferencedProjects = [| (Project2A.dllName, Project2A.options); |] }
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+[]
+let ``Test multi project2 errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project2B.options) |> Async.RunSynchronously
+    wholeProjectResults .Errors.Length |> shouldEqual 0
+
+
+    let wholeProjectResultsC = checker.ParseAndCheckProject(Project2C.options) |> Async.RunSynchronously
+    wholeProjectResultsC.Errors.Length |> shouldEqual 1
+
+
+
+[]
+let ``Test multi project 2 all symbols`` () = 
+
+    let mpA = checker.ParseAndCheckProject(Project2A.options) |> Async.RunSynchronously
+    let mpB = checker.ParseAndCheckProject(Project2B.options) |> Async.RunSynchronously
+    let mpC = checker.ParseAndCheckProject(Project2C.options) |> Async.RunSynchronously
+
+    // These all get the symbol in A, but from three different project compilations/checks
+    let symFromA = 
+        [ for s in mpA.GetAllUsesOfAllSymbols() |> Async.RunSynchronously do
+             if  s.Symbol.DisplayName = "InternalMember" then 
+                 yield s.Symbol ]   |> List.head
+
+    let symFromB = 
+        [ for s in mpB.GetAllUsesOfAllSymbols() |> Async.RunSynchronously do
+             if  s.Symbol.DisplayName = "InternalMember" then 
+                 yield s.Symbol ]   |> List.head
+
+    symFromA.IsAccessible(mpA.ProjectContext.AccessibilityRights) |> shouldEqual true
+    symFromA.IsAccessible(mpB.ProjectContext.AccessibilityRights) |> shouldEqual true
+    symFromA.IsAccessible(mpC.ProjectContext.AccessibilityRights) |> shouldEqual false
+    symFromB.IsAccessible(mpA.ProjectContext.AccessibilityRights) |> shouldEqual true
+    symFromB.IsAccessible(mpB.ProjectContext.AccessibilityRights) |> shouldEqual true
+    symFromB.IsAccessible(mpC.ProjectContext.AccessibilityRights) |> shouldEqual false
+ 
+//------------------------------------------------------------------------------------
+
+module Project3A = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let baseName = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(baseName, ".dll")
+    let projFileName = Path.ChangeExtension(baseName, ".fsproj")
+    let fileSource1 = """
+module Project3A
+
+///A parameterized active pattern of divisibility
+let (|DivisibleBy|_|) by n = 
+    if n % by = 0 then Some DivisibleBy else None
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+// A project referencing a sub-project
+module MultiProject3 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let baseName = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(baseName, ".dll")
+    let projFileName = Path.ChangeExtension(baseName, ".fsproj")
+    let fileSource1 = """
+module MultiProject3
+
+open Project3A
+
+let fizzBuzz = function 
+    | DivisibleBy 3 & DivisibleBy 5 -> "FizzBuzz" 
+    | DivisibleBy 3 -> "Fizz" 
+    | DivisibleBy 5 -> "Buzz" 
+    | _ -> "" 
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options = 
+        let options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+        { options with 
+            OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project3A.dllName) |]
+            ReferencedProjects = [| (Project3A.dllName, Project3A.options) |] }
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+[]
+let ``Test multi project 3 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(MultiProject3.options) |> Async.RunSynchronously
+
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+[]
+let ``Test active patterns' XmlDocSig declared in referenced projects`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(MultiProject3.options) |> Async.RunSynchronously
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(MultiProject3.fileName1, MultiProject3.options) 
+        |> Async.RunSynchronously    
+
+    let divisibleBySymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(7,7,"",["DivisibleBy"]) |> Async.RunSynchronously
+    divisibleBySymbolUse.IsSome |> shouldEqual true  
+    let divisibleBySymbol = divisibleBySymbolUse.Value.Symbol 
+    divisibleBySymbol.ToString() |> shouldEqual "symbol DivisibleBy"
+
+    let divisibleByActivePatternCase = divisibleBySymbol :?> FSharpActivePatternCase
+    divisibleByActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual []
+    divisibleByActivePatternCase.XmlDocSig |> shouldEqual "M:Project3A.|DivisibleBy|_|(System.Int32,System.Int32)"
+    let divisibleByGroup = divisibleByActivePatternCase.Group
+    divisibleByGroup.IsTotal |> shouldEqual false
+    divisibleByGroup.Names |> Seq.toList |> shouldEqual ["DivisibleBy"]
+    divisibleByGroup.OverallType.Format(divisibleBySymbolUse.Value.DisplayContext) |> shouldEqual "int -> int -> unit option"
+    let divisibleByEntity = divisibleByGroup.EnclosingEntity.Value
+    divisibleByEntity.ToString() |> shouldEqual "Project3A"
+
diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs
new file mode 100644
index 00000000000..aca1dc54d20
--- /dev/null
+++ b/tests/service/ProjectAnalysisTests.fs
@@ -0,0 +1,4841 @@
+#if INTERACTIVE
+#r "../../Debug/net40/bin/FSharp.LanguageService.Compiler.dll"
+#r "../../Debug/net40/bin/nunit.framework.dll"
+#load "FsUnit.fs"
+#load "Common.fs"
+#else
+module Tests.Service.ProjectAnalysisTests
+#endif
+
+let runningOnMono = try System.Type.GetType("Mono.Runtime") <> null with e ->  false
+
+open NUnit.Framework
+open FsUnit
+open System
+open System.IO
+open System.Collections.Generic
+
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.SourceCodeServices
+
+open FSharp.Compiler.Service.Tests.Common
+
+module internal Project1 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let fileName2 = Path.ChangeExtension(base2, ".fs")
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module M
+
+type C() = 
+    member x.P = 1
+
+let xxx = 3 + 4
+let fff () = xxx + xxx
+
+type CAbbrev = C
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileSource2 = """
+module N
+
+open M
+
+type D1() = 
+    member x.SomeProperty = M.xxx
+
+type D2() = 
+    member x.SomeProperty = M.fff() + D1().P
+
+// Generate a warning
+let y2 = match 1 with 1 -> M.xxx
+
+// A class with some 'let' bindings
+type D3(a:int) = 
+    let b = a + 4
+
+    []
+    val mutable x : int
+
+    member x.SomeProperty = a + b
+
+let pair1,pair2 = (3 + 4 + int32 System.DateTime.Now.Ticks, 5 + 6)
+
+// Check enum values
+type SaveOptions = 
+  | None = 0
+  | DisableFormatting = 1
+
+let enumValue = SaveOptions.DisableFormatting
+
+let (++) x y = x + y
+    
+let c1 = 1 ++ 2
+
+let c2 = 1 ++ 2
+
+let mmmm1 : M.C = new M.C()             // note, these don't count as uses of CAbbrev
+let mmmm2 : M.CAbbrev = new M.CAbbrev() // note, these don't count as uses of C
+
+    """
+    File.WriteAllText(fileName2, fileSource2)
+
+    let fileNames = [fileName1; fileName2]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+    let cleanFileName a = if a = fileName1 then "file1" else if a = fileName2 then "file2" else "??"
+
+
+[]
+let ``Test project1 whole project errors`` () = 
+
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+    wholeProjectResults .Errors.Length |> shouldEqual 2
+    wholeProjectResults.Errors.[1].Message.Contains("Incomplete pattern matches on this expression") |> shouldEqual true // yes it does
+    wholeProjectResults.Errors.[1].ErrorNumber |> shouldEqual 25
+
+    wholeProjectResults.Errors.[0].StartLineAlternate |> shouldEqual 10
+    wholeProjectResults.Errors.[0].EndLineAlternate |> shouldEqual 10
+    wholeProjectResults.Errors.[0].StartColumn |> shouldEqual 43
+    wholeProjectResults.Errors.[0].EndColumn |> shouldEqual 44
+
+[]
+let ``Test Project1 should have protected FullName and TryFullName return same results`` () =
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+    let rec getFullNameComparisons (entity: FSharpEntity) = 
+        seq { if not entity.IsProvided && entity.Accessibility.IsPublic then
+                yield (entity.TryFullName = try Some entity.FullName with _ -> None)
+                for e in entity.NestedEntities do
+                    yield! getFullNameComparisons e }
+  
+    wholeProjectResults.ProjectContext.GetReferencedAssemblies()
+    |> List.map (fun asm -> asm.Contents.Entities)
+    |> Seq.collect (Seq.collect getFullNameComparisons)
+    |> Seq.iter (shouldEqual true)
+
+[]
+let ``Test project1 should not throw exceptions on entities from referenced assemblies`` () =
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+    let rec getAllBaseTypes (entity: FSharpEntity) = 
+        seq { if not entity.IsProvided && entity.Accessibility.IsPublic then
+                if not entity.IsUnresolved then yield entity.BaseType
+                for e in entity.NestedEntities do
+                    yield! getAllBaseTypes e }
+    let allBaseTypes =
+        wholeProjectResults.ProjectContext.GetReferencedAssemblies()
+        |> List.map (fun asm -> asm.Contents.Entities)
+        |> Seq.collect (Seq.map getAllBaseTypes)
+        |> Seq.concat
+    Assert.DoesNotThrow(fun () -> Seq.iter (fun _ -> ()) allBaseTypes)
+
+[]
+let ``Test project1 basic`` () = 
+
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+
+    set [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual (set ["N"; "M"])
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual ["D1"; "D2"; "D3"; "SaveOptions" ]
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[1].NestedEntities -> x.DisplayName ] |> shouldEqual ["C"; "CAbbrev"]
+
+    set [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] 
+        |> shouldEqual (set ["y2"; "pair2"; "pair1"; "( ++ )"; "c1"; "c2"; "mmmm1"; "mmmm2"; "enumValue" ])
+
+[]
+let ``Test project1 all symbols`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+    let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities
+    for s in allSymbols do 
+        s.DeclarationLocation.IsSome |> shouldEqual true
+
+    for s in allSymbols do 
+        match s with 
+        | :? FSharpMemberOrFunctionOrValue as v when v.IsModuleValueOrMember -> 
+           s.IsAccessible(wholeProjectResults.ProjectContext.AccessibilityRights) |> shouldEqual true
+        | :? FSharpEntity -> 
+           s.IsAccessible(wholeProjectResults.ProjectContext.AccessibilityRights) |> shouldEqual true
+        | _ -> ()
+
+    let allDeclarationLocations = 
+        [ for s in allSymbols do 
+             let m = s.DeclarationLocation.Value
+             yield s.ToString(), Project1.cleanFileName  m.FileName, (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn ), attribsOfSymbol s
+            ]
+
+    allDeclarationLocations |> shouldEqual
+          [("N", "file2", (2, 7), (2, 8), ["module"]);
+           ("val y2", "file2", (13, 4), (13, 6), ["val"]);
+           ("val pair2", "file2", (24, 10), (24, 15), ["val"]);
+           ("val pair1", "file2", (24, 4), (24, 9), ["val"]);
+           ("val enumValue", "file2", (31, 4), (31, 13), ["val"]);
+           ("val op_PlusPlus", "file2", (33, 5), (33, 7), ["val"]);
+           ("val c1", "file2", (35, 4), (35, 6), ["val"]);
+           ("val c2", "file2", (37, 4), (37, 6), ["val"]);
+           ("val mmmm1", "file2", (39, 4), (39, 9), ["val"]);
+           ("val mmmm2", "file2", (40, 4), (40, 9), ["val"]);
+           ("D1", "file2", (6, 5), (6, 7), ["class"]);
+           ("member .ctor", "file2", (6, 5), (6, 7), ["member"; "ctor"]);
+           ("member get_SomeProperty", "file2", (7, 13), (7, 25), ["member"; "getter"]);
+           ("property SomeProperty", "file2", (7, 13), (7, 25), ["member"; "prop"]);
+           ("D2", "file2", (9, 5), (9, 7), ["class"]);
+           ("member .ctor", "file2", (9, 5), (9, 7), ["member"; "ctor"]);
+           ("member get_SomeProperty", "file2", (10, 13), (10, 25),
+            ["member"; "getter"]);
+           ("property SomeProperty", "file2", (10, 13), (10, 25), ["member"; "prop"]);
+           ("D3", "file2", (16, 5), (16, 7), ["class"]);
+           ("member .ctor", "file2", (16, 5), (16, 7), ["member"; "ctor"]);
+           ("member get_SomeProperty", "file2", (22, 13), (22, 25),
+            ["member"; "getter"]);
+           ("property SomeProperty", "file2", (22, 13), (22, 25), ["member"; "prop"]);
+           ("field a", "file2", (16, 8), (16, 9), ["field"; "compgen"]);
+           ("field b", "file2", (17, 8), (17, 9), ["field"; "compgen"]);
+           ("field x", "file2", (20, 16), (20, 17), ["field"; "default"; "mutable"]);
+           ("SaveOptions", "file2", (27, 5), (27, 16), ["enum"; "valuetype"]);
+           ("field value__", "file2", (28, 2), (29, 25), ["field"; "compgen"]);
+           ("field None", "file2", (28, 4), (28, 8), ["field"; "static"; "0"]);
+           ("field DisableFormatting", "file2", (29, 4), (29, 21), ["field"; "static"; "1"]);
+           ("M", "file1", (2, 7), (2, 8), ["module"]);
+           ("val xxx", "file1", (7, 4), (7, 7), ["val"]);
+           ("val fff", "file1", (8, 4), (8, 7), ["val"]);
+           ("C", "file1", (4, 5), (4, 6), ["class"]);
+           ("member .ctor", "file1", (4, 5), (4, 6), ["member"; "ctor"]);
+           ("member get_P", "file1", (5, 13), (5, 14), ["member"; "getter"]);
+           ("property P", "file1", (5, 13), (5, 14), ["member"; "prop"]);
+           ("CAbbrev", "file1", (10, 5), (10, 12), ["abbrev"]);
+           ("property P", "file1", (5, 13), (5, 14), ["member"; "prop"])]
+
+    for s in allSymbols do 
+        s.ImplementationLocation.IsSome |> shouldEqual true
+
+    let allImplementationLocations = 
+        [ for s in allSymbols do 
+             let m = s.ImplementationLocation.Value
+             yield s.ToString(), Project1.cleanFileName  m.FileName, (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn ), attribsOfSymbol s
+            ]
+
+    allImplementationLocations |> shouldEqual
+           [("N", "file2", (2, 7), (2, 8), ["module"]);
+           ("val y2", "file2", (13, 4), (13, 6), ["val"]);
+           ("val pair2", "file2", (24, 10), (24, 15), ["val"]);
+           ("val pair1", "file2", (24, 4), (24, 9), ["val"]);
+           ("val enumValue", "file2", (31, 4), (31, 13), ["val"]);
+           ("val op_PlusPlus", "file2", (33, 5), (33, 7), ["val"]);
+           ("val c1", "file2", (35, 4), (35, 6), ["val"]);
+           ("val c2", "file2", (37, 4), (37, 6), ["val"]);
+           ("val mmmm1", "file2", (39, 4), (39, 9), ["val"]);
+           ("val mmmm2", "file2", (40, 4), (40, 9), ["val"]);
+           ("D1", "file2", (6, 5), (6, 7), ["class"]);
+           ("member .ctor", "file2", (6, 5), (6, 7), ["member"; "ctor"]);
+           ("member get_SomeProperty", "file2", (7, 13), (7, 25), ["member"; "getter"]);
+           ("property SomeProperty", "file2", (7, 13), (7, 25), ["member"; "prop"]);
+           ("D2", "file2", (9, 5), (9, 7), ["class"]);
+           ("member .ctor", "file2", (9, 5), (9, 7), ["member"; "ctor"]);
+           ("member get_SomeProperty", "file2", (10, 13), (10, 25),
+            ["member"; "getter"]);
+           ("property SomeProperty", "file2", (10, 13), (10, 25), ["member"; "prop"]);
+           ("D3", "file2", (16, 5), (16, 7), ["class"]);
+           ("member .ctor", "file2", (16, 5), (16, 7), ["member"; "ctor"]);
+           ("member get_SomeProperty", "file2", (22, 13), (22, 25),
+            ["member"; "getter"]);
+           ("property SomeProperty", "file2", (22, 13), (22, 25), ["member"; "prop"]);
+           ("field a", "file2", (16, 8), (16, 9), ["field"; "compgen"]);
+           ("field b", "file2", (17, 8), (17, 9), ["field"; "compgen"]);
+           ("field x", "file2", (20, 16), (20, 17), ["field"; "default"; "mutable"]);
+           ("SaveOptions", "file2", (27, 5), (27, 16), ["enum"; "valuetype"]);
+           ("field value__", "file2", (28, 2), (29, 25), ["field"; "compgen"]);
+           ("field None", "file2", (28, 4), (28, 8), ["field"; "static"; "0"]);
+           ("field DisableFormatting", "file2", (29, 4), (29, 21), ["field"; "static"; "1"]);
+           ("M", "file1", (2, 7), (2, 8), ["module"]);
+           ("val xxx", "file1", (7, 4), (7, 7), ["val"]);
+           ("val fff", "file1", (8, 4), (8, 7), ["val"]);
+           ("C", "file1", (4, 5), (4, 6), ["class"]);
+           ("member .ctor", "file1", (4, 5), (4, 6), ["member"; "ctor"]);
+           ("member get_P", "file1", (5, 13), (5, 14), ["member"; "getter"]);
+           ("property P", "file1", (5, 13), (5, 14), ["member"; "prop"]);
+           ("CAbbrev", "file1", (10, 5), (10, 12), ["abbrev"]);
+           ("property P", "file1", (5, 13), (5, 14), ["member"; "prop"])]
+
+    [ for x in allSymbols -> x.ToString() ] 
+      |> shouldEqual 
+              ["N"; "val y2"; "val pair2"; "val pair1"; "val enumValue"; "val op_PlusPlus";
+               "val c1"; "val c2"; "val mmmm1"; "val mmmm2"; "D1"; "member .ctor";
+               "member get_SomeProperty"; "property SomeProperty"; "D2"; "member .ctor";
+               "member get_SomeProperty"; "property SomeProperty"; "D3"; "member .ctor";
+               "member get_SomeProperty"; "property SomeProperty"; "field a"; "field b";
+               "field x"; "SaveOptions"; "field value__"; "field None";
+               "field DisableFormatting"; "M"; "val xxx"; "val fff"; "C"; "member .ctor";
+               "member get_P"; "property P"; "CAbbrev"; "property P"]
+
+[]
+let ``Test project1 all symbols excluding compiler generated`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+    let allSymbolsNoCompGen = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities
+    [ for x in allSymbolsNoCompGen -> x.ToString() ] 
+      |> shouldEqual 
+              ["N"; "val y2"; "val pair2"; "val pair1"; "val enumValue"; "val op_PlusPlus";
+               "val c1"; "val c2"; "val mmmm1"; "val mmmm2"; "D1"; "member .ctor";
+               "member get_SomeProperty"; "property SomeProperty"; "D2"; "member .ctor";
+               "member get_SomeProperty"; "property SomeProperty"; "D3"; "member .ctor";
+               "member get_SomeProperty"; "property SomeProperty"; "field x";
+               "SaveOptions"; "field None"; "field DisableFormatting"; "M"; "val xxx";
+               "val fff"; "C"; "member .ctor"; "member get_P"; "property P"; "CAbbrev";
+               "property P"]
+
+[]
+let ``Test project1 xxx symbols`` () = 
+
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project1.fileName1, Project1.options) 
+        |> Async.RunSynchronously
+
+    let xSymbolUseOpt = backgroundTypedParse1.GetSymbolUseAtLocation(9,9,"",["xxx"]) |> Async.RunSynchronously
+    let xSymbolUse = xSymbolUseOpt.Value
+    let xSymbol = xSymbolUse.Symbol
+    xSymbol.ToString() |> shouldEqual "val xxx"
+
+    let usesOfXSymbol = 
+        [ for su in wholeProjectResults.GetUsesOfSymbol(xSymbol) |> Async.RunSynchronously do
+              yield Project1.cleanFileName su.FileName , tups su.RangeAlternate, attribsOfSymbol su.Symbol ]
+
+    usesOfXSymbol |> shouldEqual
+       [("file1", ((7, 4), (7, 7)), ["val"]);
+        ("file1", ((8, 13), (8, 16)), ["val"]);
+        ("file1", ((8, 19), (8, 22)), ["val"]);
+        ("file2", ((7, 28), (7, 33)), ["val"]);
+        ("file2", ((13, 27), (13, 32)), ["val"])]
+
+[]
+let ``Test project1 all uses of all signature symbols`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+    let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities
+    let allUsesOfAllSymbols = 
+        [ for s in allSymbols do 
+             yield s.ToString(), 
+                  [ for s in wholeProjectResults.GetUsesOfSymbol(s) |> Async.RunSynchronously -> 
+                         (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) ] ]
+    let expected =      
+          [("N", [("file2", ((1, 7), (1, 8)))]);
+           ("val y2", [("file2", ((12, 4), (12, 6)))]);
+           ("val pair2", [("file2", ((23, 10), (23, 15)))]);
+           ("val pair1", [("file2", ((23, 4), (23, 9)))]);
+           ("val enumValue", [("file2", ((30, 4), (30, 13)))]);
+           ("val op_PlusPlus",
+            [("file2", ((32, 5), (32, 7))); ("file2", ((34, 11), (34, 13)));
+             ("file2", ((36, 11), (36, 13)))]);
+           ("val c1", [("file2", ((34, 4), (34, 6)))]);
+           ("val c2", [("file2", ((36, 4), (36, 6)))]);
+           ("val mmmm1", [("file2", ((38, 4), (38, 9)))]);
+           ("val mmmm2", [("file2", ((39, 4), (39, 9)))]);
+           ("D1", [("file2", ((5, 5), (5, 7))); ("file2", ((9, 38), (9, 40)))]);
+           ("member .ctor",
+            [("file2", ((5, 5), (5, 7))); ("file2", ((9, 38), (9, 40)))]);
+           ("member get_SomeProperty", [("file2", ((6, 13), (6, 25)))]);
+           ("property SomeProperty", [("file2", ((6, 13), (6, 25)))]);
+           ("D2", [("file2", ((8, 5), (8, 7)))]);
+           ("member .ctor", [("file2", ((8, 5), (8, 7)))]);
+           ("member get_SomeProperty", [("file2", ((9, 13), (9, 25)))]);
+           ("property SomeProperty", [("file2", ((9, 13), (9, 25)))]);
+           ("D3", [("file2", ((15, 5), (15, 7)))]);
+           ("member .ctor", [("file2", ((15, 5), (15, 7)))]);
+           ("member get_SomeProperty", [("file2", ((21, 13), (21, 25)))]);
+           ("property SomeProperty", [("file2", ((21, 13), (21, 25)))]);
+           ("field a", []); ("field b", []);
+           ("field x", [("file2", ((19, 16), (19, 17)))]);
+           ("SaveOptions",
+            [("file2", ((26, 5), (26, 16))); ("file2", ((30, 16), (30, 27)))]);
+           ("field value__", []); ("field None", [("file2", ((27, 4), (27, 8)))]);
+           ("field DisableFormatting",
+            [("file2", ((28, 4), (28, 21))); ("file2", ((30, 16), (30, 45)))]);
+           ("M",
+            [("file1", ((1, 7), (1, 8))); ("file2", ((6, 28), (6, 29)));
+             ("file2", ((9, 28), (9, 29))); ("file2", ((12, 27), (12, 28)));
+             ("file2", ((38, 12), (38, 13))); ("file2", ((38, 22), (38, 23)));
+             ("file2", ((39, 12), (39, 13))); ("file2", ((39, 28), (39, 29)))]);
+           ("val xxx",
+            [("file1", ((6, 4), (6, 7))); ("file1", ((7, 13), (7, 16)));
+             ("file1", ((7, 19), (7, 22))); ("file2", ((6, 28), (6, 33)));
+             ("file2", ((12, 27), (12, 32)))]);
+           ("val fff", [("file1", ((7, 4), (7, 7))); ("file2", ((9, 28), (9, 33)))]);
+           ("C",
+            [("file1", ((3, 5), (3, 6))); ("file1", ((9, 15), (9, 16)));
+             ("file2", ((38, 12), (38, 15))); ("file2", ((38, 22), (38, 25)))]);
+           ("member .ctor",
+            [("file1", ((3, 5), (3, 6))); ("file1", ((9, 15), (9, 16)));
+             ("file2", ((38, 12), (38, 15))); ("file2", ((38, 22), (38, 25)))]);
+           ("member get_P", [("file1", ((4, 13), (4, 14)))]);
+           ("property P", [("file1", ((4, 13), (4, 14)))]);
+           ("CAbbrev",
+            [("file1", ((9, 5), (9, 12))); ("file2", ((39, 12), (39, 21)));
+             ("file2", ((39, 28), (39, 37)))]);
+           ("property P", [("file1", ((4, 13), (4, 14)))])]
+    set allUsesOfAllSymbols - set expected |> shouldEqual Set.empty
+    set expected - set allUsesOfAllSymbols |> shouldEqual Set.empty
+    (set expected = set allUsesOfAllSymbols) |> shouldEqual true
+
+[]
+let ``Test project1 all uses of all symbols`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+    let allUsesOfAllSymbols = 
+        [ for s in wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously -> 
+              s.Symbol.DisplayName, s.Symbol.FullName, Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate, attribsOfSymbol s.Symbol ]
+    let expected =      
+              [("C", "M.C", "file1", ((3, 5), (3, 6)), ["class"]);
+               ("( .ctor )", "M.C.( .ctor )", "file1", ((3, 5), (3, 6)),
+                ["member"; "ctor"]);
+               ("P", "M.C.P", "file1", ((4, 13), (4, 14)), ["member"; "getter"]);
+               ("x", "x", "file1", ((4, 11), (4, 12)), []);
+               ("( + )", "Microsoft.FSharp.Core.Operators.( + )", "file1",
+                ((6, 12), (6, 13)), ["val"]);
+               ("xxx", "M.xxx", "file1", ((6, 4), (6, 7)), ["val"]);
+               ("( + )", "Microsoft.FSharp.Core.Operators.( + )", "file1",
+                ((7, 17), (7, 18)), ["val"]);
+               ("xxx", "M.xxx", "file1", ((7, 13), (7, 16)), ["val"]);
+               ("xxx", "M.xxx", "file1", ((7, 19), (7, 22)), ["val"]);
+               ("fff", "M.fff", "file1", ((7, 4), (7, 7)), ["val"]);
+               ("C", "M.C", "file1", ((9, 15), (9, 16)), ["class"]);
+               ("C", "M.C", "file1", ((9, 15), (9, 16)), ["class"]);
+               ("C", "M.C", "file1", ((9, 15), (9, 16)), ["class"]);
+               ("C", "M.C", "file1", ((9, 15), (9, 16)), ["class"]);
+               ("CAbbrev", "M.CAbbrev", "file1", ((9, 5), (9, 12)), ["abbrev"]);
+               ("M", "M", "file1", ((1, 7), (1, 8)), ["module"]);
+               ("D1", "N.D1", "file2", ((5, 5), (5, 7)), ["class"]);
+               ("( .ctor )", "N.D1.( .ctor )", "file2", ((5, 5), (5, 7)),
+                ["member"; "ctor"]);
+               ("SomeProperty", "N.D1.SomeProperty", "file2", ((6, 13), (6, 25)),
+                ["member"; "getter"]); ("x", "x", "file2", ((6, 11), (6, 12)), []);
+               ("M", "M", "file2", ((6, 28), (6, 29)), ["module"]);
+               ("xxx", "M.xxx", "file2", ((6, 28), (6, 33)), ["val"]);
+               ("D2", "N.D2", "file2", ((8, 5), (8, 7)), ["class"]);
+               ("( .ctor )", "N.D2.( .ctor )", "file2", ((8, 5), (8, 7)),
+                ["member"; "ctor"]);
+               ("SomeProperty", "N.D2.SomeProperty", "file2", ((9, 13), (9, 25)),
+                ["member"; "getter"]); ("x", "x", "file2", ((9, 11), (9, 12)), []);
+               ("( + )", "Microsoft.FSharp.Core.Operators.( + )", "file2",
+                ((9, 36), (9, 37)), ["val"]);
+               ("M", "M", "file2", ((9, 28), (9, 29)), ["module"]);
+               ("fff", "M.fff", "file2", ((9, 28), (9, 33)), ["val"]);
+               ("D1", "N.D1", "file2", ((9, 38), (9, 40)), ["member"; "ctor"]);
+               ("M", "M", "file2", ((12, 27), (12, 28)), ["module"]);
+               ("xxx", "M.xxx", "file2", ((12, 27), (12, 32)), ["val"]);
+               ("y2", "N.y2", "file2", ((12, 4), (12, 6)), ["val"]);
+               ("DefaultValueAttribute", "Microsoft.FSharp.Core.DefaultValueAttribute",
+                "file2", ((18, 6), (18, 18)), ["class"]);
+               ("DefaultValueAttribute", "Microsoft.FSharp.Core.DefaultValueAttribute",
+                "file2", ((18, 6), (18, 18)), ["class"]);
+               ("DefaultValueAttribute", "Microsoft.FSharp.Core.DefaultValueAttribute",
+                "file2", ((18, 6), (18, 18)), ["member"]);
+               ("int", "Microsoft.FSharp.Core.int", "file2", ((19, 20), (19, 23)),
+                ["abbrev"]);
+               ("DefaultValueAttribute", "Microsoft.FSharp.Core.DefaultValueAttribute",
+                "file2", ((18, 6), (18, 18)), ["class"]);
+               ("DefaultValueAttribute", "Microsoft.FSharp.Core.DefaultValueAttribute",
+                "file2", ((18, 6), (18, 18)), ["class"]);
+               ("DefaultValueAttribute", "Microsoft.FSharp.Core.DefaultValueAttribute",
+                "file2", ((18, 6), (18, 18)), ["member"]);
+               ("x", "N.D3.x", "file2", ((19, 16), (19, 17)),
+                ["field"; "default"; "mutable"]);
+               ("D3", "N.D3", "file2", ((15, 5), (15, 7)), ["class"]);
+               ("int", "Microsoft.FSharp.Core.int", "file2", ((15, 10), (15, 13)),
+                ["abbrev"]); ("a", "a", "file2", ((15, 8), (15, 9)), []);
+               ("( .ctor )", "N.D3.( .ctor )", "file2", ((15, 5), (15, 7)),
+                ["member"; "ctor"]);
+               ("SomeProperty", "N.D3.SomeProperty", "file2", ((21, 13), (21, 25)),
+                ["member"; "getter"]);
+               ("( + )", "Microsoft.FSharp.Core.Operators.( + )", "file2",
+                ((16, 14), (16, 15)), ["val"]);
+               ("a", "a", "file2", ((16, 12), (16, 13)), []);
+               ("b", "b", "file2", ((16, 8), (16, 9)), []);
+               ("x", "x", "file2", ((21, 11), (21, 12)), []);
+               ("( + )", "Microsoft.FSharp.Core.Operators.( + )", "file2",
+                ((21, 30), (21, 31)), ["val"]);
+               ("a", "a", "file2", ((21, 28), (21, 29)), []);
+               ("b", "b", "file2", ((21, 32), (21, 33)), []);
+               ("( + )", "Microsoft.FSharp.Core.Operators.( + )", "file2",
+                ((23, 25), (23, 26)), ["val"]);
+               ("( + )", "Microsoft.FSharp.Core.Operators.( + )", "file2",
+                ((23, 21), (23, 22)), ["val"]);
+               ("int32", "Microsoft.FSharp.Core.Operators.int32", "file2",
+                ((23, 27), (23, 32)), ["val"]);
+               ("DateTime", "System.DateTime", "file2", ((23, 40), (23, 48)),
+                ["valuetype"]);
+               ("System", "System", "file2", ((23, 33), (23, 39)), ["namespace"]);
+               ("Now", "System.DateTime.Now", "file2", ((23, 33), (23, 52)),
+                ["member"; "prop"]);
+               ("Ticks", "System.DateTime.Ticks", "file2", ((23, 33), (23, 58)),
+                ["member"; "prop"]);
+               ("( + )", "Microsoft.FSharp.Core.Operators.( + )", "file2",
+                ((23, 62), (23, 63)), ["val"]);
+               ("pair2", "N.pair2", "file2", ((23, 10), (23, 15)), ["val"]);
+               ("pair1", "N.pair1", "file2", ((23, 4), (23, 9)), ["val"]);
+               ("None", "N.SaveOptions.None", "file2", ((27, 4), (27, 8)),
+                ["field"; "static"; "0"]);
+               ("DisableFormatting", "N.SaveOptions.DisableFormatting", "file2",
+                ((28, 4), (28, 21)), ["field"; "static"; "1"]);
+               ("SaveOptions", "N.SaveOptions", "file2", ((26, 5), (26, 16)),
+                ["enum"; "valuetype"]);
+               ("SaveOptions", "N.SaveOptions", "file2", ((30, 16), (30, 27)),
+                ["enum"; "valuetype"]);
+               ("DisableFormatting", "N.SaveOptions.DisableFormatting", "file2",
+                ((30, 16), (30, 45)), ["field"; "static"; "1"]);
+               ("enumValue", "N.enumValue", "file2", ((30, 4), (30, 13)), ["val"]);
+               ("x", "x", "file2", ((32, 9), (32, 10)), []);
+               ("y", "y", "file2", ((32, 11), (32, 12)), []);
+               ("( + )", "Microsoft.FSharp.Core.Operators.( + )", "file2",
+                ((32, 17), (32, 18)), ["val"]);
+               ("x", "x", "file2", ((32, 15), (32, 16)), []);
+               ("y", "y", "file2", ((32, 19), (32, 20)), []);
+               ("( ++ )", "N.( ++ )", "file2", ((32, 5), (32, 7)), ["val"]);
+               ("( ++ )", "N.( ++ )", "file2", ((34, 11), (34, 13)), ["val"]);
+               ("c1", "N.c1", "file2", ((34, 4), (34, 6)), ["val"]);
+               ("( ++ )", "N.( ++ )", "file2", ((36, 11), (36, 13)), ["val"]);
+               ("c2", "N.c2", "file2", ((36, 4), (36, 6)), ["val"]);
+               ("M", "M", "file2", ((38, 12), (38, 13)), ["module"]);
+               ("C", "M.C", "file2", ((38, 12), (38, 15)), ["class"]);
+               ("M", "M", "file2", ((38, 22), (38, 23)), ["module"]);
+               ("C", "M.C", "file2", ((38, 22), (38, 25)), ["class"]);
+               ("C", "M.C", "file2", ((38, 22), (38, 25)), ["member"; "ctor"]);
+               ("mmmm1", "N.mmmm1", "file2", ((38, 4), (38, 9)), ["val"]);
+               ("M", "M", "file2", ((39, 12), (39, 13)), ["module"]);
+               ("CAbbrev", "M.CAbbrev", "file2", ((39, 12), (39, 21)), ["abbrev"]);
+               ("M", "M", "file2", ((39, 28), (39, 29)), ["module"]);
+               ("CAbbrev", "M.CAbbrev", "file2", ((39, 28), (39, 37)), ["abbrev"]);
+               ("C", "M.C", "file2", ((39, 28), (39, 37)), ["member"; "ctor"]);
+               ("mmmm2", "N.mmmm2", "file2", ((39, 4), (39, 9)), ["val"]);
+               ("N", "N", "file2", ((1, 7), (1, 8)), ["module"])]
+
+    set allUsesOfAllSymbols - set expected |> shouldEqual Set.empty
+    set expected - set allUsesOfAllSymbols |> shouldEqual Set.empty
+    (set expected = set allUsesOfAllSymbols) |> shouldEqual true
+
+[]
+let ``Test file explicit parse symbols`` () = 
+
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+    let parseResults1 = checker.ParseFileInProject(Project1.fileName1, Project1.fileSource1, Project1.options)  |> Async.RunSynchronously
+    let parseResults2 = checker.ParseFileInProject(Project1.fileName2, Project1.fileSource2, Project1.options)  |> Async.RunSynchronously
+
+    let checkResults1 = 
+        checker.CheckFileInProject(parseResults1, Project1.fileName1, 0, Project1.fileSource1, Project1.options) 
+        |> Async.RunSynchronously
+        |> function FSharpCheckFileAnswer.Succeeded x ->  x | _ -> failwith "unexpected aborted"
+
+    let checkResults2 = 
+        checker.CheckFileInProject(parseResults2, Project1.fileName2, 0, Project1.fileSource2, Project1.options)
+        |> Async.RunSynchronously
+        |> function FSharpCheckFileAnswer.Succeeded x ->  x | _ -> failwith "unexpected aborted"
+
+    let xSymbolUse2Opt = checkResults1.GetSymbolUseAtLocation(9,9,"",["xxx"]) |> Async.RunSynchronously
+    let xSymbol2 = xSymbolUse2Opt.Value.Symbol
+    let usesOfXSymbol2 = 
+        [| for s in wholeProjectResults.GetUsesOfSymbol(xSymbol2) |> Async.RunSynchronously -> (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) |] 
+
+    let usesOfXSymbol21 = 
+        [| for s in checkResults1.GetUsesOfSymbolInFile(xSymbol2) |> Async.RunSynchronously -> (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) |] 
+
+    let usesOfXSymbol22 = 
+        [| for s in checkResults2.GetUsesOfSymbolInFile(xSymbol2) |> Async.RunSynchronously -> (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) |] 
+
+    usesOfXSymbol2
+         |> shouldEqual [|("file1", ((6, 4), (6, 7)));
+                          ("file1", ((7, 13), (7, 16)));
+                          ("file1", ((7, 19), (7, 22)));
+                          ("file2", ((6, 28), (6, 33)));
+                          ("file2", ((12, 27), (12, 32)))|]
+
+    usesOfXSymbol21
+         |> shouldEqual [|("file1", ((6, 4), (6, 7)));
+                          ("file1", ((7, 13), (7, 16)));
+                          ("file1", ((7, 19), (7, 22)))|]
+
+    usesOfXSymbol22
+         |> shouldEqual [|("file2", ((6, 28), (6, 33)));
+                          ("file2", ((12, 27), (12, 32)))|]
+
+
+[]
+let ``Test file explicit parse all symbols`` () = 
+
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously
+    let parseResults1 = checker.ParseFileInProject(Project1.fileName1, Project1.fileSource1, Project1.options) |> Async.RunSynchronously
+    let parseResults2 = checker.ParseFileInProject(Project1.fileName2, Project1.fileSource2, Project1.options) |> Async.RunSynchronously
+
+    let checkResults1 = 
+        checker.CheckFileInProject(parseResults1, Project1.fileName1, 0, Project1.fileSource1, Project1.options) 
+        |> Async.RunSynchronously
+        |> function FSharpCheckFileAnswer.Succeeded x ->  x | _ -> failwith "unexpected aborted"
+
+    let checkResults2 = 
+        checker.CheckFileInProject(parseResults2, Project1.fileName2, 0, Project1.fileSource2, Project1.options)
+        |> Async.RunSynchronously
+        |> function FSharpCheckFileAnswer.Succeeded x ->  x | _ -> failwith "unexpected aborted"
+
+    let usesOfSymbols = checkResults1.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously
+    let cleanedUsesOfSymbols = 
+         [ for s in usesOfSymbols -> s.Symbol.DisplayName, Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate, attribsOfSymbol s.Symbol ]
+
+    cleanedUsesOfSymbols 
+       |> shouldEqual 
+              [("C", "file1", ((3, 5), (3, 6)), ["class"]);
+               ("( .ctor )", "file1", ((3, 5), (3, 6)), ["member"; "ctor"]);
+               ("P", "file1", ((4, 13), (4, 14)), ["member"; "getter"]);
+               ("x", "file1", ((4, 11), (4, 12)), []);
+               ("( + )", "file1", ((6, 12), (6, 13)), ["val"]);
+               ("xxx", "file1", ((6, 4), (6, 7)), ["val"]);
+               ("( + )", "file1", ((7, 17), (7, 18)), ["val"]);
+               ("xxx", "file1", ((7, 13), (7, 16)), ["val"]);
+               ("xxx", "file1", ((7, 19), (7, 22)), ["val"]);
+               ("fff", "file1", ((7, 4), (7, 7)), ["val"]);
+               ("C", "file1", ((9, 15), (9, 16)), ["class"]);
+               ("C", "file1", ((9, 15), (9, 16)), ["class"]);
+               ("C", "file1", ((9, 15), (9, 16)), ["class"]);
+               ("C", "file1", ((9, 15), (9, 16)), ["class"]);
+               ("CAbbrev", "file1", ((9, 5), (9, 12)), ["abbrev"]);
+               ("M", "file1", ((1, 7), (1, 8)), ["module"])]
+
+
+//-----------------------------------------------------------------------------------------
+
+module Project2 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module M
+
+type DUWithNormalFields = 
+    | DU1 of int * int
+    | DU2 of int * int
+    | D of int * int
+
+let _ = DU1(1, 2)
+let _ = DU2(1, 2)
+let _ = D(1, 2)
+
+type DUWithNamedFields = DU of x : int * y : int
+
+let _ = DU(x=1, y=2)
+
+type GenericClass<'T>() = 
+    member x.GenericMethod<'U>(t: 'T, u: 'U) = 1
+
+let c = GenericClass()
+let _ = c.GenericMethod(3, 4)
+
+let GenericFunction (x:'T, y: 'T) = (x,y) : ('T * 'T)
+
+let _ = GenericFunction(3, 4)
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+
+
+[]
+let ``Test project2 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously
+    wholeProjectResults .Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test project2 basic`` () = 
+
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously
+
+    set [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual (set ["M"])
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual ["DUWithNormalFields"; "DUWithNamedFields"; "GenericClass" ]
+
+    set [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] 
+        |> shouldEqual (set ["c"; "GenericFunction"])
+
+[]
+let ``Test project2 all symbols in signature`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously
+    let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities
+    [ for x in allSymbols -> x.ToString() ] 
+       |> shouldEqual 
+              ["M"; "val c"; "val GenericFunction"; "generic parameter T";
+               "DUWithNormalFields"; "DU1"; "field Item1"; "field Item2"; "DU2";
+               "field Item1"; "field Item2"; "D"; "field Item1"; "field Item2";
+               "DUWithNamedFields"; "DU"; "field x"; "field y"; "GenericClass`1";
+               "generic parameter T"; "member .ctor"; "member GenericMethod";
+               "generic parameter U"]
+
+[]
+let ``Test project2 all uses of all signature symbols`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously
+    let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities
+    let allUsesOfAllSymbols = 
+        [ for s in allSymbols do 
+             let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) |> Async.RunSynchronously -> (if s.FileName = Project2.fileName1 then "file1" else "??"), tupsZ s.RangeAlternate ]
+             yield s.ToString(), uses ]
+    let expected =      
+              [("M", [("file1", ((1, 7), (1, 8)))]);
+               ("val c", [("file1", ((19, 4), (19, 5))); ("file1", ((20, 8), (20, 9)))]);
+               ("val GenericFunction",
+                [("file1", ((22, 4), (22, 19))); ("file1", ((24, 8), (24, 23)))]);
+               ("generic parameter T",
+                [("file1", ((22, 23), (22, 25))); ("file1", ((22, 30), (22, 32)));
+                 ("file1", ((22, 45), (22, 47))); ("file1", ((22, 50), (22, 52)))]);
+               ("DUWithNormalFields", [("file1", ((3, 5), (3, 23)))]);
+               ("DU1", [("file1", ((4, 6), (4, 9))); ("file1", ((8, 8), (8, 11)))]);
+               ("field Item1", [("file1", ((4, 6), (4, 9))); ("file1", ((8, 8), (8, 11)))]);
+               ("field Item2", [("file1", ((4, 6), (4, 9))); ("file1", ((8, 8), (8, 11)))]);
+               ("DU2", [("file1", ((5, 6), (5, 9))); ("file1", ((9, 8), (9, 11)))]);
+               ("field Item1", [("file1", ((5, 6), (5, 9))); ("file1", ((9, 8), (9, 11)))]);
+               ("field Item2", [("file1", ((5, 6), (5, 9))); ("file1", ((9, 8), (9, 11)))]);
+               ("D", [("file1", ((6, 6), (6, 7))); ("file1", ((10, 8), (10, 9)))]);
+               ("field Item1",
+                [("file1", ((6, 6), (6, 7))); ("file1", ((10, 8), (10, 9)))]);
+               ("field Item2",
+                [("file1", ((6, 6), (6, 7))); ("file1", ((10, 8), (10, 9)))]);
+               ("DUWithNamedFields", [("file1", ((12, 5), (12, 22)))]);
+               ("DU", [("file1", ((12, 25), (12, 27))); ("file1", ((14, 8), (14, 10)))]);
+               ("field x",
+                [("file1", ((12, 25), (12, 27))); ("file1", ((14, 8), (14, 10)))]);
+               ("field y",
+                [("file1", ((12, 25), (12, 27))); ("file1", ((14, 8), (14, 10)))]);
+               ("GenericClass`1",
+                [("file1", ((16, 5), (16, 17))); ("file1", ((19, 8), (19, 20)))]);
+               ("generic parameter T",
+                [("file1", ((16, 18), (16, 20))); ("file1", ((17, 34), (17, 36)))]);
+               ("member .ctor",
+                [("file1", ((16, 5), (16, 17))); ("file1", ((19, 8), (19, 20)))]);
+               ("member GenericMethod",
+                [("file1", ((17, 13), (17, 26))); ("file1", ((20, 8), (20, 23)))]);
+               ("generic parameter U",
+                [("file1", ((17, 27), (17, 29))); ("file1", ((17, 41), (17, 43)))])]
+    set allUsesOfAllSymbols - set expected |> shouldEqual Set.empty
+    set expected - set allUsesOfAllSymbols |> shouldEqual Set.empty
+    (set expected = set allUsesOfAllSymbols) |> shouldEqual true
+
+[]
+let ``Test project2 all uses of all symbols`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously
+    let allUsesOfAllSymbols = 
+        [ for s in wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously -> 
+            s.Symbol.DisplayName, (if s.FileName = Project2.fileName1 then "file1" else "???"), tupsZ s.RangeAlternate, attribsOfSymbol s.Symbol ]
+    let expected =      
+          [("int", "file1", ((4, 13), (4, 16)), ["abbrev"]);
+           ("int", "file1", ((4, 19), (4, 22)), ["abbrev"]);
+           ("int", "file1", ((5, 13), (5, 16)), ["abbrev"]);
+           ("int", "file1", ((5, 19), (5, 22)), ["abbrev"]);
+           ("int", "file1", ((6, 11), (6, 14)), ["abbrev"]);
+           ("int", "file1", ((6, 17), (6, 20)), ["abbrev"]);
+           ("int", "file1", ((4, 13), (4, 16)), ["abbrev"]);
+           ("int", "file1", ((4, 19), (4, 22)), ["abbrev"]);
+           ("int", "file1", ((5, 13), (5, 16)), ["abbrev"]);
+           ("int", "file1", ((5, 19), (5, 22)), ["abbrev"]);
+           ("int", "file1", ((6, 11), (6, 14)), ["abbrev"]);
+           ("int", "file1", ((6, 17), (6, 20)), ["abbrev"]);
+           ("DU1", "file1", ((4, 6), (4, 9)), []);
+           ("DU2", "file1", ((5, 6), (5, 9)), []);
+           ("D", "file1", ((6, 6), (6, 7)), []);
+           ("DUWithNormalFields", "file1", ((3, 5), (3, 23)), ["union"]);
+           ("DU1", "file1", ((8, 8), (8, 11)), []);
+           ("DU2", "file1", ((9, 8), (9, 11)), []);
+           ("D", "file1", ((10, 8), (10, 9)), []);
+           ("int", "file1", ((12, 35), (12, 38)), ["abbrev"]);
+           ("int", "file1", ((12, 45), (12, 48)), ["abbrev"]);
+           ("int", "file1", ((12, 35), (12, 38)), ["abbrev"]);
+           ("x", "file1", ((12, 31), (12, 32)), []);
+           ("int", "file1", ((12, 45), (12, 48)), ["abbrev"]);
+           ("y", "file1", ((12, 41), (12, 42)), []);
+           ("DU", "file1", ((12, 25), (12, 27)), []);
+           ("DUWithNamedFields", "file1", ((12, 5), (12, 22)), ["union"]);
+           ("DU", "file1", ((14, 8), (14, 10)), []);
+           ("x", "file1", ((14, 11), (14, 12)), []);
+           ("y", "file1", ((14, 16), (14, 17)), []);
+           ("T", "file1", ((16, 18), (16, 20)), []);
+           ("GenericClass", "file1", ((16, 5), (16, 17)), ["class"]);
+           ("( .ctor )", "file1", ((16, 5), (16, 17)), ["member"; "ctor"]);
+           ("U", "file1", ((17, 27), (17, 29)), []);
+           ("T", "file1", ((17, 34), (17, 36)), []);
+           ("U", "file1", ((17, 41), (17, 43)), []);
+           ("GenericMethod", "file1", ((17, 13), (17, 26)), ["member"]);
+           ("x", "file1", ((17, 11), (17, 12)), []);
+           ("T", "file1", ((17, 34), (17, 36)), []);
+           ("U", "file1", ((17, 41), (17, 43)), []);
+           ("u", "file1", ((17, 38), (17, 39)), []);
+           ("t", "file1", ((17, 31), (17, 32)), []);
+           ("GenericClass", "file1", ((19, 8), (19, 20)), ["member"; "ctor"]);
+           ("int", "file1", ((19, 21), (19, 24)), ["abbrev"]);
+           ("c", "file1", ((19, 4), (19, 5)), ["val"]);
+           ("c", "file1", ((20, 8), (20, 9)), ["val"]);
+           ("GenericMethod", "file1", ((20, 8), (20, 23)), ["member"]);
+           ("int", "file1", ((20, 24), (20, 27)), ["abbrev"]);
+           ("T", "file1", ((22, 23), (22, 25)), []);
+           ("T", "file1", ((22, 30), (22, 32)), []);
+           ("y", "file1", ((22, 27), (22, 28)), []);
+           ("x", "file1", ((22, 21), (22, 22)), []);
+           ("T", "file1", ((22, 45), (22, 47)), []);
+           ("T", "file1", ((22, 50), (22, 52)), []);
+           ("x", "file1", ((22, 37), (22, 38)), []);
+           ("y", "file1", ((22, 39), (22, 40)), []);
+           ("GenericFunction", "file1", ((22, 4), (22, 19)), ["val"]);
+           ("GenericFunction", "file1", ((24, 8), (24, 23)), ["val"]);
+           ("M", "file1", ((1, 7), (1, 8)), ["module"])]
+    set allUsesOfAllSymbols - set expected |> shouldEqual Set.empty
+    set expected - set allUsesOfAllSymbols |> shouldEqual Set.empty
+    (set expected = set allUsesOfAllSymbols) |> shouldEqual true
+
+//-----------------------------------------------------------------------------------------
+
+module Project3 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module M
+
+type IFoo =
+    abstract InterfaceProperty: string
+    abstract InterfacePropertySet: string with set
+    abstract InterfaceMethod: methodArg:string -> string
+    []
+    abstract InterfaceEvent: IEvent
+
+[]
+type CFoo() =
+    abstract AbstractClassProperty: string
+    abstract AbstractClassPropertySet: string with set
+    abstract AbstractClassMethod: methodArg:string -> string
+    []
+    abstract AbstractClassEvent: IEvent
+
+type CBaseFoo() =
+    let ev = Event<_>()
+    abstract BaseClassProperty: string
+    abstract BaseClassPropertySet: string with set
+    abstract BaseClassMethod: methodArg:string -> string
+    []
+    abstract BaseClassEvent: IEvent
+    default __.BaseClassProperty = "dflt"
+    default __.BaseClassPropertySet with set (v:string) = ()
+    default __.BaseClassMethod(m) = m
+    []
+    default __.BaseClassEvent = ev.Publish
+
+type IFooImpl() =
+    let ev = Event<_>()
+    interface IFoo with
+        member this.InterfaceProperty = "v"
+        member this.InterfacePropertySet with set (v:string) = ()
+        member this.InterfaceMethod(x) = x
+        []
+        member this.InterfaceEvent = ev.Publish
+
+type CFooImpl() =
+    inherit CFoo()
+    let ev = Event<_>()
+    override this.AbstractClassProperty = "v"
+    override this.AbstractClassPropertySet with set (v:string) = ()
+    override this.AbstractClassMethod(x) = x
+    []
+    override this.AbstractClassEvent = ev.Publish
+
+type CBaseFooImpl() =
+    inherit CBaseFoo()
+    let ev = Event<_>()
+    override this.BaseClassProperty = "v"
+    override this.BaseClassPropertySet with set (v:string)  = ()
+    override this.BaseClassMethod(x) = x
+    []
+    override this.BaseClassEvent = ev.Publish
+
+let IFooImplObjectExpression() =
+    let ev = Event<_>()
+    { new IFoo with
+        member this.InterfaceProperty = "v"
+        member this.InterfacePropertySet with set (v:string) = ()
+        member this.InterfaceMethod(x) = x
+        []
+        member this.InterfaceEvent = ev.Publish }
+
+let CFooImplObjectExpression() =
+    let ev = Event<_>()
+    { new CFoo() with
+        override this.AbstractClassProperty = "v"
+        override this.AbstractClassPropertySet with set (v:string) = ()
+        override this.AbstractClassMethod(x) = x
+        []
+        override this.AbstractClassEvent = ev.Publish }
+
+let getP (foo: IFoo) = foo.InterfaceProperty
+let setP (foo: IFoo) v = foo.InterfacePropertySet <- v
+let getE (foo: IFoo) = foo.InterfaceEvent
+let getM (foo: IFoo) = foo.InterfaceMethod("d")
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+
+
+[]
+let ``Test project3 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously
+    wholeProjectResults .Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test project3 basic`` () = 
+
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously
+
+    set [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual (set ["M"])
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] 
+        |> shouldEqual ["IFoo"; "CFoo"; "CBaseFoo"; "IFooImpl"; "CFooImpl"; "CBaseFooImpl"]
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] 
+        |> shouldEqual ["IFooImplObjectExpression"; "CFooImplObjectExpression"; "getP"; "setP"; "getE";"getM"]
+
+[]
+let ``Test project3 all symbols in signature`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously
+    let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities
+    [ for x in allSymbols -> x.ToString(), attribsOfSymbol x ] 
+      |> shouldEqual 
+            [("M", ["module"]); 
+             ("val IFooImplObjectExpression", ["val"]);
+             ("val CFooImplObjectExpression", ["val"]); 
+             ("val getP", ["val"]);
+             ("val setP", ["val"]); ("val getE", ["val"]); 
+             ("val getM", ["val"]);
+             ("IFoo", ["interface"]); 
+             ("member InterfaceMethod", ["slot"; "member"]);
+             ("member add_InterfaceEvent", ["slot"; "member"; "add"]);
+             ("member get_InterfaceEvent", ["slot"; "member"; "getter"]);
+             ("member get_InterfaceProperty", ["slot"; "member"; "getter"]);
+             ("member remove_InterfaceEvent", ["slot"; "member"; "remove"]);
+             ("member set_InterfacePropertySet", ["slot"; "member"; "setter"]);
+             ("property InterfacePropertySet", ["slot"; "member"; "prop"]);
+             ("property InterfaceProperty", ["slot"; "member"; "prop"]);
+             ("property InterfaceEvent", ["slot"; "member"; "prop"; "clievent"]); 
+             ("CFoo", ["class"]);
+             ("member .ctor", ["member"; "ctor"]);
+             ("member AbstractClassMethod", ["slot"; "member"]);
+             ("member add_AbstractClassEvent", ["slot"; "member"; "add"]);
+             ("member get_AbstractClassEvent", ["slot"; "member"; "getter"]);
+             ("member get_AbstractClassProperty", ["slot"; "member"; "getter"]);
+             ("member remove_AbstractClassEvent", ["slot"; "member"; "remove"]);
+             ("member set_AbstractClassPropertySet", ["slot"; "member"; "setter"]);
+             ("property AbstractClassPropertySet", ["slot"; "member"; "prop"]);
+             ("property AbstractClassProperty", ["slot"; "member"; "prop"]);
+             ("property AbstractClassEvent", ["slot"; "member"; "prop"; "clievent"]);
+             ("CBaseFoo", ["class"]); ("member .ctor", ["member"; "ctor"]);
+             ("member BaseClassMethod", ["slot"; "member"]);
+             ("member BaseClassMethod", ["member"; "overridemem"]);
+             ("member add_BaseClassEvent", ["slot"; "member"; "add"]);
+             ("member add_BaseClassEvent", ["member"; "add"; "overridemem"]);
+             ("member get_BaseClassEvent", ["slot"; "member"; "getter"]);
+             ("member get_BaseClassEvent", ["member"; "getter"; "overridemem"]);
+             ("member get_BaseClassProperty", ["slot"; "member"; "getter"]);
+             ("member get_BaseClassProperty", ["member"; "getter"; "overridemem"]);
+             ("member remove_BaseClassEvent", ["slot"; "member"; "remove"]);
+             ("member remove_BaseClassEvent", ["member"; "remove"; "overridemem"]);
+             ("member set_BaseClassPropertySet", ["slot"; "member"; "setter"]);
+             ("member set_BaseClassPropertySet", ["member"; "setter"; "overridemem"]);
+             ("property BaseClassPropertySet", ["member"; "prop"; "overridemem"]);
+             ("property BaseClassPropertySet", ["slot"; "member"; "prop"]);
+             ("property BaseClassProperty", ["member"; "prop"; "overridemem"]);
+             ("property BaseClassProperty", ["slot"; "member"; "prop"]);
+             ("property BaseClassEvent", ["member"; "prop"; "overridemem"]);
+             ("property BaseClassEvent", ["slot"; "member"; "prop"]);
+             ("IFooImpl", ["class"]); ("member .ctor", ["member"; "ctor"]);
+             ("member InterfaceMethod", ["member"; "overridemem"; "intfmem"]);
+             ("member add_InterfaceEvent", ["member"; "overridemem"; "intfmem"]);
+             ("member get_InterfaceEvent", ["member"; "overridemem"; "intfmem"]);
+             ("member get_InterfaceProperty", ["member"; "overridemem"; "intfmem"]);
+             ("member remove_InterfaceEvent", ["member"; "overridemem"; "intfmem"]);
+             ("member set_InterfacePropertySet", ["member"; "overridemem"; "intfmem"]);
+             ("CFooImpl", ["class"]); ("member .ctor", ["member"; "ctor"]);
+             ("member AbstractClassMethod", ["member"; "overridemem"]);
+             ("member add_AbstractClassEvent", ["member"; "add"; "overridemem"]);
+             ("member get_AbstractClassEvent", ["member"; "getter"; "overridemem"]);
+             ("member get_AbstractClassProperty", ["member"; "getter"; "overridemem"]);
+             ("member remove_AbstractClassEvent", ["member"; "remove"; "overridemem"]);
+             ("member set_AbstractClassPropertySet", ["member"; "setter"; "overridemem"]);
+             ("property AbstractClassPropertySet", ["member"; "prop"; "overridemem"]);
+             ("property AbstractClassProperty", ["member"; "prop"; "overridemem"]);
+             ("property AbstractClassEvent", ["member"; "prop"; "clievent"; "overridemem"]);
+             ("CBaseFooImpl", ["class"]); ("member .ctor", ["member"; "ctor"]);
+             ("member BaseClassMethod", ["member"; "overridemem"]);
+             ("member add_BaseClassEvent", ["member"; "add"; "overridemem"]);
+             ("member get_BaseClassEvent", ["member"; "getter"; "overridemem"]);
+             ("member get_BaseClassProperty", ["member"; "getter"; "overridemem"]);
+             ("member remove_BaseClassEvent", ["member"; "remove"; "overridemem"]);
+             ("member set_BaseClassPropertySet", ["member"; "setter"; "overridemem"]);
+             ("property BaseClassPropertySet", ["member"; "prop"; "overridemem"]);
+             ("property BaseClassProperty", ["member"; "prop"; "overridemem"]);
+             ("property BaseClassEvent", ["member"; "prop"; "clievent"; "overridemem"])]
+
+[]
+let ``Test project3 all uses of all signature symbols`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously
+    let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities
+
+    let allUsesOfAllSymbols = 
+        [ for s in allSymbols do 
+             let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) |> Async.RunSynchronously -> 
+                            ((if s.FileName = Project3.fileName1 then "file1" else "??"), 
+                             tupsZ s.RangeAlternate, attribsOfSymbolUse s, attribsOfSymbol s.Symbol) ]
+             yield s.ToString(), uses ]
+    let expected =      
+        [("M", [("file1", ((1, 7), (1, 8)), ["defn"], ["module"])]);
+         ("val IFooImplObjectExpression",
+          [("file1", ((58, 4), (58, 28)), ["defn"], ["val"])]);
+         ("val CFooImplObjectExpression",
+          [("file1", ((67, 4), (67, 28)), ["defn"], ["val"])]);
+         ("val getP", [("file1", ((76, 4), (76, 8)), ["defn"], ["val"])]);
+         ("val setP", [("file1", ((77, 4), (77, 8)), ["defn"], ["val"])]);
+         ("val getE", [("file1", ((78, 4), (78, 8)), ["defn"], ["val"])]);
+         ("val getM", [("file1", ((79, 4), (79, 8)), ["defn"], ["val"])]);
+         ("IFoo",
+          [("file1", ((3, 5), (3, 9)), ["defn"], ["interface"]);
+           ("file1", ((33, 14), (33, 18)), ["type"], ["interface"]);
+           ("file1", ((60, 10), (60, 14)), ["type"], ["interface"]);
+           ("file1", ((76, 15), (76, 19)), ["type"], ["interface"]);
+           ("file1", ((77, 15), (77, 19)), ["type"], ["interface"]);
+           ("file1", ((78, 15), (78, 19)), ["type"], ["interface"]);
+           ("file1", ((79, 15), (79, 19)), ["type"], ["interface"])]);
+         ("member InterfaceMethod",
+          [("file1", ((6, 13), (6, 28)), ["defn"], ["slot"; "member"]);
+           ("file1", ((63, 20), (63, 35)), ["override"], ["slot"; "member"]);
+           ("file1", ((79, 23), (79, 42)), [], ["slot"; "member"]);
+           ("file1", ((36, 20), (36, 35)), ["override"], ["slot"; "member"])]);
+         ("member add_InterfaceEvent",
+          [("file1", ((8, 13), (8, 27)), ["defn"], ["slot"; "member"; "add"]);
+           ("file1", ((65, 20), (65, 34)), ["override"], ["slot"; "member"; "add"]);
+           ("file1", ((78, 23), (78, 41)), [], ["slot"; "member"; "add"]);
+           ("file1", ((38, 20), (38, 34)), ["override"], ["slot"; "member"; "add"])]);
+         ("member get_InterfaceEvent",
+          [("file1", ((8, 13), (8, 27)), ["defn"], ["slot"; "member"; "getter"]);
+           ("file1", ((65, 20), (65, 34)), ["override"], ["slot"; "member"; "getter"]);
+           ("file1", ((38, 20), (38, 34)), ["override"], ["slot"; "member"; "getter"])]);
+         ("member get_InterfaceProperty",
+          [("file1", ((4, 13), (4, 30)), ["defn"], ["slot"; "member"; "getter"]);
+           ("file1", ((61, 20), (61, 37)), ["override"], ["slot"; "member"; "getter"]);
+           ("file1", ((76, 23), (76, 44)), [], ["slot"; "member"; "getter"]);
+           ("file1", ((34, 20), (34, 37)), ["override"], ["slot"; "member"; "getter"])]);
+         ("member remove_InterfaceEvent",
+          [("file1", ((8, 13), (8, 27)), ["defn"], ["slot"; "member"; "remove"]);
+           ("file1", ((65, 20), (65, 34)), ["override"], ["slot"; "member"; "remove"]);
+           ("file1", ((38, 20), (38, 34)), ["override"], ["slot"; "member"; "remove"])]);
+         ("member set_InterfacePropertySet",
+          [("file1", ((5, 13), (5, 33)), ["defn"], ["slot"; "member"; "setter"]);
+           ("file1", ((62, 20), (62, 40)), ["override"], ["slot"; "member"; "setter"]);
+           ("file1", ((77, 25), (77, 49)), [], ["slot"; "member"; "setter"]);
+           ("file1", ((35, 20), (35, 40)), ["override"], ["slot"; "member"; "setter"])]);
+         ("property InterfacePropertySet",
+          [("file1", ((5, 13), (5, 33)), ["defn"], ["slot"; "member"; "prop"]);
+           ("file1", ((62, 20), (62, 40)), ["override"], ["slot"; "member"; "prop"]);
+           ("file1", ((77, 25), (77, 49)), [], ["slot"; "member"; "prop"]);
+           ("file1", ((35, 20), (35, 40)), ["override"], ["slot"; "member"; "prop"])]);
+         ("property InterfaceProperty",
+          [("file1", ((4, 13), (4, 30)), ["defn"], ["slot"; "member"; "prop"]);
+           ("file1", ((61, 20), (61, 37)), ["override"], ["slot"; "member"; "prop"]);
+           ("file1", ((76, 23), (76, 44)), [], ["slot"; "member"; "prop"]);
+           ("file1", ((34, 20), (34, 37)), ["override"], ["slot"; "member"; "prop"])]);
+         ("property InterfaceEvent",
+          [("file1", ((8, 13), (8, 27)), ["defn"], ["slot"; "member"; "prop"; "clievent"]);
+           ("file1", ((65, 20), (65, 34)), ["override"], ["slot"; "member"; "prop"; "clievent"]);
+           ("file1", ((38, 20), (38, 34)), ["override"], ["slot"; "member"; "prop"; "clievent"])]);
+         ("CFoo",
+          [("file1", ((11, 5), (11, 9)), ["defn"], ["class"]);
+           ("file1", ((41, 12), (41, 16)), ["type"], ["class"]);
+           ("file1", ((41, 12), (41, 16)), [], ["class"]);
+           ("file1", ((69, 10), (69, 14)), ["type"], ["class"]);
+           ("file1", ((69, 10), (69, 14)), [], ["class"])]);
+         ("member .ctor",
+          [("file1", ((11, 5), (11, 9)), ["defn"], ["member"; "ctor"]);
+           ("file1", ((41, 12), (41, 16)), ["type"], ["member"; "ctor"]);
+           ("file1", ((41, 12), (41, 16)), [], ["member"; "ctor"]);
+           ("file1", ((69, 10), (69, 14)), ["type"], ["member"; "ctor"]);
+           ("file1", ((69, 10), (69, 14)), [], ["member"; "ctor"])]);
+         ("member AbstractClassMethod",
+          [("file1", ((14, 13), (14, 32)), ["defn"], ["slot"; "member"]);
+           ("file1", ((72, 22), (72, 41)), ["override"], ["slot"; "member"]);
+           ("file1", ((45, 18), (45, 37)), ["override"], ["slot"; "member"])]);
+         ("member add_AbstractClassEvent",
+          [("file1", ((16, 13), (16, 31)), ["defn"], ["slot"; "member"; "add"]);
+           ("file1", ((74, 22), (74, 40)), ["override"], ["slot"; "member"; "add"]);
+           ("file1", ((47, 18), (47, 36)), ["override"], ["slot"; "member"; "add"])]);
+         ("member get_AbstractClassEvent",
+          [("file1", ((16, 13), (16, 31)), ["defn"], ["slot"; "member"; "getter"]);
+           ("file1", ((74, 22), (74, 40)), ["override"], ["slot"; "member"; "getter"]);
+           ("file1", ((47, 18), (47, 36)), ["override"], ["slot"; "member"; "getter"])]);
+         ("member get_AbstractClassProperty",
+          [("file1", ((12, 13), (12, 34)), ["defn"], ["slot"; "member"; "getter"]);
+           ("file1", ((70, 22), (70, 43)), ["override"], ["slot"; "member"; "getter"]);
+           ("file1", ((43, 18), (43, 39)), ["override"], ["slot"; "member"; "getter"])]);
+         ("member remove_AbstractClassEvent",
+          [("file1", ((16, 13), (16, 31)), ["defn"], ["slot"; "member"; "remove"]);
+           ("file1", ((74, 22), (74, 40)), ["override"], ["slot"; "member"; "remove"]);
+           ("file1", ((47, 18), (47, 36)), ["override"], ["slot"; "member"; "remove"])]);
+         ("member set_AbstractClassPropertySet",
+          [("file1", ((13, 13), (13, 37)), ["defn"], ["slot"; "member"; "setter"]);
+           ("file1", ((71, 22), (71, 46)), ["override"], ["slot"; "member"; "setter"]);
+           ("file1", ((44, 18), (44, 42)), ["override"], ["slot"; "member"; "setter"])]);
+         ("property AbstractClassPropertySet",
+          [("file1", ((13, 13), (13, 37)), ["defn"], ["slot"; "member"; "prop"]);
+           ("file1", ((71, 22), (71, 46)), ["override"], ["slot"; "member"; "prop"]);
+           ("file1", ((44, 18), (44, 42)), ["override"], ["slot"; "member"; "prop"])]);
+         ("property AbstractClassProperty",
+          [("file1", ((12, 13), (12, 34)), ["defn"], ["slot"; "member"; "prop"]);
+           ("file1", ((70, 22), (70, 43)), ["override"], ["slot"; "member"; "prop"]);
+           ("file1", ((43, 18), (43, 39)), ["override"], ["slot"; "member"; "prop"])]);
+         ("property AbstractClassEvent",
+          [("file1", ((16, 13), (16, 31)), ["defn"], ["slot"; "member"; "prop"; "clievent"]);
+           ("file1", ((74, 22), (74, 40)), ["override"], ["slot"; "member"; "prop"; "clievent"]);
+           ("file1", ((47, 18), (47, 36)), ["override"], ["slot"; "member"; "prop"; "clievent"])]);
+         ("CBaseFoo",
+          [("file1", ((18, 5), (18, 13)), ["defn"], ["class"]);
+           ("file1", ((50, 12), (50, 20)), ["type"], ["class"]);
+           ("file1", ((50, 12), (50, 20)), [], ["class"])]);
+         ("member .ctor",
+          [("file1", ((18, 5), (18, 13)), ["defn"], ["member"; "ctor"]);
+           ("file1", ((50, 12), (50, 20)), ["type"], ["member"; "ctor"]);
+           ("file1", ((50, 12), (50, 20)), [], ["member"; "ctor"])]);
+         ("member BaseClassMethod",
+          [("file1", ((22, 13), (22, 28)), ["defn"], ["slot"; "member"]);
+           ("file1", ((27, 15), (27, 30)), ["override"], ["slot"; "member"]);
+           ("file1", ((54, 18), (54, 33)), ["override"], ["slot"; "member"])]);
+         ("member BaseClassMethod",
+          [("file1", ((27, 15), (27, 30)), ["defn"], ["member"; "overridemem"])]);
+         ("member add_BaseClassEvent",
+          [("file1", ((24, 13), (24, 27)), ["defn"], ["slot"; "member"; "add"]);
+           ("file1", ((29, 15), (29, 29)), ["override"], ["slot"; "member"; "add"]);
+           ("file1", ((56, 18), (56, 32)), ["override"], ["slot"; "member"; "add"])]);
+         ("member add_BaseClassEvent",
+          [("file1", ((29, 15), (29, 29)), ["defn"], ["member"; "add"; "overridemem"])]);
+         ("member get_BaseClassEvent",
+          [("file1", ((24, 13), (24, 27)), ["defn"], ["slot"; "member"; "getter"]);
+           ("file1", ((29, 15), (29, 29)), ["override"], ["slot"; "member"; "getter"]);
+           ("file1", ((56, 18), (56, 32)), ["override"], ["slot"; "member"; "getter"])]);
+         ("member get_BaseClassEvent",
+          [("file1", ((29, 15), (29, 29)), ["defn"], ["member"; "getter"; "overridemem"])]);
+         ("member get_BaseClassProperty",
+          [("file1", ((20, 13), (20, 30)), ["defn"], ["slot"; "member"; "getter"]);
+           ("file1", ((25, 15), (25, 32)), ["override"], ["slot"; "member"; "getter"]);
+           ("file1", ((52, 18), (52, 35)), ["override"], ["slot"; "member"; "getter"])]);
+         ("member get_BaseClassProperty",
+          [("file1", ((25, 15), (25, 32)), ["defn"], ["member"; "getter"; "overridemem"])]);
+         ("member remove_BaseClassEvent",
+          [("file1", ((24, 13), (24, 27)), ["defn"], ["slot"; "member"; "remove"]);
+           ("file1", ((29, 15), (29, 29)), ["override"], ["slot"; "member"; "remove"]);
+           ("file1", ((56, 18), (56, 32)), ["override"], ["slot"; "member"; "remove"])]);
+         ("member remove_BaseClassEvent",
+          [("file1", ((29, 15), (29, 29)), ["defn"], ["member"; "remove"; "overridemem"])]);
+         ("member set_BaseClassPropertySet",
+          [("file1", ((21, 13), (21, 33)), ["defn"], ["slot"; "member"; "setter"]);
+           ("file1", ((26, 15), (26, 35)), ["override"], ["slot"; "member"; "setter"]);
+           ("file1", ((53, 18), (53, 38)), ["override"], ["slot"; "member"; "setter"])]);
+         ("member set_BaseClassPropertySet",
+          [("file1", ((26, 15), (26, 35)), ["defn"], ["member"; "setter"; "overridemem"])]);
+         ("property BaseClassPropertySet",
+          [("file1", ((26, 15), (26, 35)), ["defn"], ["member"; "prop"; "overridemem"])]);
+         ("property BaseClassPropertySet",
+          [("file1", ((21, 13), (21, 33)), ["defn"], ["slot"; "member"; "prop"]);
+           ("file1", ((26, 15), (26, 35)), ["override"], ["slot"; "member"; "prop"]);
+           ("file1", ((53, 18), (53, 38)), ["override"], ["slot"; "member"; "prop"])]);
+         ("property BaseClassProperty",
+          [("file1", ((25, 15), (25, 32)), ["defn"], ["member"; "prop"; "overridemem"])]);
+         ("property BaseClassProperty",
+          [("file1", ((20, 13), (20, 30)), ["defn"], ["slot"; "member"; "prop"]);
+           ("file1", ((25, 15), (25, 32)), ["override"], ["slot"; "member"; "prop"]);
+           ("file1", ((52, 18), (52, 35)), ["override"], ["slot"; "member"; "prop"])]);
+         ("property BaseClassEvent",
+          [("file1", ((29, 15), (29, 29)), ["defn"], ["member"; "prop"; "overridemem"])]);
+         ("property BaseClassEvent",
+          [("file1", ((24, 13), (24, 27)), ["defn"], ["slot"; "member"; "prop"]);
+           ("file1", ((29, 15), (29, 29)), ["override"], ["slot"; "member"; "prop"]);
+           ("file1", ((56, 18), (56, 32)), ["override"], ["slot"; "member"; "prop"])]);
+         ("IFooImpl", [("file1", ((31, 5), (31, 13)), ["defn"], ["class"])]);
+         ("member .ctor", [("file1", ((31, 5), (31, 13)), ["defn"], ["member"; "ctor"])]);
+         ("member InterfaceMethod",
+          [("file1", ((36, 20), (36, 35)), ["defn"], ["member"; "overridemem"; "intfmem"])]);
+         ("member add_InterfaceEvent",
+          [("file1", ((38, 20), (38, 34)), ["defn"], ["member"; "overridemem"; "intfmem"])]);
+         ("member get_InterfaceEvent",
+          [("file1", ((38, 20), (38, 34)), ["defn"], ["member"; "overridemem"; "intfmem"])]);
+         ("member get_InterfaceProperty",
+          [("file1", ((34, 20), (34, 37)), ["defn"], ["member"; "overridemem"; "intfmem"])]);
+         ("member remove_InterfaceEvent",
+          [("file1", ((38, 20), (38, 34)), ["defn"], ["member"; "overridemem"; "intfmem"])]);
+         ("member set_InterfacePropertySet",
+          [("file1", ((35, 20), (35, 40)), ["defn"], ["member"; "overridemem"; "intfmem"])]);
+         ("CFooImpl", [("file1", ((40, 5), (40, 13)), ["defn"], ["class"])]);
+         ("member .ctor", [("file1", ((40, 5), (40, 13)), ["defn"], ["member"; "ctor"])]);
+         ("member AbstractClassMethod",
+          [("file1", ((45, 18), (45, 37)), ["defn"], ["member"; "overridemem"])]);
+         ("member add_AbstractClassEvent",
+          [("file1", ((47, 18), (47, 36)), ["defn"], ["member"; "add"; "overridemem"])]);
+         ("member get_AbstractClassEvent",
+          [("file1", ((47, 18), (47, 36)), ["defn"], ["member"; "getter"; "overridemem"])]);
+         ("member get_AbstractClassProperty",
+          [("file1", ((43, 18), (43, 39)), ["defn"], ["member"; "getter"; "overridemem"])]);
+         ("member remove_AbstractClassEvent",
+          [("file1", ((47, 18), (47, 36)), ["defn"], ["member"; "remove"; "overridemem"])]);
+         ("member set_AbstractClassPropertySet",
+          [("file1", ((44, 18), (44, 42)), ["defn"], ["member"; "setter"; "overridemem"])]);
+         ("property AbstractClassPropertySet",
+          [("file1", ((44, 18), (44, 42)), ["defn"], ["member"; "prop"; "overridemem"])]);
+         ("property AbstractClassProperty",
+          [("file1", ((43, 18), (43, 39)), ["defn"], ["member"; "prop"; "overridemem"])]);
+         ("property AbstractClassEvent",
+          [("file1", ((47, 18), (47, 36)), ["defn"], ["member"; "prop"; "clievent"; "overridemem"])]);
+         ("CBaseFooImpl", [("file1", ((49, 5), (49, 17)), ["defn"], ["class"])]);
+         ("member .ctor", [("file1", ((49, 5), (49, 17)), ["defn"], ["member"; "ctor"])]);
+         ("member BaseClassMethod",
+          [("file1", ((54, 18), (54, 33)), ["defn"], ["member"; "overridemem"])]);
+         ("member add_BaseClassEvent",
+          [("file1", ((56, 18), (56, 32)), ["defn"], ["member"; "add"; "overridemem"])]);
+         ("member get_BaseClassEvent",
+          [("file1", ((56, 18), (56, 32)), ["defn"], ["member"; "getter"; "overridemem"])]);
+         ("member get_BaseClassProperty",
+          [("file1", ((52, 18), (52, 35)), ["defn"], ["member"; "getter"; "overridemem"])]);
+         ("member remove_BaseClassEvent",
+          [("file1", ((56, 18), (56, 32)), ["defn"], ["member"; "remove"; "overridemem"])]);
+         ("member set_BaseClassPropertySet",
+          [("file1", ((53, 18), (53, 38)), ["defn"], ["member"; "setter"; "overridemem"])]);
+         ("property BaseClassPropertySet",
+          [("file1", ((53, 18), (53, 38)), ["defn"], ["member"; "prop"; "overridemem"])]);
+         ("property BaseClassProperty",
+          [("file1", ((52, 18), (52, 35)), ["defn"], ["member"; "prop"; "overridemem"])]);
+         ("property BaseClassEvent",
+          [("file1", ((56, 18), (56, 32)), ["defn"], ["member"; "prop"; "clievent"; "overridemem"])])]
+    set allUsesOfAllSymbols - set expected |> shouldEqual Set.empty
+    set expected - set allUsesOfAllSymbols |> shouldEqual Set.empty
+    (set expected = set allUsesOfAllSymbols) |> shouldEqual true
+
+//-----------------------------------------------------------------------------------------
+
+module Project4 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module M
+
+type Foo<'T>(x : 'T, y : Foo<'T>) = class end
+
+let inline twice(x : ^U, y : ^U) = x + y
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+
+
+[]
+let ``Test project4 whole project errors`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously
+    wholeProjectResults .Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test project4 basic`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously
+
+    set [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual (set ["M"])
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] 
+        |> shouldEqual ["Foo"]
+
+    [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] 
+        |> shouldEqual ["twice"]
+
+[]
+let ``Test project4 all symbols in signature`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously
+    let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities
+    [ for x in allSymbols -> x.ToString() ] 
+      |> shouldEqual 
+              ["M"; "val twice"; "generic parameter U"; "Foo`1"; "generic parameter T";
+               "member .ctor"]
+
+
+[]
+let ``Test project4 all uses of all signature symbols`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously
+    let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities
+    let allUsesOfAllSymbols = 
+        [ for s in allSymbols do 
+             let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) |> Async.RunSynchronously -> (if s.FileName = Project4.fileName1 then "file1" else "??"), tupsZ s.RangeAlternate ]
+             yield s.ToString(), uses ]
+    let expected =      
+      [("M", [("file1", ((1, 7), (1, 8)))]);
+       ("val twice", [("file1", ((5, 11), (5, 16)))]);
+       ("generic parameter U",
+        [("file1", ((5, 21), (5, 23))); ("file1", ((5, 29), (5, 31)))]);
+       ("Foo`1", [("file1", ((3, 5), (3, 8))); ("file1", ((3, 25), (3, 28)))]);
+       ("generic parameter T",
+        [("file1", ((3, 9), (3, 11))); ("file1", ((3, 17), (3, 19)));
+         ("file1", ((3, 29), (3, 31)))]);
+       ("member .ctor",
+        [("file1", ((3, 5), (3, 8))); ("file1", ((3, 25), (3, 28)))])]
+    
+    set allUsesOfAllSymbols - set expected |> shouldEqual Set.empty
+    set expected - set allUsesOfAllSymbols |> shouldEqual Set.empty
+    (set expected = set allUsesOfAllSymbols) |> shouldEqual true
+
+[]
+let ``Test project4 T symbols`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project4.fileName1, Project4.options) 
+        |> Async.RunSynchronously
+
+    let tSymbolUse2 = backgroundTypedParse1.GetSymbolUseAtLocation(4,19,"",["T"]) |> Async.RunSynchronously
+    tSymbolUse2.IsSome |> shouldEqual true
+    let tSymbol2 = tSymbolUse2.Value.Symbol 
+    tSymbol2.ToString() |> shouldEqual "generic parameter T"
+
+    tSymbol2.ImplementationLocation.IsSome |> shouldEqual true
+
+    let uses = backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously
+    let allUsesOfAllSymbols = 
+        [ for s in uses -> s.Symbol.ToString(), (if s.FileName = Project4.fileName1 then "file1" else "??"), tupsZ s.RangeAlternate ]
+    allUsesOfAllSymbols |> shouldEqual
+          [("generic parameter T", "file1", ((3, 9), (3, 11)));
+           ("Foo`1", "file1", ((3, 5), (3, 8)));
+           ("generic parameter T", "file1", ((3, 17), (3, 19)));
+           ("Foo`1", "file1", ((3, 25), (3, 28)));
+           ("generic parameter T", "file1", ((3, 29), (3, 31)));
+           ("val y", "file1", ((3, 21), (3, 22)));
+           ("val x", "file1", ((3, 13), (3, 14)));
+           ("member .ctor", "file1", ((3, 5), (3, 8)));
+           ("generic parameter U", "file1", ((5, 21), (5, 23)));
+           ("generic parameter U", "file1", ((5, 29), (5, 31)));
+           ("val y", "file1", ((5, 25), (5, 26)));
+           ("val x", "file1", ((5, 17), (5, 18)));
+           ("val op_Addition", "file1", ((5, 37), (5, 38)));
+           ("val x", "file1", ((5, 35), (5, 36)));
+           ("val y", "file1", ((5, 39), (5, 40)));
+           ("val twice", "file1", ((5, 11), (5, 16)));
+           ("M", "file1", ((1, 7), (1, 8)))]
+
+    let tSymbolUse3 = backgroundTypedParse1.GetSymbolUseAtLocation(4,11,"",["T"]) |> Async.RunSynchronously
+    tSymbolUse3.IsSome |> shouldEqual true
+    let tSymbol3 = tSymbolUse3.Value.Symbol
+    tSymbol3.ToString() |> shouldEqual "generic parameter T"
+
+    tSymbol3.ImplementationLocation.IsSome |> shouldEqual true
+
+    let usesOfTSymbol2 = 
+        wholeProjectResults.GetUsesOfSymbol(tSymbol2) |> Async.RunSynchronously
+        |> Array.map (fun su -> su.FileName , tupsZ su.RangeAlternate)
+        |> Array.map (fun (a,b) -> (if a = Project4.fileName1 then "file1" else "??"), b)
+
+    usesOfTSymbol2 |> shouldEqual 
+          [|("file1", ((3, 9), (3, 11))); ("file1", ((3, 17), (3, 19)));
+            ("file1", ((3, 29), (3, 31)))|]
+
+    let usesOfTSymbol3 = 
+        wholeProjectResults.GetUsesOfSymbol(tSymbol3) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.FileName , tupsZ su.RangeAlternate)
+        |> Array.map (fun (a,b) -> (if a = Project4.fileName1 then "file1" else "??"), b)
+
+    usesOfTSymbol3 |> shouldEqual usesOfTSymbol2
+
+    let uSymbolUse2 = backgroundTypedParse1.GetSymbolUseAtLocation(6,23,"",["U"]) |> Async.RunSynchronously
+    uSymbolUse2.IsSome |> shouldEqual true
+    let uSymbol2 = uSymbolUse2.Value.Symbol
+    uSymbol2.ToString() |> shouldEqual "generic parameter U"
+
+    uSymbol2.ImplementationLocation.IsSome |> shouldEqual true
+
+    let usesOfUSymbol2 = 
+        wholeProjectResults.GetUsesOfSymbol(uSymbol2) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.FileName , tupsZ su.RangeAlternate)
+        |> Array.map (fun (a,b) -> (if a = Project4.fileName1 then "file1" else "??"), b)
+
+    usesOfUSymbol2 |> shouldEqual  [|("file1", ((5, 21), (5, 23))); ("file1", ((5, 29), (5, 31)))|]
+
+//-----------------------------------------------------------------------------------------
+
+
+module Project5 = 
+    open System.IO
+
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module ActivePatterns 
+
+///Total active pattern for even/odd integers
+let (|Even|Odd|) input = if input % 2 = 0 then Even else Odd
+
+
+let TestNumber input =
+   match input with
+   | Even -> printfn "%d is even" input
+   | Odd -> printfn "%d is odd" input
+
+///Partial active pattern for floats
+let (|Float|_|) (str: string) =
+   let mutable floatvalue = 0.0
+   if System.Double.TryParse(str, &floatvalue) then Some(floatvalue)
+   else None
+
+
+let parseNumeric str =
+   match str with
+   | Float f -> printfn "%f : Floating point" f
+   | _ -> printfn "%s : Not matched." str
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test project5 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test project 5 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.FullName, Project5.cleanFileName su.FileName, tupsZ su.RangeAlternate, attribsOfSymbolUse su)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("symbol ", "Even", "file1", ((4, 6), (4, 10)), ["defn"]);
+            ("symbol ", "Odd", "file1", ((4, 11), (4, 14)), ["defn"]);
+            ("val input", "input", "file1", ((4, 17), (4, 22)), ["defn"]);
+            ("val op_Equality", "Microsoft.FSharp.Core.Operators.( = )", "file1",
+             ((4, 38), (4, 39)), []);
+            ("val op_Modulus", "Microsoft.FSharp.Core.Operators.( % )", "file1",
+             ((4, 34), (4, 35)), []);
+            ("val input", "input", "file1", ((4, 28), (4, 33)), []);
+            ("symbol ", "Even", "file1", ((4, 47), (4, 51)), []);
+            ("symbol ", "Odd", "file1", ((4, 57), (4, 60)), []);
+            ("val |Even|Odd|", "ActivePatterns.( |Even|Odd| )", "file1",
+             ((4, 5), (4, 15)), ["defn"]);
+            ("val input", "input", "file1", ((7, 15), (7, 20)), ["defn"]);
+            ("val input", "input", "file1", ((8, 9), (8, 14)), []);
+            ("symbol Even", "ActivePatterns.( |Even|Odd| ).Even", "file1",
+             ((9, 5), (9, 9)), ["pattern"]);
+            ("val printfn", "Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn",
+             "file1", ((9, 13), (9, 20)), []);
+            ("val input", "input", "file1", ((9, 34), (9, 39)), []);
+            ("symbol Odd", "ActivePatterns.( |Even|Odd| ).Odd", "file1",
+             ((10, 5), (10, 8)), ["pattern"]);
+            ("val printfn", "Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn",
+             "file1", ((10, 12), (10, 19)), []);
+            ("val input", "input", "file1", ((10, 32), (10, 37)), []);
+            ("val TestNumber", "ActivePatterns.TestNumber", "file1", ((7, 4), (7, 14)),
+             ["defn"]); ("symbol ", "Float", "file1", ((13, 6), (13, 11)), ["defn"]);
+            ("string", "Microsoft.FSharp.Core.string", "file1", ((13, 22), (13, 28)),
+             ["type"]); ("val str", "str", "file1", ((13, 17), (13, 20)), ["defn"]);
+            ("val floatvalue", "floatvalue", "file1", ((14, 15), (14, 25)), ["defn"]);
+            ("Double", "System.Double", "file1", ((15, 13), (15, 19)), []);
+            ("System", "System", "file1", ((15, 6), (15, 12)), []);
+            ("val str", "str", "file1", ((15, 29), (15, 32)), []);
+            ("val op_AddressOf",
+             "Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators.( ~& )",
+             "file1", ((15, 34), (15, 35)), []);
+            ("val floatvalue", "floatvalue", "file1", ((15, 35), (15, 45)), []);
+            ("member TryParse", "System.Double.TryParse", "file1", ((15, 6), (15, 28)),
+             []);
+            ("Some", "Microsoft.FSharp.Core.Option<_>.Some", "file1",
+             ((15, 52), (15, 56)), []);
+            ("val floatvalue", "floatvalue", "file1", ((15, 57), (15, 67)), []);
+            ("None", "Microsoft.FSharp.Core.Option<_>.None", "file1",
+             ((16, 8), (16, 12)), []);
+            ("val |Float|_|", "ActivePatterns.( |Float|_| )", "file1",
+             ((13, 5), (13, 14)), ["defn"]);
+            ("val str", "str", "file1", ((19, 17), (19, 20)), ["defn"]);
+            ("val str", "str", "file1", ((20, 9), (20, 12)), []);
+            ("val f", "f", "file1", ((21, 11), (21, 12)), ["defn"]);
+            ("symbol Float", "ActivePatterns.( |Float|_| ).Float", "file1",
+             ((21, 5), (21, 10)), ["pattern"]);
+            ("val printfn", "Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn",
+             "file1", ((21, 16), (21, 23)), []);
+            ("val f", "f", "file1", ((21, 46), (21, 47)), []);
+            ("val printfn", "Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn",
+             "file1", ((22, 10), (22, 17)), []);
+            ("val str", "str", "file1", ((22, 38), (22, 41)), []);
+            ("val parseNumeric", "ActivePatterns.parseNumeric", "file1",
+             ((19, 4), (19, 16)), ["defn"]);
+            ("ActivePatterns", "ActivePatterns", "file1", ((1, 7), (1, 21)), ["defn"])|]
+
+[]
+let ``Test complete active patterns' exact ranges from uses of symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project5.fileName1, Project5.options) 
+        |> Async.RunSynchronously
+
+    let oddSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(11,8,"",["Odd"]) |> Async.RunSynchronously
+    oddSymbolUse.IsSome |> shouldEqual true  
+    let oddSymbol = oddSymbolUse.Value.Symbol
+    oddSymbol.ToString() |> shouldEqual "symbol Odd"
+
+    let oddActivePatternCase = oddSymbol :?> FSharpActivePatternCase
+    oddActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Total active pattern for even/odd integers"]
+    oddActivePatternCase.XmlDocSig |> shouldEqual ""
+    let oddGroup = oddActivePatternCase.Group
+    oddGroup.IsTotal |> shouldEqual true
+    oddGroup.Names |> Seq.toList |> shouldEqual ["Even"; "Odd"]
+    oddGroup.OverallType.Format(oddSymbolUse.Value.DisplayContext) |> shouldEqual "int -> Choice"
+    let oddEntity = oddGroup.EnclosingEntity.Value
+    oddEntity.ToString() |> shouldEqual "ActivePatterns"
+
+    let evenSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(10,9,"",["Even"]) |> Async.RunSynchronously
+    evenSymbolUse.IsSome |> shouldEqual true  
+    let evenSymbol = evenSymbolUse.Value.Symbol
+    evenSymbol.ToString() |> shouldEqual "symbol Even"
+    let evenActivePatternCase = evenSymbol :?> FSharpActivePatternCase
+    evenActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Total active pattern for even/odd integers"]
+    evenActivePatternCase.XmlDocSig |> shouldEqual ""
+    let evenGroup = evenActivePatternCase.Group
+    evenGroup.IsTotal |> shouldEqual true
+    evenGroup.Names |> Seq.toList |> shouldEqual ["Even"; "Odd"]
+    evenGroup.OverallType.Format(evenSymbolUse.Value.DisplayContext) |> shouldEqual "int -> Choice"
+    let evenEntity = evenGroup.EnclosingEntity.Value
+    evenEntity.ToString() |> shouldEqual "ActivePatterns"
+
+    let usesOfEvenSymbol = 
+        wholeProjectResults.GetUsesOfSymbol(evenSymbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tupsZ su.RangeAlternate)
+
+    let usesOfOddSymbol = 
+        wholeProjectResults.GetUsesOfSymbol(oddSymbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tupsZ su.RangeAlternate)
+
+    usesOfEvenSymbol |> shouldEqual 
+          [|("symbol Even", "file1", ((4, 6), (4, 10)));
+            ("symbol Even", "file1", ((4, 47), (4, 51)));
+            ("symbol Even", "file1", ((9, 5), (9, 9)))|]
+
+    usesOfOddSymbol |> shouldEqual 
+          [|("symbol Odd", "file1", ((4, 11), (4, 14)));
+            ("symbol Odd", "file1", ((4, 57), (4, 60)));
+            ("symbol Odd", "file1", ((10, 5), (10, 8)))|]
+
+
+[]
+let ``Test partial active patterns' exact ranges from uses of symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project5.fileName1, Project5.options) 
+        |> Async.RunSynchronously    
+
+    let floatSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(22,10,"",["Float"]) |> Async.RunSynchronously
+    floatSymbolUse.IsSome |> shouldEqual true  
+    let floatSymbol = floatSymbolUse.Value.Symbol 
+    floatSymbol.ToString() |> shouldEqual "symbol Float"
+
+    let floatActivePatternCase = floatSymbol :?> FSharpActivePatternCase
+    floatActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Partial active pattern for floats"]
+    floatActivePatternCase.XmlDocSig |> shouldEqual ""
+    let floatGroup = floatActivePatternCase.Group
+    floatGroup.IsTotal |> shouldEqual false
+    floatGroup.Names |> Seq.toList |> shouldEqual ["Float"]
+    floatGroup.OverallType.Format(floatSymbolUse.Value.DisplayContext) |> shouldEqual "string -> float option"
+    let evenEntity = floatGroup.EnclosingEntity.Value
+    evenEntity.ToString() |> shouldEqual "ActivePatterns"
+
+    let usesOfFloatSymbol = 
+        wholeProjectResults.GetUsesOfSymbol(floatSymbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tups su.RangeAlternate)
+
+    usesOfFloatSymbol |> shouldEqual 
+          [|("symbol Float", "file1", ((14, 6), (14, 11)));
+            ("symbol Float", "file1", ((22, 5), (22, 10)))|]
+
+    // Should also return its definition
+    let floatSymUseOpt = 
+        backgroundTypedParse1.GetSymbolUseAtLocation(14,11,"",["Float"])
+        |> Async.RunSynchronously
+
+    floatSymUseOpt.IsSome |> shouldEqual true
+
+//-----------------------------------------------------------------------------------------
+
+module Project6 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Exceptions
+
+exception Fail of string
+
+let f () =
+   raise (Fail "unknown")
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test project6 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project6.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test project 6 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project6.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), Project6.cleanFileName su.FileName, tupsZ su.RangeAlternate, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("string", "file1", ((3, 18), (3, 24)), ["abbrev"]);
+            ("Fail", "file1", ((3, 10), (3, 14)), ["exn"]);
+            ("val raise", "file1", ((6, 3), (6, 8)), ["val"]);
+            ("Fail", "file1", ((6, 10), (6, 14)), ["exn"]);
+            ("val f", "file1", ((5, 4), (5, 5)), ["val"]);
+            ("Exceptions", "file1", ((1, 7), (1, 17)), ["module"])|]
+
+
+//-----------------------------------------------------------------------------------------
+
+module Project7 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module NamedArgs
+
+type C() = 
+    static member M(arg1: int, arg2: int, ?arg3 : int) = arg1 + arg2 + defaultArg arg3 4
+
+let x1 = C.M(arg1 = 3, arg2 = 4, arg3 = 5)
+
+let x2 = C.M(arg1 = 3, arg2 = 4, ?arg3 = Some 5)
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test project7 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project7.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test project 7 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project7.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project7.cleanFileName su.FileName, tups su.RangeAlternate)
+
+    let arg1symbol = 
+        wholeProjectResults.GetAllUsesOfAllSymbols() 
+        |> Async.RunSynchronously
+        |> Array.pick (fun x -> if x.Symbol.DisplayName = "arg1" then Some x.Symbol else None)
+    let arg1uses = 
+        wholeProjectResults.GetUsesOfSymbol(arg1symbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), Option.map tups su.Symbol.DeclarationLocation, Project7.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbol su.Symbol)
+    arg1uses |> shouldEqual
+          [|("val arg1", Some ((5, 20), (5, 24)), "file1", ((5, 20), (5, 24)), []);
+            ("val arg1", Some ((5, 20), (5, 24)), "file1", ((5, 57), (5, 61)), []);
+            ("val arg1", Some ((5, 20), (5, 24)), "file1", ((7, 13), (7, 17)), []);
+            ("val arg1", Some ((5, 20), (5, 24)), "file1", ((9, 13), (9, 17)), [])|]
+
+
+//-----------------------------------------------------------------------------------------
+module Project8 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module NamedUnionFields
+
+type A = B of xxx: int * yyy : int
+let b = B(xxx=1, yyy=2)
+
+let x = 
+    match b with
+    // does not find usage here
+    | B (xxx = a; yyy = b) -> ()
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test project8 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project8.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test project 8 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project8.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project8.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols 
+      |> shouldEqual
+              [|("int", "int", "file1", ((4, 19), (4, 22)), ["type"], ["abbrev"]);
+                ("int", "int", "file1", ((4, 31), (4, 34)), ["type"], ["abbrev"]);
+                ("int", "int", "file1", ((4, 19), (4, 22)), ["type"], ["abbrev"]);
+                ("parameter xxx", "xxx", "file1", ((4, 14), (4, 17)), ["defn"], []);
+                ("int", "int", "file1", ((4, 31), (4, 34)), ["type"], ["abbrev"]);
+                ("parameter yyy", "yyy", "file1", ((4, 25), (4, 28)), ["defn"], []);
+                ("B", "B", "file1", ((4, 9), (4, 10)), ["defn"], []);
+                ("A", "A", "file1", ((4, 5), (4, 6)), ["defn"], ["union"]);
+                ("B", "B", "file1", ((5, 8), (5, 9)), [], []);
+                ("parameter xxx", "xxx", "file1", ((5, 10), (5, 13)), [], []);
+                ("parameter yyy", "yyy", "file1", ((5, 17), (5, 20)), [], []);
+                ("val b", "b", "file1", ((5, 4), (5, 5)), ["defn"], ["val"]);
+                ("val b", "b", "file1", ((8, 10), (8, 11)), [], ["val"]);
+                ("parameter xxx", "xxx", "file1", ((10, 9), (10, 12)), ["pattern"], []);
+                ("parameter yyy", "yyy", "file1", ((10, 18), (10, 21)), ["pattern"], []);
+                ("val b", "b", "file1", ((10, 24), (10, 25)), ["defn"], []);
+                ("val a", "a", "file1", ((10, 15), (10, 16)), ["defn"], []);
+                ("B", "B", "file1", ((10, 6), (10, 7)), ["pattern"], []);
+                ("val x", "x", "file1", ((7, 4), (7, 5)), ["defn"], ["val"]);
+                ("NamedUnionFields", "NamedUnionFields", "file1", ((2, 7), (2, 23)),
+                 ["defn"], ["module"])|]
+
+    let arg1symbol = 
+        wholeProjectResults.GetAllUsesOfAllSymbols() 
+        |> Async.RunSynchronously
+        |> Array.pick (fun x -> if x.Symbol.DisplayName = "xxx" then Some x.Symbol else None)
+    let arg1uses = 
+        wholeProjectResults.GetUsesOfSymbol(arg1symbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> Option.map tups su.Symbol.DeclarationLocation, Project8.cleanFileName su.FileName, tups su.RangeAlternate)
+
+    arg1uses |> shouldEqual
+     [|(Some ((4, 14), (4, 17)), "file1", ((4, 14), (4, 17)));
+       (Some ((4, 14), (4, 17)), "file1", ((5, 10), (5, 13)));
+       (Some ((4, 14), (4, 17)), "file1", ((10, 9), (10, 12)))|]
+
+//-----------------------------------------------------------------------------------------
+module Project9 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Constraints
+
+let inline check< ^T when ^T : (static member IsInfinity : ^T -> bool)> (num: ^T) : ^T option =
+    if (^T : (static member IsInfinity: ^T -> bool) (num)) then None
+    else Some num
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test project9 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project9.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test project 9 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project9.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project9.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("generic parameter T", "T", "file1", ((4, 18), (4, 20)), []);
+            ("generic parameter T", "T", "file1", ((4, 26), (4, 28)), []);
+            ("generic parameter T", "T", "file1", ((4, 59), (4, 61)), []);
+            ("bool", "bool", "file1", ((4, 65), (4, 69)), ["abbrev"]);
+            ("parameter IsInfinity", "IsInfinity", "file1", ((4, 46), (4, 56)), []);
+            ("generic parameter T", "T", "file1", ((4, 78), (4, 80)), []);
+            ("val num", "num", "file1", ((4, 73), (4, 76)), []);
+            ("option`1", "option", "file1", ((4, 87), (4, 93)), ["abbrev"]);
+            ("generic parameter T", "T", "file1", ((4, 84), (4, 86)), []);
+            ("generic parameter T", "T", "file1", ((5, 8), (5, 10)), []);
+            ("generic parameter T", "T", "file1", ((5, 40), (5, 42)), []);
+            ("bool", "bool", "file1", ((5, 46), (5, 50)), ["abbrev"]);
+            ("parameter IsInfinity", "IsInfinity", "file1", ((5, 28), (5, 38)), []);
+            ("val num", "num", "file1", ((5, 53), (5, 56)), []);
+            ("None", "None", "file1", ((5, 64), (5, 68)), []);
+            ("Some", "Some", "file1", ((6, 9), (6, 13)), []);
+            ("val num", "num", "file1", ((6, 14), (6, 17)), []);
+            ("val check", "check", "file1", ((4, 11), (4, 16)), ["val"]);
+            ("Constraints", "Constraints", "file1", ((2, 7), (2, 18)), ["module"])|]
+
+    let arg1symbol = 
+        wholeProjectResults.GetAllUsesOfAllSymbols() 
+        |> Async.RunSynchronously
+        |> Array.pick (fun x -> if x.Symbol.DisplayName = "IsInfinity" then Some x.Symbol else None)
+    let arg1uses = 
+        wholeProjectResults.GetUsesOfSymbol(arg1symbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> Option.map tups su.Symbol.DeclarationLocation, Project9.cleanFileName su.FileName, tups su.RangeAlternate)
+
+    arg1uses |> shouldEqual
+     [|(Some ((4, 46), (4, 56)), "file1", ((4, 46), (4, 56)))|]
+
+//-----------------------------------------------------------------------------------------
+// see https://github.com/fsharp/FSharp.Compiler.Service/issues/95
+
+module Project10 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module NamedArgs
+
+type C() = 
+    static member M(url: string, query: int)  = ()
+
+C.M("http://goo", query = 1)
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project10 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project10.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project10 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project10.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project10.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("C", "C", "file1", ((4, 5), (4, 6)), ["class"]);
+            ("member .ctor", "( .ctor )", "file1", ((4, 5), (4, 6)),
+             ["member"; "ctor"]);
+            ("string", "string", "file1", ((5, 25), (5, 31)), ["abbrev"]);
+            ("int", "int", "file1", ((5, 40), (5, 43)), ["abbrev"]);
+            ("member M", "M", "file1", ((5, 18), (5, 19)), ["member"]);
+            ("string", "string", "file1", ((5, 25), (5, 31)), ["abbrev"]);
+            ("int", "int", "file1", ((5, 40), (5, 43)), ["abbrev"]);
+            ("val url", "url", "file1", ((5, 20), (5, 23)), []);
+            ("val query", "query", "file1", ((5, 33), (5, 38)), []);
+            ("C", "C", "file1", ((7, 0), (7, 1)), ["class"]);
+            ("member M", "M", "file1", ((7, 0), (7, 3)), ["member"]);
+            ("parameter query", "query", "file1", ((7, 18), (7, 23)), []);
+            ("NamedArgs", "NamedArgs", "file1", ((2, 7), (2, 16)), ["module"])|]
+
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project10.fileName1, Project10.options) 
+        |> Async.RunSynchronously
+
+    let querySymbolUseOpt = 
+        backgroundTypedParse1.GetSymbolUseAtLocation(7,23,"",["query"]) 
+        |> Async.RunSynchronously
+
+    let querySymbolUse = querySymbolUseOpt.Value
+    let querySymbol = querySymbolUse.Symbol
+    querySymbol.ToString() |> shouldEqual "parameter query"
+
+    let querySymbolUse2Opt = 
+        backgroundTypedParse1.GetSymbolUseAtLocation(7,22,"",["query"])
+        |> Async.RunSynchronously
+
+    let querySymbolUse2 = querySymbolUse2Opt.Value
+    let querySymbol2 = querySymbolUse2.Symbol
+    querySymbol2.ToString() |> shouldEqual "val query" // This is perhaps the wrong result, but not that the input location was wrong - was not the "column at end of names"
+
+//-----------------------------------------------------------------------------------------
+// see https://github.com/fsharp/FSharp.Compiler.Service/issues/92
+
+module Project11 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module NestedTypes
+
+let enum = new System.Collections.Generic.Dictionary.Enumerator()
+let fff (x:System.Collections.Generic.Dictionary.Enumerator) = ()
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project11 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project11.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project11 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project11.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project11.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("Generic", "Generic", "file1", ((4, 34), (4, 41)), ["type"],
+             ["namespace"]);
+            ("Collections", "Collections", "file1", ((4, 22), (4, 33)), ["type"],
+             ["namespace"]);
+            ("System", "System", "file1", ((4, 15), (4, 21)), ["type"], ["namespace"]);
+            ("Dictionary`2", "Dictionary", "file1", ((4, 15), (4, 52)), ["type"],
+             ["class"]); ("int", "int", "file1", ((4, 53), (4, 56)), [], ["abbrev"]);
+            ("int", "int", "file1", ((4, 57), (4, 60)), [], ["abbrev"]);
+            ("Enumerator", "Enumerator", "file1", ((4, 62), (4, 72)), ["type"],
+             ["valuetype"]);
+            ("member .ctor", "Enumerator", "file1", ((4, 15), (4, 72)), [], ["member"]);
+            ("val enum", "enum", "file1", ((4, 4), (4, 8)), ["defn"], ["val"]);
+            ("Generic", "Generic", "file1", ((5, 30), (5, 37)), ["type"],
+             ["namespace"]);
+            ("Collections", "Collections", "file1", ((5, 18), (5, 29)), ["type"],
+             ["namespace"]);
+            ("System", "System", "file1", ((5, 11), (5, 17)), ["type"], ["namespace"]);
+            ("Dictionary`2", "Dictionary", "file1", ((5, 11), (5, 48)), ["type"],
+             ["class"]);
+            ("int", "int", "file1", ((5, 49), (5, 52)), ["type"], ["abbrev"]);
+            ("int", "int", "file1", ((5, 53), (5, 56)), ["type"], ["abbrev"]);
+            ("Enumerator", "Enumerator", "file1", ((5, 58), (5, 68)), ["type"],
+             ["valuetype"]); ("val x", "x", "file1", ((5, 9), (5, 10)), ["defn"], []);
+            ("val fff", "fff", "file1", ((5, 4), (5, 7)), ["defn"], ["val"]);
+            ("NestedTypes", "NestedTypes", "file1", ((2, 7), (2, 18)), ["defn"],
+             ["module"])|]
+
+//-----------------------------------------------------------------------------------------
+// see https://github.com/fsharp/FSharp.Compiler.Service/issues/92
+
+module Project12 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module ComputationExpressions
+
+let x1 = seq { for i in 0 .. 100 -> i }
+let x2 = query { for i in 0 .. 100 do
+                 where (i = 0)
+                 select (i,i) }
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project12 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project12.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project12 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project12.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project12.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("val seq", "seq", "file1", ((4, 9), (4, 12)), ["compexpr"], ["val"]);
+            ("val op_Range", "( .. )", "file1", ((4, 26), (4, 28)), [], ["val"]);
+            ("val i", "i", "file1", ((4, 19), (4, 20)), ["defn"], []);
+            ("val i", "i", "file1", ((4, 36), (4, 37)), [], []);
+            ("val x1", "x1", "file1", ((4, 4), (4, 6)), ["defn"], ["val"]);
+            ("val query", "query", "file1", ((5, 9), (5, 14)), [], ["val"]);
+            ("val query", "query", "file1", ((5, 9), (5, 14)), ["compexpr"], ["val"]);
+            ("member Where", "where", "file1", ((6, 17), (6, 22)), ["compexpr"],
+             ["member"]);
+            ("member Select", "select", "file1", ((7, 17), (7, 23)), ["compexpr"],
+             ["member"]);
+            ("val op_Range", "( .. )", "file1", ((5, 28), (5, 30)), [], ["val"]);
+            ("val i", "i", "file1", ((5, 21), (5, 22)), ["defn"], []);
+            ("val op_Equality", "( = )", "file1", ((6, 26), (6, 27)), [], ["val"]);
+            ("val i", "i", "file1", ((6, 24), (6, 25)), [], []);
+            ("val i", "i", "file1", ((7, 25), (7, 26)), [], []);
+            ("val i", "i", "file1", ((7, 27), (7, 28)), [], []);
+            ("val x2", "x2", "file1", ((5, 4), (5, 6)), ["defn"], ["val"]);
+            ("ComputationExpressions", "ComputationExpressions", "file1",
+             ((2, 7), (2, 29)), ["defn"], ["module"])|]
+
+//-----------------------------------------------------------------------------------------
+// Test fetching information about some external types (e.g. System.Object, System.DateTime)
+
+module Project13 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module ExternalTypes
+
+let x1  = new System.Object()
+let x2  = new System.DateTime(1,1,1)
+let x3 = new System.DateTime()
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project13 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project13.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project13 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project13.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project13.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("System", "System", "file1", ((4, 14), (4, 20)), ["type"], ["namespace"]);
+            ("Object", "Object", "file1", ((4, 14), (4, 27)), [], ["class"]);
+            ("member .ctor", "Object", "file1", ((4, 14), (4, 27)), [], ["member"]);
+            ("val x1", "x1", "file1", ((4, 4), (4, 6)), ["defn"], ["val"]);
+            ("System", "System", "file1", ((5, 14), (5, 20)), ["type"], ["namespace"]);
+            ("DateTime", "DateTime", "file1", ((5, 14), (5, 29)), [], ["valuetype"]);
+            ("member .ctor", "DateTime", "file1", ((5, 14), (5, 29)), [], ["member"]);
+            ("val x2", "x2", "file1", ((5, 4), (5, 6)), ["defn"], ["val"]);
+            ("System", "System", "file1", ((6, 13), (6, 19)), ["type"], ["namespace"]);
+            ("DateTime", "DateTime", "file1", ((6, 13), (6, 28)), [], ["valuetype"]);
+            ("member .ctor", "DateTime", "file1", ((6, 13), (6, 28)), [], ["member"]);
+            ("val x3", "x3", "file1", ((6, 4), (6, 6)), ["defn"], ["val"]);
+            ("ExternalTypes", "ExternalTypes", "file1", ((2, 7), (2, 20)), ["defn"],
+             ["module"])|]
+    
+
+    let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.Symbol.DisplayName = "Object")
+    let objEntity = objSymbol.Symbol :?> FSharpEntity
+    let objMemberNames = [ for x in objEntity.MembersFunctionsAndValues -> x.DisplayName ]
+    set objMemberNames |> shouldEqual (set [".ctor"; "ToString"; "Equals"; "Equals"; "ReferenceEquals"; "GetHashCode"; "GetType"; "Finalize"; "MemberwiseClone"])
+       
+    let dtSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.Symbol.DisplayName = "DateTime")
+    let dtEntity = dtSymbol.Symbol :?> FSharpEntity
+    let dtPropNames = [ for x in dtEntity.MembersFunctionsAndValues do if x.IsProperty then yield x.DisplayName ]
+
+    let dtType = dtSymbol.Symbol:?> FSharpEntity
+
+    set [ for i in dtType.DeclaredInterfaces -> i.ToString() ] |> shouldEqual
+        (set
+          ["type System.IComparable"; 
+           "type System.IFormattable";
+           "type System.IConvertible";
+           "type System.Runtime.Serialization.ISerializable";
+           "type System.IComparable";
+           "type System.IEquatable"])
+
+    dtType.BaseType.ToString() |> shouldEqual "Some(type System.ValueType)"
+    
+    set ["Date"; "Day"; "DayOfWeek"; "DayOfYear"; "Hour"; "Kind"; "Millisecond"; "Minute"; "Month"; "Now"; "Second"; "Ticks"; "TimeOfDay"; "Today"; "Year"]  
+    - set dtPropNames  
+      |> shouldEqual (set [])
+
+    let objDispatchSlotNames = [ for x in objEntity.MembersFunctionsAndValues do if x.IsDispatchSlot then yield x.DisplayName ]
+    
+    set objDispatchSlotNames |> shouldEqual (set ["ToString"; "Equals"; "GetHashCode"; "Finalize"])
+
+    // check we can get the CurriedParameterGroups
+    let objMethodsCurriedParameterGroups = 
+        [ for x in objEntity.MembersFunctionsAndValues do 
+             for pg in x.CurriedParameterGroups do 
+                 for p in pg do 
+                     yield x.CompiledName, p.Name,  p.Type.ToString(), p.Type.Format(dtSymbol.DisplayContext) ]
+
+    objMethodsCurriedParameterGroups |> shouldEqual 
+          [("Equals", Some "obj", "type Microsoft.FSharp.Core.obj", "obj");
+           ("Equals", Some "objA", "type Microsoft.FSharp.Core.obj", "obj");
+           ("Equals", Some "objB", "type Microsoft.FSharp.Core.obj", "obj");
+           ("ReferenceEquals", Some "objA", "type Microsoft.FSharp.Core.obj", "obj");
+           ("ReferenceEquals", Some "objB", "type Microsoft.FSharp.Core.obj", "obj")]
+
+    // check we can get the ReturnParameter
+    let objMethodsReturnParameter = 
+        [ for x in objEntity.MembersFunctionsAndValues do 
+             let p = x.ReturnParameter 
+             yield x.DisplayName, p.Name,  p.Type.ToString(), p.Type.Format(dtSymbol.DisplayContext) ]
+    set objMethodsReturnParameter |> shouldEqual
+       (set
+           [(".ctor", None, "type Microsoft.FSharp.Core.unit", "unit");
+            ("ToString", None, "type Microsoft.FSharp.Core.string", "string");
+            ("Equals", None, "type Microsoft.FSharp.Core.bool", "bool");
+            ("Equals", None, "type Microsoft.FSharp.Core.bool", "bool");
+            ("ReferenceEquals", None, "type Microsoft.FSharp.Core.bool", "bool");
+            ("GetHashCode", None, "type Microsoft.FSharp.Core.int", "int");
+            ("GetType", None, "type System.Type", "System.Type");
+            ("Finalize", None, "type Microsoft.FSharp.Core.unit", "unit");
+            ("MemberwiseClone", None, "type Microsoft.FSharp.Core.obj", "obj")])
+
+    // check we can get the CurriedParameterGroups
+    let dtMethodsCurriedParameterGroups = 
+        [ for x in dtEntity.MembersFunctionsAndValues do 
+           if x.CompiledName = "FromFileTime" || x.CompiledName = "AddMilliseconds"  then 
+             for pg in x.CurriedParameterGroups do 
+                 for p in pg do 
+                     yield x.CompiledName, p.Name,  p.Type.ToString(), p.Type.Format(dtSymbol.DisplayContext) ]
+
+    dtMethodsCurriedParameterGroups |> shouldEqual 
+          [("AddMilliseconds", Some "value", "type Microsoft.FSharp.Core.float","float");
+           ("FromFileTime", Some "fileTime", "type Microsoft.FSharp.Core.int64","int64")]
+
+
+    let _test1 = [ for x in objEntity.MembersFunctionsAndValues -> x.FullType ]
+    for x in objEntity.MembersFunctionsAndValues do 
+       x.IsCompilerGenerated |> shouldEqual false
+       x.IsExtensionMember |> shouldEqual false
+       x.IsEvent |> shouldEqual false
+       x.IsProperty |> shouldEqual false
+       x.IsPropertySetterMethod |> shouldEqual false
+       x.IsPropertyGetterMethod |> shouldEqual false
+       x.IsImplicitConstructor |> shouldEqual false
+       x.IsTypeFunction |> shouldEqual false
+       x.IsUnresolved |> shouldEqual false
+    ()
+
+//-----------------------------------------------------------------------------------------
+// Misc - structs
+
+module Project14 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Structs
+
+[]
+type S(p:int) = 
+   member x.P = p
+
+let x1  = S()
+let x2  = S(3)
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project14 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project14.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project14 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project14.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project14.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("StructAttribute", "StructAttribute", "file1", ((4, 2), (4, 8)),
+             ["attribute"]);
+            ("StructAttribute", "StructAttribute", "file1", ((4, 2), (4, 8)), ["type"]);
+            ("member .ctor", "StructAttribute", "file1", ((4, 2), (4, 8)), []);
+            ("int", "int", "file1", ((5, 9), (5, 12)), ["type"]);
+            ("int", "int", "file1", ((5, 9), (5, 12)), ["type"]);
+            ("S", "S", "file1", ((5, 5), (5, 6)), ["defn"]);
+            ("int", "int", "file1", ((5, 9), (5, 12)), ["type"]);
+            ("val p", "p", "file1", ((5, 7), (5, 8)), ["defn"]);
+            ("member .ctor", "( .ctor )", "file1", ((5, 5), (5, 6)), ["defn"]);
+            ("member get_P", "P", "file1", ((6, 12), (6, 13)), ["defn"]);
+            ("val x", "x", "file1", ((6, 10), (6, 11)), ["defn"]);
+            ("val p", "p", "file1", ((6, 16), (6, 17)), []);
+            ("member .ctor", ".ctor", "file1", ((8, 10), (8, 11)), []);
+            ("val x1", "x1", "file1", ((8, 4), (8, 6)), ["defn"]);
+            ("member .ctor", ".ctor", "file1", ((9, 10), (9, 11)), []);
+            ("val x2", "x2", "file1", ((9, 4), (9, 6)), ["defn"]);
+            ("Structs", "Structs", "file1", ((2, 7), (2, 14)), ["defn"])|]
+
+//-----------------------------------------------------------------------------------------
+// Misc - union patterns
+
+module Project15 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module UnionPatterns
+
+let f x = 
+    match x with 
+    | [h] 
+    | [_; h] 
+    | [_; _; h] -> h 
+    | _ -> 0
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project15 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project15.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project15 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project15.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project15.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("val x", "x", "file1", ((4, 6), (4, 7)), ["defn"]);
+            ("val x", "x", "file1", ((5, 10), (5, 11)), []);
+            ("val h", "h", "file1", ((6, 7), (6, 8)), ["defn"]);
+            ("val h", "h", "file1", ((7, 10), (7, 11)), ["defn"]);
+            ("val h", "h", "file1", ((8, 13), (8, 14)), ["defn"]);
+            ("val h", "h", "file1", ((8, 19), (8, 20)), []);
+            ("val f", "f", "file1", ((4, 4), (4, 5)), ["defn"]);
+            ("UnionPatterns", "UnionPatterns", "file1", ((2, 7), (2, 20)), ["defn"])|]
+
+
+//-----------------------------------------------------------------------------------------
+// Misc - signature files
+
+module Project16 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let sigFileName1 = Path.ChangeExtension(fileName1, ".fsi")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Impl
+
+type C() = 
+    member x.PC = 1
+
+and D() = 
+    member x.PD = 1
+
+and E() = 
+    member x.PE = 1
+
+and F = { Field1 : int; Field2 : int }
+and G = Case1 | Case2 of int
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let sigFileSource1 = """
+module Impl
+
+type C = 
+    new : unit -> C
+    member PC : int
+
+and [] D = 
+    new : unit -> D
+    member PD : int
+
+and [] E = 
+    new : unit -> E
+    member PE : int
+
+and F = { Field1 : int; Field2 : int }
+and G = Case1 | Case2 of int
+
+    """
+    File.WriteAllText(sigFileName1, sigFileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" elif a = sigFileName1 then "sig1"  else "??"
+
+    let fileNames = [sigFileName1; fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project16 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project16.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project16 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project16.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project16.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("ClassAttribute", "ClassAttribute", "sig1", ((8, 6), (8, 11)),
+             ["attribute"], ["class"]);
+            ("ClassAttribute", "ClassAttribute", "sig1", ((8, 6), (8, 11)), ["type"],
+             ["class"]);
+            ("member .ctor", "ClassAttribute", "sig1", ((8, 6), (8, 11)), [],
+             ["member"]);
+            ("ClassAttribute", "ClassAttribute", "sig1", ((12, 6), (12, 11)),
+             ["attribute"], ["class"]);
+            ("ClassAttribute", "ClassAttribute", "sig1", ((12, 6), (12, 11)), ["type"],
+             ["class"]);
+            ("member .ctor", "ClassAttribute", "sig1", ((12, 6), (12, 11)), [],
+             ["member"]);
+            ("int", "int", "sig1", ((16, 19), (16, 22)), ["type"], ["abbrev"]);
+            ("int", "int", "sig1", ((16, 33), (16, 36)), ["type"], ["abbrev"]);
+            ("int", "int", "sig1", ((17, 25), (17, 28)), ["type"], ["abbrev"]);
+            ("int", "int", "sig1", ((16, 19), (16, 22)), ["type"], ["abbrev"]);
+            ("int", "int", "sig1", ((16, 33), (16, 36)), ["type"], ["abbrev"]);
+            ("field Field1", "Field1", "sig1", ((16, 10), (16, 16)), ["defn"],
+             ["field"]);
+            ("field Field2", "Field2", "sig1", ((16, 24), (16, 30)), ["defn"],
+             ["field"]);
+            ("int", "int", "sig1", ((17, 25), (17, 28)), ["type"], ["abbrev"]);
+            ("Case1", "Case1", "sig1", ((17, 8), (17, 13)), ["defn"], []);
+            ("Case2", "Case2", "sig1", ((17, 16), (17, 21)), ["defn"], []);
+            ("C", "C", "sig1", ((4, 5), (4, 6)), ["defn"], ["class"]);
+            ("unit", "unit", "sig1", ((5, 10), (5, 14)), ["type"], ["abbrev"]);
+            ("C", "C", "sig1", ((5, 18), (5, 19)), ["type"], ["class"]);
+            ("member .ctor", "( .ctor )", "sig1", ((5, 4), (5, 7)), ["defn"],
+             ["member"]);
+            ("int", "int", "sig1", ((6, 16), (6, 19)), ["type"], ["abbrev"]);
+            ("member get_PC", "PC", "sig1", ((6, 11), (6, 13)), ["defn"],
+             ["member"; "getter"]);
+            ("D", "D", "sig1", ((8, 14), (8, 15)), ["defn"], ["class"]);
+            ("unit", "unit", "sig1", ((9, 10), (9, 14)), ["type"], ["abbrev"]);
+            ("D", "D", "sig1", ((9, 18), (9, 19)), ["type"], ["class"]);
+            ("member .ctor", "( .ctor )", "sig1", ((9, 4), (9, 7)), ["defn"],
+             ["member"]);
+            ("int", "int", "sig1", ((10, 16), (10, 19)), ["type"], ["abbrev"]);
+            ("member get_PD", "PD", "sig1", ((10, 11), (10, 13)), ["defn"],
+             ["member"; "getter"]);
+            ("E", "E", "sig1", ((12, 14), (12, 15)), ["defn"], ["class"]);
+            ("unit", "unit", "sig1", ((13, 10), (13, 14)), ["type"], ["abbrev"]);
+            ("E", "E", "sig1", ((13, 18), (13, 19)), ["type"], ["class"]);
+            ("member .ctor", "( .ctor )", "sig1", ((13, 4), (13, 7)), ["defn"],
+             ["member"]);
+            ("int", "int", "sig1", ((14, 16), (14, 19)), ["type"], ["abbrev"]);
+            ("member get_PE", "PE", "sig1", ((14, 11), (14, 13)), ["defn"],
+             ["member"; "getter"]);
+            ("F", "F", "sig1", ((16, 4), (16, 5)), ["defn"], ["record"]);
+            ("G", "G", "sig1", ((17, 4), (17, 5)), ["defn"], ["union"]);
+            ("Impl", "Impl", "sig1", ((2, 7), (2, 11)), ["defn"], ["module"]);
+            ("int", "int", "file1", ((13, 19), (13, 22)), ["type"], ["abbrev"]);
+            ("int", "int", "file1", ((13, 33), (13, 36)), ["type"], ["abbrev"]);
+            ("int", "int", "file1", ((14, 25), (14, 28)), ["type"], ["abbrev"]);
+            ("int", "int", "file1", ((13, 19), (13, 22)), ["type"], ["abbrev"]);
+            ("int", "int", "file1", ((13, 33), (13, 36)), ["type"], ["abbrev"]);
+            ("field Field1", "Field1", "file1", ((13, 10), (13, 16)), ["defn"],
+             ["field"]);
+            ("field Field2", "Field2", "file1", ((13, 24), (13, 30)), ["defn"],
+             ["field"]);
+            ("int", "int", "file1", ((14, 25), (14, 28)), ["type"], ["abbrev"]);
+            ("Case1", "Case1", "file1", ((14, 8), (14, 13)), ["defn"], []);
+            ("Case2", "Case2", "file1", ((14, 16), (14, 21)), ["defn"], []);
+            ("C", "C", "file1", ((4, 5), (4, 6)), ["defn"], ["class"]);
+            ("D", "D", "file1", ((7, 4), (7, 5)), ["defn"], ["class"]);
+            ("E", "E", "file1", ((10, 4), (10, 5)), ["defn"], ["class"]);
+            ("F", "F", "file1", ((13, 4), (13, 5)), ["defn"], ["record"]);
+            ("G", "G", "file1", ((14, 4), (14, 5)), ["defn"], ["union"]);
+            ("member .ctor", "( .ctor )", "file1", ((4, 5), (4, 6)), ["defn"],
+             ["member"; "ctor"]);
+            ("member get_PC", "PC", "file1", ((5, 13), (5, 15)), ["defn"],
+             ["member"; "getter"]);
+            ("member .ctor", "( .ctor )", "file1", ((7, 4), (7, 5)), ["defn"],
+             ["member"; "ctor"]);
+            ("member get_PD", "PD", "file1", ((8, 13), (8, 15)), ["defn"],
+             ["member"; "getter"]);
+            ("member .ctor", "( .ctor )", "file1", ((10, 4), (10, 5)), ["defn"],
+             ["member"; "ctor"]);
+            ("member get_PE", "PE", "file1", ((11, 13), (11, 15)), ["defn"],
+             ["member"; "getter"]);
+            ("val x", "x", "file1", ((5, 11), (5, 12)), ["defn"], []);
+            ("val x", "x", "file1", ((8, 11), (8, 12)), ["defn"], []);
+            ("val x", "x", "file1", ((11, 11), (11, 12)), ["defn"], []);
+            ("Impl", "Impl", "file1", ((2, 7), (2, 11)), ["defn"], ["module"])|]
+
+[]
+let ``Test Project16 sig symbols are equal to impl symbols`` () =
+
+    let checkResultsSig = 
+        checker.ParseAndCheckFileInProject(Project16.sigFileName1, 0, Project16.sigFileSource1, Project16.options)  |> Async.RunSynchronously
+        |> function 
+            | _, FSharpCheckFileAnswer.Succeeded(res) -> res
+            | _ -> failwithf "Parsing aborted unexpectedly..." 
+
+    let checkResultsImpl = 
+        checker.ParseAndCheckFileInProject(Project16.fileName1, 0, Project16.fileSource1, Project16.options)  |> Async.RunSynchronously
+        |> function 
+            | _, FSharpCheckFileAnswer.Succeeded(res) -> res
+            | _ -> failwithf "Parsing aborted unexpectedly..." 
+
+
+    let symbolsSig = checkResultsSig.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously
+    let symbolsImpl = checkResultsImpl.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously
+
+    // Test that all 'definition' symbols in the signature (or implementation) have a matching symbol in the 
+    // implementation (or signature).
+    let testFind (tag1,symbols1) (tag2,symbols2) = 
+        for (symUse1: FSharpSymbolUse) in symbols1 do 
+
+          if symUse1.IsFromDefinition && 
+             (match symUse1.Symbol with 
+              | :? FSharpMemberOrFunctionOrValue as m -> m.IsModuleValueOrMember
+              | :? FSharpEntity -> true
+              | _ -> false) then
+
+            let ok = 
+                symbols2 
+                |> Seq.filter (fun (symUse2:FSharpSymbolUse) -> 
+                    //if symUse2.IsFromDefinition && symUse1.Symbol.DisplayName = symUse2.Symbol.DisplayName then 
+                    //   printfn "Comparing \n\t'%A' \n\t\t@ %A \n\t\t@@ %A and \n\t'%A' \n\t\t@ %A \n\t\t@@ %A" symUse1.Symbol symUse1.Symbol.ImplementationLocation symUse1.Symbol.SignatureLocation symUse2.Symbol symUse2.Symbol.ImplementationLocation symUse2.Symbol.SignatureLocation
+                    symUse2.Symbol.IsEffectivelySameAs(symUse1.Symbol) )
+                |> Seq.toList
+
+            match ok with 
+            | [] -> failwith (sprintf "Didn't find symbol equivalent to %s symbol '%A' in %s" tag1 symUse1.Symbol tag2)
+            | [sym] -> ()  
+            | [sym1;sym2] when sym1.Symbol.DisplayName = sym2.Symbol.DisplayName -> ()   // constructor and type
+            | syms -> failwith (sprintf "Found multiple symbols for %s '%A' in  %s: '%A'" tag1 symUse1.Symbol tag2 [for sym in syms -> sym.Symbol ] )
+
+    testFind ("signature", symbolsSig) ("implementation", symbolsImpl)
+    testFind ("implementation", symbolsImpl) ("signature", symbolsSig)  // test the other way around too, since this signature doesn't hide any definitions
+
+    testFind ("implementation", symbolsImpl) ("implementation", symbolsImpl)  // of course this should pass...
+    testFind ("signature", symbolsSig) ("signature", symbolsSig)  // of course this should pass...
+
+
+
+//-----------------------------------------------------------------------------------------
+// Misc - namespace symbols
+
+module Project17 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Impl
+
+let _ = Microsoft.FSharp.Collections.List.Empty // check use of getter property using long namespace
+
+let f1 (x: System.Collections.Generic.IList<'T>) = x.Item(3), x.[3], x.Count  // check use of getter properties and indexer
+
+let f2 (x: System.Collections.Generic.IList) = x.[3] <- 4  // check use of .NET setter indexer
+
+let f3 (x: System.Exception) = x.HelpLink <- "" // check use of .NET setter property
+    """
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project17 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project17.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project17 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project17.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project17.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols 
+      |> shouldEqual
+              [|("Collections", "Collections", "file1", ((4, 25), (4, 36)), [],
+                 ["namespace"]);
+                ("FSharp", "FSharp", "file1", ((4, 18), (4, 24)), [], ["namespace"]);
+                ("Microsoft", "Microsoft", "file1", ((4, 8), (4, 17)), [], ["namespace"]);
+                ("FSharpList`1", "List", "file1", ((4, 8), (4, 41)), [], ["union"]);
+                ("int", "int", "file1", ((4, 42), (4, 45)), ["type"], ["abbrev"]);
+                ("FSharpList`1", "List", "file1", ((4, 8), (4, 46)), [], ["union"]);
+                ("property Empty", "Empty", "file1", ((4, 8), (4, 52)), [],
+                 ["member"; "prop"]);
+                ("Generic", "Generic", "file1", ((6, 30), (6, 37)), ["type"],
+                 ["namespace"]);
+                ("Collections", "Collections", "file1", ((6, 18), (6, 29)), ["type"],
+                 ["namespace"]);
+                ("System", "System", "file1", ((6, 11), (6, 17)), ["type"], ["namespace"]);
+                ("IList`1", "IList", "file1", ((6, 11), (6, 43)), ["type"], ["interface"]);
+                ("generic parameter T", "T", "file1", ((6, 44), (6, 46)), ["type"], []);
+                ("val x", "x", "file1", ((6, 8), (6, 9)), ["defn"], []);
+                ("val x", "x", "file1", ((6, 51), (6, 52)), [], []);
+                ("property Item", "Item", "file1", ((6, 51), (6, 57)), [],
+                 ["slot"; "member"; "prop"]);
+                ("val x", "x", "file1", ((6, 62), (6, 63)), [], []);
+                ("property Item", "Item", "file1", ((6, 62), (6, 67)), [],
+                 ["slot"; "member"; "prop"]);
+                ("val x", "x", "file1", ((6, 69), (6, 70)), [], []);
+                ("property Count", "Count", "file1", ((6, 69), (6, 76)), [],
+                 ["slot"; "member"; "prop"]);
+                ("val f1", "f1", "file1", ((6, 4), (6, 6)), ["defn"], ["val"]);
+                ("Generic", "Generic", "file1", ((8, 30), (8, 37)), ["type"],
+                 ["namespace"]);
+                ("Collections", "Collections", "file1", ((8, 18), (8, 29)), ["type"],
+                 ["namespace"]);
+                ("System", "System", "file1", ((8, 11), (8, 17)), ["type"], ["namespace"]);
+                ("IList`1", "IList", "file1", ((8, 11), (8, 43)), ["type"], ["interface"]);
+                ("int", "int", "file1", ((8, 44), (8, 47)), ["type"], ["abbrev"]);
+                ("val x", "x", "file1", ((8, 8), (8, 9)), ["defn"], []);
+                ("val x", "x", "file1", ((8, 52), (8, 53)), [], []);
+                ("property Item", "Item", "file1", ((8, 52), (8, 57)), [],
+                 ["slot"; "member"; "prop"]);
+                ("val f2", "f2", "file1", ((8, 4), (8, 6)), ["defn"], ["val"]);
+                ("System", "System", "file1", ((10, 11), (10, 17)), ["type"],
+                 ["namespace"]);
+                ("Exception", "Exception", "file1", ((10, 11), (10, 27)), ["type"],
+                 ["class"]); ("val x", "x", "file1", ((10, 8), (10, 9)), ["defn"], []);
+                ("val x", "x", "file1", ((10, 31), (10, 32)), [], []);
+                ("property HelpLink", "HelpLink", "file1", ((10, 31), (10, 41)), [],
+                 ["slot"; "member"; "prop"]);
+                ("val f3", "f3", "file1", ((10, 4), (10, 6)), ["defn"], ["val"]);
+                ("Impl", "Impl", "file1", ((2, 7), (2, 11)), ["defn"], ["module"])|]
+
+
+//-----------------------------------------------------------------------------------------
+// Misc - generic type definnitions
+
+module Project18 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Impl
+
+let _ = list<_>.Empty
+    """
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project18 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project18.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project18 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project18.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project18.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, 
+                                (match su.Symbol with :? FSharpEntity as e -> e.IsNamespace | _ -> false))
+
+    allUsesOfAllSymbols |> shouldEqual
+      [|("list`1", "list", "file1", ((4, 8), (4, 12)), [], false);
+        ("list`1", "list", "file1", ((4, 8), (4, 15)), [], false);
+        ("property Empty", "Empty", "file1", ((4, 8), (4, 21)), [], false);
+        ("Impl", "Impl", "file1", ((2, 7), (2, 11)), ["defn"], false)|]
+
+
+
+//-----------------------------------------------------------------------------------------
+// Misc - enums
+
+module Project19 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Impl
+
+type Enum = | EnumCase1 = 1 | EnumCase2 = 2
+
+let _ = Enum.EnumCase1
+let _ = Enum.EnumCase2
+let f x = match x with Enum.EnumCase1 -> 1 | Enum.EnumCase2 -> 2 | _ -> 3
+
+let s = System.DayOfWeek.Monday
+    """
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project19 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project19.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project19 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project19.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project19.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("field EnumCase1", "EnumCase1", "file1", ((4, 14), (4, 23)), ["defn"],
+             ["field"; "static"; "1"]);
+            ("field EnumCase2", "EnumCase2", "file1", ((4, 30), (4, 39)), ["defn"],
+             ["field"; "static"; "2"]);
+            ("Enum", "Enum", "file1", ((4, 5), (4, 9)), ["defn"],
+             ["enum"; "valuetype"]);
+            ("Enum", "Enum", "file1", ((6, 8), (6, 12)), [], ["enum"; "valuetype"]);
+            ("field EnumCase1", "EnumCase1", "file1", ((6, 8), (6, 22)), [],
+             ["field"; "static"; "1"]);
+            ("Enum", "Enum", "file1", ((7, 8), (7, 12)), [], ["enum"; "valuetype"]);
+            ("field EnumCase2", "EnumCase2", "file1", ((7, 8), (7, 22)), [],
+             ["field"; "static"; "2"]);
+            ("val x", "x", "file1", ((8, 6), (8, 7)), ["defn"], []);
+            ("val x", "x", "file1", ((8, 16), (8, 17)), [], []);
+            ("Enum", "Enum", "file1", ((8, 23), (8, 27)), [], ["enum"; "valuetype"]);
+            ("field EnumCase1", "EnumCase1", "file1", ((8, 23), (8, 37)), ["pattern"],
+             ["field"; "static"; "1"]);
+            ("Enum", "Enum", "file1", ((8, 45), (8, 49)), [], ["enum"; "valuetype"]);
+            ("field EnumCase2", "EnumCase2", "file1", ((8, 45), (8, 59)), ["pattern"],
+             ["field"; "static"; "2"]);
+            ("val f", "f", "file1", ((8, 4), (8, 5)), ["defn"], ["val"]);
+            ("DayOfWeek", "DayOfWeek", "file1", ((10, 15), (10, 24)), [],
+             ["enum"; "valuetype"]);
+            ("System", "System", "file1", ((10, 8), (10, 14)), [], ["namespace"]);
+            ("field Monday", "Monday", "file1", ((10, 8), (10, 31)), [], ["field"; "static"; "1"]);
+            ("val s", "s", "file1", ((10, 4), (10, 5)), ["defn"], ["val"]);
+            ("Impl", "Impl", "file1", ((2, 7), (2, 11)), ["defn"], ["module"])|]
+
+
+
+//-----------------------------------------------------------------------------------------
+// Misc - https://github.com/fsharp/FSharp.Compiler.Service/issues/109
+
+module Project20 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Impl
+
+type A<'T>() = 
+    member x.M() : 'T = failwith ""
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project20 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project20.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project20 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project20.options) |> Async.RunSynchronously
+
+    let tSymbolUse = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.RangeAlternate.StartLine = 5 && su.Symbol.ToString() = "generic parameter T")
+    let tSymbol = tSymbolUse.Symbol
+
+
+
+    let allUsesOfTSymbol = 
+        wholeProjectResults.GetUsesOfSymbol(tSymbol)
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project20.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol)
+
+    allUsesOfTSymbol |> shouldEqual
+          [|("generic parameter T", "T", "file1", ((4, 7), (4, 9)), ["type"], []);
+            ("generic parameter T", "T", "file1", ((5, 19), (5, 21)), ["type"], [])|]
+
+//-----------------------------------------------------------------------------------------
+// Misc - https://github.com/fsharp/FSharp.Compiler.Service/issues/137
+
+module Project21 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Impl
+
+type IMyInterface<'a> = 
+    abstract Method1: 'a -> unit
+    abstract Method2: 'a -> unit
+
+let _ = { new IMyInterface with
+              member x.Method1(arg1: string): unit = 
+                  raise (System.NotImplementedException())
+
+              member x.Method2(arg1: int): unit = 
+                  raise (System.NotImplementedException())
+               }
+
+    """
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project21 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project21.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 2
+
+
+[]
+let ``Test Project21 all symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project21.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project21.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol)
+
+    allUsesOfAllSymbols |> shouldEqual
+          [|("generic parameter a", "a", "file1", ((4, 18), (4, 20)), ["type"], []);
+            ("generic parameter a", "a", "file1", ((5, 22), (5, 24)), ["type"], []);
+            ("unit", "unit", "file1", ((5, 28), (5, 32)), ["type"], ["abbrev"]);
+            ("member Method1", "Method1", "file1", ((5, 13), (5, 20)), ["defn"],
+             ["slot"; "member"]);
+            ("generic parameter a", "a", "file1", ((6, 22), (6, 24)), ["type"], []);
+            ("unit", "unit", "file1", ((6, 28), (6, 32)), ["type"], ["abbrev"]);
+            ("member Method2", "Method2", "file1", ((6, 13), (6, 20)), ["defn"],
+             ["slot"; "member"]);
+            ("IMyInterface`1", "IMyInterface", "file1", ((4, 5), (4, 17)), ["defn"],
+             ["interface"]);
+            ("IMyInterface`1", "IMyInterface", "file1", ((8, 14), (8, 26)), ["type"],
+             ["interface"]);
+            ("int", "int", "file1", ((8, 27), (8, 30)), ["type"], ["abbrev"]);
+            ("val x", "x", "file1", ((9, 21), (9, 22)), ["defn"], []);
+            ("string", "string", "file1", ((9, 37), (9, 43)), ["type"], ["abbrev"]);
+            ("val x", "x", "file1", ((12, 21), (12, 22)), ["defn"], []);
+            ("int", "int", "file1", ((12, 37), (12, 40)), ["type"], ["abbrev"]);
+            ("val arg1", "arg1", "file1", ((12, 31), (12, 35)), ["defn"], []);
+            ("unit", "unit", "file1", ((12, 43), (12, 47)), ["type"], ["abbrev"]);
+            ("val raise", "raise", "file1", ((13, 18), (13, 23)), [], ["val"]);
+            ("System", "System", "file1", ((13, 25), (13, 31)), [], ["namespace"]);
+            ("member .ctor", ".ctor", "file1", ((13, 25), (13, 55)), [], ["member"]);
+            ("Impl", "Impl", "file1", ((2, 7), (2, 11)), ["defn"], ["module"])|]
+
+//-----------------------------------------------------------------------------------------
+// Misc - namespace symbols
+
+module Project22 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Impl
+
+type AnotherMutableList() = 
+    member x.Item with get() = 3 and set (v:int) = ()
+
+let f1 (x: System.Collections.Generic.IList<'T>) = () // grab the IList symbol and look into it
+let f2 (x: AnotherMutableList) = () // grab the AnotherMutableList symbol and look into it
+let f3 (x: System.Collections.ObjectModel.ObservableCollection<'T>) = () // grab the ObservableCollection symbol and look into it
+    """
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+
+[]
+let ``Test Project22 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project22.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project22 IList contents`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project22.options) |> Async.RunSynchronously
+
+    let ilistTypeUse = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.find (fun su -> su.Symbol.DisplayName = "IList")
+
+    let ocTypeUse = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.find (fun su -> su.Symbol.DisplayName = "ObservableCollection")
+
+    let alistTypeUse = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.find (fun su -> su.Symbol.DisplayName = "AnotherMutableList")
+
+
+    let ilistTypeDefn = ilistTypeUse.Symbol :?> FSharpEntity
+    let ocTypeDefn = ocTypeUse.Symbol :?> FSharpEntity
+    let alistTypeDefn = alistTypeUse.Symbol :?> FSharpEntity
+
+    set [ for x in ilistTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ]
+      |> shouldEqual
+           (set [("get_Item", ["slot"; "member"; "getter"]);
+                ("set_Item", ["slot"; "member"; "setter"]); 
+                ("IndexOf", ["slot"; "member"]);
+                ("Insert", ["slot"; "member"]); 
+                ("RemoveAt", ["slot"; "member"]);
+                ("Item", ["slot"; "member"; "prop"])])
+
+    set [ for x in ocTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ]
+      |> shouldEqual
+         (set [(".ctor", ["member"]); 
+               (".ctor", ["member"]); 
+               (".ctor", ["member"]);
+               ("Move", ["member"]); 
+               ("add_CollectionChanged", ["slot"; "member"; "add"]);
+               ("remove_CollectionChanged", ["slot"; "member"; "remove"]);
+               ("ClearItems", ["slot"; "member"]); 
+               ("RemoveItem", ["slot"; "member"]);
+               ("InsertItem", ["slot"; "member"]); 
+               ("SetItem", ["slot"; "member"]);
+               ("MoveItem", ["slot"; "member"]); 
+               ("OnPropertyChanged", ["slot"; "member"]);
+               ("add_PropertyChanged", ["slot"; "member"; "add"]);
+               ("remove_PropertyChanged", ["slot"; "member"; "remove"]);
+               ("OnCollectionChanged", ["slot"; "member"]);
+               ("BlockReentrancy", ["member"]); 
+               ("CheckReentrancy", ["member"]);
+               ("CollectionChanged", ["slot"; "member"; "event"]);
+               ("PropertyChanged", ["slot"; "member"; "event"])])
+
+    set [ for x in alistTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ]
+      |> shouldEqual
+            (set [(".ctor", ["member"; "ctor"]); 
+                  ("get_Item", ["member"; "getter"]);
+                  ("set_Item", ["member"; "setter"]); 
+                  ("Item", ["member"; "prop"])])
+
+    set [ for x in ilistTypeDefn.AllInterfaces -> x.TypeDefinition.DisplayName, attribsOfSymbol x.TypeDefinition ]
+       |> shouldEqual
+              (set [("IList", ["interface"]); ("ICollection", ["interface"]);
+                    ("IEnumerable", ["interface"]); ("IEnumerable", ["interface"])])
+
+[]
+let ``Test Project22 IList properties`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project22.options) |> Async.RunSynchronously
+
+    let ilistTypeUse = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.find (fun su -> su.Symbol.DisplayName = "IList")
+
+    let ilistTypeDefn = ilistTypeUse.Symbol :?> FSharpEntity
+
+    attribsOfSymbol ilistTypeDefn |> shouldEqual ["interface"]
+
+    ilistTypeDefn.Assembly.SimpleName |> shouldEqual "mscorlib"
+
+//-----------------------------------------------------------------------------------------
+// Misc - properties
+
+module Project23 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Impl
+
+type Class() =
+    static member StaticProperty = 1
+    member x.Property = 1
+
+module Getter =
+    type System.Int32 with
+        static member Zero = 0
+        member x.Value = 0 
+
+    let _ = 0 .Value
+
+module Setter =
+    type System.Int32 with
+        member x.Value with set (_: int) = ()
+
+    0 .Value <- 0
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+[]
+let ``Test Project23 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project23.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+[]
+let ``Test Project23 property`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project23.options) |> Async.RunSynchronously
+    let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously
+    
+    let classTypeUse = allSymbolsUses |> Array.find (fun su -> su.Symbol.DisplayName = "Class")
+    let classTypeDefn = classTypeUse.Symbol :?> FSharpEntity
+
+    [ for x in classTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ]
+      |> shouldEqual 
+          [(".ctor", ["member"; "ctor"]); 
+           ("get_Property", ["member"; "getter"]);
+           ("get_StaticProperty", ["member"; "getter"]);
+           ("StaticProperty", ["member"; "prop"]); 
+           ("Property", ["member"; "prop"])]
+
+    let getterModuleUse = allSymbolsUses |> Array.find (fun su -> su.Symbol.DisplayName = "Getter")
+    let getterModuleDefn = getterModuleUse.Symbol :?> FSharpEntity
+
+    [ for x in getterModuleDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ]
+      |> shouldEqual 
+              [("get_Zero", ["member"; "extmem"; "getter"]);
+               ("Zero", ["member"; "prop"; "extmem"]);
+               ("get_Value", ["member"; "extmem"; "getter"]);
+               ("Value", ["member"; "prop"; "extmem"])]
+
+    let extensionProps = getterModuleDefn.MembersFunctionsAndValues |> Seq.toArray |> Array.filter (fun su -> su.LogicalName = "Value" || su.LogicalName = "Zero" )
+    let extensionPropsRelated = 
+        extensionProps
+        |> Array.collect (fun f -> 
+            [|  if f.HasGetterMethod then
+                    yield (f.EnclosingEntity.FullName, f.GetterMethod.CompiledName, f.GetterMethod.EnclosingEntity.FullName, attribsOfSymbol f)
+                if f.HasSetterMethod then
+                    yield (f.EnclosingEntity.FullName, f.SetterMethod.CompiledName, f.SetterMethod.EnclosingEntity.FullName, attribsOfSymbol f)
+            |])
+        |> Array.toList
+
+    extensionPropsRelated  |> shouldEqual
+          [("System.Int32", "Int32.get_Zero.Static", "Impl.Getter",
+            ["member"; "prop"; "extmem"]);
+           ("System.Int32", "Int32.get_Value", "Impl.Getter",
+            ["member"; "prop"; "extmem"])]       
+
+    allSymbolsUses 
+    |> Array.map (fun x -> x.Symbol)
+    |> Array.choose (function 
+        | :? FSharpMemberOrFunctionOrValue as f -> Some (f.LogicalName, attribsOfSymbol f)
+        | _ -> None)
+    |> Array.toList
+    |> shouldEqual         
+        [(".ctor", ["member"; "ctor"]); 
+         ("get_StaticProperty", ["member"; "getter"]);
+         ("get_Property", ["member"; "getter"]); 
+         ("x", []);
+         ("get_Zero", ["member"; "extmem"; "getter"]);
+         ("get_Value", ["member"; "extmem"; "getter"]); 
+         ("x", []);
+         ("Value", ["member"; "prop"; "extmem"]);
+         ("set_Value", ["member"; "extmem"; "setter"]); 
+         ("x", []);
+         ("_arg1", ["compgen"]); 
+         ("Value", ["member"; "prop"; "extmem"])]
+
+[]
+let ``Test Project23 extension properties' getters/setters should refer to the correct declaring entities`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project23.options) |> Async.RunSynchronously
+    let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously
+
+    let extensionMembers = allSymbolsUses |> Array.rev |> Array.filter (fun su -> su.Symbol.DisplayName = "Value")
+    extensionMembers
+    |> Array.collect (fun memb -> wholeProjectResults.GetUsesOfSymbol(memb.Symbol) |> Async.RunSynchronously)
+    |> Array.collect (fun x -> 
+        [|
+        match x.Symbol with
+        | :? FSharpMemberOrFunctionOrValue as f -> 
+            if f.HasGetterMethod then
+                yield (f.EnclosingEntity.FullName, f.GetterMethod.EnclosingEntity.FullName, attribsOfSymbol f)
+            if f.HasSetterMethod then
+                yield (f.EnclosingEntity.FullName, f.SetterMethod.EnclosingEntity.FullName, attribsOfSymbol f)
+        | _ -> () 
+        |])
+    |> Array.toList
+    |> shouldEqual 
+        [ ("System.Int32", "Impl.Setter", ["member"; "prop"; "extmem"]);
+          ("System.Int32", "Impl.Setter", ["member"; "prop"; "extmem"]);
+          ("System.Int32", "Impl.Getter", ["member"; "prop"; "extmem"])
+          ("System.Int32", "Impl.Getter", ["member"; "prop"; "extmem"]) ]
+
+// Misc - property symbols
+module Project24 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module PropertyTest
+
+type TypeWithProperties() =
+    member x.NameGetSet
+        with get() = 0
+        and set (v: int) = ()
+
+    member x.NameGet
+        with get() = 0
+        and set (v: int) = ()
+
+    member x.NameSet
+        with set (v: int) = ()
+
+    static member StaticNameGetSet
+        with get() = 0
+        and set (v: int) = ()
+
+    static member StaticNameGet
+        with get() = 0
+        and set (v: int) = ()
+
+    static member StaticNameSet
+        with set (v: int) = ()
+
+    member val AutoPropGet = 0 with get
+    member val AutoPropGetSet = 0 with get, set
+
+    static member val StaticAutoPropGet = 0 with get
+    static member val StaticAutoPropGetSet = 0 with get, set
+
+let v1 = TypeWithProperties().NameGetSet 
+TypeWithProperties().NameGetSet  <- 3
+
+let v2 = TypeWithProperties().NameGet
+
+TypeWithProperties().NameSet  <- 3
+
+let v3 = TypeWithProperties.StaticNameGetSet 
+TypeWithProperties.StaticNameGetSet  <- 3
+
+let v4 = TypeWithProperties.StaticNameGet
+
+TypeWithProperties.StaticNameSet  <- 3
+
+let v5 = TypeWithProperties().AutoPropGet 
+
+let v6 = TypeWithProperties().AutoPropGetSet
+TypeWithProperties().AutoPropGetSet  <- 3
+
+let v7 = TypeWithProperties.StaticAutoPropGet
+
+let v8 = TypeWithProperties.StaticAutoPropGetSet
+TypeWithProperties.StaticAutoPropGetSet  <- 3
+
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames) 
+    let internal options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+[]
+let ``Test Project24 whole project errors`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project24.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+[]
+let ``Test Project24 all symbols`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project24.options) |> Async.RunSynchronously
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project24.fileName1, Project24.options) 
+        |> Async.RunSynchronously   
+
+    let allUses  = 
+        backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() 
+        |> Async.RunSynchronously
+        |> Array.map (fun s -> (s.Symbol.DisplayName, Project24.cleanFileName s.FileName, tups s.RangeAlternate, attribsOfSymbolUse s, attribsOfSymbol s.Symbol))
+
+    allUses |> shouldEqual 
+          [|("TypeWithProperties", "file1", ((4, 5), (4, 23)), ["defn"], ["class"]);
+            ("( .ctor )", "file1", ((4, 5), (4, 23)), ["defn"], ["member"; "ctor"]);
+            ("NameGetSet", "file1", ((5, 13), (5, 23)), ["defn"], ["member"; "getter"]);
+            ("int", "file1", ((7, 20), (7, 23)), ["type"], ["abbrev"]);
+            ("NameGet", "file1", ((9, 13), (9, 20)), ["defn"], ["member"; "getter"]);
+            ("int", "file1", ((11, 20), (11, 23)), ["type"], ["abbrev"]);
+            ("int", "file1", ((14, 21), (14, 24)), ["type"], ["abbrev"]);
+            ("NameSet", "file1", ((13, 13), (13, 20)), ["defn"], ["member"; "setter"]);
+            ("StaticNameGetSet", "file1", ((16, 18), (16, 34)), ["defn"],
+             ["member"; "getter"]);
+            ("int", "file1", ((18, 20), (18, 23)), ["type"], ["abbrev"]);
+            ("StaticNameGet", "file1", ((20, 18), (20, 31)), ["defn"],
+             ["member"; "getter"]);
+            ("int", "file1", ((22, 20), (22, 23)), ["type"], ["abbrev"]);
+            ("int", "file1", ((25, 21), (25, 24)), ["type"], ["abbrev"]);
+            ("StaticNameSet", "file1", ((24, 18), (24, 31)), ["defn"],
+             ["member"; "setter"]);
+            ("AutoPropGet", "file1", ((27, 15), (27, 26)), ["defn"],
+             ["member"; "getter"]);
+            ("AutoPropGetSet", "file1", ((28, 15), (28, 29)), ["defn"],
+             ["member"; "getter"]);
+            ("StaticAutoPropGet", "file1", ((30, 22), (30, 39)), ["defn"],
+             ["member"; "getter"]);
+            ("StaticAutoPropGetSet", "file1", ((31, 22), (31, 42)), ["defn"],
+             ["member"; "getter"]);
+            ("( AutoPropGet@ )", "file1", ((27, 29), (27, 30)), ["defn"], []);
+            ("( AutoPropGetSet@ )", "file1", ((28, 32), (28, 33)), ["defn"],
+             ["mutable"]);
+            ("( StaticAutoPropGet@ )", "file1", ((30, 42), (30, 43)), ["defn"], []);
+            ("( StaticAutoPropGetSet@ )", "file1", ((31, 45), (31, 46)), ["defn"],
+             ["mutable"]); ("x", "file1", ((5, 11), (5, 12)), ["defn"], []);
+            ("int", "file1", ((7, 20), (7, 23)), ["type"], ["abbrev"]);
+            ("v", "file1", ((7, 17), (7, 18)), ["defn"], []);
+            ("x", "file1", ((9, 11), (9, 12)), ["defn"], []);
+            ("int", "file1", ((11, 20), (11, 23)), ["type"], ["abbrev"]);
+            ("v", "file1", ((11, 17), (11, 18)), ["defn"], []);
+            ("x", "file1", ((13, 11), (13, 12)), ["defn"], []);
+            ("int", "file1", ((14, 21), (14, 24)), ["type"], ["abbrev"]);
+            ("v", "file1", ((14, 18), (14, 19)), ["defn"], []);
+            ("int", "file1", ((18, 20), (18, 23)), ["type"], ["abbrev"]);
+            ("v", "file1", ((18, 17), (18, 18)), ["defn"], []);
+            ("int", "file1", ((22, 20), (22, 23)), ["type"], ["abbrev"]);
+            ("v", "file1", ((22, 17), (22, 18)), ["defn"], []);
+            ("int", "file1", ((25, 21), (25, 24)), ["type"], ["abbrev"]);
+            ("v", "file1", ((25, 18), (25, 19)), ["defn"], []);
+            ("( AutoPropGet@ )", "file1", ((27, 15), (27, 26)), [], []);
+            ("( AutoPropGetSet@ )", "file1", ((28, 15), (28, 29)), [], ["mutable"]);
+            ("v", "file1", ((28, 15), (28, 29)), ["defn"], []);
+            ("( StaticAutoPropGet@ )", "file1", ((30, 22), (30, 39)), [], []);
+            ("( StaticAutoPropGetSet@ )", "file1", ((31, 22), (31, 42)), [],
+             ["mutable"]); ("v", "file1", ((31, 22), (31, 42)), ["defn"], []);
+            ("( .cctor )", "file1", ((4, 5), (4, 23)), ["defn"], ["member"]);
+            ("TypeWithProperties", "file1", ((33, 9), (33, 27)), [],
+             ["member"; "ctor"]);
+            ("NameGetSet", "file1", ((33, 9), (33, 40)), [], ["member"; "prop"]);
+            ("v1", "file1", ((33, 4), (33, 6)), ["defn"], ["val"]);
+            ("TypeWithProperties", "file1", ((34, 0), (34, 18)), [],
+             ["member"; "ctor"]);
+            ("NameGetSet", "file1", ((34, 0), (34, 31)), [], ["member"; "prop"]);
+            ("TypeWithProperties", "file1", ((36, 9), (36, 27)), [],
+             ["member"; "ctor"]);
+            ("NameGet", "file1", ((36, 9), (36, 37)), [], ["member"; "prop"]);
+            ("v2", "file1", ((36, 4), (36, 6)), ["defn"], ["val"]);
+            ("TypeWithProperties", "file1", ((38, 0), (38, 18)), [],
+             ["member"; "ctor"]);
+            ("NameSet", "file1", ((38, 0), (38, 28)), [], ["member"; "prop"]);
+            ("TypeWithProperties", "file1", ((40, 9), (40, 27)), [], ["class"]);
+            ("StaticNameGetSet", "file1", ((40, 9), (40, 44)), [], ["member"; "prop"]);
+            ("v3", "file1", ((40, 4), (40, 6)), ["defn"], ["val"]);
+            ("TypeWithProperties", "file1", ((41, 0), (41, 18)), [], ["class"]);
+            ("StaticNameGetSet", "file1", ((41, 0), (41, 35)), [], ["member"; "prop"]);
+            ("TypeWithProperties", "file1", ((43, 9), (43, 27)), [], ["class"]);
+            ("StaticNameGet", "file1", ((43, 9), (43, 41)), [], ["member"; "prop"]);
+            ("v4", "file1", ((43, 4), (43, 6)), ["defn"], ["val"]);
+            ("TypeWithProperties", "file1", ((45, 0), (45, 18)), [], ["class"]);
+            ("StaticNameSet", "file1", ((45, 0), (45, 32)), [], ["member"; "prop"]);
+            ("TypeWithProperties", "file1", ((47, 9), (47, 27)), [],
+             ["member"; "ctor"]);
+            ("AutoPropGet", "file1", ((47, 9), (47, 41)), [], ["member"; "prop"]);
+            ("v5", "file1", ((47, 4), (47, 6)), ["defn"], ["val"]);
+            ("TypeWithProperties", "file1", ((49, 9), (49, 27)), [],
+             ["member"; "ctor"]);
+            ("AutoPropGetSet", "file1", ((49, 9), (49, 44)), [], ["member"; "prop"]);
+            ("v6", "file1", ((49, 4), (49, 6)), ["defn"], ["val"]);
+            ("TypeWithProperties", "file1", ((50, 0), (50, 18)), [],
+             ["member"; "ctor"]);
+            ("AutoPropGetSet", "file1", ((50, 0), (50, 35)), [], ["member"; "prop"]);
+            ("TypeWithProperties", "file1", ((52, 9), (52, 27)), [], ["class"]);
+            ("StaticAutoPropGet", "file1", ((52, 9), (52, 45)), [], ["member"; "prop"]);
+            ("v7", "file1", ((52, 4), (52, 6)), ["defn"], ["val"]);
+            ("TypeWithProperties", "file1", ((54, 9), (54, 27)), [], ["class"]);
+            ("StaticAutoPropGetSet", "file1", ((54, 9), (54, 48)), [],
+             ["member"; "prop"]);
+            ("v8", "file1", ((54, 4), (54, 6)), ["defn"], ["val"]);
+            ("TypeWithProperties", "file1", ((55, 0), (55, 18)), [], ["class"]);
+            ("StaticAutoPropGetSet", "file1", ((55, 0), (55, 39)), [],
+             ["member"; "prop"]);
+            ("PropertyTest", "file1", ((2, 7), (2, 19)), ["defn"], ["module"])|]
+
+[]
+let ``Test symbol uses of properties with both getters and setters`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project24.options) |> Async.RunSynchronously
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project24.fileName1, Project24.options) 
+        |> Async.RunSynchronously   
+
+    let getAllSymbolUses = 
+        backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() 
+        |> Async.RunSynchronously
+        |> Array.map (fun s -> (s.Symbol.DisplayName, Project24.cleanFileName s.FileName, tups s.RangeAlternate, attribsOfSymbol s.Symbol))
+
+    getAllSymbolUses |> shouldEqual
+          [|("TypeWithProperties", "file1", ((4, 5), (4, 23)), ["class"]);
+            ("( .ctor )", "file1", ((4, 5), (4, 23)), ["member"; "ctor"]);
+            ("NameGetSet", "file1", ((5, 13), (5, 23)), ["member"; "getter"]);
+            ("int", "file1", ((7, 20), (7, 23)), ["abbrev"]);
+            ("NameGet", "file1", ((9, 13), (9, 20)), ["member"; "getter"]);
+            ("int", "file1", ((11, 20), (11, 23)), ["abbrev"]);
+            ("int", "file1", ((14, 21), (14, 24)), ["abbrev"]);
+            ("NameSet", "file1", ((13, 13), (13, 20)), ["member"; "setter"]);
+            ("StaticNameGetSet", "file1", ((16, 18), (16, 34)), ["member"; "getter"]);
+            ("int", "file1", ((18, 20), (18, 23)), ["abbrev"]);
+            ("StaticNameGet", "file1", ((20, 18), (20, 31)), ["member"; "getter"]);
+            ("int", "file1", ((22, 20), (22, 23)), ["abbrev"]);
+            ("int", "file1", ((25, 21), (25, 24)), ["abbrev"]);
+            ("StaticNameSet", "file1", ((24, 18), (24, 31)), ["member"; "setter"]);
+            ("AutoPropGet", "file1", ((27, 15), (27, 26)), ["member"; "getter"]);
+            ("AutoPropGetSet", "file1", ((28, 15), (28, 29)), ["member"; "getter"]);
+            ("StaticAutoPropGet", "file1", ((30, 22), (30, 39)), ["member"; "getter"]);
+            ("StaticAutoPropGetSet", "file1", ((31, 22), (31, 42)),
+             ["member"; "getter"]);
+            ("( AutoPropGet@ )", "file1", ((27, 29), (27, 30)), []);
+            ("( AutoPropGetSet@ )", "file1", ((28, 32), (28, 33)), ["mutable"]);
+            ("( StaticAutoPropGet@ )", "file1", ((30, 42), (30, 43)), []);
+            ("( StaticAutoPropGetSet@ )", "file1", ((31, 45), (31, 46)), ["mutable"]);
+            ("x", "file1", ((5, 11), (5, 12)), []);
+            ("int", "file1", ((7, 20), (7, 23)), ["abbrev"]);
+            ("v", "file1", ((7, 17), (7, 18)), []);
+            ("x", "file1", ((9, 11), (9, 12)), []);
+            ("int", "file1", ((11, 20), (11, 23)), ["abbrev"]);
+            ("v", "file1", ((11, 17), (11, 18)), []);
+            ("x", "file1", ((13, 11), (13, 12)), []);
+            ("int", "file1", ((14, 21), (14, 24)), ["abbrev"]);
+            ("v", "file1", ((14, 18), (14, 19)), []);
+            ("int", "file1", ((18, 20), (18, 23)), ["abbrev"]);
+            ("v", "file1", ((18, 17), (18, 18)), []);
+            ("int", "file1", ((22, 20), (22, 23)), ["abbrev"]);
+            ("v", "file1", ((22, 17), (22, 18)), []);
+            ("int", "file1", ((25, 21), (25, 24)), ["abbrev"]);
+            ("v", "file1", ((25, 18), (25, 19)), []);
+            ("( AutoPropGet@ )", "file1", ((27, 15), (27, 26)), []);
+            ("( AutoPropGetSet@ )", "file1", ((28, 15), (28, 29)), ["mutable"]);
+            ("v", "file1", ((28, 15), (28, 29)), []);
+            ("( StaticAutoPropGet@ )", "file1", ((30, 22), (30, 39)), []);
+            ("( StaticAutoPropGetSet@ )", "file1", ((31, 22), (31, 42)), ["mutable"]);
+            ("v", "file1", ((31, 22), (31, 42)), []);
+            ("( .cctor )", "file1", ((4, 5), (4, 23)), ["member"]);
+            ("TypeWithProperties", "file1", ((33, 9), (33, 27)), ["member"; "ctor"]);
+            ("NameGetSet", "file1", ((33, 9), (33, 40)), ["member"; "prop"]);
+            ("v1", "file1", ((33, 4), (33, 6)), ["val"]);
+            ("TypeWithProperties", "file1", ((34, 0), (34, 18)), ["member"; "ctor"]);
+            ("NameGetSet", "file1", ((34, 0), (34, 31)), ["member"; "prop"]);
+            ("TypeWithProperties", "file1", ((36, 9), (36, 27)), ["member"; "ctor"]);
+            ("NameGet", "file1", ((36, 9), (36, 37)), ["member"; "prop"]);
+            ("v2", "file1", ((36, 4), (36, 6)), ["val"]);
+            ("TypeWithProperties", "file1", ((38, 0), (38, 18)), ["member"; "ctor"]);
+            ("NameSet", "file1", ((38, 0), (38, 28)), ["member"; "prop"]);
+            ("TypeWithProperties", "file1", ((40, 9), (40, 27)), ["class"]);
+            ("StaticNameGetSet", "file1", ((40, 9), (40, 44)), ["member"; "prop"]);
+            ("v3", "file1", ((40, 4), (40, 6)), ["val"]);
+            ("TypeWithProperties", "file1", ((41, 0), (41, 18)), ["class"]);
+            ("StaticNameGetSet", "file1", ((41, 0), (41, 35)), ["member"; "prop"]);
+            ("TypeWithProperties", "file1", ((43, 9), (43, 27)), ["class"]);
+            ("StaticNameGet", "file1", ((43, 9), (43, 41)), ["member"; "prop"]);
+            ("v4", "file1", ((43, 4), (43, 6)), ["val"]);
+            ("TypeWithProperties", "file1", ((45, 0), (45, 18)), ["class"]);
+            ("StaticNameSet", "file1", ((45, 0), (45, 32)), ["member"; "prop"]);
+            ("TypeWithProperties", "file1", ((47, 9), (47, 27)), ["member"; "ctor"]);
+            ("AutoPropGet", "file1", ((47, 9), (47, 41)), ["member"; "prop"]);
+            ("v5", "file1", ((47, 4), (47, 6)), ["val"]);
+            ("TypeWithProperties", "file1", ((49, 9), (49, 27)), ["member"; "ctor"]);
+            ("AutoPropGetSet", "file1", ((49, 9), (49, 44)), ["member"; "prop"]);
+            ("v6", "file1", ((49, 4), (49, 6)), ["val"]);
+            ("TypeWithProperties", "file1", ((50, 0), (50, 18)), ["member"; "ctor"]);
+            ("AutoPropGetSet", "file1", ((50, 0), (50, 35)), ["member"; "prop"]);
+            ("TypeWithProperties", "file1", ((52, 9), (52, 27)), ["class"]);
+            ("StaticAutoPropGet", "file1", ((52, 9), (52, 45)), ["member"; "prop"]);
+            ("v7", "file1", ((52, 4), (52, 6)), ["val"]);
+            ("TypeWithProperties", "file1", ((54, 9), (54, 27)), ["class"]);
+            ("StaticAutoPropGetSet", "file1", ((54, 9), (54, 48)), ["member"; "prop"]);
+            ("v8", "file1", ((54, 4), (54, 6)), ["val"]);
+            ("TypeWithProperties", "file1", ((55, 0), (55, 18)), ["class"]);
+            ("StaticAutoPropGetSet", "file1", ((55, 0), (55, 39)), ["member"; "prop"]);
+            ("PropertyTest", "file1", ((2, 7), (2, 19)), ["module"])|]
+
+    let getSampleSymbolUseOpt = 
+        backgroundTypedParse1.GetSymbolUseAtLocation(9,20,"",["NameGet"]) 
+        |> Async.RunSynchronously
+
+    let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol
+    
+    let usesOfGetSampleSymbol = 
+        backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun s -> (Project24.cleanFileName s.FileName, tups s.RangeAlternate))
+
+    usesOfGetSampleSymbol |> shouldEqual [|("file1", ((9, 13), (9, 20))); ("file1", ((36, 9), (36, 37)))|]
+
+#if CHECK_USE_OF_FSHARP_DATA_DLL
+// Misc - type provider symbols
+module Project25 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module TypeProviderTests
+open FSharp.Data
+type Project = XmlProvider<"13">
+let _ = Project.GetSample()
+
+type Record = { Field: int }
+let r = { Record.Field = 1 }
+
+let _ = XmlProvider<"13">.GetSample()
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = 
+        [| yield! mkProjectCommandLineArgs (dllName, fileNames) 
+           yield "-r:" + Path.Combine(__SOURCE_DIRECTORY__, "FSharp.Data.dll")
+           yield @"-r:" + sysLib "System.Xml.Linq" |]
+    let internal options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+[]
+let ``Test Project25 whole project errors`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously
+    for e in wholeProjectResults.Errors do 
+        printfn "Project25 error: <<<%s>>>" e.Message
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+[]
+let ``Test symbol uses of type-provided members`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) 
+        |> Async.RunSynchronously   
+
+    let allUses  = 
+        backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() 
+        |> Async.RunSynchronously
+        |> Array.map (fun s -> (s.Symbol.FullName, Project25.cleanFileName s.FileName, tups s.RangeAlternate, attribsOfSymbol s.Symbol))
+
+    allUses |> shouldEqual 
+
+          [|("FSharp.Data.XmlProvider", "file1", ((4, 15), (4, 26)),
+             ["class"; "provided"; "erased"]);
+            ("FSharp.Data.XmlProvider", "file1", ((4, 15), (4, 26)),
+             ["class"; "provided"; "erased"]);
+            ("FSharp.Data.XmlProvider", "file1", ((4, 15), (4, 26)),
+             ["class"; "provided"; "erased"]);
+            ("FSharp.Data.XmlProvider", "file1", ((4, 15), (4, 26)),
+             ["class"; "provided"; "erased"]);
+            ("TypeProviderTests.Project", "file1", ((4, 5), (4, 12)), ["abbrev"]);
+            ("TypeProviderTests.Project", "file1", ((5, 8), (5, 15)), ["abbrev"]);
+            ("FSharp.Data.XmlProvider<...>.GetSample", "file1", ((5, 8), (5, 25)),
+             ["member"]);
+            ("Microsoft.FSharp.Core.int", "file1", ((7, 23), (7, 26)), ["abbrev"]);
+            ("Microsoft.FSharp.Core.int", "file1", ((7, 23), (7, 26)), ["abbrev"]);
+            ("TypeProviderTests.Record.Field", "file1", ((7, 16), (7, 21)), ["field"]);
+            ("TypeProviderTests.Record", "file1", ((7, 5), (7, 11)), ["record"]);
+            ("TypeProviderTests.Record", "file1", ((8, 10), (8, 16)), ["record"]);
+            ("TypeProviderTests.Record.Field", "file1", ((8, 17), (8, 22)), ["field"]);
+            ("TypeProviderTests.r", "file1", ((8, 4), (8, 5)), ["val"]);
+            ("FSharp.Data.XmlProvider", "file1", ((10, 8), (10, 19)),
+             ["class"; "provided"; "erased"]);
+            ("FSharp.Data.XmlProvider<...>", "file1", ((10, 8), (10, 68)),
+             ["class"; "provided"; "staticinst"; "erased"]);
+            ("FSharp.Data.XmlProvider<...>.GetSample", "file1", ((10, 8), (10, 78)),
+             ["member"]);
+            ("TypeProviderTests", "file1", ((2, 7), (2, 24)), ["module"])|]
+    let getSampleSymbolUseOpt = 
+        backgroundTypedParse1.GetSymbolUseAtLocation(5,25,"",["GetSample"]) 
+        |> Async.RunSynchronously
+
+    let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol
+    
+    let usesOfGetSampleSymbol = 
+        backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.RangeAlternate))
+
+    usesOfGetSampleSymbol |> shouldEqual [|("file1", ((5, 8), (5, 25))); ("file1", ((10, 8), (10, 78)))|]
+
+[]
+let ``Test symbol uses of type-provided types`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) 
+        |> Async.RunSynchronously   
+
+    let getSampleSymbolUseOpt = 
+        backgroundTypedParse1.GetSymbolUseAtLocation(4,26,"",["XmlProvider"]) 
+        |> Async.RunSynchronously
+
+    let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol
+    
+    let usesOfGetSampleSymbol = 
+        backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.RangeAlternate))
+
+    usesOfGetSampleSymbol |> shouldEqual [|("file1", ((4, 15), (4, 26))); ("file1", ((10, 8), (10, 19)))|]
+
+[]
+let ``Test symbol uses of fully-qualified records`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously
+    let backgroundParseResults1, backgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) 
+        |> Async.RunSynchronously   
+
+    let getSampleSymbolUseOpt = 
+        backgroundTypedParse1.GetSymbolUseAtLocation(7,11,"",["Record"]) 
+        |> Async.RunSynchronously
+
+    let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol
+    
+    let usesOfGetSampleSymbol = 
+        backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) 
+        |> Async.RunSynchronously
+        |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.RangeAlternate))
+
+    usesOfGetSampleSymbol |> shouldEqual [|("file1", ((7, 5), (7, 11))); ("file1", ((8, 10), (8, 16)))|]
+#endif
+
+module Project26 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module FSharpParameter
+open System
+open System.Runtime.InteropServices
+
+type Class() =
+    member x.M1(arg1, ?arg2) = ()
+    member x.M2([] arg1, [] arg2) = ()
+    member x.M3([] arg: byref) = ()
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project26 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project26.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+
+[]
+let ``Test Project26 parameter symbols`` () =
+    let wholeProjectResults = checker.ParseAndCheckProject(Project26.options) |> Async.RunSynchronously
+
+    let allUsesOfAllSymbols = 
+        wholeProjectResults.GetAllUsesOfAllSymbols()
+        |> Async.RunSynchronously
+        |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project13.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol)
+
+
+    let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.Symbol.DisplayName = "Class")
+    let objEntity = objSymbol.Symbol :?> FSharpEntity
+    
+    // check we can get the CurriedParameterGroups
+    let objMethodsCurriedParameterGroups = 
+        [ for x in objEntity.MembersFunctionsAndValues do 
+             for pg in x.CurriedParameterGroups do 
+                 for p in pg do
+                     let attributeNames = 
+                        seq {
+                            if p.IsParamArrayArg then yield "params"
+                            if p.IsOutArg then yield "out"
+                            if p.IsOptionalArg then yield "optional"
+                        }
+                        |> String.concat ","
+                     yield x.CompiledName, p.Name,  p.Type.ToString(), attributeNames ]
+
+    objMethodsCurriedParameterGroups |> shouldEqual 
+          [("M1", Some "arg1", "type 'c", "");
+           ("M1", Some "arg2", "type 'd Microsoft.FSharp.Core.option", "optional");
+           ("M2", Some "arg1", "type 'a", "params");
+           ("M2", Some "arg2", "type 'b", "optional");
+           ("M3", Some "arg", "type Microsoft.FSharp.Core.byref", "out")]
+
+    // check we can get the ReturnParameter
+    let objMethodsReturnParameter = 
+        [ for x in objEntity.MembersFunctionsAndValues do 
+             let p = x.ReturnParameter 
+             let attributeNames = 
+                 seq {
+                    if p.IsParamArrayArg then yield "params"
+                    if p.IsOutArg then yield "out"
+                    if p.IsOptionalArg then yield "optional"
+                 }
+                 |> String.concat ","
+             yield x.DisplayName, p.Name,  p.Type.ToString(), attributeNames ]
+    set objMethodsReturnParameter |> shouldEqual
+       (set
+           [("( .ctor )", None, "type FSharpParameter.Class", "");
+            ("M1", None, "type Microsoft.FSharp.Core.unit", "");
+            ("M2", None, "type Microsoft.FSharp.Core.unit", "");
+            ("M3", None, "type Microsoft.FSharp.Core.unit", "")])
+
+module Project27 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module M
+
+type CFoo() =
+    abstract AbstractMethod: int -> string
+    default __.AbstractMethod _ = "dflt"
+    
+type CFooImpl() =
+    inherit CFoo()
+    override __.AbstractMethod _ = "v"
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+[]
+let ``Test project27 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project27.options) |> Async.RunSynchronously
+    wholeProjectResults .Errors.Length |> shouldEqual 0
+
+[]
+let ``Test project27 all symbols in signature`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project27.options) |> Async.RunSynchronously
+    let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities
+    [ for x in allSymbols -> x.ToString(), attribsOfSymbol x ] 
+      |> shouldEqual 
+            [("M", ["module"]); 
+             ("CFoo", ["class"]); 
+             ("member .ctor", ["member"; "ctor"]);
+             ("member AbstractMethod", ["slot"; "member"]);
+             ("member AbstractMethod", ["member"; "overridemem"]); 
+             ("CFooImpl", ["class"]);
+             ("member .ctor", ["member"; "ctor"]);
+             ("member AbstractMethod", ["member"; "overridemem"])]
+
+module Project28 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module M
+open System
+open System.Collections.Generic
+let (|Even|Odd|) input = if input % 2 = 0 then Even else Odd
+let TestNumber input =
+   match input with
+   | Even -> printfn "%d is even" input
+   | Odd -> printfn "%d is odd" input
+type DU = A of string | B of int
+type XmlDocSigTest() =
+    let event1 = new Event<_>()
+    let event2 = new Event<_>()
+    let aString = "fourtytwo"
+    let anInt = 42
+    member x.AProperty = Dictionary()
+    member x.AnotherProperty = aString
+    member x.AMethod () = x.AProperty
+    member x.AnotherMethod () = anInt
+    []
+    member this.AnEvent = event1.Publish
+    member this.AnotherEvent = event2.Publish
+    member this.TestEvent1(arg) = event1.Trigger(this, arg)
+    member this.TestEvent2(arg) = event2.Trigger(this, arg)
+
+type Use() =
+    let a = XmlDocSigTest ()
+    do a.AnEvent.Add (fun _ -> () )
+    member x.Test number =
+        TestNumber 42
+"""
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+[]
+let ``Test project28 all symbols in signature`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project28.options) |> Async.RunSynchronously
+    let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities
+    let xmlDocSigs =
+        allSymbols
+        |> Seq.map (fun s ->
+                        let typeName = s.GetType().Name
+                        match s with
+                        | :? FSharpEntity as fse -> typeName, fse.DisplayName, fse.XmlDocSig
+                        | :? FSharpField as fsf -> typeName, fsf.DisplayName, fsf.XmlDocSig
+                        | :? FSharpMemberOrFunctionOrValue as fsm -> typeName, fsm.DisplayName, fsm.XmlDocSig
+                        | :? FSharpUnionCase as fsu -> typeName, fsu.DisplayName, fsu.XmlDocSig
+                        | :? FSharpActivePatternCase as ap -> typeName, ap.DisplayName, ap.XmlDocSig
+                        | :? FSharpGenericParameter as fsg -> typeName, fsg.DisplayName, ""
+                        | :? FSharpParameter as fsp -> typeName, fsp.DisplayName, ""
+                        | :? FSharpStaticParameter as fss -> typeName, fss.DisplayName, ""
+                        | _ -> typeName, s.DisplayName, "unknown")
+        |> Seq.toArray
+
+    xmlDocSigs
+      |> shouldEqual 
+            [|("FSharpEntity", "M", "T:M");
+              ("FSharpMemberOrFunctionOrValue", "( |Even|Odd| )", "M:|Even|Odd|(System.Int32)");
+              ("FSharpMemberOrFunctionOrValue", "TestNumber", "M:TestNumber(System.Int32)");
+              ("FSharpEntity", "DU", "T:M.DU"); 
+              ("FSharpUnionCase", "A", "T:M.DU.A");
+              ("FSharpField", "A", "T:M.DU.A"); 
+              ("FSharpUnionCase", "B", "T:M.DU.B");
+              ("FSharpField", "B", "T:M.DU.B");
+              ("FSharpEntity", "XmlDocSigTest", "T:M.XmlDocSigTest");
+              ("FSharpMemberOrFunctionOrValue", "( .ctor )", "M:M.XmlDocSigTest.#ctor");
+              ("FSharpMemberOrFunctionOrValue", "AMethod", "M:M.XmlDocSigTest.AMethod");
+              ("FSharpMemberOrFunctionOrValue", "AnotherMethod", "M:M.XmlDocSigTest.AnotherMethod");
+              ("FSharpMemberOrFunctionOrValue", "TestEvent1", "M:M.XmlDocSigTest.TestEvent1(System.Object)");
+              ("FSharpMemberOrFunctionOrValue", "TestEvent2", "M:M.XmlDocSigTest.TestEvent2(System.Object)");
+              ("FSharpMemberOrFunctionOrValue", "add_AnEvent", "M:M.XmlDocSigTest.add_AnEvent(Microsoft.FSharp.Control.FSharpHandler{System.Tuple{M.XmlDocSigTest,System.Object}})");
+              ("FSharpMemberOrFunctionOrValue", "AProperty", "P:M.XmlDocSigTest.AProperty");
+              ("FSharpMemberOrFunctionOrValue", "AnEvent", "P:M.XmlDocSigTest.AnEvent");
+              ("FSharpMemberOrFunctionOrValue", "AnotherEvent", "P:M.XmlDocSigTest.AnotherEvent");
+              ("FSharpMemberOrFunctionOrValue", "AnotherProperty", "P:M.XmlDocSigTest.AnotherProperty");
+              ("FSharpMemberOrFunctionOrValue", "remove_AnEvent", "M:M.XmlDocSigTest.remove_AnEvent(Microsoft.FSharp.Control.FSharpHandler{System.Tuple{M.XmlDocSigTest,System.Object}})");
+              ("FSharpMemberOrFunctionOrValue", "AnotherProperty", "P:M.XmlDocSigTest.AnotherProperty");
+              ("FSharpMemberOrFunctionOrValue", "AnotherEvent", "P:M.XmlDocSigTest.AnotherEvent");
+              ("FSharpMemberOrFunctionOrValue", "AnEvent", "P:M.XmlDocSigTest.AnEvent");
+              ("FSharpMemberOrFunctionOrValue", "AProperty", "P:M.XmlDocSigTest.AProperty");
+              ("FSharpField", "event1", "P:M.XmlDocSigTest.event1");
+              ("FSharpField", "event2", "P:M.XmlDocSigTest.event2");
+              ("FSharpField", "aString", "P:M.XmlDocSigTest.aString");
+              ("FSharpField", "anInt", "P:M.XmlDocSigTest.anInt");
+              ("FSharpEntity", "Use", "T:M.Use");
+              ("FSharpMemberOrFunctionOrValue", "( .ctor )", "M:M.Use.#ctor");
+              ("FSharpMemberOrFunctionOrValue", "Test", "M:M.Use.Test``1(``0)");
+              ("FSharpGenericParameter", "?", "")|]
+
+module Project29 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module M
+open System.ComponentModel
+let f (x: INotifyPropertyChanged) = failwith ""            
+"""
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test project29 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project29.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+[]
+let ``Test project29 event symbols`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project29.options) |> Async.RunSynchronously
+    
+    let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.Symbol.DisplayName = "INotifyPropertyChanged")
+    let objEntity = objSymbol.Symbol :?> FSharpEntity
+
+    let objMethodsCurriedParameterGroups = 
+        [ for x in objEntity.MembersFunctionsAndValues do 
+             for pg in x.CurriedParameterGroups do 
+                 for p in pg do
+                     yield x.CompiledName, p.Name,  p.Type.Format(objSymbol.DisplayContext) ]
+
+    objMethodsCurriedParameterGroups |> shouldEqual 
+          [("add_PropertyChanged", Some "value", "PropertyChangedEventHandler");
+           ("remove_PropertyChanged", Some "value", "PropertyChangedEventHandler")]
+   
+    // check we can get the ReturnParameter
+    let objMethodsReturnParameter = 
+        [ for x in objEntity.MembersFunctionsAndValues do 
+             let p = x.ReturnParameter 
+             yield x.DisplayName, p.Name, p.Type.Format(objSymbol.DisplayContext) ]
+    set objMethodsReturnParameter |> shouldEqual
+       (set
+           [("PropertyChanged", None, "IEvent");
+           ("add_PropertyChanged", None, "unit");
+           ("remove_PropertyChanged", None, "unit")])
+
+
+module Project30 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+[]
+module Module
+open System
+type T() = 
+    []
+    member __.Member = 0         
+"""
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+let ``Test project30 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project30.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+[]
+let ``Test project30 Format attributes`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project30.options) |> Async.RunSynchronously
+    
+    let moduleSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.Symbol.DisplayName = "Module")
+    let moduleEntity = moduleSymbol.Symbol :?> FSharpEntity
+    
+    let moduleAttributes = 
+        [ for x in moduleEntity.Attributes do 
+             yield x.Format(moduleSymbol.DisplayContext), x.Format(FSharpDisplayContext.Empty) ]
+
+    moduleAttributes 
+    |> set
+    |> shouldEqual 
+         (set
+            [("[ (4))>]", 
+              "[ (4))>]")])
+   
+    let memberSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.Symbol.DisplayName = "Member")
+    let memberEntity = memberSymbol.Symbol :?> FSharpMemberOrFunctionOrValue
+    
+    let memberAttributes = 
+        [ for x in memberEntity.Attributes do 
+             yield x.Format(memberSymbol.DisplayContext), x.Format(FSharpDisplayContext.Empty) ]
+
+    memberAttributes
+    |> set 
+    |> shouldEqual 
+         (set
+              [("""[]""", 
+                """[]""")])
+
+module Project31 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module M
+open System
+open System.Collections.Generic
+open System.Diagnostics
+let f (x: List<'T>) = failwith ""
+let g = Console.ReadKey()        
+"""
+    File.WriteAllText(fileName1, fileSource1)
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+let ``Test project31 whole project errors`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+[]
+let ``Test project31 C# type attributes`` () =
+    if not runningOnMono then 
+        let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously
+    
+        let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.Symbol.DisplayName = "List")
+        let objEntity = objSymbol.Symbol :?> FSharpEntity
+   
+        [ for attrib in objEntity.Attributes do 
+             let args = try Seq.toList attrib.ConstructorArguments with _ -> []
+             let namedArgs = try Seq.toList attrib.NamedArguments with _ -> []
+             let output = sprintf "%A" (attrib.AttributeType, args, namedArgs)
+             yield output.Replace("\r\n", "\n").Replace("\n", "") ]
+        |> set
+        |> shouldEqual
+             (set ["(DebuggerTypeProxyAttribute, [], [])";
+                   """(DebuggerDisplayAttribute, [(type Microsoft.FSharp.Core.string, "Count = {Count}")], [])""";
+                   """(DefaultMemberAttribute, [(type Microsoft.FSharp.Core.string, "Item")], [])"""])
+
+[]
+let ``Test project31 C# method attributes`` () =
+    if not runningOnMono then 
+        let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously
+    
+        let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.Symbol.DisplayName = "Console")
+        let objEntity = objSymbol.Symbol :?> FSharpEntity
+  
+        let objMethodsAttributes = 
+            [ for x in objEntity.MembersFunctionsAndValues do 
+                 for attrib in x.Attributes do 
+                    let args = try Seq.toList attrib.ConstructorArguments with _ -> []
+                    let namedArgs = try Seq.toList attrib.NamedArguments with _ -> []
+                    yield sprintf "%A" (attrib.AttributeType, args, namedArgs) ]
+
+        objMethodsAttributes 
+        |> set
+        |> shouldEqual 
+              (set ["(SecuritySafeCriticalAttribute, [], [])";
+                    "(CLSCompliantAttribute, [(type Microsoft.FSharp.Core.bool, false)], [])"])
+
+[]
+let ``Test project31 Format C# type attributes`` () =
+    if not runningOnMono then 
+        let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously
+    
+        let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.Symbol.DisplayName = "List")
+        let objEntity = objSymbol.Symbol :?> FSharpEntity
+   
+        [ for attrib in objEntity.Attributes -> attrib.Format(objSymbol.DisplayContext) ]
+        |> set
+        |> shouldEqual
+             (set ["[>)>]";
+                   """[]""";
+                   """[]"""])
+
+[]
+let ``Test project31 Format C# method attributes`` () =
+    if not runningOnMono then 
+        let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously
+    
+        let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously |> Array.find (fun su -> su.Symbol.DisplayName = "Console")
+        let objEntity = objSymbol.Symbol :?> FSharpEntity
+  
+        let objMethodsAttributes = 
+            [ for x in objEntity.MembersFunctionsAndValues do 
+                 for attrib in x.Attributes -> attrib.Format(objSymbol.DisplayContext) ]
+
+        objMethodsAttributes 
+        |> set
+        |> shouldEqual 
+              (set ["[]";
+                    "[]"])
+
+module Project32 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let sigFileName1 = Path.ChangeExtension(fileName1, ".fsi")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Sample
+let func x = x + 1
+    """
+    File.WriteAllText(fileName1, fileSource1)
+
+    let sigFileSource1 = """
+module Sample
+
+val func : int -> int
+    """
+    File.WriteAllText(sigFileName1, sigFileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" elif a = sigFileName1 then "sig1"  else "??"
+
+    let fileNames = [sigFileName1; fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test Project32 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project32.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+[]
+let ``Test Project32 should be able to find sig symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project32.options) |> Async.RunSynchronously
+    let _sigBackgroundParseResults1, sigBackgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project32.sigFileName1, Project32.options) 
+        |> Async.RunSynchronously
+
+    let sigSymbolUseOpt = sigBackgroundTypedParse1.GetSymbolUseAtLocation(4,5,"",["func"]) |> Async.RunSynchronously
+    let sigSymbol = sigSymbolUseOpt.Value.Symbol
+    
+    let usesOfSigSymbol = 
+        [ for su in wholeProjectResults.GetUsesOfSymbol(sigSymbol) |> Async.RunSynchronously do
+              yield Project32.cleanFileName su.FileName , tups su.RangeAlternate, attribsOfSymbol su.Symbol ]
+
+    usesOfSigSymbol |> shouldEqual
+       [("sig1", ((4, 4), (4, 8)), ["val"]); 
+        ("file1", ((3, 4), (3, 8)), ["val"])]
+
+[]
+let ``Test Project32 should be able to find impl symbols`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project32.options) |> Async.RunSynchronously
+    let _implBackgroundParseResults1, implBackgroundTypedParse1 = 
+        checker.GetBackgroundCheckResultsForFileInProject(Project32.fileName1, Project32.options) 
+        |> Async.RunSynchronously
+
+    let implSymbolUseOpt = implBackgroundTypedParse1.GetSymbolUseAtLocation(3,5,"",["func"]) |> Async.RunSynchronously
+    let implSymbol = implSymbolUseOpt.Value.Symbol
+    
+    let usesOfImplSymbol = 
+        [ for su in wholeProjectResults.GetUsesOfSymbol(implSymbol) |> Async.RunSynchronously do
+              yield Project32.cleanFileName su.FileName , tups su.RangeAlternate, attribsOfSymbol su.Symbol ]
+
+    usesOfImplSymbol |> shouldEqual
+       [("sig1", ((4, 4), (4, 8)), ["val"]); 
+        ("file1", ((3, 4), (3, 8)), ["val"])]
+
+module Project33 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Impl
+open System.Runtime.CompilerServices
+
+type System.Int32 with
+    member x.SetValue (_: int) = ()
+    member x.GetValue () = x
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+[]
+let ``Test Project33 whole project errors`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project33.options) |> Async.RunSynchronously
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+[]
+let ``Test Project33 extension methods`` () =
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project33.options) |> Async.RunSynchronously
+    let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously
+    
+    let implModuleUse = allSymbolsUses |> Array.find (fun su -> su.Symbol.DisplayName = "Impl")
+    let implModuleDefn = implModuleUse.Symbol :?> FSharpEntity
+
+    [ 
+      for x in implModuleDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x
+    ]
+    |> shouldEqual 
+            [("SetValue", ["member"; "extmem"]); 
+             ("GetValue", ["member"; "extmem"])]
+
+module Project34 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module Dummy
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = 
+        [|
+            yield! mkProjectCommandLineArgs (dllName, fileNames)
+            if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows 
+                yield @"-r:" + sysLib "System.Data"
+            else 
+            // We use .NET-buit version of System.Data.dll since the tests depend on implementation details
+            // i.e. the private type System.Data.Listeners may not be available on Mono.
+                yield @"-r:" + Path.Combine(__SOURCE_DIRECTORY__, "System.Data.dll")
+        |]
+    let internal options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+[]
+let ``Test Project34 whole project errors`` () = 
+    let wholeProjectResults = checker.ParseAndCheckProject(Project34.options) |> Async.RunSynchronously
+    for e in wholeProjectResults.Errors do printfn "Error: %s" e.Message
+    wholeProjectResults.Errors.Length |> shouldEqual 0
+
+[]
+let ``Test project34 should report correct accessibility for System.Data.Listeners`` () =
+    let wholeProjectResults = checker.ParseAndCheckProject(Project34.options) |> Async.RunSynchronously
+    let rec getNestedEntities (entity: FSharpEntity) = 
+        seq { yield entity
+              for e in entity.NestedEntities do
+                  yield! getNestedEntities e }
+    let listenerEntity =
+        wholeProjectResults.ProjectContext.GetReferencedAssemblies()
+        |> List.tryPick (fun asm -> if asm.SimpleName.Contains("System.Data") then Some asm.Contents.Entities else None)
+        |> Option.get
+        |> Seq.collect getNestedEntities
+        |> Seq.tryFind (fun entity -> 
+            entity.TryFullName 
+            |> Option.map (fun s -> s.Contains("System.Data.Listeners")) 
+            |> fun arg -> defaultArg arg false)
+        |> Option.get
+    listenerEntity.Accessibility.IsPrivate |> shouldEqual true
+
+    let listenerFuncEntity =
+        listenerEntity.NestedEntities
+        |> Seq.tryFind (fun entity -> 
+            entity.TryFullName 
+            |> Option.map (fun s -> s.Contains("Func")) 
+            |> fun arg -> defaultArg arg false)
+        |> Option.get
+
+    listenerFuncEntity.Accessibility.IsPrivate |> shouldEqual true
+
+
+//------------------------------------------------------
+
+module Project35 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+type Test =
+    let curriedFunction (one:int) (two:float) (three:string) =
+        float32 (one + int two + int three)
+    let tupleFunction (one:int, two:float, three:string) =
+        float32 (one + int two + int three)
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test project35 CurriedParameterGroups should be available for nested functions`` () =
+    let wholeProjectResults = checker.ParseAndCheckProject(Project35.options) |> Async.RunSynchronously
+    let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously
+    let findByDisplayName name = 
+        Array.find (fun (su:FSharpSymbolUse) -> su.Symbol.DisplayName = name)
+           
+    let curriedFunction = allSymbolUses |> findByDisplayName "curriedFunction"
+
+    match curriedFunction.Symbol with
+    | :? FSharpMemberOrFunctionOrValue as mfv ->
+
+        let curriedParamGroups =
+            mfv.CurriedParameterGroups
+            |> Seq.map Seq.toList
+            |> Seq.toList
+
+        //check the parameters
+        match curriedParamGroups with
+        | [[param1];[param2];[param3]] ->
+            param1.Type.TypeDefinition.DisplayName |> shouldEqual "int"
+            param2.Type.TypeDefinition.DisplayName |> shouldEqual "float"
+            param3.Type.TypeDefinition.DisplayName |> shouldEqual "string"
+        | _ -> failwith "Unexpected parameters"
+
+        //now check the return type
+        let retTyp = mfv.ReturnParameter
+        retTyp.Type.TypeDefinition.DisplayName |> shouldEqual "float32"
+
+    | _ -> failwith "Unexpected symbol type"
+
+    let tupledFunction = allSymbolUses |> findByDisplayName "tupleFunction"
+    match tupledFunction.Symbol with
+    | :? FSharpMemberOrFunctionOrValue as mfv ->
+
+        let curriedParamGroups =
+            mfv.CurriedParameterGroups
+            |> Seq.map Seq.toList
+            |> Seq.toList
+
+        //check the parameters
+        match curriedParamGroups with
+        | [[param1;param2;param3]] ->
+            param1.Type.TypeDefinition.DisplayName |> shouldEqual "int"
+            param2.Type.TypeDefinition.DisplayName |> shouldEqual "float"
+            param3.Type.TypeDefinition.DisplayName |> shouldEqual "string"
+        | _ -> failwith "Unexpected parameters"
+
+        //now check the return type
+        let retTyp = mfv.ReturnParameter
+        retTyp.Type.TypeDefinition.DisplayName |> shouldEqual "float32"
+
+    | _ -> failwith "Unexpected symbol type"
+
+//------------------------------------------------------
+
+module Project35b = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fsx")
+    let fileSource1 = """
+#r "System.dll"
+#r "notexist.dll"
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let internal options =  checker.GetProjectOptionsFromScript(fileName1, fileSource1) |> Async.RunSynchronously
+
+
+[]
+let ``Test project35b Dependency files`` () =
+    let parseFileResults = checker.ParseFileInProject(Project35b.fileName1, Project35b.fileSource1, Project35b.options) |> Async.RunSynchronously
+    for d in parseFileResults.DependencyFiles do 
+        printfn "dependency: %s" d
+//    parseFileResults.DependencyFiles.Length |> shouldEqual 3
+    parseFileResults.DependencyFiles |> List.exists (fun s -> s.Contains "notexist.dll") |> shouldEqual true
+    parseFileResults.DependencyFiles |> List.exists (fun s -> s.Contains Project35b.fileName1) |> shouldEqual true
+///    parseFileResults.DependencyFiles |> List.exists (fun s -> s.Contains "FSharp.Compiler.Interactive.Settings.dll") |> shouldEqual true
+
+//------------------------------------------------------
+
+module Project36 =
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+type A(i:int) =
+    member x.Value = i
+
+type B(i:int) as b =
+    inherit A(i*2)
+    let a = b.Overload(i)
+    member x.Overload() = a
+    member x.Overload(y: int) = y + y
+    member x.BaseValue = base.Value
+
+let [] lit = 1.0
+let notLit = 1.0
+let callToOverload = B(5).Overload(4)
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true)
+    let internal options =  keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+[]
+let ``Test project36 FSharpMemberOrFunctionOrValue.IsBaseValue`` () =
+    let wholeProjectResults = Project36.keepAssemblyContentsChecker.ParseAndCheckProject(Project36.options) |> Async.RunSynchronously
+    wholeProjectResults.GetAllUsesOfAllSymbols()
+    |> Async.RunSynchronously
+    |> Array.pick (fun (su:FSharpSymbolUse) ->
+        if su.Symbol.DisplayName = "base"
+        then Some (su.Symbol :?> FSharpMemberOrFunctionOrValue)
+        else None)
+    |> fun baseSymbol -> shouldEqual true baseSymbol.IsBaseValue
+
+#if FSHARP_SERVICE_GIVES_ASSEMBLY_CONTENTS
+[]
+let ``Test project36 FSharpMemberOrFunctionOrValue.IsConstructorThisValue & IsMemberThisValue`` () =
+    let wholeProjectResults = Project36.keepAssemblyContentsChecker.ParseAndCheckProject(Project36.options) |> Async.RunSynchronously
+    let declarations =
+        let checkedFile = wholeProjectResults.AssemblyContents.ImplementationFiles.[0]
+        match checkedFile.Declarations.[0] with
+        | FSharpImplementationFileDeclaration.Entity (_, subDecls) -> subDecls
+        | _ -> failwith "unexpected declaration"
+    let getExpr exprIndex =
+        match declarations.[exprIndex] with
+        | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue(_,_,e) -> e
+        | FSharpImplementationFileDeclaration.InitAction e -> e
+        | _ -> failwith "unexpected declaration"
+    // Instead of checking the symbol uses directly, walk the typed tree to check
+    // the correct values are also visible from there. Also note you cannot use
+    // BasicPatterns.ThisValue in these cases, this is only used when the symbol
+    // is implicit in the constructor
+    match Project36.getExpr 4 with
+    | BasicPatterns.Let((b,_),_) ->
+        b.IsConstructorThisValue && not b.IsMemberThisValue
+    | _ -> failwith "unexpected expression"
+    |> shouldEqual true
+
+    match Project36.getExpr 5 with
+    | BasicPatterns.FSharpFieldGet(Some(BasicPatterns.Value x),_,_) ->
+        x.IsMemberThisValue && not x.IsConstructorThisValue
+    | _ -> failwith "unexpected expression"
+    |> shouldEqual true
+
+    match Project36.getExpr 6 with
+    | BasicPatterns.Call(_,_,_,_,[BasicPatterns.Value s;_]) ->
+        not s.IsMemberThisValue && not s.IsConstructorThisValue
+    | _ -> failwith "unexpected expression"
+    |> shouldEqual true
+#endif
+
+[]
+let ``Test project36 FSharpMemberOrFunctionOrValue.LiteralValue`` () =
+    let wholeProjectResults = Project36.keepAssemblyContentsChecker.ParseAndCheckProject(Project36.options) |> Async.RunSynchronously
+    let project36Module = wholeProjectResults.AssemblySignature.Entities.[0]
+    let lit = project36Module.MembersFunctionsAndValues.[0]
+    shouldEqual true (lit.LiteralValue.Value |> unbox |> (=) 1.)
+
+    let notLit = project36Module.MembersFunctionsAndValues.[1]
+    shouldEqual true notLit.LiteralValue.IsNone
+
+module Project37 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let fileName2 = Path.ChangeExtension(base2, ".fs")
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+namespace AttrTests
+
+[]
+type AttrTestAttribute() =
+    inherit System.Attribute()
+
+    new (t: System.Type) = AttrTestAttribute()
+    new (t: System.Type[]) = AttrTestAttribute()
+    new (t: int[]) = AttrTestAttribute()
+
+[]
+type AttrTest2Attribute() =
+    inherit System.Attribute()
+
+type TestUnion = | A of string
+type TestRecord = { B : int }
+
+module Test =
+    [)>]
+    let withType = 0
+    [>)>]
+    let withGenericType = 0
+    [)>]
+    let withTupleType = 0
+    [ int>)>]
+    let withFuncType = 0
+    [; typeof |])>]
+    let withTypeArray = 0
+    []
+    let withIntArray = 0
+
+[]
+do ()
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    let fileSource2 = """
+namespace AttrTests
+
+[]
+do ()
+"""
+    File.WriteAllText(fileName2, fileSource2)
+    let fileNames = [fileName1; fileName2]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+[]
+let ``Test project37 typeof and arrays in attribute constructor arguments`` () =
+    let wholeProjectResults = checker.ParseAndCheckProject(Project37.options) |> Async.RunSynchronously
+    let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously
+    for su in allSymbolsUses do
+        match su.Symbol with
+        | :? FSharpMemberOrFunctionOrValue as funcSymbol ->
+            let getAttrArg() =
+                let arg = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd      
+                arg :?> FSharpType 
+            match funcSymbol.DisplayName with
+            | "withType" ->
+                let t = getAttrArg()
+                t.TypeDefinition.DisplayName |> shouldEqual "int"
+            | "withGenericType" ->
+                let t = getAttrArg()
+                t.TypeDefinition.DisplayName |> shouldEqual "list"
+                t.GenericArguments.[0].TypeDefinition.DisplayName |> shouldEqual "int"
+            | "withTupleType" ->
+                let t = getAttrArg()
+                t.IsTupleType |> shouldEqual true
+                t.GenericArguments.[0].TypeDefinition.DisplayName |> shouldEqual "int"
+                t.GenericArguments.[1].TypeDefinition.DisplayName |> shouldEqual "int"
+            | "withFuncType" ->
+                let t = getAttrArg()
+                t.IsFunctionType |> shouldEqual true
+                t.GenericArguments.[0].TypeDefinition.DisplayName |> shouldEqual "int"
+                t.GenericArguments.[1].TypeDefinition.DisplayName |> shouldEqual "int"
+            | "withTypeArray" ->
+                let attr = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd      
+                let ta = attr :?> obj[] |> Array.map (fun t -> t :?> FSharpType)
+                ta.[0].TypeDefinition.DisplayName |> shouldEqual "TestUnion"
+                ta.[1].TypeDefinition.DisplayName |> shouldEqual "TestRecord"
+            | "withIntArray" ->
+                let attr = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd      
+                let a = attr :?> obj[] |> Array.map (fun t -> t :?> int)
+                a |> shouldEqual [| 0; 1; 2 |] 
+            | _ -> ()
+        | _ -> ()
+    wholeProjectResults.AssemblySignature.Attributes
+    |> Seq.map (fun a -> a.AttributeType.CompiledName)
+    |> Array.ofSeq |> shouldEqual [| "AttrTestAttribute"; "AttrTest2Attribute" |]
+
+//-----------------------------------------------------------
+
+
+module Project38 =
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+namespace OverrideTests
+
+type I<'X> =
+    abstract Method : unit -> unit
+    abstract Generic : named:'X -> unit
+    abstract Generic<'Y> : 'X * 'Y -> unit
+    abstract Property : int 
+
+[]
+type B<'Y>() =
+    abstract Method : unit -> unit
+    abstract Generic : 'Y -> unit
+    abstract Property : int
+    []
+    abstract Event : IEvent
+
+type A<'XX, 'YY>() =
+    inherit B<'YY>()
+    
+    let ev = Event()
+
+    override this.Method() = ()
+    override this.Generic (a: 'YY) = ()
+    override this.Property = 0
+    []
+    override this.Event = ev.Publish
+
+    member this.NotOverride() = ()
+
+    interface I<'XX> with
+        member this.Method() = ()
+        member this.Generic (a: 'XX) = ()
+        member this.Generic<'Y> (a: 'XX, b: 'Y) = ()
+        member this.Property = 1
+"""
+    File.WriteAllText(fileName1, fileSource1)
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+[]
+let ``Test project38 abstract slot information`` () =
+    let wholeProjectResults = checker.ParseAndCheckProject(Project38.options) |> Async.RunSynchronously
+    let printAbstractSignature (s: FSharpAbstractSignature) =
+        let printType (t: FSharpType) = (string t).[5 ..]       
+        let args = 
+            (s.AbstractArguments |> Seq.concat |> Seq.map (fun a -> 
+                (match a.Name with Some n -> n + ":" | _ -> "") + printType a.Type) |> String.concat " * ")
+            |> function "" -> "()" | a -> a
+        let tgen =
+            match s.DeclaringTypeGenericParameters |> Seq.map (fun m -> "'" + m.Name) |> String.concat "," with
+            | "" -> ""
+            | g -> " original generics: <" + g + ">" 
+        let mgen =
+            match s.MethodGenericParameters |> Seq.map (fun m -> "'" + m.Name) |> String.concat "," with
+            | "" -> ""
+            | g -> "<" + g + ">" 
+        "type " + printType s.DeclaringType + tgen + " with member " + s.Name + mgen + " : " + args + " -> " +
+        printType s.AbstractReturnType
+    
+    let a2ent = wholeProjectResults.AssemblySignature.Entities |> Seq.find (fun e -> e.FullName = "OverrideTests.A`2")
+    a2ent.MembersFunctionsAndValues |> Seq.map (fun m ->
+        m.CompiledName, (m.ImplementedAbstractSignatures |> Seq.map printAbstractSignature |> List.ofSeq) 
+    )
+    |> Array.ofSeq
+    |> shouldEqual 
+        [|
+            ".ctor", []
+            "Generic", ["type OverrideTests.B<'YY> original generics: <'Y> with member Generic : 'Y -> Microsoft.FSharp.Core.unit"]
+            "OverrideTests-I`1-Generic", ["type OverrideTests.I<'XX> original generics: <'X> with member Generic : named:'X -> Microsoft.FSharp.Core.unit"]
+            "OverrideTests-I`1-Generic", ["type OverrideTests.I<'XX> original generics: <'X> with member Generic<'Y> : 'X * 'Y -> Microsoft.FSharp.Core.unit"]
+            "Method", ["type OverrideTests.B<'YY> original generics: <'Y> with member Method : () -> Microsoft.FSharp.Core.unit"]
+            "OverrideTests-I`1-Method", ["type OverrideTests.I<'XX> original generics: <'X> with member Method : () -> Microsoft.FSharp.Core.unit"]
+            "NotOverride", []
+            "add_Event", ["type OverrideTests.B<'YY> original generics: <'Y> with member add_Event : Microsoft.FSharp.Control.Handler -> Microsoft.FSharp.Core.unit"]
+            "get_Event", ["type OverrideTests.B<'YY> with member get_Event : () -> Microsoft.FSharp.Core.unit"]
+            "get_Property", ["type OverrideTests.B<'YY> original generics: <'Y> with member get_Property : () -> Microsoft.FSharp.Core.int"]
+            "OverrideTests-I`1-get_Property", ["type OverrideTests.I<'XX> original generics: <'X> with member get_Property : () -> Microsoft.FSharp.Core.int"]
+            "remove_Event", ["type OverrideTests.B<'YY> original generics: <'Y> with member remove_Event : Microsoft.FSharp.Control.Handler -> Microsoft.FSharp.Core.unit"]
+            "get_Property", ["type OverrideTests.B<'YY> original generics: <'Y> with member get_Property : () -> Microsoft.FSharp.Core.int"]
+            "get_Event", ["type OverrideTests.B<'YY> with member get_Event : () -> Microsoft.FSharp.Core.unit"]
+        |]
+
+
+//--------------------------------------------
+
+module Project39 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module M
+
+let functionWithIncompleteSignature x = System.ThisDoesntExist.SomeMethod(x)
+let curriedFunctionWithIncompleteSignature (x1:'a) x2 (x3:'a,x4) = 
+    (x2 = x4) |> ignore
+    System.ThisDoesntExist.SomeMethod(x1,x2,x3,x4)
+
+type C() = 
+    member x.MemberWithIncompleteSignature x = System.ThisDoesntExist.SomeMethod(x)
+    member x.CurriedMemberWithIncompleteSignature (x1:'a) x2 (x3:'a,x4) = 
+        (x2 = x4) |> ignore
+        System.ThisDoesntExist.SomeMethod(x1,x2,x3,x4)
+
+let uses () = 
+   functionWithIncompleteSignature (failwith "something")
+   curriedFunctionWithIncompleteSignature (failwith "x1") (failwith "x2") (failwith "x3", failwith "x4")
+   C().MemberWithIncompleteSignature (failwith "something")
+   C().CurriedMemberWithIncompleteSignature (failwith "x1") (failwith "x2") (failwith "x3", failwith "x4")
+    """
+    File.WriteAllText(fileName1, fileSource1)
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+[]
+let ``Test project39 all symbols`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project39.options) |> Async.RunSynchronously
+    let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously
+    let typeTextOfAllSymbolUses = 
+        [ for s in allSymbolUses do
+            match s.Symbol with 
+            | :? FSharpMemberOrFunctionOrValue as mem -> 
+              if s.Symbol.DisplayName.Contains "Incomplete" then
+                yield s.Symbol.DisplayName, tups s.RangeAlternate, 
+                      ("full", mem.FullType |> FSharpType.Prettify |> fun p -> p.Format(s.DisplayContext)),
+                      ("params", mem.CurriedParameterGroups |> FSharpType.Prettify |> Seq.toList |> List.map (Seq.toList >> List.map (fun p -> p.Type.Format(s.DisplayContext)))),
+                      ("return", mem.ReturnParameter |> FSharpType.Prettify |> fun p -> p.Type.Format(s.DisplayContext)) 
+            | _ -> () ]
+    typeTextOfAllSymbolUses |> shouldEqual
+              [("functionWithIncompleteSignature", ((4, 4), (4, 35)),
+                ("full", "'a -> 'b"), ("params", [["'a"]]), ("return", "'b"));
+               ("curriedFunctionWithIncompleteSignature", ((5, 4), (5, 42)),
+                ("full", "'a -> 'a0 -> 'a * 'a0 -> 'b"),
+                ("params",
+                 [["'a"]; ["'a0"]; ["'a"; "'a0"]]),
+                ("return", "'b"));
+               ("MemberWithIncompleteSignature", ((10, 13), (10, 42)),
+                ("full", "C -> 'c -> 'd"), ("params", [["'c"]]), ("return", "'d"));
+               ("CurriedMemberWithIncompleteSignature", ((11, 13), (11, 49)),
+                ("full", "C -> 'a -> 'a0 -> 'a * 'a0 -> 'b"),
+                ("params",
+                 [["'a"]; ["'a0"]; ["'a"; "'a0"]]),
+                ("return", "'b"));
+               ("functionWithIncompleteSignature", ((16, 3), (16, 34)),
+                ("full", "'a -> 'b"), ("params", [["'a"]]), ("return", "'b"));
+               ("curriedFunctionWithIncompleteSignature", ((17, 3), (17, 41)),
+                ("full", "'a -> 'a0 -> 'a * 'a0 -> 'b"),
+                ("params",
+                 [["'a"]; ["'a0"]; ["'a"; "'a0"]]),
+                ("return", "'b"));
+               ("MemberWithIncompleteSignature", ((18, 3), (18, 36)),
+                ("full", "'c -> 'd"), ("params", [["'c"]]), ("return", "'d"));
+               ("CurriedMemberWithIncompleteSignature", ((19, 3), (19, 43)),
+                ("full", "'a -> 'a0 -> 'a * 'a0 -> 'b"),
+                ("params",
+                 [["'a"]; ["'a0"]; ["'a"; "'a0"]]),
+                ("return", "'b"))]
+
+
+//--------------------------------------------
+
+module Project40 = 
+    open System.IO
+
+    let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs")
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSource1 = """
+module M
+
+let f (x: option<_>) = x.IsSome, x.IsNone
+
+[]  
+type C = 
+    | A 
+    | B of string
+    member x.IsItAnA = match x with A -> true | B _ -> false
+    member x.IsItAnAMethod() = match x with A -> true | B _ -> false
+
+let g (x: C) = x.IsItAnA,x.IsItAnAMethod() 
+    """
+
+    File.WriteAllText(fileName1, fileSource1)
+    let fileNames = [fileName1]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+    let cleanFileName a = if a = fileName1 then "file1" else "??"
+
+[]
+let ``Test Project40 all symbols`` () = 
+
+    let wholeProjectResults = checker.ParseAndCheckProject(Project40.options) |> Async.RunSynchronously
+    let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously
+    let allSymbolUsesInfo =  [ for s in allSymbolUses -> s.Symbol.DisplayName, tups s.RangeAlternate, attribsOfSymbol s.Symbol ]
+    allSymbolUsesInfo |> shouldEqual
+          [("option", ((4, 10), (4, 16)), ["abbrev"]); ("x", ((4, 7), (4, 8)), []);
+           ("x", ((4, 23), (4, 24)), []);
+           ("IsSome", ((4, 23), (4, 31)), ["member"; "prop"; "funky"]);
+           ("x", ((4, 33), (4, 34)), []);
+           ("IsNone", ((4, 33), (4, 41)), ["member"; "prop"; "funky"]);
+           ("f", ((4, 4), (4, 5)), ["val"]);
+           ("CompilationRepresentationAttribute", ((6, 2), (6, 27)), ["class"]);
+           ("CompilationRepresentationAttribute", ((6, 2), (6, 27)), ["class"]);
+           ("CompilationRepresentationAttribute", ((6, 2), (6, 27)), ["member"]);
+           ("CompilationRepresentationFlags", ((6, 28), (6, 58)),
+            ["enum"; "valuetype"]);
+           ("UseNullAsTrueValue", ((6, 28), (6, 77)), ["field"; "static"; "8"]);
+           ("string", ((9, 11), (9, 17)), ["abbrev"]);
+           ("string", ((9, 11), (9, 17)), ["abbrev"]); ("A", ((8, 6), (8, 7)), []);
+           ("B", ((9, 6), (9, 7)), []); ("C", ((7, 5), (7, 6)), ["union"]);
+           ("IsItAnA", ((10, 13), (10, 20)), ["member"; "getter"; "funky"]);
+           ("IsItAnAMethod", ((11, 13), (11, 26)), ["member"; "funky"]);
+           ("x", ((10, 11), (10, 12)), []); ("x", ((10, 29), (10, 30)), []);
+           ("A", ((10, 36), (10, 37)), []); ("B", ((10, 48), (10, 49)), []);
+           ("x", ((11, 11), (11, 12)), []); ("x", ((11, 37), (11, 38)), []);
+           ("A", ((11, 44), (11, 45)), []); ("B", ((11, 56), (11, 57)), []);
+           ("C", ((13, 10), (13, 11)), ["union"]); ("x", ((13, 7), (13, 8)), []);
+           ("x", ((13, 15), (13, 16)), []);
+           ("IsItAnA", ((13, 15), (13, 24)), ["member"; "prop"; "funky"]);
+           ("x", ((13, 25), (13, 26)), []);
+           ("IsItAnAMethod", ((13, 25), (13, 40)), ["member"; "funky"]);
+           ("g", ((13, 4), (13, 5)), ["val"]); ("M", ((2, 7), (2, 8)), ["module"])]
+
+
+module ProjectBig = 
+    open System.IO
+
+    let fileNamesI = [ for i in 1 .. 10 -> (i, Path.ChangeExtension(Path.GetTempFileName(), ".fs")) ]
+    let base2 = Path.GetTempFileName()
+    let dllName = Path.ChangeExtension(base2, ".dll")
+    let projFileName = Path.ChangeExtension(base2, ".fsproj")
+    let fileSources = [ for (i,f) in fileNamesI -> (f, "module M" + string i) ]
+    for (f,text) in fileSources do File.WriteAllText(f, text)
+    let fileSources2 = [ for (i,f) in fileSources -> f ]
+
+    let fileNames = [ for (_,f) in fileNamesI -> f ]
+    let args = mkProjectCommandLineArgs (dllName, fileNames)
+    let internal options =  checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
+
+
+[]
+let ``Test request for parse and check doesn't check whole project`` () = 
+
+    let backgroundParseCount = ref 0 
+    let backgroundCheckCount = ref 0 
+    checker.FileChecked.Add (fun x -> incr backgroundCheckCount)
+    checker.FileParsed.Add (fun x -> incr backgroundParseCount)
+
+    checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients()
+    let pB, tB = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic
+    let parseResults1 = checker.ParseFileInProject(ProjectBig.fileNames.[5], ProjectBig.fileSources2.[5], ProjectBig.options)  |> Async.RunSynchronously
+    let pC, tC = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic
+    (pC - pB) |> shouldEqual 1
+    (tC - tB) |> shouldEqual 0
+    backgroundParseCount.Value |> shouldEqual 0
+    backgroundCheckCount.Value |> shouldEqual 0
+    let checkResults1 = checker.CheckFileInProject(parseResults1, ProjectBig.fileNames.[5], 0, ProjectBig.fileSources2.[5], ProjectBig.options)  |> Async.RunSynchronously
+    let pD, tD = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic
+    backgroundParseCount.Value |> shouldEqual 10 // This could be reduced to 5 - the whole project gets parsed 
+    backgroundCheckCount.Value |> shouldEqual 5
+    (pD - pC) |> shouldEqual 0
+    (tD - tC) |> shouldEqual 1
+
+    let checkResults2 = checker.CheckFileInProject(parseResults1, ProjectBig.fileNames.[7], 0, ProjectBig.fileSources2.[7], ProjectBig.options)  |> Async.RunSynchronously
+    let pE, tE = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic
+    (pE - pD) |> shouldEqual 0
+    (tE - tD) |> shouldEqual 1
+    backgroundParseCount.Value |> shouldEqual 10 // but note, the project does not get reparsed
+    backgroundCheckCount.Value |> shouldEqual 7 // only two extra typechecks of files
+
+    // A subsequent ParseAndCheck of identical source code doesn't do any more anything
+    let checkResults2 = checker.ParseAndCheckFileInProject(ProjectBig.fileNames.[7], 0, ProjectBig.fileSources2.[7], ProjectBig.options)  |> Async.RunSynchronously
+    let pF, tF = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic
+    (pF - pE) |> shouldEqual 0  // note, no new parse of the file
+    (tF - tE) |> shouldEqual 0  // note, no new typecheck of the file
+    backgroundParseCount.Value |> shouldEqual 10 // but note, the project does not get reparsed
+    backgroundCheckCount.Value |> shouldEqual 7 // only two extra typechecks of files
+
+    ()
+
diff --git a/tests/test.lst b/tests/test.lst
index 74821b95473..1ec36f854cf 100644
--- a/tests/test.lst
+++ b/tests/test.lst
@@ -23,6 +23,7 @@ Core02		fsharp\core\csext
 Core02		..\testsprivate\fsharp\core\csfromfs
 Core02		fsharp\core\events
 Core02		fsharp\core\forwarders
+Core02		fsharp\core\forexpression
 Core02		fsharp\core\fsfromcs
 Core02		fsharp\core\fsfromfsviacs
 Core02		fsharp\core\fsiAndModifiers
@@ -34,18 +35,19 @@ Core03		fsharp\core\innerpoly
 Core03,Smoke		fsharp\core\int32
 Core03		fsharp\core\internalsvisible
 Core03		fsharp\core\interop
+Core03		fsharp\core\ilread
 Core03		fsharp\core\lazy
 Core03		fsharp\core\letrec
 Core03,Smoke		fsharp\core\libtest
 Core03		fsharp\core\lift
-Core03		fsharp\core\load-script
+NO_CI,Core03		fsharp\core\load-script
 Core03		fsharp\core\longnames
 Core03		fsharp\core\map
 Core04		..\testsprivate\fsharp\core\math\lapack
 Core04		fsharp\core\math\numbers
 Core04		fsharp\core\math\numbersVS2008
 Core04		fsharp\core\measures
-Core04		fsharp\core\members\basics
+NO_CI,Core04		fsharp\core\members\basics
 Core04		fsharp\core\members\ctree
 Core04		fsharp\core\members\factors
 Core04		fsharp\core\members\incremental
@@ -154,7 +156,7 @@ TypeProviders01		fsharp\typeProviders\builtin\WsdlService
 TypeProviders01		fsharp\typeProviders\diamondAssembly
 TypeProviders01		fsharp\typeProviders\globalNamespace
 TypeProviders01		fsharp\typeProviders\helloWorldCSharp
-TypeProviders01		fsharp\typeProviders\negTests
+NO_CI,TypeProviders01,TypeProvidersNeg		fsharp\typeProviders\negTests
 TypeProviders01		fsharp\typeProviders\splitAssembly
 TypeProviders01		fsharp\typeProviders\wedgeAssembly
 
@@ -179,5 +181,5 @@ Misc02		fsharp\tools\bundle
 Misc02		fsharp\tools\eval
 Misc02		..\testsprivate\fsharp\tools\queries
 Misc02,TypeChecker		fsharp\typecheck\misc
-Misc02,TypeChecker		fsharp\typecheck\sigs
+Misc02,TypeChecker,TypeCheckerSigs		fsharp\typecheck\sigs
 Misc02,TypeChecker		fsharp\typecheck\full-rank-arrays
diff --git a/tests/windowsPlatform.fs b/tests/windowsPlatform.fs
new file mode 100644
index 00000000000..d5af155c10a
--- /dev/null
+++ b/tests/windowsPlatform.fs
@@ -0,0 +1,101 @@
+[]
+module WindowsPlatform
+
+open PlatformHelpers
+
+// REM == Find out path to native 'Program Files 32bit', no matter what
+// REM == architecture we are running on and no matter what command
+// REM == prompt we came from.
+// IF /I "%OSARCH%"=="x86"   set X86_PROGRAMFILES=%ProgramFiles%
+// IF /I "%OSARCH%"=="IA64"  set X86_PROGRAMFILES=%ProgramFiles(x86)%
+// IF /I "%OSARCH%"=="AMD64" set X86_PROGRAMFILES=%ProgramFiles(x86)%
+let x86ProgramFilesDirectory envVars osArch = 
+    match osArch with
+    | X86 -> envVars |> Map.find "ProgramFiles"
+    | IA64 -> envVars |> Map.find "ProgramFiles(x86)"
+    | AMD64 -> envVars |> Map.find "ProgramFiles(x86)"
+    | Unknown os -> failwithf "OSARCH '%s' not supported" os
+
+let private parseProcessorArchitecture (s : string) = 
+    match s.ToUpper() with
+    | "X86" -> X86
+    | "IA64" -> IA64
+    | "AMD64" -> AMD64
+    | arc -> Unknown s
+
+/// 
+/// Return current process architecture, using PROCESSOR_ARCHITECTURE environment variable
+/// 
+let processorArchitecture envVars =
+    match envVars |> Map.tryFind "PROCESSOR_ARCHITECTURE" |> Option.map parseProcessorArchitecture with
+    | Some x -> x 
+    | None -> failwithf "environment variable '%s' required " "PROCESSOR_ARCHITECTURE"
+
+///
+/// Return real processor architecture (ignore WOW64)
+/// more info: http://blogs.msdn.com/b/david.wang/archive/2006/03/26/howto-detect-process-bitness.aspx
+/// use PROCESSOR_ARCHITEW6432 and PROCESSOR_ARCHITECTURE environment variables
+///
+let osArch envVars =
+    // SET OSARCH=%PROCESSOR_ARCHITECTURE%
+    // IF NOT "%PROCESSOR_ARCHITEW6432%"=="" SET OSARCH=%PROCESSOR_ARCHITEW6432%
+    match envVars |> Map.tryFind "PROCESSOR_ARCHITEW6432" |> Option.map parseProcessorArchitecture with
+    | Some arc -> arc
+    | None -> processorArchitecture envVars
+
+
+//  %~i	    -   expands %i removing any surrounding quotes (")
+//  %~fi	-   expands %i to a fully qualified path name
+//  %~di	-   expands %i to a drive letter only
+//  %~pi	-   expands %i to a path only
+//  %~ni	-   expands %i to a file name only
+//  %~xi	-   expands %i to a file extension only
+//  %~si	-   expanded path contains short names only
+
+open Microsoft.Win32
+
+let regQuery path value (baseKey: RegistryKey) =
+    use regKey  = baseKey.OpenSubKey(path, false)
+   
+    if (regKey = null) then None
+    else 
+        match regKey.GetValue(value) with
+        | null -> None
+        | x -> Some x
+
+open System.Text.RegularExpressions
+open FSharpTestSuiteTypes
+
+let visualStudioVersion () =
+
+    let hklm32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
+    let keys = hklm32.OpenSubKey(@"Software\Microsoft\VisualStudio\14.0\Setup").GetSubKeyNames()
+    let findstr r = Array.exists (fun t -> Regex.IsMatch(t, r)) keys
+
+    // reg query "%REG_SOFTWARE%\Microsoft\VisualStudio\14.0\Setup" | findstr /r /c:"Express .* for Windows Desktop" > NUL
+    // if NOT ERRORLEVEL 1 (
+    //     set INSTALL_SKU=DESKTOP_EXPRESS
+    //     goto :done_SKU
+    // )
+    if findstr "Express .* for Windows Desktop"
+    then Some INSTALL_SKU.DesktopExpress
+    
+    // reg query "%REG_SOFTWARE%\Microsoft\VisualStudio\14.0\Setup" | findstr /r /c:"Express .* for Web" > NUL
+    // if NOT ERRORLEVEL 1 (
+    //     set INSTALL_SKU=WEB_EXPRESS
+    //     goto :done_SKU
+    // )
+    elif findstr "Express .* for Web"
+    then Some INSTALL_SKU.WebExpress
+
+    // reg query "%REG_SOFTWARE%\Microsoft\VisualStudio\14.0\Setup" | findstr /r /c:"Ultimate" > NUL
+    // if NOT ERRORLEVEL 1 (
+    //     set INSTALL_SKU=ULTIMATE
+    //     goto :done_SKU
+    // )
+    elif findstr "Ultimate"
+    then Some INSTALL_SKU.Ultimate
+    
+    // set INSTALL_SKU=CLEAN
+    // :done_SKU
+    else Some INSTALL_SKU.Clean
diff --git a/vsintegration/fsharp-vsintegration-build.proj b/vsintegration/fsharp-vsintegration-build.proj
deleted file mode 100644
index 9e49e26dc06..00000000000
--- a/vsintegration/fsharp-vsintegration-build.proj
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-  
-    net40
-  
-
-  
-    
-  
-
-  
-
-
diff --git a/vsintegration/fsharp-vsintegration-unittests-build.proj b/vsintegration/fsharp-vsintegration-unittests-build.proj
index d05b950fb83..99c895969f5 100644
--- a/vsintegration/fsharp-vsintegration-unittests-build.proj
+++ b/vsintegration/fsharp-vsintegration-unittests-build.proj
@@ -1,12 +1,12 @@
-
+
 
   
     net40
   
 
   
-    
-    
+    
+    
     
     
     
diff --git a/vsintegration/src/Salsa/InternalsVisibleTo.fs b/vsintegration/src/Salsa/InternalsVisibleTo.fs
index 466eb0c71f8..d4f9efd9147 100644
--- a/vsintegration/src/Salsa/InternalsVisibleTo.fs
+++ b/vsintegration/src/Salsa/InternalsVisibleTo.fs
@@ -1,8 +1,8 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp
 open System.Reflection
-[]
+[]
 []
 
 
diff --git a/vsintegration/src/Salsa/SalsaUtils.fs b/vsintegration/src/Salsa/SalsaUtils.fs
index c2261ec7b3d..54c1dae5583 100644
--- a/vsintegration/src/Salsa/SalsaUtils.fs
+++ b/vsintegration/src/Salsa/SalsaUtils.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Salsa
 
@@ -30,14 +30,6 @@ module internal VsOpsUtils =
     let GetOutputWindowPaneLines(vs : VisualStudio) = vs.VsOps.GetOutputWindowPaneLines(vs)
     let CloseSolution(soln : OpenSolution)             = soln.VS.VsOps.CloseSolution(soln)
 
-    let AddTypeProviderApprovedForDevelopment(assemblyFileName) = 
-        Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.ReplaceApprovalStatus 
-            None 
-            (Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.TypeProviderApprovalStatus.Trusted(Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.partiallyCanonicalizeFileName assemblyFileName))
-    let ClearAllTypeProviderApprovals() = 
-        if System.IO.File.Exists(Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.ApprovalsAbsoluteFileName) then
-            System.IO.File.Delete(Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.ApprovalsAbsoluteFileName)
-
     let CreateProject(solution : OpenSolution, projectname) = 
         solution.VS.VsOps.CreateProject(solution,projectname)
     let NewFile(vs : VisualStudio, filename,lines) = 
@@ -108,12 +100,10 @@ module internal VsOpsUtils =
         (opsOfFile file).GetQuickInfoAndSpanAtCursor(file)
     let GetNameOfOpenFile(file) = 
         (opsOfFile file).GetNameOfOpenFile(file)
-    let GetCheckOptionsOfScript(file) = 
-        (opsOfFile file).GetCheckOptionsOfScript(file)
+    let GetProjectOptionsOfScript(file) = 
+        (opsOfFile file).GetProjectOptionsOfScript(file)
     let GetParameterInfoAtCursor(file) = 
         (opsOfFile file).GetParameterInfoAtCursor(file)
-    let GetParameterInfoAtCursorNoFallback(file) = 
-        (opsOfFile file).GetParameterInfoAtCursorNoFallback(file)
     let GetTokenTypeAtCursor(file) = 
         (opsOfFile file).GetTokenTypeAtCursor(file)
     let GetSquiggleAtCursor(file) = 
@@ -129,9 +119,9 @@ module internal VsOpsUtils =
     let CompletionBestMatchAtCursorFor(file, value, filterText) = 
         (opsOfFile file).CompletionBestMatchAtCursorFor(file, value, filterText)
     let GotoDefinitionAtCursor file  = 
-        (opsOfFile file).GotoDefinitionAtCursor file false
+        (opsOfFile file).GotoDefinitionAtCursor (file, false)
     let GotoDefinitionAtCursorForceGeneration file = 
-        (opsOfFile file).GotoDefinitionAtCursor file true
+        (opsOfFile file).GotoDefinitionAtCursor (file, true)
     let GetNavigationContentAtCursor(file) = 
         (opsOfFile file).GetNavigationContentAtCursor(file)
     let GetHiddenRegionCommands(file) = 
@@ -141,7 +131,7 @@ module internal VsOpsUtils =
     let GetF1KeywordAtCursor file = 
         (opsOfFile file).GetF1KeywordAtCursor file
     let GetLineNumber file n = 
-        (opsOfFile file).GetLineNumber file n
+        (opsOfFile file).GetLineNumber (file, n)
     let GetAllLines file= 
         (opsOfFile file).GetAllLines file
     let SwitchToFile (vs : VisualStudio) file = 
diff --git a/vsintegration/src/Salsa/SalsaUtils.fsi b/vsintegration/src/Salsa/SalsaUtils.fsi
index 1f049ae84fa..904f1bdca93 100644
--- a/vsintegration/src/Salsa/SalsaUtils.fsi
+++ b/vsintegration/src/Salsa/SalsaUtils.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Salsa
 
@@ -25,10 +25,6 @@ module internal VsOpsUtils =
     val GetOutputWindowPaneLines          : VisualStudio -> string list
     val CloseSolution                     : OpenSolution -> unit
 
-    /// pass absolute filename
-    val AddTypeProviderApprovedForDevelopment : string -> unit
-    val ClearAllTypeProviderApprovals : unit -> unit
-
     val CreateProject                     : OpenSolution * string -> OpenProject
     /// Add a new file not in any particulare project.
     val NewFile                           : VisualStudio * string * string list -> File
@@ -85,9 +81,8 @@ module internal VsOpsUtils =
     val GetQuickInfoAtCursor              : OpenFile -> string   
     val GetQuickInfoAndSpanAtCursor       : OpenFile -> string*TextSpan
     val GetNameOfOpenFile                 : OpenFile -> string
-    val GetCheckOptionsOfScript           : OpenFile -> CheckOptions
-    val GetParameterInfoAtCursor          : OpenFile -> MethodListForAMethodTip
-    val GetParameterInfoAtCursorNoFallback: OpenFile -> MethodListForAMethodTip
+    val GetProjectOptionsOfScript           : OpenFile -> FSharpProjectOptions
+    val GetParameterInfoAtCursor          : OpenFile -> MethodListForAMethodTip option
     val GetTokenTypeAtCursor              : OpenFile -> Salsa.Salsa.TokenType
     val GetIdentifierAtCursor             : OpenFile -> (string * int) option
     val GetF1KeywordAtCursor              : OpenFile -> string option
diff --git a/vsintegration/src/Salsa/Salsa.fsproj b/vsintegration/src/Salsa/VisualFSharp.Salsa.fsproj
similarity index 90%
rename from vsintegration/src/Salsa/Salsa.fsproj
rename to vsintegration/src/Salsa/VisualFSharp.Salsa.fsproj
index ed9bed811b9..c68c6d20515 100644
--- a/vsintegration/src/Salsa/Salsa.fsproj
+++ b/vsintegration/src/Salsa/VisualFSharp.Salsa.fsproj
@@ -1,10 +1,11 @@
 
-
+
 
   
     ..\..\..\src
     FSharp
     true
+    VisualFSharp.Salsa
   
   
   
@@ -13,20 +14,20 @@
     2.0
     {fbd4b354-dc6e-4032-8ec7-c81d8dfb1af7}
     Library
-    Salsa
+    VisualFSharp.Salsa
     $(NoWarn);45;47;52;58;75
     FX_ATLEAST_45;$(DefineConstants)
   
   
-    
+    
+      CompilerLocationUtils.fs
+    
     
       UnitTests.TestLib.Utils.fs
     
     
     
-    
     
-    
     
   
   
@@ -35,7 +36,6 @@
     
     
     
-
     
     
     
@@ -61,12 +61,8 @@
     
     
     
-        True
-        $(NUnitLibDir)\nunit.framework.dll
-    
-    
-        True
-        $(NunitToolsLibDir)\nunit.util.dll
+      True
+      $(NUnitLibDir)\nunit.framework.dll
     
     
       {DED3BBD7-53F4-428A-8C9F-27968E768605}
@@ -104,4 +100,4 @@
     
   
   
-
+
\ No newline at end of file
diff --git a/vsintegration/src/Salsa/VsMocks.fs b/vsintegration/src/Salsa/VsMocks.fs
index 90a1addead3..4394d364a65 100644
--- a/vsintegration/src/Salsa/VsMocks.fs
+++ b/vsintegration/src/Salsa/VsMocks.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 (*
     Mocks of major Visual Studio interfaces.
@@ -1051,7 +1051,7 @@ module internal VsMocks =
             member this.SetCursor(  hNewCursor,    phOldCursor) = err(__LINE__)
             member this.GetCurrentSelection(  ppHier,    pitemid,    ppMIS) = err(__LINE__)
             }
-    
+
     let vsWindowFrame =
         { new IVsWindowFrame with
             member this.Show() = err(__LINE__)
@@ -1222,39 +1222,6 @@ module internal VsMocks =
             member this.UnadviseFileChange(vscookie) = nothing()
         }
 
-#if NOT_YET_NEEDED
-    let vsExtensibility3 =
-        { new IVsExtensibility3 with
-            member this.GetProperties(pParent, pdispPropObj, ppProperties) = err(__LINE__)
-            member this.RunWizardFile(bstrWizFilename,  hwndOwner,  vContextParams,  pResult) = err(__LINE__)
-            member this.EnterAutomationFunction() = err(__LINE__)
-            member this.ExitAutomationFunction() = err(__LINE__)
-            member this.IsInAutomationFunction(pfInAutoFunc) = err(__LINE__)
-            member this.GetUserControl( fUserControl) = err(__LINE__)
-            member this.SetUserControl( fUserControl) = err(__LINE__)
-            member this.SetUserControlUnlatched( fUserControl) = err(__LINE__)
-            member this.LockServer( vb) = err(__LINE__)
-            member this.GetLockCount( pCount) = err(__LINE__)
-            member this.TestForShutdown( fShutdown) = err(__LINE__)
-            member this.GetGlobalsObject( extractFrom,  ppGlobals) = err(__LINE__)
-            member this.GetConfigMgr( pIVsProject,  itemid,  ppCfgMgr) = err(__LINE__)
-            member this.FireMacroReset() = err(__LINE__)
-            member this.GetDocumentFromDocCookie( lDocCookie,  ppDoc) = err(__LINE__)
-            member this.IsMethodDisabled( pGUID,  dispid) = err(__LINE__)
-            member this. SetSuppressUI( In) = err(__LINE__)
-            member this.GetSuppressUI( pOut) = err(__LINE__)
-            member this.FireProjectsEvent_ItemAdded( project) = err(__LINE__)
-            member this.FireProjectsEvent_ItemRemoved( project) = err(__LINE__)
-            member this.FireProjectsEvent_ItemRenamed( project,  oldName) = err(__LINE__)
-            member this.FireProjectItemsEvent_ItemAdded( projectItem) = err(__LINE__)
-            member this.FireProjectItemsEvent_ItemRemoved( projectItem) = err(__LINE__)
-            member this.FireProjectItemsEvent_ItemRenamed( projectItem,  oldName) = err(__LINE__)
-            member this.IsFireCodeModelEventNeeded( vbNeeded) = err(__LINE__)
-            member this.RunWizardFileEx( bstrWizFilename,  hwndOwner,  vContextParams,  vCustomParams,  pResult) = err(__LINE__)
-            member this.FireCodeModelEvent3( dispid,  pParent,  pElement,  changeKind) = err(__LINE__)
-        }
-#endif
-
     let vsSolution =
         { new IVsSolution with
             member x.GetProjectEnum(grfEnumFlags, rguidEnumOnlyThisType, ppenum) = err(__LINE__)
@@ -1566,9 +1533,6 @@ module internal VsMocks =
         sp.AddService(typeof, box(vsTaskList()), false) 
         sp.AddService(typeof, box vsMonitorSelection, false) 
         sp.AddService(typeof, box vsFileChangeManager, false)
-#if NOT_YET_NEEDED
-        sp.AddService(typeof, box vsExtensibility3, false)
-#endif        
         sp.AddService(typeof, box vsSolution, false)
         sp.AddService(typeof, box vsSolutionBuildManager, false)
         sp.AddService(typeof, box vsRunningDocumentTable, false)
@@ -1655,7 +1619,11 @@ module internal VsActual =
 
         // copy this private assembly next to unit tests, otherwise assembly loader cannot find it
         let neededLocalAssem = vsInstallDir + @"\PrivateAssemblies\Microsoft.VisualStudio.Platform.VSEditor.Interop.dll"
+#if NUNIT_2
         let curDir = System.IO.Path.GetDirectoryName((new System.Uri(System.Reflection.Assembly.Load("nunit.util").EscapedCodeBase)).LocalPath)
+#else
+        let curDir = System.IO.Path.GetDirectoryName((new System.Uri(System.Reflection.Assembly.Load("nunit.framework").EscapedCodeBase)).LocalPath)
+#endif
         let localCopy = System.IO.Path.Combine(curDir, System.IO.Path.GetFileName(neededLocalAssem))
         System.IO.File.Copy(neededLocalAssem, localCopy, true)
         
diff --git a/vsintegration/src/Salsa/salsa.fs b/vsintegration/src/Salsa/salsa.fs
index fb9c5fc3436..1a50ad15b4d 100644
--- a/vsintegration/src/Salsa/salsa.fs
+++ b/vsintegration/src/Salsa/salsa.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 (*
     Simplified abstraction over visual studio.
@@ -12,24 +12,22 @@
 #nowarn "40" // let rec for recursive values
 namespace Salsa
 
-open Microsoft.VisualStudio.FSharp.LanguageService
-open Internal.Utilities.Debug
-open Microsoft.VisualStudio
-open Microsoft.VisualStudio.Shell.Interop
-open Microsoft.VisualStudio.FSharp.ProjectSystem
-open Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.VisualStudio.TextManager.Interop
 open System
 open System.IO
 open System.Text
 open System.Collections.Generic 
 open System.Runtime.InteropServices
 open System.Threading
-open Implementation
-open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
+open Internal.Utilities.Debug
+open Microsoft.VisualStudio
+open Microsoft.VisualStudio.Shell.Interop
+open Microsoft.VisualStudio.FSharp.ProjectSystem
+open Microsoft.VisualStudio.FSharp.LanguageService
+open Microsoft.VisualStudio.TextManager.Interop
 open UnitTests.TestLib.Utils.FilesystemHelpers
 open Microsoft.Build.Framework
 open Microsoft.FSharp.Compiler.Range
+open Microsoft.FSharp.Compiler.SourceCodeServices
 
 open Microsoft.Build.Evaluation
 
@@ -267,26 +265,26 @@ module internal Salsa =
 
     type MSBuildProjectSite(projectfile,configurationFunc,platformFunc) = 
         let projectPath = Path.GetDirectoryName(projectfile)
-        let timestamp = ref (new DateTime())
-        let flags = ref None
-        let prevConfig = ref ""
-        let prevPlatform = ref ""
+        let mutable timestamp = new DateTime()
+        let mutable flags = None
+        let mutable prevConfig = ""
+        let mutable prevPlatform = ""
         let GetFlags() = 
             let newtimestamp = File.GetLastWriteTime(projectfile)
             let curConfig = configurationFunc()
             let curPlatform = platformFunc()
-            if (!timestamp)<>newtimestamp 
-                   || (!flags) = None 
-                   || (!prevConfig)<>curConfig
-                   || (!prevPlatform)<>curPlatform then
-                Trace.PrintLine("ProjectSite", fun _ -> sprintf "Timestamp of %s changed. New timestamp=%A, old timestamp=%A" projectfile newtimestamp !timestamp) 
-                timestamp := newtimestamp
-                prevConfig := curConfig
-                prevPlatform := curPlatform
-                flags := Some(MSBuild.CrackProject(projectfile, !prevConfig, !prevPlatform))
-            match (!flags) with
-                Some(flags) -> flags
-                | _ -> raise Error.Bug
+            if timestamp <> newtimestamp 
+                   || flags = None 
+                   || prevConfig <> curConfig
+                   || prevPlatform <> curPlatform then
+                Trace.PrintLine("ProjectSite", fun _ -> sprintf "Timestamp of %s changed. New timestamp=%A, old timestamp=%A" projectfile newtimestamp timestamp) 
+                timestamp <- newtimestamp
+                prevConfig <- curConfig
+                prevPlatform <- curPlatform
+                flags <- Some(MSBuild.CrackProject(projectfile, prevConfig, prevPlatform))
+            match flags with
+            | Some flags -> flags
+            | _ -> raise Error.Bug
         let changeHandlers =  new System.Collections.Generic.Dictionary()
         member x.TriggerChanges() = 
             for handler in changeHandlers do 
@@ -314,9 +312,9 @@ module internal Salsa =
           member this.ErrorListTaskReporter() = None
           member this.AdviseProjectSiteChanges(callbackOwnerKey,callback) = changeHandlers.[callbackOwnerKey] <- callback
           member this.AdviseProjectSiteCleaned(callbackOwnerKey,callback) = () // no unit testing support here
-          member this.IsTypeResolutionValid = true
+          member this.IsIncompleteTypeCheckEnvironment = false
           member this.TargetFrameworkMoniker = ""
-          member this.LoadTime = new System.DateTime(2000,1,1)
+          member this.LoadTime = System.DateTime(2000,1,1)
         
     // Attempt to treat as MSBuild project.
     let internal NewMSBuildProjectSite(configurationFunc, platformFunc, msBuildProjectName) = 
@@ -379,36 +377,34 @@ module internal Salsa =
     type ChangeCallBack = IVsHierarchy * string -> unit
     
     /// Hooks for controlling behaviors
-    []
-    type ProjectBehaviorHooks = {
-        CreateProjectHook:(*projectFilename:*)string->(*files:*)(string*BuildAction*string option) list->(*references:*)(string*bool) list->(*projReferences:*)string list->
-                  (*disabledWarnings:*)string list->(*defines*)string list->(*versionFile:*)string->(*otherFlags:*)string->(*preImportXml:*)string->(*targetFrameworkVersion*)string->unit
-        InitializeProjectHook : OpenProject -> unit
-        MakeHierarchyHook : string->string->string->ChangeCallBack->OleServiceProvider->IVsHierarchy
-        AddFileToHierarchyHook : string -> IVsHierarchy -> unit
-        BuildHook : (*basename:*)string -> (*target:*)string -> IVsOutputWindowPane -> BuildResult
-        GetMainOutputAssemblyHook : string -> string
-        SaveHook : unit -> unit
-        DestroyHook : unit->unit
-        ModifyConfigurationAndPlatformHook : string->unit
-    }    
+    type ProjectBehaviorHooks = 
+        /// Create an MSBuild project at the given location with the given files and options.
+        abstract CreateProjectHook:  projectFilename:string * files:(string*BuildAction*string option) list * references:(string*bool) list * projReferences: string list * disabledWarnings:string list * defines: string list * versionFile: string * otherFlags:string * preImportXml:string  * targetFrameworkVersion: string->unit
+        abstract InitializeProjectHook : OpenProject -> unit
+        abstract MakeHierarchyHook : string * string * string * ChangeCallBack  * OleServiceProvider->IVsHierarchy
+        abstract AddFileToHierarchyHook : string * IVsHierarchy -> unit
+        abstract BuildHook : basename:string * target:string * IVsOutputWindowPane -> BuildResult
+        abstract GetMainOutputAssemblyHook : string -> string
+        abstract SaveHook : unit -> unit
+        abstract DestroyHook : unit->unit
+        abstract ModifyConfigurationAndPlatformHook : string->unit
     
     /// A file open in VS.
-    and OpenFile = interface
+    and OpenFile = 
         // host VS
         abstract VS : VisualStudio
-        end
+
     /// A project open in VS.
-    and OpenProject = interface
+    and OpenProject = 
         // host VS
         abstract VS : VisualStudio
-        end
+
     /// Private part of OpenProject
     and IOpenProject = 
         /// Add a file to this project.
-        abstract AddFileFromText : string*string*BuildAction*string list->File
+        abstract AddFileFromText : string * string * BuildAction * string list -> File
         /// Add a file to this project as a linked file.
-        abstract AddLinkedFileFromText : string*string*string*BuildAction*string list->File
+        abstract AddLinkedFileFromText : string * string * string * BuildAction * string list -> File
         /// Open a file that is a member of this project.
         abstract OpenFile : string->OpenFile
         /// Errors (task list) associated with this project
@@ -446,10 +442,9 @@ module internal Salsa =
         abstract ConfigurationAndPlatform : string with set
 
     /// A solution open in VS.
-    and OpenSolution = interface
+    and OpenSolution = 
         // host VS
         abstract VS : VisualStudio
-        end
     
     // Private half of the OpenSolution interface
     and IOpenSolution = 
@@ -461,9 +456,8 @@ module internal Salsa =
 
 
     /// General purpose methods. Loosely represents running instance of VS.
-    and VisualStudio = interface
+    and VisualStudio = 
         abstract VsOps : VsOps
-        end
      
     /// Private half of the Visual Studio interface   
     and IVisualStudio =
@@ -476,7 +470,7 @@ module internal Salsa =
         abstract CleanUp : unit->unit
         abstract ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients : unit -> unit
         /// Open a previously-created project
-        abstract OpenExistingProject : ProjectBehaviorHooks->(*dir:*)string->(*projName:*)string->OpenProject*OpenSolution
+        abstract OpenExistingProject : ProjectBehaviorHooks * dir:string * projName:string -> OpenProject*OpenSolution
         abstract CleanInvisibleProject : unit -> unit
         
     and TextSpan       = Microsoft.VisualStudio.TextManager.Interop.TextSpan
@@ -494,83 +488,79 @@ module internal Salsa =
         SelectedMember : int }
         
     /// Methods for simulating VisualStudio    
-    and [] VsOps = {
-        CreateVisualStudio                    : unit -> VisualStudio
-        CreateSolution                        : VisualStudio -> OpenSolution
-        GetOutputWindowPaneLines : VisualStudio -> string list
-        CloseSolution                         : OpenSolution ->unit
-        CreateProject                         : OpenSolution * string -> OpenProject
-        CreateProjectWithHooks                : OpenSolution * ProjectBehaviorHooks * string -> OpenProject
-        NewFile                               : VisualStudio * string * BuildAction * string list -> File
-        DeleteFileFromDisk : File -> unit
-        AddFileFromText                       : OpenProject * string * string * BuildAction * string list -> File
-        AddLinkedFileFromText                 : OpenProject*string*string*string*BuildAction*string list->File
-        AddAssemblyReference                  : OpenProject * string * bool -> unit 
-        AddProjectReference                   : OpenProject * OpenProject -> unit 
-        ProjectDirectory                      : OpenProject -> string
-        ProjectFile                           : OpenProject -> string
-        SetVersionFile                        : OpenProject * string -> unit
-        SetOtherFlags                         : OpenProject * string -> unit
-        SetConfigurationAndPlatform           : OpenProject * string -> unit
-        AddDisabledWarning                    : OpenProject * string -> unit
-        GetErrors                             : OpenProject -> Error list 
-        BuildProject                          : OpenProject * string -> BuildResult
-        GetMainOutputAssembly                 : OpenProject -> string
-        SaveProject                           : OpenProject -> unit        
-        OpenFileViaOpenFile                   : VisualStudio * string -> OpenFile
-        OpenFile                              : OpenProject * string -> OpenFile 
-        GetOpenFiles                          : OpenProject -> OpenFile list
-        SetProjectDefines                     : OpenProject * string list -> unit
-        PlaceIntoProjectFileBeforeImport      : OpenProject * string -> unit
-        OpenExistingProject                   : VisualStudio * string * string -> OpenProject * OpenSolution
-        MoveCursorTo                          : OpenFile * int * int -> unit
-        GetCursorLocation                     : OpenFile -> int * int
-        GetLineNumber                         : OpenFile -> int -> string
-        GetAllLines                           : OpenFile -> string list
-        SwitchToFile                          : VisualStudio * OpenFile -> unit
-        OnIdle                                : VisualStudio -> unit
-        ShiftKeyDown                          : VisualStudio -> unit
-        ShiftKeyUp                            : VisualStudio -> unit
-        TakeCoffeeBreak                       : VisualStudio -> unit 
-        ReplaceFileInMemory                   : OpenFile * string list * bool -> unit
-        SaveFileToDisk                        : OpenFile -> unit
-        CleanUp                               : VisualStudio -> unit 
-        CleanInvisibleProject                 : VisualStudio -> unit
-        ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients : VisualStudio -> unit        
-        GetSquiggleAtCursor                   : OpenFile -> (Microsoft.VisualStudio.FSharp.LanguageService.Severity * string) option
-        GetSquigglesAtCursor                  : OpenFile -> (Microsoft.VisualStudio.FSharp.LanguageService.Severity * string) list
-        AutoCompleteAtCursor                  : OpenFile -> CompletionItem array
-        CompleteAtCursorForReason             : OpenFile * Microsoft.VisualStudio.FSharp.LanguageService.BackgroundRequestReason -> CompletionItem array
-        CompletionBestMatchAtCursorFor        : OpenFile * string * string option -> (string * bool * bool) option
-        MoveCursorToEndOfMarker               : OpenFile * string -> unit
-        MoveCursorToStartOfMarker             : OpenFile * string -> unit
-        GetQuickInfoAtCursor                  : OpenFile -> string   
-        GetQuickInfoAndSpanAtCursor           : OpenFile -> string * TextSpan   
-        GetMatchingBracesForPositionAtCursor  : OpenFile -> (TextSpan * TextSpan) array
-        GetNameOfOpenFile                     : OpenFile -> string
-        GetCheckOptionsOfScript               : OpenFile -> Microsoft.FSharp.Compiler.SourceCodeServices.CheckOptions
-        GetParameterInfoAtCursor              : OpenFile -> MethodListForAMethodTip
-        GetParameterInfoAtCursorNoFallback    : OpenFile -> MethodListForAMethodTip
-        GetTokenTypeAtCursor                  : OpenFile -> TokenType
-        GetIdentifierAtCursor                 : OpenFile -> (string * int) option
-        GetF1KeywordAtCursor                  : OpenFile -> string option
-        GotoDefinitionAtCursor                : OpenFile -> bool -> GotoDefnResult
-        GetNavigationContentAtCursor          : OpenFile -> NavigationBarResult
-        GetHiddenRegionCommands               : OpenFile -> list * Map
-        CreatePhysicalProjectFileInMemory     : ((*files:*)(string*BuildAction*string option) list) ->
-                                                ((*references:*)(string*bool) list) ->
-                                                ((*projectReferences:*)string list) ->
-                                                ((*disabledWarnings:*)string list) ->
-                                                ((*defines:*)string list) ->
-                                                (*versionFile*) string ->
-                                                ((*otherFlags:*)string) ->
-                                                ((*otherProjMisc:*)string) -> 
-                                                ((*targetFrameworkVersion*)string) -> string
+    and [] VsOps = 
+        abstract BehaviourHooks: ProjectBehaviorHooks
+        abstract CreateVisualStudio: unit -> VisualStudio
+        abstract CreateSolution: VisualStudio -> OpenSolution
+        abstract GetOutputWindowPaneLines: VisualStudio -> string list
+        abstract CloseSolution: OpenSolution ->unit
+        abstract CreateProject: OpenSolution * string -> OpenProject
+        abstract CreateProjectWithHooks: OpenSolution * ProjectBehaviorHooks * string -> OpenProject
+        abstract NewFile: VisualStudio * string * BuildAction * string list -> File
+        abstract DeleteFileFromDisk: File -> unit
+        abstract AddFileFromText: OpenProject * string * string * BuildAction * string list -> File
+        abstract AddLinkedFileFromText: OpenProject * string * string * string * BuildAction * string list -> File
+        abstract AddAssemblyReference: OpenProject * string * bool -> unit 
+        abstract AddProjectReference: OpenProject * OpenProject -> unit 
+        abstract ProjectDirectory: OpenProject -> string
+        abstract ProjectFile: OpenProject -> string
+        abstract SetVersionFile: OpenProject * string -> unit
+        abstract SetOtherFlags: OpenProject * string -> unit
+        abstract SetConfigurationAndPlatform: OpenProject * string -> unit
+        abstract AddDisabledWarning: OpenProject * string -> unit
+        abstract GetErrors: OpenProject -> Error list 
+        abstract BuildProject: OpenProject * string -> BuildResult 
+        abstract GetMainOutputAssembly: OpenProject -> string
+        abstract SaveProject: OpenProject -> unit        
+        abstract OpenFileViaOpenFile: VisualStudio * string -> OpenFile
+        abstract OpenFile: OpenProject * string -> OpenFile 
+        abstract GetOpenFiles: OpenProject -> OpenFile list
+        abstract SetProjectDefines: OpenProject * string list -> unit
+        abstract PlaceIntoProjectFileBeforeImport: OpenProject * string -> unit
+        abstract OpenExistingProject: VisualStudio * string * string -> OpenProject * OpenSolution
+        abstract MoveCursorTo: OpenFile * int * int -> unit
+        abstract GetCursorLocation: OpenFile -> int * int
+        abstract GetLineNumber: OpenFile * int -> string
+        abstract GetAllLines: OpenFile -> string list
+        abstract SwitchToFile: VisualStudio * OpenFile -> unit
+        abstract OnIdle: VisualStudio -> unit
+        abstract ShiftKeyDown: VisualStudio -> unit
+        abstract ShiftKeyUp: VisualStudio -> unit
+        abstract TakeCoffeeBreak: VisualStudio -> unit 
+        abstract ReplaceFileInMemory: OpenFile * string list * bool -> unit
+        abstract SaveFileToDisk: OpenFile -> unit
+        abstract CleanUp: VisualStudio -> unit
+        abstract CleanInvisibleProject: VisualStudio -> unit
+        abstract ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients: VisualStudio -> unit
+        abstract GetSquiggleAtCursor: OpenFile -> (Microsoft.VisualStudio.FSharp.LanguageService.Severity * string) option
+        abstract GetSquigglesAtCursor: OpenFile -> (Microsoft.VisualStudio.FSharp.LanguageService.Severity * string) list
+        /// does a BackgroundRequestReason.MemberSelect at the cursor
+        abstract AutoCompleteAtCursor: OpenFile -> CompletionItem[]
+        /// like AutoCompleteAtCursor, but can pass e.g. BackgroundRequestReason.CompleteWord to do Ctrl-space rather than auto-dot-popup-completion
+        abstract CompleteAtCursorForReason: OpenFile * Microsoft.VisualStudio.FSharp.LanguageService.BackgroundRequestReason -> CompletionItem[]
+        abstract CompletionBestMatchAtCursorFor: OpenFile * string * string option -> (string * bool * bool) option
+        abstract MoveCursorToEndOfMarker: OpenFile * string -> unit
+        abstract MoveCursorToStartOfMarker: OpenFile * string -> unit
+        abstract GetQuickInfoAtCursor: OpenFile -> string  
+        abstract GetQuickInfoAndSpanAtCursor: OpenFile -> string*TextSpan
+        abstract GetMatchingBracesForPositionAtCursor: OpenFile -> (TextSpan * TextSpan)[]
+        abstract GetNameOfOpenFile: OpenFile -> string
+        abstract GetProjectOptionsOfScript: OpenFile -> FSharpProjectOptions
+        abstract GetParameterInfoAtCursor: OpenFile -> MethodListForAMethodTip option
+        abstract GetTokenTypeAtCursor: OpenFile -> TokenType
+        abstract GetIdentifierAtCursor: OpenFile -> (string * int) option
+        abstract GetF1KeywordAtCursor: OpenFile -> string option
+        abstract GotoDefinitionAtCursor: OpenFile * bool -> GotoDefnResult
+        abstract GetNavigationContentAtCursor: OpenFile -> NavigationBarResult
+        abstract GetHiddenRegionCommands: OpenFile -> list * Map
+        abstract CreatePhysicalProjectFileInMemory : files:(string*BuildAction*string option) list * references:(string*bool) list * projectReferences:string list * disabledWarnings:string list * defines:string list * versionFile: string * otherFlags:string * otherProjMisc:string * targetFrameworkVersion:string -> string
+                
         /// True if files outside of the project cone are added as links.
-        AutoCompleteMemberDataTipsThrowsScope : string -> System.IDisposable
-        OutOfConeFilesAreAddedAsLinks         : bool
-        SupportsOutputWindowPane : bool
-    }      
+        abstract AutoCompleteMemberDataTipsThrowsScope : string -> System.IDisposable
+        
+        // VsOps capabilities.
+        abstract OutOfConeFilesAreAddedAsLinks : bool
+        abstract SupportsOutputWindowPane : bool   
 
     []
     module GotoDefnResultExtensions = 
@@ -589,24 +579,12 @@ module internal Salsa =
         let private nextItemId() = 
             cookie<-cookie+1u
             cookie
-        let private addFileToHier filename hier =
-            let itemid = nextItemId()
-            VsMocks.addRootChild hier itemid filename
             
-        /// Patch keyboard
-        let private PatchKeyboard shiftKeyDown = 
-            let pressed flag = if flag then -1s else 0s
-            let getKeyState key =
-                match key with 
-                | Keyboard.Keys.Shift-> pressed shiftKeyDown 
-                | _ -> pressed false
-            Keyboard.HookGetKeyState getKeyState
-
-        type (*private*) UndoAction =
-              DeleteFile of string
+        type UndoAction =
+            | DeleteFile of string
             | RemoveFolder of string
             
-        type (*private*) Point = {line:int; col:int}
+        type Point = {line:int; col:int}
             
 
         /// Find the given marker and return the line and column.
@@ -614,7 +592,7 @@ module internal Salsa =
             let _, linecount = tl.GetLineCount()
             let mutable returnLine = -1
             let mutable returnCol = -1
-            let mutable i = 1
+            let mutable i = 1   
             while i <= linecount do
                 let _, len = tl.GetLengthOfLine(i-1)
                 let _, text = tl.GetLineText(i-1,0,i-1,len)
@@ -654,15 +632,15 @@ module internal Salsa =
         /// Create text of an MSBuild project with the given files and options.
         let CreateMsBuildProjectText 
                 (useInstalledTargets : bool)
-                (files:(string*BuildAction*string option) list) 
-                (references:(string*bool) list) 
-                (projectReferences:string list) 
-                (disabledWarnings:string list) 
-                (defines:string list) 
-                versionFile 
-                (otherFlags:string) 
-                (otherProjMisc:string)
-                (targetFrameworkVersion:string) =        
+                (files:(string*BuildAction*string option) list, 
+                 references:(string*bool) list,
+                 projectReferences:string list,
+                 disabledWarnings:string list,
+                 defines:string list,
+                 versionFile,
+                 otherFlags:string,
+                 otherProjMisc:string,
+                 targetFrameworkVersion:string) =        
 
             // Determine which FSharp.targets file to use. If we use the installed
             // targets file then we check the registry for F#'s install path. Otherwise
@@ -674,7 +652,7 @@ module internal Salsa =
             
             let sb = new System.Text.StringBuilder()
             let Append (text:string) = 
-                Trace.PrintLine("Salsa", fun _ -> text)
+                Trace.PrintLine("VisualFSharp.Salsa", fun _ -> text)
                 sb.Append(text+"\r\n") |> ignore
             Append ""
             Append "    "
@@ -741,37 +719,14 @@ module internal Salsa =
             
             Append (sprintf "    " targetsFileFolder)
             Append ""
-            Trace.PrintLine("Salsa", fun _ -> sprintf "Project text:\n%s" (sb.ToString()) )
+            Trace.PrintLine("VisualFSharp.Salsa", fun _ -> sprintf "Project text:\n%s" (sb.ToString()) )
             
             sb.ToString()
 
-        /// Create an MSBuild project at the given location with the given files and options.
-        let CreateMsBuildProject 
-                (useInstalledTargets : bool)
-                projectName 
-                (files:(string*BuildAction*string option) list) 
-                (references:(string*bool) list) 
-                (projectReferences:string list) 
-                (disabledWarnings:string list) 
-                (defines:string list) 
-                versionFile 
-                (otherFlags:string)
-                (preImportXml : string)
-                (targetFrameworkVersion : string) =
-            use t = Trace.Call("Salsa", "CreateMsBuildProject", fun _ -> sprintf " projectName=%s" projectName)
-            if File.Exists(projectName) then File.Delete(projectName)
-
-            let text = CreateMsBuildProjectText useInstalledTargets files references projectReferences disabledWarnings defines versionFile otherFlags preImportXml targetFrameworkVersion
-            Trace.PrintLine("Salsa", fun _ -> text)
-            File.AppendAllText(projectName,text+"\r\n")
-            
-            
-
-        let MakeMSBuildBehavior() = 
-            let openProject : IOpenProject option ref= ref None
+        type MSBuildBehaviorHooks(useInstalledTargets) = 
+            let mutable openProject : IOpenProject option = None
             let ConfPlat() = 
-                let s = (!openProject).Value.ConfigurationAndPlatform
-                dprintf "%s" s
+                let s = openProject.Value.ConfigurationAndPlatform
                 let i = s.IndexOf('|')
                 if i = -1 then
                     s,""
@@ -779,31 +734,39 @@ module internal Salsa =
                     s.Substring(0,i), s.Substring(i+1)
             let Conf() = let c,_ = ConfPlat() in c
             let Plat() = let _,p = ConfPlat() in p
-            {
-            CreateProjectHook       = CreateMsBuildProject false    // Don't use installed FSharp.targets file
-            InitializeProjectHook   = fun op -> openProject := Some(op:?>IOpenProject)
-            MakeHierarchyHook       = (fun projdir fullname projectname configChangeNotifier serviceProvider->
-                let projectSite = NewMSBuildProjectSite(Conf, Plat, fullname)
-                let projectSiteFactory = { new IProvideProjectSite with member x.GetProjectSite() = (projectSite :> IProjectSite) }
-                let hier = VsMocks.createHier(projectSiteFactory)
-                VsMocks.setHierRoot hier projdir projectname
-                hier)
-            AddFileToHierarchyHook  = addFileToHier
-            BuildHook               = fun baseName target outputWindowPane -> MSBuild.Build(baseName, (if target = null then "Build" else target), Conf(), Plat())
-            GetMainOutputAssemblyHook = fun baseName -> MSBuild.GetMainOutputAssembly(baseName, Conf(), Plat())
-            SaveHook                = fun () -> ()
-            DestroyHook             = fun()->()
-            ModifyConfigurationAndPlatformHook = fun _ -> ()
-            }     
+            interface ProjectBehaviorHooks with 
+                member x.CreateProjectHook (projectName, files, references, projectReferences, disabledWarnings, defines, versionFile, otherFlags, preImportXml, targetFrameworkVersion : string) =
+                    use t = Trace.Call("VisualFSharp.Salsa", "CreateMsBuildProject", fun _ -> sprintf " projectName=%s" projectName)
+                    if File.Exists(projectName) then File.Delete(projectName)
+
+                    let text = CreateMsBuildProjectText useInstalledTargets (files, references, projectReferences, disabledWarnings, defines, versionFile, otherFlags, preImportXml, targetFrameworkVersion)
+                    Trace.PrintLine("VisualFSharp.Salsa", fun _ -> text)
+                    File.AppendAllText(projectName,text+"\r\n")
+            
+                member x.InitializeProjectHook op = openProject <- Some(op:?>IOpenProject)
+                member x.MakeHierarchyHook (projdir, fullname, projectname, configChangeNotifier, serviceProvider) = 
+                    let projectSite = NewMSBuildProjectSite(Conf, Plat, fullname)
+                    let projectSiteFactory = { new IProvideProjectSite with member x.GetProjectSite() = (projectSite :> IProjectSite) }
+                    let hier = VsMocks.createHier(projectSiteFactory)
+                    VsMocks.setHierRoot hier projdir projectname
+                    hier
+                member x.AddFileToHierarchyHook(filename, hier)  = 
+                    let itemid = nextItemId()
+                    VsMocks.addRootChild hier itemid filename
+                member x.BuildHook (baseName, target, outputWindowPane) = MSBuild.Build(baseName, (if target = null then "Build" else target), Conf(), Plat())
+                member x.GetMainOutputAssemblyHook baseName = MSBuild.GetMainOutputAssembly(baseName, Conf(), Plat())
+                member x.SaveHook() = ()
+                member x.DestroyHook() = ()
+                member x.ModifyConfigurationAndPlatformHook (_) = ()
 
         type SimpleVisualStudio(configChangeNotifier,serviceProvider, ops : VsOps) =                 
             let mutable shiftKeyDown = false
-            let mutable languageService : LanguageServiceState option = None
+            let mutable languageService : FSharpLanguageServiceTestable option = None
             let mutable undoStack:UndoAction list = []
             let mutable focusFile : SimpleOpenFile option = None
             let mutable solution : SimpleOpenSolution option = None
             let mutable prevSolutions : Map = Map.empty
-            let mutable bufferToSource = new Dictionary()
+            let mutable bufferToSource = new Dictionary()
             let mutable invisibleSolution : SimpleOpenSolution option = None
             let mutable invisibleProjectFolder : string = null
             let mutable invisibleProject : SimpleOpenProject option = None
@@ -812,7 +775,7 @@ module internal Salsa =
             let currentOutputWindowLines = ref []
             let outputWindowPane = VsMocks.vsOutputWindowPane(currentOutputWindowLines)
             
-            let fileChangeEx = VsMocks.VsFileChangeEx()
+            let vsFileWatch = VsMocks.VsFileChangeEx()
             
             let ReopenSolution fullname =
                 match prevSolutions.TryFind fullname with
@@ -820,7 +783,7 @@ module internal Salsa =
                              s
                 | None -> failwith "solution with that project does not exist"
                 
-            member vs.FileChangeEx = fileChangeEx     
+            member vs.FileChangeEx = vsFileWatch     
             
             member vs.ConfigChangeNotifier = configChangeNotifier           
             member vs.ServiceProvider = serviceProvider    
@@ -878,10 +841,10 @@ module internal Salsa =
                     solution <- None
                 | None -> failwith "there is no open solution"
             
-            member vs.AddSourceForBuffer(buffer:IVsTextBuffer,source:IdealSource) =
+            member vs.AddSourceForBuffer(buffer:IVsTextBuffer,source:IFSharpSource) =
                 bufferToSource.Add(buffer,source)
 
-            member vs.SourceFactory(buffer:IVsTextBuffer) =
+            member vs.GetSourceForBuffer(buffer:IVsTextBuffer) =
                 bufferToSource.[buffer]
                 
             member vs.GetOutputWindowPaneLines() = 
@@ -906,7 +869,7 @@ module internal Salsa =
                     let s = SimpleOpenSolution(vs) 
                     solution <- Some(s)
                     s :> OpenSolution
-                member solution.OpenExistingProject behaviorHooks projdir projectname =
+                member solution.OpenExistingProject (behaviorHooks, projdir, projectname) =
                     let fullname = Path.Combine(projdir,projectname+".fsproj")
                     let soln = ReopenSolution fullname
                     let proj = soln.OpenExistingProject behaviorHooks projdir projectname
@@ -958,26 +921,16 @@ module internal Salsa =
         and internal SimpleOpenSolution(vs:SimpleVisualStudio) as this = 
             let mutable curProjects : (string*SimpleOpenProject) list = []
             let mutable prevProjects : Map = Map.empty
-            let MakeProject behaviorHooks projdir fullname projectname =
-                // Create the hierarchy to go with this project.
-                let hier = behaviorHooks.MakeHierarchyHook projdir fullname projectname vs.ConfigChangeNotifier vs.ServiceProvider
-
-                // The rest.
-                let p = new SimpleOpenProject(this,hier,projdir,fullname,behaviorHooks)
-                curProjects <- (fullname,p) :: curProjects
-                p :> OpenProject
-            let ReopenProject fullname =
-                match prevProjects.TryFind fullname with
-                | Some(p) -> prevProjects <- prevProjects.Remove fullname
-                             p
-                | None -> failwith "project does not exist"
             member solution.Vs = vs
             member solution.CleanUp() = 
                 curProjects |> List.iter (fun (_,p) -> p.CleanUp())
                 prevProjects |> Map.toList |> List.iter (fun (_,p) -> p.CleanUp())
             member solution.OpenExistingProject behaviorHooks projdir projectname =
                 let fullname = Path.Combine(projdir,projectname+".fsproj")
-                ReopenProject fullname :> OpenProject
+                match prevProjects.TryFind fullname with
+                | Some(p) -> prevProjects <- prevProjects.Remove fullname
+                             p
+                | None -> failwith "project does not exist"
             
             interface OpenSolution with
                 member solution.VS = vs :> _
@@ -997,14 +950,20 @@ module internal Salsa =
                     
                     // Put project in there.
                     let fullname = Path.Combine(projdir, projectname+".fsproj")
-                    behaviorHooks.CreateProjectHook fullname [] [] [] [] [] null null "" null
+                    behaviorHooks.CreateProjectHook(fullname, [], [], [], [], [], null, null, "", null)
                     vs.PushUndo(DeleteFile(fullname))
                     
                     // Schedule obj\Debug and bin\Debug to be removed.
                     vs.PushUndo(RemoveFolder(Path.Combine(projdir, "obj")))
                     vs.PushUndo(RemoveFolder(Path.Combine(projdir, "bin")))
                     
-                    MakeProject behaviorHooks projdir fullname projectname
+                    // Create the hierarchy to go with this project.
+                    let hier = behaviorHooks.MakeHierarchyHook(projdir, fullname, projectname, vs.ConfigChangeNotifier, vs.ServiceProvider)
+
+                    // The rest.
+                    let p = new SimpleOpenProject(this,hier,projdir,fullname,behaviorHooks)
+                    curProjects <- (fullname,p) :: curProjects
+                    p :> OpenProject
                     
         and internal SimpleOpenProject(solution:SimpleOpenSolution,hier:IVsHierarchy,directory:string,projectName:string,behaviorHooks:ProjectBehaviorHooks) as this = 
             let mutable configuration = ""
@@ -1019,17 +978,8 @@ module internal Salsa =
             let mutable versionFile : string = null
             let mutable otherFlags : string = null
             let CreateProjectFile() = 
-                behaviorHooks.CreateProjectHook 
-                                        projectName 
-                                        (List.rev filenames) 
-                                        (List.rev references) 
-                                        (List.rev projectReferences) 
-                                        (List.rev disabledWarnings) 
-                                        (List.rev defines)
-                                        versionFile
-                                        otherFlags
-                                        preImportXml
-                                        null
+                behaviorHooks.CreateProjectHook(projectName , List.rev filenames, List.rev references, List.rev projectReferences, List.rev disabledWarnings, List.rev defines, versionFile, otherFlags, preImportXml, null)
+
                 // Trigger the AdviseProjectSiteChanges callbacks on our project sites
                 match hier with 
                 | :? IProvideProjectSite as f -> 
@@ -1081,7 +1031,7 @@ module internal Salsa =
                 member project.Build(target) = 
                     let outputWindowPane = solution.Vs.OutputWindowPane
                     outputWindowPane.Clear() |> ignore
-                    let buildResult = behaviorHooks.BuildHook projectName target outputWindowPane
+                    let buildResult = behaviorHooks.BuildHook(projectName, target, outputWindowPane)
                     let executableOutput = Path.Combine(directory,buildResult.ExecutableOutput)
                     if target = "Clean" then
                         project.Solution.Vs.FileChangeEx.DeletedFile(executableOutput) // Notify clients of IVsFileChangeEx
@@ -1133,7 +1083,7 @@ module internal Salsa =
                         // The invisible project does not have a hiearchy.
                         if hier <> null then 
                             // Put the file in the hierarchy
-                            behaviorHooks.AddFileToHierarchyHook filename hier
+                            behaviorHooks.AddFileToHierarchyHook(filename, hier)
                         
                         // Put the file in the text manager
                         VsMocks.setActiveView (solution.Vs.LanguageService.ServiceProvider.TextManager) view                    
@@ -1141,17 +1091,14 @@ module internal Salsa =
                         // We no longer need the RDT, but keeping it compiling in Salsa/VsMocks in case we ever need it again
                         // Put the document in the RDT
                         let rdtId = nextRdtID()
-                        VsMocks.openDocumentInRdt (solution.Vs.LanguageService.ServiceProvider.Rdt) rdtId filename view hier
+                        VsMocks.openDocumentInRdt (solution.Vs.LanguageService.ServiceProvider.RunningDocumentTable) rdtId filename view hier
                         // product no longer uses RDT
                         // solution.Vs.LanguageService.OnAfterFirstDocumentLock rdtId 1u 1u
 
                         // Create the 'Source'
                         let file = SimpleOpenFile(project,filename,lines,view,linestarts,rdtId) 
-                        let source = Source.CreateDelegatingSource(file.RecolorizeWholeFile,
-                                                                   file.RecolorizeLine,
-                                                                   filename,
-                                                                   file.IsClosed,
-                                                                   project.Solution.Vs.FileChangeEx)
+
+                        let source = Source.CreateSourceTestable(file.RecolorizeWholeFile,file.RecolorizeLine,(fun () -> filename),file.IsClosed,project.Solution.Vs.FileChangeEx, solution.Vs.LanguageService :> IDependencyFileChangeNotify)
                         let _,buf = view.GetBuffer()
                         solution.Vs.AddSourceForBuffer(buf,source)                 
                         let source = solution.Vs.LanguageService.CreateSource(buf)
@@ -1187,8 +1134,8 @@ module internal Salsa =
             let mutable combinedLines:string = null
             
             member file.GetFileName() = filename
-            member file.GetCheckOptionsOfScript() = 
-                project.Solution.Vs.LanguageService.InteractiveChecker.GetCheckOptionsFromScriptRoot(filename, file.CombinedLines, System.DateTime(2000,1,1))
+            member file.GetProjectOptionsOfScript() = 
+                project.Solution.Vs.LanguageService.FSharpChecker.GetProjectOptionsFromScript(filename, file.CombinedLines, System.DateTime(2000,1,1), [| |]) |> Async.RunSynchronously
                  
             member file.RecolorizeWholeFile() = ()
             member file.RecolorizeLine (_line:int) = ()
@@ -1202,9 +1149,9 @@ module internal Salsa =
                 if combinedLines = null then 
                     combinedLines<-String.Join("\n",lines)
                 combinedLines   
-            member file.Source : IdealSource = 
+            member file.Source : IFSharpSource = 
                 let _,buf = view.GetBuffer()
-                project.Solution.Vs.SourceFactory(buf)                                       
+                project.Solution.Vs.GetSourceForBuffer(buf)                                       
             
             /// When a file is opened, focus it as the topmost file in VS.
             member file.EnsureInitiallyFocusedInVs() =
@@ -1212,10 +1159,10 @@ module internal Salsa =
                                      
             member file.TryExecuteBackgroundRequest(pr) = 
                 let ls = project.Solution.Vs.LanguageService
-                ls.ExecuteBackgroundRequest(pr, file.Source) 
+                ls.BackgroundRequests.ExecuteBackgroundRequest(pr, file.Source) 
                 if pr.ResultClearsDirtinessOfFile then 
                     file.Source.RecordViewRefreshed()
-                pr.ResultScope 
+                pr.ResultIntellisenseInfo 
 
             member file.ExecuteBackgroundRequestForScope(pr,canRetryAfterWaiting) = 
                 match file.TryExecuteBackgroundRequest(pr) with 
@@ -1236,7 +1183,7 @@ module internal Salsa =
                 // Full check.                    
                 let sink = new AuthoringSink(BackgroundRequestReason.FullTypeCheck, 0, 0, maxErrors) 
                 let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                let pr = project.Solution.Vs.LanguageService.CreateBackgroundRequest(0,0,new TokenInfo(),file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath(file.Filename), BackgroundRequestReason.FullTypeCheck, view,sink,null,file.Source.ChangeCount,false)
+                let pr = project.Solution.Vs.LanguageService.BackgroundRequests.CreateBackgroundRequest(0,0,new TokenInfo(),file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath(file.Filename), BackgroundRequestReason.FullTypeCheck, view,sink,null,file.Source.ChangeCount,false)
                 pr.ResultSink.add_OnErrorAdded(
                     OnErrorAddedHandler(fun path subcategory msg context severity -> 
                                 project.Errors <- new Error(path, subcategory, msg, context, severity) :: project.Errors))
@@ -1259,12 +1206,11 @@ module internal Salsa =
                             //System.Diagnostics.Debug.Assert(false, "unit test is doing an AutoComplete MemberSelect at a non-dot location")
                             failwith "unit test is probably doing an AutoComplete MemberSelect at a non-dot location, maybe should be CtrlSpaceComplete instead?"
                 file.EnsureInitiallyFocusedInVs()
-                let origKeyStateAccessor = PatchKeyboard project.Solution.Vs.IsShiftKeyDown
                 let currentAuthoringScope =
                     let ti = new TokenInfo()
                     let sink = new AuthoringSink(parseReason, cursor.line-1, cursor.col-1, maxErrors)
                     let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                    let pr = project.Solution.Vs.LanguageService.CreateBackgroundRequest(
+                    let pr = project.Solution.Vs.LanguageService.BackgroundRequests.CreateBackgroundRequest(
                                                     cursor.line-1, cursor.col-1, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing,
                                                     System.IO.Path.GetFullPath(file.Filename),
                                                     parseReason, view, sink, null, file.Source.ChangeCount, false)
@@ -1276,7 +1222,7 @@ module internal Salsa =
                     System.Diagnostics.Debug.Assert(false, "No Authoring Scope was returned by ExecuteBackgroundRequest, even after waiting")
                     failwith "No Authoring Scope" 
                 | _ -> 
-                    currentAuthoringScope, origKeyStateAccessor              
+                    currentAuthoringScope
 
 
             member file.GetCursorLocation() =
@@ -1302,18 +1248,15 @@ module internal Salsa =
                 result
 
             member file.GetQuickInfoAndSpanAtCursor () = 
-                let (currentAuthoringScope, origKeyStateAccessor) = file.DoIntellisenseRequest BackgroundRequestReason.QuickInfo
-                try 
-                    let textspan = new TextSpan ()
-                    let result,textspan = currentAuthoringScope.GetDataTipText (cursor.line - 1, cursor.col - 1)
-                    let currentLineLength = lines.[cursor.line-1].Length
-                    // The new editor is less tolerant of values out of range. Enforce rigor in unittests here.
-                    if textspan.iEndIndex<0 || textspan.iEndIndex>currentLineLength then failwith (sprintf "GetDataTipText returned iEndIndex out of range. iEndIndex=%d, Line length=%d" textspan.iEndIndex currentLineLength)
-                    if textspan.iStartIndex<0 || textspan.iStartIndex>currentLineLength then failwith (sprintf "GetDataTipText returned iStartIndex out of range. iStartIndex=%d, Line length=%d" textspan.iStartIndex currentLineLength)
-                    if textspan.iStartIndex > textspan.iEndIndex then failwith (sprintf "GetDataTipText returned iStartIndex (%d) greater than iEndIndex (%d)" textspan.iStartIndex textspan.iEndIndex)
-                    result, textspan
-                finally 
-                    Keyboard.HookGetKeyState origKeyStateAccessor |> ignore
+                let currentAuthoringScope = file.DoIntellisenseRequest BackgroundRequestReason.QuickInfo
+                let textspan = new TextSpan ()
+                let result,textspan = currentAuthoringScope.GetDataTipText (cursor.line - 1, cursor.col - 1)
+                let currentLineLength = lines.[cursor.line-1].Length
+                // The new editor is less tolerant of values out of range. Enforce rigor in unittests here.
+                if textspan.iEndIndex<0 || textspan.iEndIndex>currentLineLength then failwith (sprintf "GetDataTipText returned iEndIndex out of range. iEndIndex=%d, Line length=%d" textspan.iEndIndex currentLineLength)
+                if textspan.iStartIndex<0 || textspan.iStartIndex>currentLineLength then failwith (sprintf "GetDataTipText returned iStartIndex out of range. iStartIndex=%d, Line length=%d" textspan.iStartIndex currentLineLength)
+                if textspan.iStartIndex > textspan.iEndIndex then failwith (sprintf "GetDataTipText returned iStartIndex (%d) greater than iEndIndex (%d)" textspan.iStartIndex textspan.iEndIndex)
+                result, textspan
 
             member file.GetMatchingBracesForPositionAtCursor() = 
                 file.EnsureInitiallyFocusedInVs()
@@ -1321,7 +1264,7 @@ module internal Salsa =
                     let ti = new TokenInfo()
                     let sink = new AuthoringSink(BackgroundRequestReason.MatchBraces, cursor.line-1, cursor.col-1, maxErrors)
                     let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                    let pr = project.Solution.Vs.LanguageService.CreateBackgroundRequest(
+                    let pr = project.Solution.Vs.LanguageService.BackgroundRequests.CreateBackgroundRequest(
                                                     cursor.line-1, cursor.col-1, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing,
                                                     System.IO.Path.GetFullPath(file.Filename),
                                                     BackgroundRequestReason.MatchBraces, view, sink, null, file.Source.ChangeCount, false)
@@ -1334,21 +1277,20 @@ module internal Salsa =
                         match o with
                         | (:? Microsoft.VisualStudio.FSharp.LanguageService.BraceMatch as m) -> 
                             yield (m.a, m.b)
-                        | x -> failwith "Microsoft.VisualStudio.FSharp.LanguageService.BraceMatch expected, but got %A" (if box x = null then "null" else (x.GetType()).FullName)
+                        | x -> failwithf "Microsoft.VisualStudio.FSharp.LanguageService.BraceMatch expected, but got %A" (if box x = null then "null" else (x.GetType()).FullName)
                 |]
 
                 
 
 
-            member file.GetParameterInfoAtCursor(useNameResolutionFallback) = 
-                let currentAuthoringScope, origKeyStateAccessor = 
+            member file.GetParameterInfoAtCursor() = 
+                let currentAuthoringScope = 
                     file.EnsureInitiallyFocusedInVs()
-                    let origKeyStateAccessor = PatchKeyboard project.Solution.Vs.IsShiftKeyDown
                     let currentAuthoringScope =
                         let ti = new TokenInfo()
                         let sink = new AuthoringSink(BackgroundRequestReason.MethodTip, cursor.line-1, cursor.col-1, maxErrors)
                         let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                        let pr = project.Solution.Vs.LanguageService.CreateBackgroundRequest(
+                        let pr = project.Solution.Vs.LanguageService.BackgroundRequests.CreateBackgroundRequest(
                                                         cursor.line-1, cursor.col-1, ti, file.CombinedLines, snapshot, MethodTipMiscellany.ExplicitlyInvokedViaCtrlShiftSpace,
                                                         System.IO.Path.GetFullPath(file.Filename),
                                                         BackgroundRequestReason.MethodTip, view, sink, null, file.Source.ChangeCount, false)
@@ -1360,13 +1302,11 @@ module internal Salsa =
                         System.Diagnostics.Debug.Assert(false, "No Authoring Scope was returned by ExecuteBackgroundRequest, even after waiting")
                         failwith "No Authoring Scope" 
                     | _ -> 
-                        currentAuthoringScope, origKeyStateAccessor              
+                        currentAuthoringScope
+
+                let methods = currentAuthoringScope.GetMethodListForAMethodTip()
+                methods 
 
-                try
-                    let methods = currentAuthoringScope.GetMethodListForAMethodTip(useNameResolutionFallback)
-                    methods 
-                finally
-                    Keyboard.HookGetKeyState origKeyStateAccessor |> ignore
             member file.GetTokenTypeAtCursor() = 
                 file.EnsureInitiallyFocusedInVs()
                 let line = cursor.line-1 // Cursor is 1-relative
@@ -1404,40 +1344,35 @@ module internal Salsa =
                 | h::t -> Some h  // arbitrarily pick one
             member file.AutoCompleteAtCursorImpl(reason, ?filterText) =
                 let filterText = defaultArg filterText ""
-                let currentAuthoringScope, origKeyStateAccessor = file.DoIntellisenseRequest(reason)
+                let currentAuthoringScope = file.DoIntellisenseRequest(reason)
                 
-                try                        
-                    let declarations = 
-                        let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                        currentAuthoringScope.GetDeclarations(snapshot, cursor.line-1, cursor.col-1, reason) |> Async.RunSynchronously
-                    match declarations with 
-                    | null -> [||]
-                    | declarations ->
-                        let count = declarations.GetCount(filterText)
-                        let result = Array.zeroCreate count
-                        for i in 0..count-1 do 
-                            let glyph = enum (declarations.GetGlyph(filterText,i))
-                            result.[i] <- (declarations.GetDisplayText(filterText,i), declarations.GetName(filterText,i), (fun () -> declarations.GetDescription(filterText,i)), glyph)
-                        result
-                finally
-                    Keyboard.HookGetKeyState origKeyStateAccessor |> ignore
+                let declarations = 
+                    let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
+                    currentAuthoringScope.GetDeclarations(snapshot, cursor.line-1, cursor.col-1, reason) |> Async.RunSynchronously
+                match declarations with 
+                | null -> [||]
+                | declarations ->
+                    let count = declarations.GetCount(filterText)
+                    let result = Array.zeroCreate count
+                    for i in 0..count-1 do 
+                        let glyph = enum (declarations.GetGlyph(filterText,i))
+                        result.[i] <- (declarations.GetDisplayText(filterText,i), declarations.GetName(filterText,i), (fun () -> declarations.GetDescription(filterText,i)), glyph)
+                    result
+
             member file.AutoCompleteAtCursor(?filterText) = file.AutoCompleteAtCursorImpl(BackgroundRequestReason.MemberSelect, ?filterText=filterText)
             member file.CompleteAtCursorForReason(reason) = file.AutoCompleteAtCursorImpl(reason)
             
             member file.CompletionBestMatchAtCursorFor(text, ?filterText) = 
                 let filterText = defaultArg filterText ""
-                let currentAuthoringScope, origKeyStateAccessor = file.DoIntellisenseRequest(BackgroundRequestReason.MemberSelect)
-                try                        
-                    let declarations = 
-                        let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                        currentAuthoringScope.GetDeclarations(snapshot, cursor.line-1,cursor.col-1, BackgroundRequestReason.MemberSelect) |> Async.RunSynchronously
-                    match declarations with 
-                    | null -> None
-                    | declarations -> 
-                        let (index, uniqueMatch, prefixMatch) = declarations.GetBestMatch(filterText, text)
-                        Some (declarations.GetName(filterText,index), uniqueMatch, prefixMatch)
-                finally
-                    Keyboard.HookGetKeyState origKeyStateAccessor |> ignore
+                let currentAuthoringScope = file.DoIntellisenseRequest(BackgroundRequestReason.MemberSelect)
+                let declarations = 
+                    let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
+                    currentAuthoringScope.GetDeclarations(snapshot, cursor.line-1,cursor.col-1, BackgroundRequestReason.MemberSelect) |> Async.RunSynchronously
+                match declarations with 
+                | null -> None
+                | declarations -> 
+                    let (index, uniqueMatch, prefixMatch) = declarations.GetBestMatch(filterText, text)
+                    Some (declarations.GetName(filterText,index), uniqueMatch, prefixMatch)
             
             member file.GotoDefinitionAtCursor (forceGen : bool) =
               file.EnsureInitiallyFocusedInVs ()
@@ -1447,9 +1382,9 @@ module internal Salsa =
                   let ti   = new TokenInfo ()
                   let sink = new AuthoringSink (BackgroundRequestReason.Goto, row, col, maxErrors)
                   let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                  let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.Goto, view, sink, null, file.Source.ChangeCount, false)
+                  let pr   = project.Solution.Vs.LanguageService.BackgroundRequests.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.Goto, view, sink, null, file.Source.ChangeCount, false)
                   file.ExecuteBackgroundRequestForScope(pr,canRetryAfterWaiting=true)
-              (currentAuthoringScope :?> FSharpScope).GotoDefinition (view, row, col)
+              (currentAuthoringScope :?> FSharpIntellisenseInfo).GotoDefinition (view, row, col)
                  
             member file.GetF1KeywordAtCursor() =
               file.EnsureInitiallyFocusedInVs()
@@ -1459,7 +1394,7 @@ module internal Salsa =
                 let ti   = new TokenInfo ()
                 let sink = new AuthoringSink (BackgroundRequestReason.Goto, row, col, maxErrors)
                 let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.QuickInfo, view, sink, null, file.Source.ChangeCount, false)
+                let pr   = project.Solution.Vs.LanguageService.BackgroundRequests.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.QuickInfo, view, sink, null, file.Source.ChangeCount, false)
                 file.ExecuteBackgroundRequestForScope(pr,canRetryAfterWaiting=true)
               let keyword = ref None
               let span = new Microsoft.VisualStudio.TextManager.Interop.TextSpan(iStartIndex=col,iStartLine=row,iEndIndex=col,iEndLine=row)
@@ -1475,9 +1410,9 @@ module internal Salsa =
               let ti   = new TokenInfo ()
               let sink = new AuthoringSink (BackgroundRequestReason.FullTypeCheck, row, col, maxErrors)
               let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-              let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.FullTypeCheck, view, sink, null, file.Source.ChangeCount, false)
-              project.Solution.Vs.LanguageService.ExecuteBackgroundRequest(pr, file.Source) 
-              match project.Solution.Vs.LanguageService.UntypedParseScope with
+              let pr   = project.Solution.Vs.LanguageService.BackgroundRequests.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.FullTypeCheck, view, sink, null, file.Source.ChangeCount, false)
+              project.Solution.Vs.LanguageService.BackgroundRequests.ExecuteBackgroundRequest(pr, file.Source) 
+              match project.Solution.Vs.LanguageService.BackgroundRequests.NavigationBarAndRegionInfo with
               | Some(scope) ->
                   let typesList = new Collections.ArrayList()
                   let membersList = new Collections.ArrayList()
@@ -1498,9 +1433,9 @@ module internal Salsa =
               let ti   = new TokenInfo ()
               let sink = new AuthoringSink (BackgroundRequestReason.FullTypeCheck, row, col, maxErrors)
               let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-              let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.FullTypeCheck, view, sink, null, file.Source.ChangeCount, false)
-              project.Solution.Vs.LanguageService.ExecuteBackgroundRequest(pr, file.Source) 
-              match project.Solution.Vs.LanguageService.UntypedParseScope with
+              let pr   = project.Solution.Vs.LanguageService.BackgroundRequests.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.FullTypeCheck, view, sink, null, file.Source.ChangeCount, false)
+              project.Solution.Vs.LanguageService.BackgroundRequests.ExecuteBackgroundRequest(pr, file.Source) 
+              match project.Solution.Vs.LanguageService.BackgroundRequests.NavigationBarAndRegionInfo with
               | Some(scope) ->
                   scope.GetHiddenRegions(file.Filename)
               | _ -> 
@@ -1529,7 +1464,7 @@ module internal Salsa =
                 // Update Scanlines. One extra to save the state at the end of the file.
                 scanlines <- Array.create (lines.Length + 1) 0
                 let _, priorbuf = view.GetBuffer()
-                let source = project.Solution.Vs.SourceFactory(priorbuf)
+                let source = project.Solution.Vs.GetSourceForBuffer(priorbuf)
                 // Update View.
                 let projSolution = project.Solution
                 VsMocks.setFileText file.Filename view lines (RecolorizeLines view projSolution.Vs.GetColorizer lines scanlines) (fun line->scanlines.[line])
@@ -1564,8 +1499,6 @@ module internal Salsa =
                 member file.VS = project.Solution.Vs :> _
 
                     
-    let MakeMSBuildBehavior = Privates.MakeMSBuildBehavior
-    
     /// Create a simple Salsa API.
     let CreateSimple(ops) = 
         try 
@@ -1575,16 +1508,11 @@ module internal Salsa =
         
             let sp,configChangeNotifier = VsMocks.MakeMockServiceProviderAndConfigChangeNotifier()
         
-            let ls = LanguageServiceState.Create()
+            let ls = FSharpLanguageServiceTestable()
             let rdt = box (VsMocks.createRdt())
             let tm = box (VsMocks.createTextManager())
-            let getService (serviceType:Type) : obj = 
-                if serviceType = typeof then rdt
-                else if serviceType = typeof then tm
-                else raise (new Exception(sprintf "Salsa did not create service %A"  serviceType))
-                
             let documentationProvider = 
-                { new IdealDocumentationProvider with
+                { new IDocumentationBuilder with
                     override doc.AppendDocumentationFromProcessedXML(appendTo:StringBuilder,processedXml:string,showExceptions, showReturns, paramName) = 
                         appendTo.AppendLine(processedXml)|> ignore 
                     override doc.AppendDocumentation(appendTo:StringBuilder,filename:string,signature:string, showExceptions, showReturns, paramName) = 
@@ -1593,9 +1521,15 @@ module internal Salsa =
                 } 
  
 
+            let sp2 = 
+               { new System.IServiceProvider with 
+                   member __.GetService(serviceType:Type) : obj = 
+                        if serviceType = typeof then rdt
+                        else if serviceType = typeof then tm
+                        else raise (new Exception(sprintf "Salsa did not create service %A"  serviceType)) }
+                
             let vs = Privates.SimpleVisualStudio(configChangeNotifier,sp, ops)
-            Microsoft.FSharp.Compiler.SourceCodeServices.Flags.init()
-            ls.Initialize (ServiceProvider(getService),documentationProvider,VsMocks.createLanguagePreferences(),true,vs.SourceFactory)
+            ls.Initialize (sp2,documentationProvider,VsMocks.createLanguagePreferences(),vs.GetSourceForBuffer)
             vs.LanguageService <- ls
             vs :> VisualStudio
         with e -> 
@@ -1605,110 +1539,91 @@ module internal Salsa =
     
     // ------------------------------------------------------------------------------
     
-    /// The different variations of of Salsa tests    
-    module Models = 
-        let VsSimpl(vs:VisualStudio) = vs :?> Privates.SimpleVisualStudio
-        let VsImpl(vs:VisualStudio)         = vs :?> IVisualStudio
-        let SolutionImpl(sol:OpenSolution)  = sol :?> IOpenSolution
-        let ProjectImpl(proj:OpenProject)   = proj :?> IOpenProject
-        let OpenFileSimpl(openfile:OpenFile)   = openfile :?> Privates.SimpleOpenFile
-        let FileSimpl(file:File) = file :?> Privates.SimpleFile
-
-        /// Salsa tests which create .fsproj files for projects.
-        let MSBuildWithFlavor(behaviorHooks) = 
-            let rec ops = 
-                { CreateVisualStudio                    = fun() -> CreateSimple(ops)
-                  CreateSolution                        = fun vs -> VsImpl(vs).CreateSolution()
-                  GetOutputWindowPaneLines              = fun vs -> VsSimpl(vs).GetOutputWindowPaneLines()
-                  CloseSolution                         = fun (solution) -> SolutionImpl(solution).Close()
-                  CreateProject                         = fun (solution,projectBaseName) -> SolutionImpl(solution).CreateProjectFlavor behaviorHooks projectBaseName
-                  CreateProjectWithHooks                = fun (solution,hooks,projectBaseName) -> SolutionImpl(solution).CreateProjectFlavor hooks projectBaseName
-                  NewFile                               = fun (vs,filename,buildAction,lines) -> VsSimpl(vs).NewFile(filename,buildAction,lines,behaviorHooks)
-                  DeleteFileFromDisk = fun (file:File) -> FileSimpl(file).DeleteFileFromDisk()
-                  AddFileFromText                       = fun (project:OpenProject,filenameOnDisk,filenameInProject,buildAction,lines) -> ProjectImpl(project).AddFileFromText(filenameOnDisk,filenameInProject,buildAction,lines)
-                  AddLinkedFileFromText                 = fun (project:OpenProject,filenameOnDisk,includeFilenameInProject,linkFilenameInProject,buildAction,lines)->ProjectImpl(project).AddLinkedFileFromText(filenameOnDisk,includeFilenameInProject,linkFilenameInProject,buildAction,lines)
-                  AddAssemblyReference                  = fun (project,reference,specificVersion) -> ProjectImpl(project).AddAssemblyReference(reference,specificVersion)
-                  AddProjectReference                   = fun (project1,project2) -> ProjectImpl(project1).AddProjectReference(project2)
-                  ProjectDirectory                      = fun project -> ProjectImpl(project).Directory            
-                  ProjectFile                           = fun project -> ProjectImpl(project).ProjectFile
-                  SetVersionFile                        = fun (project,file) -> ProjectImpl(project).SetVersionFile(file)
-                  SetOtherFlags                         = fun (project,flags) -> ProjectImpl(project).SetOtherFlags(flags)
-                  SetConfigurationAndPlatform           = fun (project,configAndPlatform) -> ProjectImpl(project).ConfigurationAndPlatform <- configAndPlatform
-                  AddDisabledWarning                    = fun (project,code) -> ProjectImpl(project).AddDisabledWarning(code)
-                  GetErrors                             = fun project -> ProjectImpl(project).Errors
-                  BuildProject                          = fun (project,target) -> ProjectImpl(project).Build(target)
-                  GetMainOutputAssembly                 = fun project -> ProjectImpl(project).GetMainOutputAssembly()
-                  SaveProject                           = fun project->ProjectImpl(project).Save()                
-                  OpenFileViaOpenFile                   = fun (vs,filename) -> VsSimpl(vs).OpenFileViaOpenFile(filename,behaviorHooks)
-                  OpenFile                              = fun (project,filename) -> ProjectImpl(project).OpenFile(filename)
-                  SetProjectDefines                     = fun (project,defines) -> ProjectImpl(project).SetProjectDefines(defines)
-                  PlaceIntoProjectFileBeforeImport      = fun (project,xml) -> ProjectImpl(project).PlaceIntoProjectFileBeforeImport(xml)
-                  GetOpenFiles                          = fun project -> ProjectImpl(project).GetOpenFiles()
-                  MoveCursorTo                          = fun (file,line,col) -> OpenFileSimpl(file).MoveCursorTo(line,col)
-                  GetCursorLocation                     = fun (file) -> OpenFileSimpl(file).GetCursorLocation()
-                  OpenExistingProject                   = fun (vs,dir,projname) -> VsImpl(vs).OpenExistingProject behaviorHooks dir projname
-                  MoveCursorToEndOfMarker               = fun (file,marker) -> OpenFileSimpl(file).MoveCursorToEndOfMarker(marker)
-                  MoveCursorToStartOfMarker             = fun (file,marker) -> OpenFileSimpl(file).MoveCursorToStartOfMarker(marker)
-                  GetNameOfOpenFile                     = fun (file) -> OpenFileSimpl(file).GetFileName()
-                  GetCheckOptionsOfScript               = fun (file) -> OpenFileSimpl(file).GetCheckOptionsOfScript()
-                  GetQuickInfoAtCursor                  = fun file -> OpenFileSimpl(file).GetQuickInfoAtCursor()
-                  GetQuickInfoAndSpanAtCursor           = fun file -> OpenFileSimpl(file).GetQuickInfoAndSpanAtCursor()
-                  GetMatchingBracesForPositionAtCursor  = fun file -> OpenFileSimpl(file).GetMatchingBracesForPositionAtCursor()
-                  GetParameterInfoAtCursor              = fun file -> OpenFileSimpl(file).GetParameterInfoAtCursor(true)
-                  GetParameterInfoAtCursorNoFallback    = fun file -> OpenFileSimpl(file).GetParameterInfoAtCursor(false)
-                  GetTokenTypeAtCursor                  = fun file -> OpenFileSimpl(file).GetTokenTypeAtCursor()
-                  GetSquiggleAtCursor                   = fun file -> OpenFileSimpl(file).GetSquiggleAtCursor()
-                  GetSquigglesAtCursor                  = fun file -> OpenFileSimpl(file).GetSquigglesAtCursor()
-                  AutoCompleteAtCursor                  = fun file -> OpenFileSimpl(file).AutoCompleteAtCursor()
-                  CompleteAtCursorForReason             = fun (file,reason) -> OpenFileSimpl(file).CompleteAtCursorForReason(reason)
-                  CompletionBestMatchAtCursorFor        = fun (file, value, filterText) -> (OpenFileSimpl(file)).CompletionBestMatchAtCursorFor(value, ?filterText=filterText)
-                  GotoDefinitionAtCursor                = fun file forceGen -> (OpenFileSimpl file).GotoDefinitionAtCursor forceGen
-                  GetNavigationContentAtCursor          = fun file -> OpenFileSimpl(file).GetNavigationContentAtCursor()
-                  GetHiddenRegionCommands               = fun file -> OpenFileSimpl(file).GetHiddenRegionCommands()
-                  GetIdentifierAtCursor                 = fun file -> OpenFileSimpl(file).GetIdentifierAtCursor ()
-                  GetF1KeywordAtCursor                  = fun file -> OpenFileSimpl(file).GetF1KeywordAtCursor ()
-                  GetLineNumber                         = fun file n -> OpenFileSimpl(file).GetLineNumber n
-                  GetAllLines                           = fun file -> (OpenFileSimpl file).GetAllLines ()
-                  SwitchToFile                          = fun (vs,file) -> VsSimpl(vs).FocusOpenFile(OpenFileSimpl(file))
-                  OnIdle                                = fun vs -> VsImpl(vs).OnIdle()
-                  ShiftKeyDown                          = fun vs -> VsImpl(vs).ShiftKeyDown()
-                  ShiftKeyUp                            = fun vs -> VsImpl(vs).ShiftKeyUp()
-                  TakeCoffeeBreak                       = fun vs -> VsImpl(vs).TakeCoffeeBreak() 
-                  ReplaceFileInMemory                   = fun (file,contents,takeCoffeeBreak) -> OpenFileSimpl(file).ReplaceAllText(contents, takeCoffeeBreak)
-                  SaveFileToDisk                        = fun file -> OpenFileSimpl(file).SaveFileToDisk()
-                  CreatePhysicalProjectFileInMemory     = Privates.CreateMsBuildProjectText false
-                  CleanUp                               = fun vs -> VsImpl(vs).CleanUp()
-                  ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients                   = fun vs -> VsImpl(vs).ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients()
-                  AutoCompleteMemberDataTipsThrowsScope = fun (message) -> 
-                                                              let Hook(callback) : Microsoft.FSharp.Compiler.SourceCodeServices.DataTipElement =                                                               
-                                                                  let exn = Microsoft.FSharp.Compiler.ErrorLogger.Error((0,message),range.Zero)
-                                                                  let ph = Microsoft.FSharp.Compiler.ErrorLogger.PhasedError.Create(exn, 
-                                                                                        Microsoft.FSharp.Compiler.ErrorLogger.BuildPhase.TypeCheck)
-                                                                  Microsoft.FSharp.Compiler.ErrorLogger.phasedError (ph)
-                                                              Microsoft.FSharp.Compiler.SourceCodeServices.TestHooks.FormatOverloadsToListScope(Hook)
-                  OutOfConeFilesAreAddedAsLinks         = false                
-                  SupportsOutputWindowPane = false
-                  CleanInvisibleProject                 = fun vs -> VsImpl(vs).CleanInvisibleProject()
-                }
-            ops, behaviorHooks
-            
-        /// Salsa tests which create .fsproj files for projects.
-        let MSBuild() = 
-            let behaviorHooks = MakeMSBuildBehavior()
-            MSBuildWithFlavor(behaviorHooks)
+    let VsSimpl(vs:VisualStudio) = vs :?> Privates.SimpleVisualStudio
+    let VsImpl(vs:VisualStudio)         = vs :?> IVisualStudio
+    let SolutionImpl(sol:OpenSolution)  = sol :?> IOpenSolution
+    let ProjectImpl(proj:OpenProject)   = proj :?> IOpenProject
+    let OpenFileSimpl(openfile:OpenFile)   = openfile :?> Privates.SimpleOpenFile
+    let FileSimpl(file:File) = file :?> Privates.SimpleFile
+
+
+    /// Salsa tests which create .fsproj files for projects.
+    type MSBuildTestFlavor(useInstalledTargets) = 
+        let behaviorHooks = Privates.MSBuildBehaviorHooks(useInstalledTargets) :> ProjectBehaviorHooks
+        interface VsOps with
+            member ops.BehaviourHooks = behaviorHooks
+            member ops.CreateVisualStudio () = CreateSimple(ops)
+            member ops.CreateSolution vs = VsImpl(vs).CreateSolution()
+            member ops.GetOutputWindowPaneLines vs = VsSimpl(vs).GetOutputWindowPaneLines()
+            member ops.CloseSolution (solution) = SolutionImpl(solution).Close()
+            member ops.CreateProject (solution,projectBaseName) = SolutionImpl(solution).CreateProjectFlavor behaviorHooks projectBaseName
+            member ops.CreateProjectWithHooks (solution,hooks,projectBaseName) = SolutionImpl(solution).CreateProjectFlavor hooks projectBaseName
+            member ops.NewFile (vs,filename,buildAction,lines) = VsSimpl(vs).NewFile(filename,buildAction,lines,behaviorHooks)
+            member ops.DeleteFileFromDisk (file:File) = FileSimpl(file).DeleteFileFromDisk()
+            member ops.AddFileFromText (project:OpenProject,filenameOnDisk,filenameInProject,buildAction,lines) = ProjectImpl(project).AddFileFromText(filenameOnDisk,filenameInProject,buildAction,lines)
+            member ops.AddLinkedFileFromText (project:OpenProject,filenameOnDisk,includeFilenameInProject,linkFilenameInProject,buildAction,lines)=ProjectImpl(project).AddLinkedFileFromText(filenameOnDisk,includeFilenameInProject,linkFilenameInProject,buildAction,lines)
+            member ops.AddAssemblyReference (project,reference,specificVersion) = ProjectImpl(project).AddAssemblyReference(reference,specificVersion)
+            member ops.AddProjectReference (project1,project2) = ProjectImpl(project1).AddProjectReference(project2)
+            member ops.ProjectDirectory project = ProjectImpl(project).Directory            
+            member ops.ProjectFile project = ProjectImpl(project).ProjectFile
+            member ops.SetVersionFile (project,file) = ProjectImpl(project).SetVersionFile(file)
+            member ops.SetOtherFlags (project,flags) = ProjectImpl(project).SetOtherFlags(flags)
+            member ops.SetConfigurationAndPlatform (project,configAndPlatform) = ProjectImpl(project).ConfigurationAndPlatform <- configAndPlatform
+            member ops.AddDisabledWarning (project,code) = ProjectImpl(project).AddDisabledWarning(code)
+            member ops.GetErrors project = ProjectImpl(project).Errors
+            member ops.BuildProject (project,target) = ProjectImpl(project).Build(target)
+            member ops.GetMainOutputAssembly project = ProjectImpl(project).GetMainOutputAssembly()
+            member ops.SaveProject project = ProjectImpl(project).Save()                
+            member ops.OpenFileViaOpenFile (vs,filename) = VsSimpl(vs).OpenFileViaOpenFile(filename,behaviorHooks)
+            member ops.OpenFile (project,filename) = ProjectImpl(project).OpenFile(filename)
+            member ops.SetProjectDefines (project,defines) = ProjectImpl(project).SetProjectDefines(defines)
+            member ops.PlaceIntoProjectFileBeforeImport (project,xml) = ProjectImpl(project).PlaceIntoProjectFileBeforeImport(xml)
+            member ops.GetOpenFiles project = ProjectImpl(project).GetOpenFiles()
+            member ops.MoveCursorTo (file,line,col) = OpenFileSimpl(file).MoveCursorTo(line,col)
+            member ops.GetCursorLocation (file) = OpenFileSimpl(file).GetCursorLocation()
+            member ops.OpenExistingProject (vs,dir,projname) = VsImpl(vs).OpenExistingProject(behaviorHooks, dir, projname)
+            member ops.MoveCursorToEndOfMarker (file,marker) = OpenFileSimpl(file).MoveCursorToEndOfMarker(marker)
+            member ops.MoveCursorToStartOfMarker (file,marker) = OpenFileSimpl(file).MoveCursorToStartOfMarker(marker)
+            member ops.GetNameOfOpenFile (file) = OpenFileSimpl(file).GetFileName()
+            member ops.GetProjectOptionsOfScript (file) = OpenFileSimpl(file).GetProjectOptionsOfScript()
+            member ops.GetQuickInfoAtCursor file = OpenFileSimpl(file).GetQuickInfoAtCursor()
+            member ops.GetQuickInfoAndSpanAtCursor file = OpenFileSimpl(file).GetQuickInfoAndSpanAtCursor()
+            member ops.GetMatchingBracesForPositionAtCursor file = OpenFileSimpl(file).GetMatchingBracesForPositionAtCursor()
+            member ops.GetParameterInfoAtCursor file = OpenFileSimpl(file).GetParameterInfoAtCursor()
+            member ops.GetTokenTypeAtCursor file = OpenFileSimpl(file).GetTokenTypeAtCursor()
+            member ops.GetSquiggleAtCursor file = OpenFileSimpl(file).GetSquiggleAtCursor()
+            member ops.GetSquigglesAtCursor file = OpenFileSimpl(file).GetSquigglesAtCursor()
+            member ops.AutoCompleteAtCursor file = OpenFileSimpl(file).AutoCompleteAtCursor()
+            member ops.CompleteAtCursorForReason (file,reason) = OpenFileSimpl(file).CompleteAtCursorForReason(reason)
+            member ops.CompletionBestMatchAtCursorFor (file, value, filterText) = (OpenFileSimpl(file)).CompletionBestMatchAtCursorFor(value, ?filterText=filterText)
+            member ops.GotoDefinitionAtCursor (file, forceGen) = (OpenFileSimpl file).GotoDefinitionAtCursor forceGen
+            member ops.GetNavigationContentAtCursor file = OpenFileSimpl(file).GetNavigationContentAtCursor()
+            member ops.GetHiddenRegionCommands file = OpenFileSimpl(file).GetHiddenRegionCommands()
+            member ops.GetIdentifierAtCursor file = OpenFileSimpl(file).GetIdentifierAtCursor ()
+            member ops.GetF1KeywordAtCursor file = OpenFileSimpl(file).GetF1KeywordAtCursor ()
+            member ops.GetLineNumber (file, n) = OpenFileSimpl(file).GetLineNumber n
+            member ops.GetAllLines file = (OpenFileSimpl file).GetAllLines ()
+            member ops.SwitchToFile (vs,file) = VsSimpl(vs).FocusOpenFile(OpenFileSimpl(file))
+            member ops.OnIdle vs = VsImpl(vs).OnIdle()
+            member ops.ShiftKeyDown vs = VsImpl(vs).ShiftKeyDown()
+            member ops.ShiftKeyUp vs = VsImpl(vs).ShiftKeyUp()
+            member ops.TakeCoffeeBreak vs = VsImpl(vs).TakeCoffeeBreak() 
+            member ops.ReplaceFileInMemory (file,contents,takeCoffeeBreak) = OpenFileSimpl(file).ReplaceAllText(contents, takeCoffeeBreak)
+            member ops.SaveFileToDisk file = OpenFileSimpl(file).SaveFileToDisk()
+            member ops.CreatePhysicalProjectFileInMemory (files, references, projectReferences, disabledWarnings, defines, versionFile, otherFlags, otherProjMisc, targetFrameworkVersion) = Privates.CreateMsBuildProjectText useInstalledTargets (files, references, projectReferences, disabledWarnings, defines, versionFile, otherFlags, otherProjMisc, targetFrameworkVersion)
+            member ops.CleanUp vs = VsImpl(vs).CleanUp()
+            member ops.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients vs = VsImpl(vs).ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients()
+            member ops.AutoCompleteMemberDataTipsThrowsScope message = 
+                ItemDescriptionsImpl.ToolTipFault <- Some message
+                { new System.IDisposable with member x.Dispose() = ItemDescriptionsImpl.ToolTipFault <- None }
+            member ops.OutOfConeFilesAreAddedAsLinks = false                
+            member ops.SupportsOutputWindowPane = false
+            member ops.CleanInvisibleProject vs = VsImpl(vs).CleanInvisibleProject()
+
+    let BuiltMSBuildBehaviourHooks() = Privates.MSBuildBehaviorHooks(false) :> ProjectBehaviorHooks
             
-        /// Salsa tests which create .fsproj files using the installed version of
-        /// FSharp.targets.
-        let InstalledMSBuild() = 
-            // Overwrite the default MSBuildBehavior hooks to use the installed
-            // FSharp.targets file.
-            let behaviorHooks = 
-                { MakeMSBuildBehavior() with
-                    CreateProjectHook = Privates.CreateMsBuildProject true }
-
-            // Same here - use installed version of FSharp.targets            
-            let ops, flavor = MSBuildWithFlavor(behaviorHooks)
-            let updatedOps = 
-                { ops with 
-                    CreatePhysicalProjectFileInMemory = Privates.CreateMsBuildProjectText true }
-            (updatedOps, flavor)
+    /// Salsa tests which create .fsproj files using the freshly built version of Microsoft.FSharp.targets and FSharp.Build
+    let BuiltMSBuildTestFlavour() = MSBuildTestFlavor(false) :> VsOps
+
+    /// Salsa tests which create .fsproj files using the installed version of Microsoft.FSharp.targets.
+    let InstalledMSBuildTestFlavour() = MSBuildTestFlavor(true) :> VsOps
diff --git a/vsintegration/src/Salsa/salsa.fsi b/vsintegration/src/Salsa/salsa.fsi
deleted file mode 100644
index 14a4893ea79..00000000000
--- a/vsintegration/src/Salsa/salsa.fsi
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-namespace Salsa
-
-open Microsoft.VisualStudio
-open Microsoft.VisualStudio.Shell.Interop
-open Microsoft.VisualStudio.FSharp.ProjectSystem
-open Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.VisualStudio.TextManager.Interop
-
-open Microsoft.Build.Framework
-open Microsoft.VisualStudio.FSharp.LanguageService.Implementation
-
-module internal Salsa = 
-    
-    []
-    type HostCompile = 
-        interface ITaskHost 
-        member Compile : System.Converter * string[] * string[] -> int
-        
-    
-    type TokenType = Text | Keyword | Comment | Identifier | String | Number | InactiveCode | PreprocessorKeyword | Operator
-    
-    /// Declaration types.
-    type DeclarationType = 
-        | Class         = 0
-        | Constant      = 6
-        | FunctionType  = 12            // Like 'type FunctionType=unit->unit' 
-        | Enum          = 18
-        | EnumMember    = 24
-        | Event         = 30
-        | Exception     = 36
-        | Interface     = 48
-        | Method        = 72
-        | FunctionValue = 74            // Like 'type Function x = 0'
-        | Module        = 84
-        | Namespace     = 90
-        | Property      = 102
-        | ValueType     = 108           // Like 'type ValueType=int*int' 
-        | RareType      = 120           // Bucket for unusual types like 'type AsmType = (# "!0[]" #)'
-        | Record        = 126
-        | DiscriminatedUnion = 132 
-        
-    type BuildAction =
-        | Compile = 0
-        | EmbeddedResource = 1
-        | None = 2        
-        
-    type BuildResult = {
-        ExecutableOutput : string
-        BuildSucceeded : bool
-    }
-    
-    /// An error
-    []
-    type Error  = 
-        member Path : string
-        member Message : string
-        member Context : TextSpan
-        member Severity : Severity
-        override ToString : unit -> string
-    
-
-
-    type ChangeCallBack = IVsHierarchy * string -> unit
-
-    /// Hooks for controlling behaviors
-    
-    
-    /// Thrown when a marker is not found when placing the cursor via VsOps
-    exception MarkerNotFoundException of string
-    
-    /// Representation of an item from the completion list
-    type CompletionItem = string * string * (unit -> string) * DeclarationType
-    
-    type GotoDefnResult = Microsoft.VisualStudio.FSharp.LanguageService.GotoDefinitionResult
-    []
-    module GotoDefnResultExtensions = 
-        type Microsoft.VisualStudio.FSharp.LanguageService.GotoDefinitionResult with
-            member ToOption : unit -> (TextSpan * string) option
-
-    /// Representes the information that is displayed in the navigation bar
-    type NavigationBarResult = 
-      { TypesAndModules : DropDownMember[]
-        Members : DropDownMember[]
-        SelectedType : int
-        SelectedMember : int }
-    
-    /// Methods for simulating VisualStudio
-    []
-    type ProjectBehaviorHooks = {
-        CreateProjectHook:  (*projectFilename:*)string ->
-                            (*files:*)(string*BuildAction*string option) list ->
-                            (*references:*)(string*bool) list ->
-                            (*projReferences:*)string list ->
-                            (*disabledWarnings:*)string list ->
-                            (*defines*)string list ->
-                            (*versionFile:*)string ->
-                            (*otherFlags:*)string ->
-                            (*preImportXml:*)string ->
-                            (*targetFrameworkVersion:*)string -> unit
-        InitializeProjectHook : OpenProject -> unit
-        MakeHierarchyHook : string->string->string->ChangeCallBack->OleServiceProvider->IVsHierarchy
-        AddFileToHierarchyHook : string -> IVsHierarchy -> unit
-        BuildHook : (*basename:*)string -> (*target:*)string -> IVsOutputWindowPane -> BuildResult
-        GetMainOutputAssemblyHook : string -> string
-        SaveHook : unit -> unit
-        DestroyHook : unit->unit
-        ModifyConfigurationAndPlatformHook : string->unit
-    }   
-    and [] VsOps = {
-        CreateVisualStudio                : unit -> VisualStudio
-        CreateSolution                    : VisualStudio -> OpenSolution
-        GetOutputWindowPaneLines          : VisualStudio -> string list
-        CloseSolution                     : OpenSolution ->unit
-        CreateProject                     : OpenSolution * string -> OpenProject
-        CreateProjectWithHooks            : OpenSolution * ProjectBehaviorHooks * string -> OpenProject
-        NewFile                           : VisualStudio * string * BuildAction * string list -> File
-        DeleteFileFromDisk : File -> unit
-        AddFileFromText                   : OpenProject * string * string * BuildAction * string list -> File
-        AddLinkedFileFromText             : OpenProject*string*string*string*BuildAction*string list->File
-        AddAssemblyReference              : OpenProject * string * bool -> unit 
-        AddProjectReference               : OpenProject * OpenProject -> unit 
-        ProjectDirectory                  : OpenProject -> string
-        ProjectFile                       : OpenProject -> string
-        SetVersionFile                    : OpenProject * string -> unit
-        SetOtherFlags                     : OpenProject * string -> unit
-        SetConfigurationAndPlatform       : OpenProject * string -> unit
-        AddDisabledWarning                : OpenProject * string -> unit
-        GetErrors                         : OpenProject -> Error list 
-        BuildProject                      : OpenProject * string -> BuildResult 
-        GetMainOutputAssembly             : OpenProject -> string
-        SaveProject                       : OpenProject -> unit        
-        OpenFileViaOpenFile               : VisualStudio * string -> OpenFile
-        OpenFile                          : OpenProject * string -> OpenFile 
-        GetOpenFiles                      : OpenProject -> OpenFile list
-        SetProjectDefines                 : OpenProject * string list -> unit
-        PlaceIntoProjectFileBeforeImport  : OpenProject * string -> unit
-        OpenExistingProject               : VisualStudio * string * string -> OpenProject * OpenSolution
-        MoveCursorTo                      : OpenFile * int * int -> unit
-        GetCursorLocation                 : OpenFile -> int * int
-        GetLineNumber                     : OpenFile -> int -> string
-        GetAllLines                       : OpenFile -> string list
-        SwitchToFile                      : VisualStudio * OpenFile -> unit
-        OnIdle                            : VisualStudio -> unit
-        ShiftKeyDown                      : VisualStudio -> unit
-        ShiftKeyUp                        : VisualStudio -> unit
-        TakeCoffeeBreak                   : VisualStudio -> unit 
-        ReplaceFileInMemory               : OpenFile * string list * bool -> unit
-        SaveFileToDisk                    : OpenFile -> unit
-        CleanUp                           : VisualStudio -> unit
-        CleanInvisibleProject             : VisualStudio -> unit
-        ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients : VisualStudio -> unit
-        GetSquiggleAtCursor               : OpenFile -> (Microsoft.VisualStudio.FSharp.LanguageService.Severity * string) option
-        GetSquigglesAtCursor              : OpenFile -> (Microsoft.VisualStudio.FSharp.LanguageService.Severity * string) list
-        /// does a BackgroundRequestReason.MemberSelect at the cursor
-        AutoCompleteAtCursor              : OpenFile -> CompletionItem array
-        /// like AutoCompleteAtCursor, but can pass e.g. BackgroundRequestReason.CompleteWord to do Ctrl-space rather than auto-dot-popup-completion
-        CompleteAtCursorForReason         : OpenFile * Microsoft.VisualStudio.FSharp.LanguageService.BackgroundRequestReason -> CompletionItem array
-        CompletionBestMatchAtCursorFor    : OpenFile * string * string option -> (string * bool * bool) option
-        MoveCursorToEndOfMarker           : OpenFile * string -> unit
-        MoveCursorToStartOfMarker         : OpenFile * string -> unit
-        GetQuickInfoAtCursor              : OpenFile -> string  
-        GetQuickInfoAndSpanAtCursor       : OpenFile -> string*TextSpan
-        GetMatchingBracesForPositionAtCursor : OpenFile -> (TextSpan * TextSpan) array
-        GetNameOfOpenFile                 : OpenFile -> string
-        GetCheckOptionsOfScript           : OpenFile -> Microsoft.FSharp.Compiler.SourceCodeServices.CheckOptions
-        GetParameterInfoAtCursor          : OpenFile -> MethodListForAMethodTip
-        GetParameterInfoAtCursorNoFallback: OpenFile -> MethodListForAMethodTip
-        GetTokenTypeAtCursor              : OpenFile -> TokenType
-        GetIdentifierAtCursor             : OpenFile -> (string * int) option
-        GetF1KeywordAtCursor              : OpenFile -> string option
-        GotoDefinitionAtCursor            : OpenFile -> bool -> GotoDefnResult
-        GetNavigationContentAtCursor      : OpenFile -> NavigationBarResult
-        GetHiddenRegionCommands           : OpenFile -> list * Map
-        CreatePhysicalProjectFileInMemory : ((*files:*)(string*BuildAction*string option) list) ->
-                                            ((*references:*)(string*bool) list) ->
-                                            ((*projectReferences:*)string list) ->
-                                            ((*disabledWarnings:*)string list) ->
-                                            ((*defines:*)string list) ->
-                                            (*versionFile*) string ->
-                                            ((*otherFlags:*)string) ->
-                                            ((*otherProjMisc:*)string) -> 
-                                            ((*targetFrameworkVersion:*)string) -> string
-                
-        /// True if files outside of the project cone are added as links.
-        AutoCompleteMemberDataTipsThrowsScope : string -> System.IDisposable
-        
-        // VsOps capabilities.
-        OutOfConeFilesAreAddedAsLinks : bool
-        SupportsOutputWindowPane : bool   
-    }
-
-    // Opaque handles to vs objects
-    /// Simulate a VisualStudio instance
-    and VisualStudio = interface 
-        abstract VsOps : VsOps
-    end
-    /// The solution opened in VS
-    and OpenSolution = interface 
-        abstract VS : VisualStudio
-    end
-    /// A project opened in VS
-    and OpenProject = interface 
-        abstract VS : VisualStudio
-    end
-    /// A file opened in VS
-    and OpenFile = interface 
-        abstract VS : VisualStudio
-    end
-    /// A file on disk
-    and File = interface end    
-    
-    val CreateFSharpManifestResourceName : projectFileName:string -> configuration:string -> platform:string -> (string * string) list
-
-    /// The different variations of of Salsa tests    
-    module Models = 
-        /// Salsa tests which create .fsproj files for projects.
-        val MSBuild : unit -> VsOps * ProjectBehaviorHooks
-        /// Salsa tests which create .fsproj files for projects using the installed
-        /// FSharp.targets file.
-        val InstalledMSBuild : unit -> VsOps * ProjectBehaviorHooks
diff --git a/vsintegration/src/Templates/ConsoleProjectTemplates/ConsoleProjectTemplates.csproj b/vsintegration/src/Templates/ConsoleProjectTemplates/ConsoleProjectTemplates.csproj
index e9594121774..796b14df66d 100644
--- a/vsintegration/src/Templates/ConsoleProjectTemplates/ConsoleProjectTemplates.csproj
+++ b/vsintegration/src/Templates/ConsoleProjectTemplates/ConsoleProjectTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/ConsoleApplication.fsproj b/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/ConsoleApplication.fsproj
index 55cdac4928e..27647ab70db 100644
--- a/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/ConsoleApplication.fsproj
+++ b/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/ConsoleApplication.fsproj
@@ -12,7 +12,7 @@
     v$targetframeworkversion$
     true
     $if$ ($targetframeworkversion$ >= 4.0)
-    4.4.0.0
+    4.4.1.0
     $else$
     2.3.0.0
     $endif$
diff --git a/vsintegration/src/Templates/ItemTemplates/ItemTemplates.csproj b/vsintegration/src/Templates/ItemTemplates/ItemTemplates.csproj
index aa810e0a57d..db3e0219c32 100644
--- a/vsintegration/src/Templates/ItemTemplates/ItemTemplates.csproj
+++ b/vsintegration/src/Templates/ItemTemplates/ItemTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/Templates/LibraryProjectTemplates/LibraryProjectTemplates.csproj b/vsintegration/src/Templates/LibraryProjectTemplates/LibraryProjectTemplates.csproj
index cc2507bd280..3994d220623 100644
--- a/vsintegration/src/Templates/LibraryProjectTemplates/LibraryProjectTemplates.csproj
+++ b/vsintegration/src/Templates/LibraryProjectTemplates/LibraryProjectTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/Library.fsproj b/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/Library.fsproj
index 2da03fa91e0..75e2fa132c8 100644
--- a/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/Library.fsproj
+++ b/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/Library.fsproj
@@ -11,7 +11,7 @@
     $safeprojectname$
     v$targetframeworkversion$
     $if$ ($targetframeworkversion$ >= 4.0)
-    4.4.0.0
+    4.4.1.0
     $else$
     2.3.0.0
     $endif$
diff --git a/vsintegration/src/Templates/NetCore259ProjectTemplates/NetCore259ProjectTemplates.csproj b/vsintegration/src/Templates/NetCore259ProjectTemplates/NetCore259ProjectTemplates.csproj
index b19ccb88850..f3ca6b3b147 100644
--- a/vsintegration/src/Templates/NetCore259ProjectTemplates/NetCore259ProjectTemplates.csproj
+++ b/vsintegration/src/Templates/NetCore259ProjectTemplates/NetCore259ProjectTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj b/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
index 08951b6ad49..4ccc9bf577b 100644
--- a/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
+++ b/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
@@ -12,7 +12,7 @@
     v4.5
     Profile259
     netcore
-    3.259.4.0
+    3.259.41.0
     true
   
   
diff --git a/vsintegration/src/Templates/NetCore78ProjectTemplates/NetCore78ProjectTemplates.csproj b/vsintegration/src/Templates/NetCore78ProjectTemplates/NetCore78ProjectTemplates.csproj
index b3a861630be..db539aadee9 100644
--- a/vsintegration/src/Templates/NetCore78ProjectTemplates/NetCore78ProjectTemplates.csproj
+++ b/vsintegration/src/Templates/NetCore78ProjectTemplates/NetCore78ProjectTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/PortableLibrary.fsproj b/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/PortableLibrary.fsproj
index 30f9f88b795..361488cb8ac 100644
--- a/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/PortableLibrary.fsproj
+++ b/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/PortableLibrary.fsproj
@@ -12,7 +12,7 @@
     v4.5
     Profile78
     netcore
-    3.78.4.0
+    3.78.41.0
     true
   
   
diff --git a/vsintegration/src/Templates/NetCoreProjectTemplates/NetCoreProjectTemplates.csproj b/vsintegration/src/Templates/NetCoreProjectTemplates/NetCoreProjectTemplates.csproj
index 0c0aad560f9..c5206993552 100644
--- a/vsintegration/src/Templates/NetCoreProjectTemplates/NetCoreProjectTemplates.csproj
+++ b/vsintegration/src/Templates/NetCoreProjectTemplates/NetCoreProjectTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj b/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
index f3dcf3c47fd..960b3c056c9 100644
--- a/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
+++ b/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
@@ -12,7 +12,7 @@
     v4.5
     Profile7
     netcore
-    3.7.4.0
+    3.7.41.0
     true
   
   
diff --git a/vsintegration/src/Templates/PortableLibraryProjectTemplates/PortableLibraryProjectTemplates.csproj b/vsintegration/src/Templates/PortableLibraryProjectTemplates/PortableLibraryProjectTemplates.csproj
index f3cdbc0e434..dfa3698314f 100644
--- a/vsintegration/src/Templates/PortableLibraryProjectTemplates/PortableLibraryProjectTemplates.csproj
+++ b/vsintegration/src/Templates/PortableLibraryProjectTemplates/PortableLibraryProjectTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/PortableLibrary.fsproj b/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/PortableLibrary.fsproj
index e74e930f7a9..abdeea09b67 100644
--- a/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/PortableLibrary.fsproj
+++ b/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/PortableLibrary.fsproj
@@ -11,7 +11,7 @@
     $safeprojectname$
     v4.0
     Profile47
-    3.47.4.0
+    3.47.41.0
     true
   
   
diff --git a/vsintegration/src/Templates/ProjectTemplates/ProjectTemplates.csproj b/vsintegration/src/Templates/ProjectTemplates/ProjectTemplates.csproj
index f312dcd6dab..d174191cac6 100644
--- a/vsintegration/src/Templates/ProjectTemplates/ProjectTemplates.csproj
+++ b/vsintegration/src/Templates/ProjectTemplates/ProjectTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/SilverlightLibrary.fsproj b/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/SilverlightLibrary.fsproj
index fa952b868c4..ccab1b0a53f 100644
--- a/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/SilverlightLibrary.fsproj
+++ b/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/SilverlightLibrary.fsproj
@@ -18,7 +18,7 @@
     false
     true
     false
-    3.47.4.0
+    3.47.41.0
     true
   
   
diff --git a/vsintegration/src/Templates/SilverlightProjectTemplates/SilverlightProjectTemplates.csproj b/vsintegration/src/Templates/SilverlightProjectTemplates/SilverlightProjectTemplates.csproj
index c12ab0ad15b..35e817c6315 100644
--- a/vsintegration/src/Templates/SilverlightProjectTemplates/SilverlightProjectTemplates.csproj
+++ b/vsintegration/src/Templates/SilverlightProjectTemplates/SilverlightProjectTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsproj b/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsproj
index fc034f3d262..cc6baf8feb4 100644
--- a/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsproj
+++ b/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsproj
@@ -12,7 +12,7 @@
     v$targetframeworkversion$
     true
     $if$ ($targetframeworkversion$ >= 4.0)
-    4.4.0.0
+    4.4.1.0
     $else$
     2.3.0.0
     $endif$
diff --git a/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsx b/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsx
index 30b25fe0a9d..c3936c3917b 100644
--- a/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsx
+++ b/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsx
@@ -1,4 +1,4 @@
-// This sample will guide you through elements of the F# language.  
+// This sample will guide you through elements of the F# language.
 //
 // *******************************************************************************************************
 //   To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click 
@@ -31,9 +31,9 @@
 //    - Recursive functions
 //    - Record types
 //    - Union types
-//    - Option types            
-//    - Pattern matching        
-//    - Units of measure        
+//    - Option types
+//    - Pattern matching
+//    - Units of measure
 //    - Parallel array programming
 //    - Using events
 //    - Database access using type providers
@@ -64,10 +64,10 @@ module Integers =
 module BasicFunctions = 
 
     // Use 'let' to define a function that accepts an integer argument and returns an integer. 
-    let func1 x = x*x + 3             
+    let func1 x = x*x + 3
 
     // Parenthesis are optional for function arguments
-    let func1a (x) = x*x + 3             
+    let func1a (x) = x*x + 3
 
     /// Apply the function, naming the function return result using 'let'. 
     /// The variable type is inferred from the function return type.
@@ -179,7 +179,7 @@ module Lists =
                   if (i+j) % 2 = 1 then 
                       yield (i, j) ]
 
-    /// Square the numbers in numberList, using the pipeline operator to pass an argument to List.map    
+    /// Square the numbers in numberList, using the pipeline operator to pass an argument to List.map
     let squares = 
         numberList 
         |> List.map (fun x -> x*x) 
@@ -205,7 +205,7 @@ module DefiningClasses =
 
         // 'this' specifies a name for the object's self identifier.
         // In instance methods, it must appear before the member name.
-        member this.DX = dx  
+        member this.DX = dx
 
         member this.DY = dy
 
@@ -264,7 +264,7 @@ type ReadFile() =
     member this.ReadLine() = file.ReadLine()
 
     // this class's implementation of IDisposable members
-    interface System.IDisposable with    
+    interface System.IDisposable with
         member this.Dispose() = file.Close()
 
 
@@ -359,9 +359,9 @@ module RecursiveFunctions  =
     /// Computes the greatest common factor of two integers. 
     //  Since all of the recursive calls are tail calls, the compiler will turn the function into a loop,
     //  which improves performance and reduces memory consumption.
-    let rec greatestCommonFactor a b =                       
+    let rec greatestCommonFactor a b =
         if a = 0 then b
-        elif a < b then greatestCommonFactor a (b - a)           
+        elif a < b then greatestCommonFactor a (b - a)
         else greatestCommonFactor (a - b) b
 
     /// Computes the sum of a list of integers using recursion.
@@ -472,19 +472,19 @@ module OptionTypes =
     /// They are used extensively in F# code to represent the cases where many other
     /// languages would use null references.
 
-    type Customer = { zipCode : decimal option }
+    type Customer = { ZipCode : decimal option }
 
     /// Abstract class that computes the shipping zone for the customer's zip code, 
     /// given implementations for the 'getState' and 'getShippingZone' abstract methods.
     []
     type ShippingCalculator =
-        abstract getState : decimal -> string option
-        abstract getShippingZone : string -> int
+        abstract GetState : decimal -> string option
+        abstract GetShippingZone : string -> int
 
         /// Return the shipping zone corresponding to the customer's ZIP code
         /// Customer may not yet have a ZIP code or the ZIP code may be invalid
-        member this.customerShippingZone(customer : Customer) =
-            customer.zipCode |> Option.bind this.getState |> Option.map this.getShippingZone
+        member this.CustomerShippingZone(customer : Customer) =
+            customer.ZipCode |> Option.bind this.GetState |> Option.map this.GetShippingZone
 
 
 
@@ -495,7 +495,7 @@ module OptionTypes =
 module PatternMatching = 
 
     /// A record for a person's first and last name
-    type Person = {     
+    type Person = {
         First : string
         Last  : string
     }
@@ -590,7 +590,7 @@ module Events =
     simpleEvent.Trigger(5)
 
     // create instance of Event that follows standard .NET convention: (sender, EventArgs)
-    let eventForDelegateType = new Event()    
+    let eventForDelegateType = new Event()
 
     // add handler
     eventForDelegateType.Publish.AddHandler(
diff --git a/vsintegration/src/Templates/TutorialProjectTemplates/TutorialProjectTemplates.csproj b/vsintegration/src/Templates/TutorialProjectTemplates/TutorialProjectTemplates.csproj
index 7727cff9e5b..35047154c0b 100644
--- a/vsintegration/src/Templates/TutorialProjectTemplates/TutorialProjectTemplates.csproj
+++ b/vsintegration/src/Templates/TutorialProjectTemplates/TutorialProjectTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.csproj b/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.csproj
index 3ac0e3bb809..ea49c6a12d0 100644
--- a/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.csproj
+++ b/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
@@ -188,9 +188,9 @@
       DebugSymbolsProjectOutputGroup%3b
       false
     
-    
+    
       {991DCF75-C2EB-42B6-9A0D-AA1D2409D519}
-      FSHarp.VS.FSI
+      FSharp.VS.FSI
       BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
       false
diff --git a/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.pkgdef b/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.pkgdef
index 415561b4105..a462fd6da37 100644
--- a/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.pkgdef
+++ b/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.pkgdef
@@ -1,26 +1,26 @@
-# Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+# Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{11605AD3-9E1C-4DAE-AA39-C17470D15752}]
 "name"="FSharp.Compiler"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="4.3.0.0-4.4.0.0"
-"newVersion"="4.4.0.9055"
+"oldVersion"="4.3.0.0-4.4.1.0"
+"newVersion"="4.4.1.9055"
 "codeBase"="$PackageFolder$\FSharp.Compiler.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{091CE614-9F5C-46F6-82ED-2BCEC3740C54}]
 "name"="FSharp.Compiler.Server.Shared"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="4.3.0.0-4.4.0.0"
-"newVersion"="4.4.0.9055"
+"oldVersion"="4.3.0.0-4.4.1.0"
+"newVersion"="4.4.1.9055"
 "codeBase"="$PackageFolder$\FSharp.Compiler.Server.Shared.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{4D79C9FC-8AB8-476D-8526-E55B2AF6C6B7}]
 "name"="FSharp.Core"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="2.3.0.0-4.4.0.0"
-"newVersion"="4.4.0.9055"
+"oldVersion"="2.3.0.0-4.4.1.0"
+"newVersion"="4.4.1.9055"
 "codeBase"="$PackageFolder$\FSharp.Core.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{2DB67780-3B09-41E5-A8DC-92AF2E1665BD}]
diff --git a/vsintegration/src/deployment/EnableOpenSource/Properties/AssemblyInfo.cs b/vsintegration/src/deployment/EnableOpenSource/Properties/AssemblyInfo.cs
index ef2a10531a6..588d25d4655 100644
--- a/vsintegration/src/deployment/EnableOpenSource/Properties/AssemblyInfo.cs
+++ b/vsintegration/src/deployment/EnableOpenSource/Properties/AssemblyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
diff --git a/vsintegration/src/deployment/EnableOpenSource/source.extension.vsixmanifest b/vsintegration/src/deployment/EnableOpenSource/source.extension.vsixmanifest
index 9c1b3125956..217604fe881 100644
--- a/vsintegration/src/deployment/EnableOpenSource/source.extension.vsixmanifest
+++ b/vsintegration/src/deployment/EnableOpenSource/source.extension.vsixmanifest
@@ -1,5 +1,5 @@
 
-
+
 
   
     
@@ -15,7 +15,7 @@
   
   
     
-    
+    
     
     
     
diff --git a/vsintegration/src/deployment/VWDExpressDeployTemplates/VWDExpressDeployTemplates.csproj b/vsintegration/src/deployment/VWDExpressDeployTemplates/VWDExpressDeployTemplates.csproj
index f68c1113768..d3b7851ab21 100644
--- a/vsintegration/src/deployment/VWDExpressDeployTemplates/VWDExpressDeployTemplates.csproj
+++ b/vsintegration/src/deployment/VWDExpressDeployTemplates/VWDExpressDeployTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/deployment/VWDExpressDeployTemplates/extension.vsixmanifest b/vsintegration/src/deployment/VWDExpressDeployTemplates/extension.vsixmanifest
index f7adca70a87..eb648e1049d 100644
--- a/vsintegration/src/deployment/VWDExpressDeployTemplates/extension.vsixmanifest
+++ b/vsintegration/src/deployment/VWDExpressDeployTemplates/extension.vsixmanifest
@@ -1,8 +1,8 @@
 
-
+
 
   
-    
+    
     Visual F# Tools Templates
     Deploy Visual F# Tools templates to Visual Studio Express for Web
   
diff --git a/vsintegration/src/deployment/VWDExpressDeployTemplates/source.extension.vsixmanifest b/vsintegration/src/deployment/VWDExpressDeployTemplates/source.extension.vsixmanifest
index 6a45c95fad9..8c2eccbd885 100644
--- a/vsintegration/src/deployment/VWDExpressDeployTemplates/source.extension.vsixmanifest
+++ b/vsintegration/src/deployment/VWDExpressDeployTemplates/source.extension.vsixmanifest
@@ -1,8 +1,8 @@
 
-
+
 
   
-    
+    
     Visual F# Tools Templates
     Deploy Visual F# Tools templates to Visual Studio Express for Web
   
diff --git a/vsintegration/src/deployment/VsProDeployTemplates/VsProDeployTemplates.csproj b/vsintegration/src/deployment/VsProDeployTemplates/VsProDeployTemplates.csproj
index b37eb11d74e..50d99ed83bc 100644
--- a/vsintegration/src/deployment/VsProDeployTemplates/VsProDeployTemplates.csproj
+++ b/vsintegration/src/deployment/VsProDeployTemplates/VsProDeployTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/deployment/VsProDeployTemplates/extension.vsixmanifest b/vsintegration/src/deployment/VsProDeployTemplates/extension.vsixmanifest
index a63cb9f0644..36882c7ebd6 100644
--- a/vsintegration/src/deployment/VsProDeployTemplates/extension.vsixmanifest
+++ b/vsintegration/src/deployment/VsProDeployTemplates/extension.vsixmanifest
@@ -1,8 +1,8 @@
 
-
+
 
   
-    
+    
     Visual F# Tools Templates
     Deploy Visual F# Tools templates to Visual Studio
   
diff --git a/vsintegration/src/deployment/VsProDeployTemplates/source.extension.vsixmanifest b/vsintegration/src/deployment/VsProDeployTemplates/source.extension.vsixmanifest
index 365ff73f7ab..58d5a7303c7 100644
--- a/vsintegration/src/deployment/VsProDeployTemplates/source.extension.vsixmanifest
+++ b/vsintegration/src/deployment/VsProDeployTemplates/source.extension.vsixmanifest
@@ -1,8 +1,8 @@
 
-
+
 
   
-    
+    
     Visual F# Tools Templates
     Deploy Visual F# Tools templates to Visual Studio
   
diff --git a/vsintegration/src/deployment/WDExpressDeployTemplates/WDExpressDeployTemplates.csproj b/vsintegration/src/deployment/WDExpressDeployTemplates/WDExpressDeployTemplates.csproj
index 0313d686266..3f43d6e5747 100644
--- a/vsintegration/src/deployment/WDExpressDeployTemplates/WDExpressDeployTemplates.csproj
+++ b/vsintegration/src/deployment/WDExpressDeployTemplates/WDExpressDeployTemplates.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     14.0
diff --git a/vsintegration/src/deployment/WDExpressDeployTemplates/extension.vsixmanifest b/vsintegration/src/deployment/WDExpressDeployTemplates/extension.vsixmanifest
index c3ebeb2050f..b1c30694a65 100644
--- a/vsintegration/src/deployment/WDExpressDeployTemplates/extension.vsixmanifest
+++ b/vsintegration/src/deployment/WDExpressDeployTemplates/extension.vsixmanifest
@@ -1,8 +1,8 @@
 
-
+
 
   
-    
+    
     Visual F# Tools Templates
     Deploy Visual F# Tools templates to Visual Studio Express for Windows Desktop
   
diff --git a/vsintegration/src/deployment/WDExpressDeployTemplates/source.extension.vsixmanifest b/vsintegration/src/deployment/WDExpressDeployTemplates/source.extension.vsixmanifest
index daaac841f2d..5e7e1707d39 100644
--- a/vsintegration/src/deployment/WDExpressDeployTemplates/source.extension.vsixmanifest
+++ b/vsintegration/src/deployment/WDExpressDeployTemplates/source.extension.vsixmanifest
@@ -1,8 +1,8 @@
 
-
+
 
   
-    
+    
     Visual F# Tools Templates
     Deploy Visual F# Tools templates to Visual Studio Express for Windows Desktop
   
diff --git a/vsintegration/src/fsharp.common.props b/vsintegration/src/fsharp.common.props
index 1a365f0ea2a..bedceb1ac76 100644
--- a/vsintegration/src/fsharp.common.props
+++ b/vsintegration/src/fsharp.common.props
@@ -1,5 +1,5 @@
 
-
+
 
   
     Debug
diff --git a/vsintegration/src/fsharp.tools.targets b/vsintegration/src/fsharp.tools.targets
index 6d85f1485a3..a124e5be0aa 100644
--- a/vsintegration/src/fsharp.tools.targets
+++ b/vsintegration/src/fsharp.tools.targets
@@ -1,5 +1,5 @@
 
-
+
 
 
   
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificalEventInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificalEventInfo.cs
index 50b6df2ec3d..d921a045b4f 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificalEventInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificalEventInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialConstructorInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialConstructorInfo.cs
index 5a50f20ee9b..82ac6f5faf7 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialConstructorInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialConstructorInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialMethodInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialMethodInfo.cs
index 96bb3f97420..f7298df2062 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialMethodInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialMethodInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialParamInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialParamInfo.cs
index 15b3b8692a1..9d2618acabb 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialParamInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialParamInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialPropertyInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialPropertyInfo.cs
index c93af60c861..1a0c1dbb7e1 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialPropertyInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialPropertyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialType.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialType.cs
index c1e379d778e..1ae5c4a2d29 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialType.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/ArtificialType.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/DefinitionLocationAttribute.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/DefinitionLocationAttribute.csproj
index 9e0c9941525..21ad57e35c7 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/DefinitionLocationAttribute.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/DefinitionLocationAttribute.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/TypeProviderInCSharp.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/TypeProviderInCSharp.cs
index 240a998f4eb..a5a1c724f61 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/TypeProviderInCSharp.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/TypeProviderInCSharp.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificalEventInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificalEventInfo.cs
index 4e10a3e17fb..9106c246c53 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificalEventInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificalEventInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialConstructorInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialConstructorInfo.cs
index 0b7f5eaa3a0..ab5fd6f2f0c 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialConstructorInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialConstructorInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialMethodInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialMethodInfo.cs
index d63c3e345e4..2795696aecc 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialMethodInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialMethodInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialParamInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialParamInfo.cs
index 6624f2db52f..4fbc5fc21aa 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialParamInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialParamInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialPropertyInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialPropertyInfo.cs
index d19b6ca96dc..f7a45bca303 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialPropertyInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialPropertyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialType.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialType.cs
index 18febfe027a..35ecf0751ce 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialType.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/ArtificialType.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/DefinitionLocationAttributeFileDoesnotExist.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/DefinitionLocationAttributeFileDoesnotExist.csproj
index 945708f3afc..5dec33158b7 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/DefinitionLocationAttributeFileDoesnotExist.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/DefinitionLocationAttributeFileDoesnotExist.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/TypeProviderInCSharp.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/TypeProviderInCSharp.cs
index e4c569b6077..aefb89a3335 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/TypeProviderInCSharp.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/TypeProviderInCSharp.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificalEventInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificalEventInfo.cs
index edf9c2c06ee..eeeb084735b 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificalEventInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificalEventInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialConstructorInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialConstructorInfo.cs
index 2fd2c42798b..7e4c1cb4a7a 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialConstructorInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialConstructorInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialMethodInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialMethodInfo.cs
index 686f1f4e04e..b57dbc802bc 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialMethodInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialMethodInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialParamInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialParamInfo.cs
index 6624f2db52f..4fbc5fc21aa 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialParamInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialParamInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialPropertyInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialPropertyInfo.cs
index 8547cb96873..27a3e8d2e25 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialPropertyInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialPropertyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialType.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialType.cs
index 0f166753f9c..d46d414b464 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialType.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/ArtificialType.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/DefinitionLocationAttributeLineDoesnotExist.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/DefinitionLocationAttributeLineDoesnotExist.csproj
index 7ac6782145a..d27b61528b8 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/DefinitionLocationAttributeLineDoesnotExist.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/DefinitionLocationAttributeLineDoesnotExist.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/TypeProviderInCSharp.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/TypeProviderInCSharp.cs
index d381f9ebaa0..2f2c86a470f 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/TypeProviderInCSharp.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/TypeProviderInCSharp.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificalEventInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificalEventInfo.cs
index f51b398c144..4f167757cf9 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificalEventInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificalEventInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialConstructorInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialConstructorInfo.cs
index 5899d395bd2..0329cf607ed 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialConstructorInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialConstructorInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialMethodInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialMethodInfo.cs
index 337af500efd..a1ba9e1548c 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialMethodInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialMethodInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialParamInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialParamInfo.cs
index 6624f2db52f..4fbc5fc21aa 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialParamInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialParamInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialPropertyInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialPropertyInfo.cs
index 79280398342..30de10a4d58 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialPropertyInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialPropertyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialType.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialType.cs
index 6778cd36a6e..72b79c553e0 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialType.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/ArtificialType.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/DefinitionLocationAttributeWithSpaceInTheType.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/DefinitionLocationAttributeWithSpaceInTheType.csproj
index 1168b555fa5..446b4355d4c 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/DefinitionLocationAttributeWithSpaceInTheType.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/DefinitionLocationAttributeWithSpaceInTheType.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/TypeProviderInCSharp.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/TypeProviderInCSharp.cs
index 68d674506a0..1374637a536 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/TypeProviderInCSharp.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/TypeProviderInCSharp.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fs b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fs
index 306444e2cac..fc483352e8c 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace DummyProviderForLanguageServiceTesting 
 
@@ -115,15 +115,25 @@ module internal TPModule =
 module GlobalCounters = 
     let mutable creations = 0
     let mutable disposals = 0
+    let mutable configs = ([]: TypeProviderConfig list)
     let GetTotalCreations() = creations
     let GetTotalDisposals() = disposals
+    let CheckAllConfigsDisposed() = 
+        for c in configs do 
+            try 
+                c.SystemRuntimeContainsType("System.Object") |> ignore
+                failwith "expected configuration object to be disposed"
+            with :? System.ObjectDisposedException -> 
+                ()
+
 
 
 []
-type HelloWorldProvider() = 
+type HelloWorldProvider(config: TypeProviderConfig) = 
     inherit TypeProviderForNamespaces(TPModule.namespaceName,TPModule.types)
     do GlobalCounters.creations <- GlobalCounters.creations + 1                         
     let mutable disposed = false
+    do GlobalCounters.configs <- config :: GlobalCounters.configs
     interface System.IDisposable with 
         member x.Dispose() = 
             System.Diagnostics.Debug.Assert(not disposed)
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj
index ba1fced5c11..fb538cd4119 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fs b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fs
index ecdced32403..f794441ef5b 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 #if TPEMIT_INTERNAL_AND_MINIMAL_FOR_TYPE_CONTAINERS
 namespace Internal.Utilities.TypeProvider.Emit
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fsi b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fsi
index 75eb5eba6dd..ef05fd18fb2 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fsi
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fsi
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 #if TPEMIT_INTERNAL_AND_MINIMAL_FOR_TYPE_CONTAINERS
 namespace Internal.Utilities.TypeProvider.Emit
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificalEventInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificalEventInfo.cs
index 5a7fd0c8881..7925df3a0c0 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificalEventInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificalEventInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialConstructorInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialConstructorInfo.cs
index da70fb1792d..5c2470caef1 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialConstructorInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialConstructorInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialMethodInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialMethodInfo.cs
index 337af500efd..a1ba9e1548c 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialMethodInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialMethodInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialParamInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialParamInfo.cs
index 6624f2db52f..4fbc5fc21aa 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialParamInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialParamInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialPropertyInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialPropertyInfo.cs
index 285599266b3..0f6c554e159 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialPropertyInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialPropertyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialType.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialType.cs
index 25f4623b217..e01e2c20792 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialType.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/ArtificialType.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/EditorHideMethodsAttribute.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/EditorHideMethodsAttribute.csproj
index c2d69d9f971..8a4a98499a6 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/EditorHideMethodsAttribute.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/EditorHideMethodsAttribute.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/TypeProviderInCSharp.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/TypeProviderInCSharp.cs
index e4c569b6077..aefb89a3335 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/TypeProviderInCSharp.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/TypeProviderInCSharp.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fs b/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fs
index 8beeade59a3..60eb6664418 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace EmptyAssembly
 
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fsproj b/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fsproj
index 38bbf4b2595..146a33ec40e 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fsproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fsproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/Helpers.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/Helpers.cs
index 979eb285351..f1578b6eccb 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/Helpers.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/Helpers.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificalEventInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificalEventInfo.cs
index 5a7fd0c8881..7925df3a0c0 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificalEventInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificalEventInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialConstructorInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialConstructorInfo.cs
index 5899d395bd2..0329cf607ed 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialConstructorInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialConstructorInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialMethodInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialMethodInfo.cs
index 337af500efd..a1ba9e1548c 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialMethodInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialMethodInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialParamInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialParamInfo.cs
index 65f58aac97d..6069f167e4c 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialParamInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialParamInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialPropertyInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialPropertyInfo.cs
index 79280398342..30de10a4d58 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialPropertyInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialPropertyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialType.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialType.cs
index 90f5e0c3fc0..5ceec9a9f4b 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialType.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/ArtificialType.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/TypeProviderInCSharp.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/TypeProviderInCSharp.cs
index e4c569b6077..aefb89a3335 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/TypeProviderInCSharp.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/TypeProviderInCSharp.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/XmlDocAttributeWithAdequateComment.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/XmlDocAttributeWithAdequateComment.csproj
index 0d4e803f3ec..22d5726da57 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/XmlDocAttributeWithAdequateComment.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/XmlDocAttributeWithAdequateComment.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificalEventInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificalEventInfo.cs
index 2a435947a1b..b633a26b9ff 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificalEventInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificalEventInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialConstructorInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialConstructorInfo.cs
index 89105781b87..d18f42c59d5 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialConstructorInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialConstructorInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialMethodInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialMethodInfo.cs
index 189295b6519..a9e53ee7850 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialMethodInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialMethodInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialParamInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialParamInfo.cs
index 6624f2db52f..4fbc5fc21aa 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialParamInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialParamInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialPropertyInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialPropertyInfo.cs
index 1f473210791..2f05ee6e7ad 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialPropertyInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialPropertyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialType.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialType.cs
index 2af6345eae9..9423e07055e 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialType.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/ArtificialType.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/TypeProviderInCSharp.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/TypeProviderInCSharp.cs
index e4c569b6077..aefb89a3335 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/TypeProviderInCSharp.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/TypeProviderInCSharp.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/XmlDocAttributeWithEmptyComment.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/XmlDocAttributeWithEmptyComment.csproj
index cc04d3b8bd7..70e0ba96b11 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/XmlDocAttributeWithEmptyComment.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/XmlDocAttributeWithEmptyComment.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificalEventInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificalEventInfo.cs
index 89e20216e3e..8ceafbc71af 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificalEventInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificalEventInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialConstructorInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialConstructorInfo.cs
index 7433e72d0b4..be0357b7484 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialConstructorInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialConstructorInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialMethodInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialMethodInfo.cs
index 6dd48a07f64..78ee8ec5ba5 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialMethodInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialMethodInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialParamInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialParamInfo.cs
index 7c631b25932..678503614a4 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialParamInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialParamInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialPropertyInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialPropertyInfo.cs
index d02050f5fc9..c80eeb3de93 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialPropertyInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialPropertyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialType.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialType.cs
index b454faa55a7..72fa711a778 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialType.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/ArtificialType.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/TypeProviderInCSharp.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/TypeProviderInCSharp.cs
index e4c569b6077..aefb89a3335 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/TypeProviderInCSharp.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/TypeProviderInCSharp.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/XmlDocAttributeWithLocalizedComment.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/XmlDocAttributeWithLocalizedComment.csproj
index 669d00728c8..594a868ab49 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/XmlDocAttributeWithLocalizedComment.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/XmlDocAttributeWithLocalizedComment.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificalEventInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificalEventInfo.cs
index e48426cf0af..25a0e4cb442 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificalEventInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificalEventInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialConstructorInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialConstructorInfo.cs
index 6d4b36373bd..caf3321d307 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialConstructorInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialConstructorInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialMethodInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialMethodInfo.cs
index f38c98fc177..64d053bdfd1 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialMethodInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialMethodInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialParamInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialParamInfo.cs
index 3d8d2319e5f..2321d631cec 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialParamInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialParamInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialPropertyInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialPropertyInfo.cs
index 172f4eb28eb..8b990c511bc 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialPropertyInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialPropertyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialType.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialType.cs
index d017244bfc8..b4a11d12a1b 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialType.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/ArtificialType.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/TypeProviderInCSharp.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/TypeProviderInCSharp.cs
index e4c569b6077..aefb89a3335 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/TypeProviderInCSharp.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/TypeProviderInCSharp.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/XmlDocAttributeWithLongComment.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/XmlDocAttributeWithLongComment.csproj
index 66bb3f66c7c..3d166835dc6 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/XmlDocAttributeWithLongComment.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/XmlDocAttributeWithLongComment.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificalEventInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificalEventInfo.cs
index 822fa9f00a9..f674057fcbf 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificalEventInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificalEventInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialConstructorInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialConstructorInfo.cs
index c9264a615ca..4e3e82fa470 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialConstructorInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialConstructorInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialMethodInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialMethodInfo.cs
index 73e0a02d417..6436e646a36 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialMethodInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialMethodInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialParamInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialParamInfo.cs
index 7c631b25932..678503614a4 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialParamInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialParamInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialPropertyInfo.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialPropertyInfo.cs
index 2eb9727e8b3..fa0d25eda38 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialPropertyInfo.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialPropertyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialType.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialType.cs
index a54ba9de31f..e8f77fed9e6 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialType.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/ArtificialType.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/TypeProviderInCSharp.cs b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/TypeProviderInCSharp.cs
index 71cb0697693..726b8249ad1 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/TypeProviderInCSharp.cs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/TypeProviderInCSharp.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/XmlDocAttributeWithNullComment.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/XmlDocAttributeWithNullComment.csproj
index 72aaf40ab92..05d039e94a1 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/XmlDocAttributeWithNullComment.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/XmlDocAttributeWithNullComment.csproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/unittests/Resources/TestTypeProvider.Negative1.fsx b/vsintegration/src/unittests/Resources/TestTypeProvider.Negative1.fsx
index 3d9f0a57691..2bfc2a728ed 100644
--- a/vsintegration/src/unittests/Resources/TestTypeProvider.Negative1.fsx
+++ b/vsintegration/src/unittests/Resources/TestTypeProvider.Negative1.fsx
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace HelloWorldTypeProviderNeg1
 
diff --git a/vsintegration/src/unittests/Resources/TestTypeProvider.Positive1.fsx b/vsintegration/src/unittests/Resources/TestTypeProvider.Positive1.fsx
index f4fe601082b..f7370bfa9d6 100644
--- a/vsintegration/src/unittests/Resources/TestTypeProvider.Positive1.fsx
+++ b/vsintegration/src/unittests/Resources/TestTypeProvider.Positive1.fsx
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace HelloWorldTypeProvider
 
diff --git a/vsintegration/src/unittests/TestLib.LanguageService.fs b/vsintegration/src/unittests/TestLib.LanguageService.fs
index 56e5ba5a6ce..e6dc71eb8e5 100644
--- a/vsintegration/src/unittests/TestLib.LanguageService.fs
+++ b/vsintegration/src/unittests/TestLib.LanguageService.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace UnitTests.TestLib.LanguageService
 
@@ -151,18 +151,18 @@ type internal Helper =
 type internal GlobalParseAndTypeCheckCounter private(initialParseCount:int, initialTypeCheckCount:int, initialEventNum:int, vs) =
     static member StartNew(vs) =
         TakeCoffeeBreak(vs)
-        let n = IncrementalFSharpBuild.GetCurrentIncrementalBuildEventNum()
-        new GlobalParseAndTypeCheckCounter(InteractiveChecker.GlobalForegroundParseCountStatistic, InteractiveChecker.GlobalForegroundTypeCheckCountStatistic, n, vs)
+        let n = IncrementalBuilderEventTesting.GetCurrentIncrementalBuildEventNum()
+        new GlobalParseAndTypeCheckCounter(FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic, n, vs)
     member private this.GetEvents() = 
         TakeCoffeeBreak(vs)
-        let n = IncrementalFSharpBuild.GetCurrentIncrementalBuildEventNum()
-        IncrementalFSharpBuild.GetMostRecentIncrementalBuildEvents(n-initialEventNum)
-    member private this.SawIBDeleted() = 
-        this.GetEvents() |> List.exists (function | IncrementalFSharpBuild.IBEDeleted -> true | _ -> false)
+        let n = IncrementalBuilderEventTesting.GetCurrentIncrementalBuildEventNum()
+        IncrementalBuilderEventTesting.GetMostRecentIncrementalBuildEvents(n-initialEventNum)
+    member private this.SawIBCreated() = 
+        this.GetEvents() |> List.exists (function | IncrementalBuilderEventTesting.IBECreated -> true | _ -> false)
     member private this.GetParsedFilesSet() = 
-        this.GetEvents() |> List.choose (function | IncrementalFSharpBuild.IBEParsed(file) -> Some(file) | _ -> None) |> set
+        this.GetEvents() |> List.choose (function | IncrementalBuilderEventTesting.IBEParsed(file) -> Some(file) | _ -> None) |> set
     member private this.GetTypeCheckedFilesSet() = 
-        this.GetEvents() |> List.choose (function | IncrementalFSharpBuild.IBETypechecked(file) -> Some(file) | _ -> None) |> set
+        this.GetEvents() |> List.choose (function | IncrementalBuilderEventTesting.IBETypechecked(file) -> Some(file) | _ -> None) |> set
     member this.AssertExactly(expectedParses, expectedTypeChecks) =
         let actualParses = this.GetParsedFilesSet().Count 
         let actualTypeChecks = this.GetTypeCheckedFilesSet().Count
@@ -176,19 +176,19 @@ type internal GlobalParseAndTypeCheckCounter private(initialParseCount:int, init
                            false)
     member this.AssertExactly((aap,expectedParsedFiles) : string option * list, (aat,expectedTypeCheckedFiles) : string option * list) =
         this.AssertExactly((aap,expectedParsedFiles), (aat,expectedTypeCheckedFiles), false)
-    member this.AssertExactly((aap,expectedParsedFiles) : string option * list, (aat,expectedTypeCheckedFiles) : string option * list, expectDelete : bool) =
+    member this.AssertExactly((aap,expectedParsedFiles) : string option * list, (aat,expectedTypeCheckedFiles) : string option * list, expectCreate : bool) =
         let p = match aap with 
                 | Some(aap) -> aap :: (expectedParsedFiles |> List.map GetNameOfOpenFile)
                 | _ -> (expectedParsedFiles |> List.map GetNameOfOpenFile)
         let t = match aat with
                 | Some(aat) -> aat :: (expectedTypeCheckedFiles |> List.map GetNameOfOpenFile)
                 | _ -> (expectedTypeCheckedFiles |> List.map GetNameOfOpenFile)
-        this.AssertExactly(p.Length, t.Length, p, t, expectDelete)
-    member private this.AssertExactly(expectedParses, expectedTypeChecks, expectedParsedFiles : list, expectedTypeCheckedFiles : list, expectDelete : bool) =
-        let note,ok = if expectDelete then
-                        if this.SawIBDeleted() then ("The incremental builder was deleted, as expected",true) else ("The incremental builder was NOT deleted, even though we expected it to be",false)
+        this.AssertExactly(p.Length, t.Length, p, t, expectCreate)
+    member private this.AssertExactly(expectedParses, expectedTypeChecks, expectedParsedFiles : list, expectedTypeCheckedFiles : list, expectCreate : bool) =
+        let note,ok = if expectCreate then
+                        if this.SawIBCreated() then ("The incremental builder was created, as expected",true) else ("The incremental builder was NOT deleted and recreated, even though we expected it to be",false)
                       else
-                        if this.SawIBDeleted() then ("The incremental builder was UNEXPECTEDLY deleted",false) else ("",true)
+                        if this.SawIBCreated() then ("The incremental builder was UNEXPECTEDLY deleted",false) else ("",true)
         let actualParsedFiles = this.GetParsedFilesSet()
         let actualTypeCheckedFiles = this.GetTypeCheckedFilesSet()
         let actualParses = actualParsedFiles.Count 
@@ -242,7 +242,7 @@ type LanguageServiceBaseTests() =
     let mutable defaultVS : VisualStudio = Unchecked.defaultof<_>
     let mutable currentVS : VisualStudio = Unchecked.defaultof<_>
     (* VsOps is internal, but this type needs to be public *)
-    let mutable ops : VsOps = fst (Models.MSBuild())
+    let mutable ops = BuiltMSBuildTestFlavour()
     let testStopwatch = new Stopwatch()
 
     (* Timings ----------------------------------------------------------------------------- *)
@@ -354,9 +354,13 @@ type LanguageServiceBaseTests() =
         GlobalFunctions.AddAssemblyReference(proj, ref)
 
     /// Called per test run
+#if NUNIT_V2
     []
     member this.TestFixtureSetUp() =
-        ApproveAllMockTypeProviders()
+#else
+    []
+    member this.Init() =
+#endif
         match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler with 
         | Some(folder) -> 
             let fscPath = Path.Combine(folder,"fsc.exe")
@@ -390,8 +394,13 @@ type LanguageServiceBaseTests() =
         defaultSolution <- GlobalFunctions.CreateSolution(defaultVS)
         cache.Clear()
 
+#if NUNIT_V2
     []
     member this.Shutdown() =
+#else
+    []
+    member this.Cleanup() =
+#endif
         if box currentVS <> box defaultVS then
             failwith "LanguageServiceBaseTests.Shutdown was called when 'active' instance of VS is not 'default' one - this may denote that tests contains errors"
         
diff --git a/vsintegration/src/unittests/TestLib.ProjectSystem.fs b/vsintegration/src/unittests/TestLib.ProjectSystem.fs
index 491298f3c82..d534ae01ad2 100644
--- a/vsintegration/src/unittests/TestLib.ProjectSystem.fs
+++ b/vsintegration/src/unittests/TestLib.ProjectSystem.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace UnitTests.TestLib.ProjectSystem
 
@@ -155,12 +155,12 @@ type TheTests() =
         // ensure that vs-style encoding is off
         p
         
-    static member internal CreateProjectWithUTF8Output(filename : string) =
+    static member internal CreateProjectWithUTF8Output(filename: string) =
         let sp, configChangeNotifier = VsMocks.MakeMockServiceProviderAndConfigChangeNotifier()
         let p = TheTests.CreateProject(filename, "true", configChangeNotifier, sp)
         p
       
-    static member internal FindNodeWithCaption(project : UnitTestingFSharpProjectNode, caption) =
+    static member internal FindNodeWithCaption(project: UnitTestingFSharpProjectNode, caption) =
         let node = project.FirstChild
         let rec TryFind (n : HierarchyNode) =
             if n = null then None 
@@ -172,7 +172,7 @@ type TheTests() =
         | Some(x) -> x
         | None -> failwithf "did not find node with caption %s" caption
        
-    static member MoveDown(node : HierarchyNode) =
+    static member MoveDown(node: HierarchyNode) =
         match node with
         | :? FSharpFileNode 
         | :? FSharpFolderNode -> 
@@ -183,7 +183,7 @@ type TheTests() =
         | _ -> failwith "unexpected node type"
         ()
 
-    static member MoveUp(node : HierarchyNode) =
+    static member MoveUp(node: HierarchyNode) =
         match node with
         | :? FSharpFileNode 
         | :? FSharpFolderNode ->
@@ -229,16 +229,18 @@ type TheTests() =
         TheTests.FsprojTextWithProjectReferencesAndOtherFlags(compileItems, references, [], otherflags, other)
     
     static member public FsprojTextWithProjectReferences(compileItems : string list, references : string list, projectReferences : string list, other : string) = 
-        let vsops = fst (Salsa.Salsa.Models.MSBuild())
+        let vsops = Salsa.Salsa.BuiltMSBuildTestFlavour()
         let references = references |> List.map (fun r->r,false)
-        let text = vsops.CreatePhysicalProjectFileInMemory [for i in compileItems -> (i,DefaultBuildActionOfFilename i, None)] references projectReferences [] [] null null other null
+        let items = [for i in compileItems -> (i,DefaultBuildActionOfFilename i, None)]
+        let text = vsops.CreatePhysicalProjectFileInMemory(items, references, projectReferences, [], [], null, null, other, null)
         printfn "%s" text
         text
         
     static member public FsprojTextWithProjectReferencesAndOtherFlags(compileItems : string list, references : string list, projectReferences : string list, otherflags : string, other : string, targetFramework : string) = 
-        let vsops = fst (Salsa.Salsa.Models.MSBuild())
+        let vsops = Salsa.Salsa.BuiltMSBuildTestFlavour()
         let references = references |> List.map (fun r->r,false)
-        let text = vsops.CreatePhysicalProjectFileInMemory [for i in compileItems -> (i,DefaultBuildActionOfFilename i, None)] references projectReferences [] [] null otherflags other targetFramework
+        let items = [for i in compileItems -> (i,DefaultBuildActionOfFilename i, None)]
+        let text = vsops.CreatePhysicalProjectFileInMemory(items, references, projectReferences, [], [], null, otherflags, other, targetFramework)
         printfn "%s" text
         text
 
@@ -565,50 +567,6 @@ and (*type*) MSBuildItems =
         match this with
         | MSBuildItems(l) -> l
         
-(*
-when first click to start drag
-        public override int GetDropInfo(out uint pdwOKEffects, out IOleDataObject ppDataObject, out IDropSource ppDropSource)
-ensure pdwOKEffects are right and return S_OK
-
-when drag onto new entity
-        public override int DragEnter(IOleDataObject pDataObject, uint grfKeyState, uint itemid, ref uint pdwEffect)
-ensure is same thing(pDataObj, itemid) being dragged, pdwEffect is properly updated
-
-not sure how differs from DragEnter...
-        public override int DragOver(uint grfKeyState, uint itemid, ref uint pdwEffect)
-ensure right pdwEffect
-
-at end of drag...
-        public override int OnBeforeDropNotify(IOleDataObject o, uint dwEffect, out int fCancelDrop)
-can prompt to save dirty dragged items... nothing to verify?
-
-        public override int OnDropNotify(int fDropped, uint dwEffects)
-unsure...
-
-        public override int Drop(IOleDataObject pDataObject, uint grfKeyState, uint itemid, ref uint pdwEffect)
-unsure...
-
-        /*internal, but public for FSharp.Project.dll*/ public DropDataType ProcessSelectionDataObject(IOleDataObject dataObject, HierarchyNode targetNode)
-called by Drop, does the actual action of adding dropped files to new location        
-
-        public override int DragLeave()
-nothing to ensure, but call if leave hierarchy or drag is canceled or finishes
-
-
-called at various times:
-                public /*protected, but public for FSharp.Project.dll*/ override HierarchyNode GetDragTargetHandlerNode()
-ensure FSharpFileNode does right thing, whatever that may be, same for folder, project
-
-        /*internal, but public for FSharp.Project.dll*/ public static DropDataType QueryDropDataType(IOleDataObject pDataObject)
-maybe ref (shortcut) versus value (real file/dir on disk)?
-
-        /*internal, but public for FSharp.Project.dll*/ public DropEffect QueryDropEffect(DropDataType dropDataType, uint grfKeyState)
-given keyboard and object type, return right effect
-
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual bool CanTargetNodeAcceptDrop(uint itemId)
-can't drop onto 'references'
-*)        
-
 module LanguageServiceExtension =
     open UnitTests.TestLib.LanguageService
     open Salsa.Salsa
@@ -619,13 +577,20 @@ module LanguageServiceExtension =
         member this.Project with get() = proj and set(x) = proj <- x
         member this.CreateProjectHookIsEnabled with get() = createProjectHookIsEnabled and set(x) = createProjectHookIsEnabled <- x
 
-    let internal ProjectSystem = 
-        let msbuild,hooks = Models.MSBuild()
+    /// A test flavour - this layers additional behaviour over the BuiltMSBuildTestFlavour
+    /// to exercise the unit-testable versions of the classes in FSharp.ProjectSystem.FSharp.  
+    /// For example, when a CreateProject call is made, a UnitTestingFSharpProjectNode is 
+    /// created (in addition to the actions performed via the MSBuild layer).
+    //
+    // NOTE: The "BehaviourHooks" way of injecting functionality seems awkward.
+    type internal ProjectSystemTestFlavour() = 
+        let msbuild = BuiltMSBuildTestFlavour()
+        let hooks = msbuild.BehaviourHooks
         let projectDict = new Dictionary()
-        { msbuild with 
-                OutOfConeFilesAreAddedAsLinks=true;
-                SupportsOutputWindowPane=true;
-                AddAssemblyReference=(fun (project, assem, specificVersion) -> 
+        interface VsOps with
+            member ops.OutOfConeFilesAreAddedAsLinks=true
+            member ops.SupportsOutputWindowPane=true
+            member ops.AddAssemblyReference(project, assem, specificVersion) =
                     let projInfo = projectDict.[project]
                     let referencesFolder = projInfo.Project.FindChild(ReferenceContainerNode.ReferencesNodeVirtualName) :?> ReferenceContainerNode
                     let assem = 
@@ -652,66 +617,134 @@ module LanguageServiceExtension =
                             projInfo.CreateProjectHookIsEnabled <- false
                             msbuild.AddAssemblyReference(project, node.Url, specificVersion)
                             projInfo.CreateProjectHookIsEnabled <- true
-                            ());
-                CreateProject=(fun (solution,projectBaseName)->
+
+            member ops.CreateProject (solution,projectBaseName) =
                     let configChangeNotifier = ref None
                     let projInfo = new ProjInfo()
                     let NULL = Unchecked.defaultof
-                    let newHooks = { 
+                    let newHooks = 
+                     { new ProjectBehaviorHooks with 
+
                         // Note: CreateProjectHook will callback MakeHierarcyHook and then InitializeProjectHook
-                        CreateProjectHook = 
-                            fun (projectFilename:string) (files:(string*BuildAction*string option) list) (references:(string*bool) list) (projReferences:string list)
-                                (disabledWarnings:string list) (defines:string list) (versionFile:string) (otherFlags:string) (otherMSBuildStuff:string) (targetFrameworkVersion : string) ->
-                                    if projInfo.CreateProjectHookIsEnabled then
-                                        hooks.CreateProjectHook projectFilename files references projReferences disabledWarnings defines versionFile otherFlags otherMSBuildStuff targetFrameworkVersion
-                                        if projInfo.Project = NULL then
-                                            ()
-                                        else
-                                            // REVIEW: this is a workaround to get everything working for now; ideally we want to implement the VS gestures below
-                                            // so that they really happen in the project system, rather than just poking the .fsproj file and then doing 
-                                            // a 'reload' each time.  But for now, this is good.
-                                            projInfo.Project.Reload()
-                        InitializeProjectHook = (fun(openProject) ->
+                        member x.CreateProjectHook (projectFilename, files, references, projReferences, disabledWarnings, defines, versionFile, otherFlags, otherMSBuildStuff, targetFrameworkVersion: string) =
+                            if projInfo.CreateProjectHookIsEnabled then
+                                hooks.CreateProjectHook (projectFilename, files, references, projReferences, disabledWarnings, defines, versionFile, otherFlags, otherMSBuildStuff, targetFrameworkVersion)
+                                if projInfo.Project = NULL then
+                                    ()
+                                else
+                                    // REVIEW: this is a workaround to get everything working for now; ideally we want to implement the VS gestures below
+                                    // so that they really happen in the project system, rather than just poking the .fsproj file and then doing 
+                                    // a 'reload' each time.  But for now, this is good.
+                                    projInfo.Project.Reload()
+
+                        member x.InitializeProjectHook (openProject) = 
                             hooks.InitializeProjectHook(openProject)
-                            projectDict.Add(openProject, projInfo))
-                        MakeHierarchyHook = 
-                                        fun projdir fullname projectname ccn serviceProvider -> 
-                                            if projInfo.Project = NULL then
-                                                let p = TheTests.CreateProject(fullname, "false", ccn, serviceProvider)
-                                                projInfo.Project <- p
-                                                configChangeNotifier := Some(fun s -> ccn((p :> IVsHierarchy),s))
-                                            else
-                                                failwith "oops, did not expect MakeHierarchy to be called more than once"
-                                            projInfo.Project :> IVsHierarchy
-                        AddFileToHierarchyHook = fun filename hier -> ()
-                        BuildHook = fun projFileName target vsOutputWindowPane -> 
-                                        if projInfo.Project = NULL then
-                                            failwith "tried to build not-yet-created project"
-                                        else
-                                            let target = if target <> null then target else "Build"
-                                            projInfo.Project.BuildToOutput(target,vsOutputWindowPane) |> ignore   // force build through project system for code coverage
-                                            hooks.BuildHook projFileName target vsOutputWindowPane      // use MSBuild to build and also return MainAssembly value
-                        GetMainOutputAssemblyHook = hooks.GetMainOutputAssemblyHook                                            
-                        SaveHook = fun() -> if projInfo.Project = NULL then () else projInfo.Project.Save(null, 1, 0u) |> ignore
-                        DestroyHook = fun () ->
-                                            if projInfo.Project = NULL
-                                               then ()
-                                               else projInfo.Project.Close () |> ignore
-                                                    match projectDict |> Seq.tryFind(fun (KeyValue(k,v)) -> obj.ReferenceEquals(v, projInfo)) with
-                                                    | Some(KeyValue(k,v)) -> projectDict.Remove(k) |> ignore
-                                                    | None -> failwith "uh-oh, where was it in the dict?"
-                                                    projInfo.Project <- NULL
-                        ModifyConfigurationAndPlatformHook = fun s ->
+                            projectDict.Add(openProject, projInfo)
+
+                        member x.MakeHierarchyHook (projdir, fullname, projectname, ccn, serviceProvider) = 
+                            if projInfo.Project = NULL then
+                                let p = TheTests.CreateProject(fullname, "false", ccn, serviceProvider)
+                                projInfo.Project <- p
+                                configChangeNotifier := Some(fun s -> ccn((p :> IVsHierarchy),s))
+                            else
+                                failwith "oops, did not expect MakeHierarchy to be called more than once"
+                            projInfo.Project :> IVsHierarchy
+
+                        member x.AddFileToHierarchyHook (filename, hier) = ()
+
+                        member x.BuildHook (projFileName, target, vsOutputWindowPane) = 
+                            if projInfo.Project = NULL then
+                                failwith "tried to build not-yet-created project"
+                            else
+                                let target = if target <> null then target else "Build"
+                                projInfo.Project.BuildToOutput(target,vsOutputWindowPane) |> ignore   // force build through project system for code coverage
+                                hooks.BuildHook(projFileName, target, vsOutputWindowPane)      // use MSBuild to build and also return MainAssembly value
+
+                        member x.GetMainOutputAssemblyHook baseName = hooks.GetMainOutputAssemblyHook baseName 
+
+                        member x.SaveHook () = if projInfo.Project = NULL then () else projInfo.Project.Save(null, 1, 0u) |> ignore
+
+                        member x.DestroyHook () =
+                            if projInfo.Project = NULL then () else 
+                            projInfo.Project.Close () |> ignore
+                            match projectDict |> Seq.tryFind(fun (KeyValue(k,v)) -> obj.ReferenceEquals(v, projInfo)) with
+                            | Some(KeyValue(k,v)) -> projectDict.Remove(k) |> ignore
+                            | None -> failwith "uh-oh, where was it in the dict?"
+                            projInfo.Project <- NULL
+
+                        member x.ModifyConfigurationAndPlatformHook s =
                             match !configChangeNotifier with
                             | Some(ccn) -> ccn(s)
                             | None -> ()
                     }
 
-                    msbuild.CreateProjectWithHooks(solution,newHooks,projectBaseName));
-        }
-
+                    msbuild.CreateProjectWithHooks(solution,newHooks,projectBaseName)
+
+            // The rest of the members delegate to 'msbuid'
+            member ops.BehaviourHooks = hooks
+            member ops.CreateVisualStudio () = msbuild.CreateVisualStudio ()
+            member ops.CreateSolution vs = msbuild.CreateSolution vs
+            member ops.GetOutputWindowPaneLines vs = msbuild.GetOutputWindowPaneLines vs 
+            member ops.CloseSolution solution = msbuild.CloseSolution solution 
+            member ops.CreateProjectWithHooks (solution,hooks,projectBaseName) = msbuild.CreateProjectWithHooks (solution,hooks,projectBaseName)
+            member ops.NewFile (vs,filename,buildAction, lines) = msbuild.NewFile (vs,filename,buildAction, lines)
+            member ops.DeleteFileFromDisk file = msbuild.DeleteFileFromDisk file 
+            member ops.AddFileFromText (project,filenameOnDisk,filenameInProject,buildAction,lines) = msbuild.AddFileFromText (project,filenameOnDisk,filenameInProject,buildAction,lines) 
+            member ops.AddLinkedFileFromText (project,filenameOnDisk,includeFilenameInProject,linkFilenameInProject,buildAction,lines) = msbuild.AddLinkedFileFromText (project,filenameOnDisk,includeFilenameInProject,linkFilenameInProject,buildAction,lines)
+            member ops.AddProjectReference (project1, project2) = msbuild.AddProjectReference (project1, project2)
+            member ops.ProjectDirectory project = msbuild.ProjectDirectory project 
+            member ops.ProjectFile project = msbuild.ProjectFile project 
+            member ops.SetVersionFile (project,file) = msbuild.SetVersionFile (project,file) 
+            member ops.SetOtherFlags (project,flags) = msbuild.SetOtherFlags (project,flags) 
+            member ops.SetConfigurationAndPlatform (project, configAndPlatform) = msbuild.SetConfigurationAndPlatform (project, configAndPlatform) 
+            member ops.AddDisabledWarning (project, code) = msbuild.AddDisabledWarning (project, code) 
+            member ops.GetErrors project = msbuild.GetErrors project 
+            member ops.BuildProject (project,target) = msbuild.BuildProject (project,target) 
+            member ops.GetMainOutputAssembly project = msbuild.GetMainOutputAssembly project 
+            member ops.SaveProject project = msbuild.SaveProject project 
+            member ops.OpenFileViaOpenFile (vs,filename) = msbuild.OpenFileViaOpenFile (vs,filename) 
+            member ops.OpenFile (project,filename) = msbuild.OpenFile (project,filename) 
+            member ops.SetProjectDefines (project, defines) = msbuild.SetProjectDefines (project, defines) 
+            member ops.PlaceIntoProjectFileBeforeImport (project,xml) = msbuild.PlaceIntoProjectFileBeforeImport (project,xml)
+            member ops.GetOpenFiles project = msbuild.GetOpenFiles project 
+            member ops.MoveCursorTo (file,line,col) = msbuild.MoveCursorTo (file,line,col) 
+            member ops.GetCursorLocation file = msbuild.GetCursorLocation file 
+            member ops.OpenExistingProject (vs,dir,projname) = msbuild.OpenExistingProject (vs,dir,projname) 
+            member ops.MoveCursorToEndOfMarker (file,marker) = msbuild.MoveCursorToEndOfMarker (file,marker) 
+            member ops.MoveCursorToStartOfMarker (file,marker) = msbuild.MoveCursorToStartOfMarker (file,marker) 
+            member ops.GetNameOfOpenFile file = msbuild.GetNameOfOpenFile file 
+            member ops.GetProjectOptionsOfScript file = msbuild.GetProjectOptionsOfScript file 
+            member ops.GetQuickInfoAtCursor file = msbuild.GetQuickInfoAtCursor file 
+            member ops.GetQuickInfoAndSpanAtCursor file = msbuild.GetQuickInfoAndSpanAtCursor file 
+            member ops.GetMatchingBracesForPositionAtCursor file = msbuild.GetMatchingBracesForPositionAtCursor file 
+            member ops.GetParameterInfoAtCursor file = msbuild.GetParameterInfoAtCursor file 
+            member ops.GetTokenTypeAtCursor file = msbuild.GetTokenTypeAtCursor file 
+            member ops.GetSquiggleAtCursor file = msbuild.GetSquiggleAtCursor file 
+            member ops.GetSquigglesAtCursor file = msbuild.GetSquigglesAtCursor file 
+            member ops.AutoCompleteAtCursor file = msbuild.AutoCompleteAtCursor file 
+            member ops.CompleteAtCursorForReason (file,reason) = msbuild.CompleteAtCursorForReason (file,reason) 
+            member ops.CompletionBestMatchAtCursorFor (file, value, filterText) = msbuild.CompletionBestMatchAtCursorFor (file, value, filterText) 
+            member ops.GotoDefinitionAtCursor (file, forceGen) = msbuild.GotoDefinitionAtCursor (file, forceGen) 
+            member ops.GetNavigationContentAtCursor file = msbuild.GetNavigationContentAtCursor file 
+            member ops.GetHiddenRegionCommands file = msbuild.GetHiddenRegionCommands file 
+            member ops.GetIdentifierAtCursor file = msbuild.GetIdentifierAtCursor file 
+            member ops.GetF1KeywordAtCursor file = msbuild.GetF1KeywordAtCursor file 
+            member ops.GetLineNumber (file, n) = msbuild.GetLineNumber (file, n) 
+            member ops.GetAllLines file = msbuild.GetAllLines file 
+            member ops.SwitchToFile (vs,file) = msbuild.SwitchToFile (vs,file) 
+            member ops.OnIdle vs = msbuild.OnIdle vs 
+            member ops.ShiftKeyDown vs = msbuild.ShiftKeyDown vs 
+            member ops.ShiftKeyUp vs = msbuild.ShiftKeyUp vs 
+            member ops.TakeCoffeeBreak vs = msbuild.TakeCoffeeBreak vs 
+            member ops.ReplaceFileInMemory (file,contents,takeCoffeeBreak) = msbuild.ReplaceFileInMemory (file,contents,takeCoffeeBreak) 
+            member ops.SaveFileToDisk file = msbuild.SaveFileToDisk file 
+            member ops.CreatePhysicalProjectFileInMemory (files, references, projectReferences, disabledWarnings, defines, versionFile, otherFlags, otherProjMisc, targetFrameworkVersion) = msbuild.CreatePhysicalProjectFileInMemory (files, references, projectReferences, disabledWarnings, defines, versionFile, otherFlags, otherProjMisc, targetFrameworkVersion) 
+            member ops.CleanUp vs = msbuild.CleanUp vs 
+            member ops.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients vs = msbuild.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients vs 
+            member ops.AutoCompleteMemberDataTipsThrowsScope message = msbuild.AutoCompleteMemberDataTipsThrowsScope message 
+            member ops.CleanInvisibleProject vs = msbuild.CleanInvisibleProject vs 
     
-
+    let internal ProjectSystemTestFlavour = ProjectSystemTestFlavour()
 
       
 
diff --git a/vsintegration/src/unittests/TestLib.Salsa.fs b/vsintegration/src/unittests/TestLib.Salsa.fs
index 98ce5b277c8..a2695de2dcf 100644
--- a/vsintegration/src/unittests/TestLib.Salsa.fs
+++ b/vsintegration/src/unittests/TestLib.Salsa.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 module UnitTests.TestLib.Salsa
 
@@ -119,9 +119,3 @@ module HiddenFunctions =
     /// if you really need it - use qualified form: GlobalFunctions.AddDisabledWarning
     let AddDisabledWarning() : unit = failwith "Should not be called"
 
-// Common type provider approval code
-
-let ApproveAllMockTypeProviders() =
-    ClearAllTypeProviderApprovals()      
-    for file in System.IO.Directory.EnumerateFiles(System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\")) do
-        AddTypeProviderApprovedForDevelopment(file)       
diff --git a/vsintegration/src/unittests/TestLib.Utils.fs b/vsintegration/src/unittests/TestLib.Utils.fs
index 33bd23a8caf..2020c531b8e 100644
--- a/vsintegration/src/unittests/TestLib.Utils.fs
+++ b/vsintegration/src/unittests/TestLib.Utils.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace UnitTests.TestLib.Utils
 
@@ -250,6 +250,10 @@ module Spawn =
                 printfn "%s" line
             eprintfn "tf submit returned error code %d" errorCode
 
+[]
+module Helpers = 
+    type DummyType = A | B
+    let PathRelativeToTestAssembly p = Path.Combine(Path.GetDirectoryName(Uri(typeof.Assembly.CodeBase).LocalPath), p)
 
 namespace TestLibrary
   module LambdaCalculus =
diff --git a/vsintegration/src/unittests/Tests.BaseLine.fs b/vsintegration/src/unittests/Tests.BaseLine.fs
index 91127f69f5e..af766763185 100644
--- a/vsintegration/src/unittests/Tests.BaseLine.fs
+++ b/vsintegration/src/unittests/Tests.BaseLine.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests
+namespace Tests
 open NUnit.Framework
 open System
 open System.IO
@@ -8,11 +8,10 @@ open System.Diagnostics
 open UnitTests.TestLib.Utils
 open Microsoft.BuildSettings
 
-[]
-type Script() = 
 #if OPEN_BUILD
-    class end
 #else
+[]
+type Script() = 
     let replaceIfNotNull (search:string) (replace:string) (s:string) =
         match s with
         | null -> s
diff --git a/vsintegration/src/unittests/Tests.Build.fs b/vsintegration/src/unittests/Tests.Build.fs
index 47945301b6f..a6a1fd3713e 100644
--- a/vsintegration/src/unittests/Tests.Build.fs
+++ b/vsintegration/src/unittests/Tests.Build.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests
+namespace Tests
 
 open NUnit.Framework
 open System
@@ -405,7 +405,6 @@ type Build() =
         tool.Platform <- "AnyCPU"
         tool.Utf8Output <- true
         tool.VisualStudioStyleErrors <- true
-        tool.ValidateTypeProviders <- true
         tool.SubsystemVersion <- "4.0"
         let cmd = tool.InternalGenerateCommandLineCommands()
         printfn "cmd=\"%s\"" cmd
@@ -417,7 +416,7 @@ type Build() =
                        "--optimize+ --pdb:out.pdb --platform:anycpu " +
                        "--resource:MyRes.resources --resource:OtherRes.resources " +
                        "--versionfile:src/version -r:ref.dll -r:\"C:\\Program Files\\SpacesPath.dll\" --lib:c:\\foo,c:\\bar --target:exe --nowarn:52,109 " +
-                       "--warn:4 --warnaserror --warnaserror:76 --vserrors --validate-type-providers --utf8output --fullpaths --flaterrors --subsystemversion:4.0 " +
+                       "--warn:4 --warnaserror --warnaserror:76 --vserrors --utf8output --fullpaths --flaterrors --subsystemversion:4.0 " +
                        "--highentropyva- --yadda:yadda --other:\"internal quote\" blah foo.fs \"C:\\Program Files\\spaces.fs\""
                        
         AssertEqual expected cmd
@@ -452,7 +451,6 @@ type Build() =
             "--warnaserror"
             "--warnaserror:76"
             "--vserrors"
-            "--validate-type-providers"
             "--utf8output"
             "--fullpaths"
             "--flaterrors"
diff --git a/vsintegration/src/unittests/Tests.InternalCollections.fs b/vsintegration/src/unittests/Tests.InternalCollections.fs
index 709ce291a62..0fac842dd64 100644
--- a/vsintegration/src/unittests/Tests.InternalCollections.fs
+++ b/vsintegration/src/unittests/Tests.InternalCollections.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.InternalCollections
+namespace Tests.Compiler.InternalCollections
 
 open System
 open System.IO
@@ -22,9 +22,10 @@ type MruCache =
         
     member private rb.NumToStringBox n = box (rb.NumToString n)
 
+#if DISABLED_OLD_UNITTESTS
     []
     member public rb.Basic() = 
-        let m = new MruCache(3, rb.NumToString, (fun (x,y) -> x = y))
+        let m = new MruCache(3, (fun (x,y) -> x = y))
         let s = m.Get(5)
         Assert.IsTrue("Five"=s)
         let s = m.Get(6)
@@ -110,6 +111,7 @@ type MruCache =
         let s = m.Get (("w",6)) // forces discard of y
         printfn "discarded = %A" discarded.Value
         Assert.IsTrue(discarded.Value = ["y";"x";"Apple";"Banana"], "Check6")                                      
+#endif
             
 [] 
 type AgedLookup() = 
diff --git a/vsintegration/src/unittests/Tests.LanguageService.Colorizer.fs b/vsintegration/src/unittests/Tests.LanguageService.Colorizer.fs
index 83e7c65b18e..e8ad6133a04 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.Colorizer.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.Colorizer.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.Colorizer
 
 open System
 open NUnit.Framework
@@ -9,8 +9,11 @@ open Salsa.VsOpsUtils
 open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
-type ColorizerTests()  = 
+// context msbuild
+[]
+type UsingMSBuild()  = 
     inherit LanguageServiceBaseTests()
 
     //Marker At The End Helper Functions
@@ -1081,25 +1084,9 @@ let z = __LINE__(*Test3*)
         MoveCursorToEndOfMarker(file,"(*Bob*)typ")
         AssertEqual(TokenType.Keyword,GetTokenTypeAtCursor(file))
 
-
-// Allow languageService tests to run under different contextes
-namespace UnitTests.Tests.LanguageService.Colorizer
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[]
-[]
-type ``MSBuild`` = 
-   inherit ColorizerTests
-   new() = { inherit ColorizerTests(VsOpts = fst (Models.MSBuild())); }
-
 // Context project system
 []
-[]
-type ``ProjectSystem`` = 
-    inherit ColorizerTests
-    new() = { inherit ColorizerTests(VsOpts = LanguageServiceExtension.ProjectSystem); }  
\ No newline at end of file
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
+    
+  
\ No newline at end of file
diff --git a/vsintegration/src/unittests/Tests.LanguageService.Completion.fs b/vsintegration/src/unittests/Tests.LanguageService.Completion.fs
index 46d88738032..bff3b1a864c 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.Completion.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.Completion.fs
@@ -1,16 +1,16 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.AutoCompletion
 
 open System
+open Salsa.Salsa
 open Salsa.VsMocks
 open Salsa.VsOpsUtils
 open NUnit.Framework
 open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
-open Salsa.Salsa
-
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
 []
 module StandardSettings = 
@@ -24,7 +24,8 @@ module StandardSettings =
     let AC x y = AutoCompleteExpected(x,y)
     let DC x y = DotCompleteExpected(x,y)
 
-type AutoCompletionListTests() as this  = 
+[] 
+type UsingMSBuild() as this  = 
     inherit LanguageServiceBaseTests()
 
     let createFile (code : list) fileKind refs = 
@@ -230,6 +231,28 @@ type AutoCompletionListTests() as this  =
         let completions = time1 AutoCompleteAtCursor file "Time of first autocomplete."
         AssertCompListIsEmpty(completions)      
 
+   /////Helper Functios 
+        //DotCompList ContainAll At End Of Marker Helper Function
+    member private this.VerifyDotCompListContainAllAtEndOfMarker(fileContents : string, marker : string, list : string list) =
+        let (solution, project, file) = this.CreateSingleFileProject(fileContents)
+        let completions = DotCompletionAtEndOfMarker file marker
+        AssertCompListContainsAll(completions, list)
+    
+        //DoesNotContainAny At Start Of Marker Helper Function 
+    member private this.VerifyDotCompListDoesNotContainAnyAtStartOfMarker(fileContents : string, marker : string, list : string list, ?addtlRefAssy : list) =
+        let (solution, project, file) = this.CreateSingleFileProject(fileContents, ?references = addtlRefAssy)
+
+        let completions = DotCompletionAtStartOfMarker file marker
+        AssertCompListDoesNotContainAny(completions, list)
+  
+        //DotCompList Is Empty At Start Of Marker Helper Function
+    member private this.VerifyDotCompListIsEmptyAtStartOfMarker(fileContents : string, marker : string, ?addtlRefAssy : list) =
+        let (solution, project, file) = this.CreateSingleFileProject(fileContents, ?references = addtlRefAssy)
+
+        let completions = DotCompletionAtStartOfMarker file marker
+        AssertCompListIsEmpty(completions)  
+               
+
     []
     member this.``AutoCompletion.ObjectMethods``() = 
         let code =
@@ -312,7 +335,7 @@ type AutoCompletionListTests() as this  =
     []
     []
     member this.``TypeProvider.VisibilityChecksForGeneratedTypes``() = 
-        let extraRefs = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
+        let extraRefs = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
         let check = DoWithAutoCompleteUsingExtraRefs extraRefs true SourceFileKind.FS Microsoft.VisualStudio.FSharp.LanguageService.BackgroundRequestReason.MemberSelect
 
         let code = 
@@ -2102,7 +2125,7 @@ let x = new MyClass2(0)
                                 t.I"""],
             marker = "t.I",
             expected = "IM1",    
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
     []
     []
@@ -2115,7 +2138,7 @@ let x = new MyClass2(0)
                                 t.Eve"""],
             marker = "t.Eve", 
             expected = "Event1",          
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
      
     []
     []
@@ -2127,7 +2150,7 @@ let x = new MyClass2(0)
                                 type boo = N1.T ignore
 
+        TakeCoffeeBreak(this.VS)
+
         // Start the key instrumentation
         let gpatcc = GlobalParseAndTypeCheckCounter.StartNew(this.VS)
         
@@ -5158,38 +5183,6 @@ let x = query { for bbbb in abbbbc(*D0*) do
           marker = "gro",
           contained = [ "groupBy"; "groupJoin"; "groupValBy";])
 
-//****************************************//
-type DotCompletionListTests()  = 
-    inherit LanguageServiceBaseTests()
-
-   /////Helper Functios 
-        //DotCompList ContainAll At End Of Marker Helper Function
-    member private this.VerifyDotCompListContainAllAtEndOfMarker(fileContents : string, marker : string, list : string list) =
-        let (solution, project, file) = this.CreateSingleFileProject(fileContents)
-        let completions = DotCompletionAtEndOfMarker file marker
-        AssertCompListContainsAll(completions, list)
-    
-        //DotCompList ContainAll methods and properties At Start Of Marker Helper Function
-    member private this.VerifyDotCompListContainAllAtStartOfMarker(fileContents : string, marker : string, list :string list, ?addtlRefAssy : list, ?coffeeBreak:bool) =
-        let (solution, project, file) = this.CreateSingleFileProject(fileContents, ?references = addtlRefAssy)
-        if defaultArg coffeeBreak false then TakeCoffeeBreak(this.VS)
-        let completions = DotCompletionAtStartOfMarker file marker
-        AssertCompListContainsAll(completions, list)
-
-        //DoesNotContainAny At Start Of Marker Helper Function 
-    member private this.VerifyDotCompListDoesNotContainAnyAtStartOfMarker(fileContents : string, marker : string, list : string list, ?addtlRefAssy : list) =
-        let (solution, project, file) = this.CreateSingleFileProject(fileContents, ?references = addtlRefAssy)
-
-        let completions = DotCompletionAtStartOfMarker file marker
-        AssertCompListDoesNotContainAny(completions, list)
-  
-        //DotCompList Is Empty At Start Of Marker Helper Function
-    member private this.VerifyDotCompListIsEmptyAtStartOfMarker(fileContents : string, marker : string, ?addtlRefAssy : list) =
-        let (solution, project, file) = this.CreateSingleFileProject(fileContents, ?references = addtlRefAssy)
-
-        let completions = DotCompletionAtStartOfMarker file marker
-        AssertCompListIsEmpty(completions)  
-               
     []
     member this.``Namespace.System``() =
         this.VerifyDotCompListContainAllAtEndOfMarker(
@@ -5386,7 +5379,7 @@ type DotCompletionListTests()  =
                                 t(*Marker*)""",
             marker = "(*Marker*)",
             list = ["Equals";"GetHashCode"],            
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
 
     []
     []
@@ -5399,7 +5392,7 @@ type DotCompletionListTests()  =
                                 t(*Marker*)""",
             marker = "(*Marker*)",
             list = ["Event1"],            
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
     
     []
     []
@@ -5412,7 +5405,7 @@ type DotCompletionListTests()  =
                                 t(*Marker*)""",
             marker = "(*Marker*)",
             list = ["IM1"],            
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
     []
     []
@@ -5424,7 +5417,7 @@ type DotCompletionListTests()  =
                                 type XXX = N1.T1(*Marker*)""",
             marker = "(*Marker*)",
             list = ["SomeNestedType"],            
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
         // should _not_ have it here
         this.VerifyDotCompListDoesNotContainAnyAtStartOfMarker(
             fileContents = """ 
@@ -5432,7 +5425,7 @@ type DotCompletionListTests()  =
                                 t(*Marker*)""",
             marker = "(*Marker*)",
             list = ["SomeNestedType"],            
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
     []
     []
@@ -5445,7 +5438,7 @@ type DotCompletionListTests()  =
                                 t.Event1(*Marker*)""",
             marker = "(*Marker*)",
             list = ["AddHandler";"RemoveHandler"],            
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
     
     []
     []
@@ -5457,7 +5450,7 @@ type DotCompletionListTests()  =
             fileContents = """ 
                                 let t = N.T.M(*Marker*)()""",
             marker = "(*Marker*)",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
 
     []
     []
@@ -5471,7 +5464,7 @@ type DotCompletionListTests()  =
                                 let t = N.T.StaticProp(*Marker*)""",
             marker = "(*Marker*)",
             list = ["GetType"; "Equals"],   // just a couple of System.Object methods: we expect them to be there!
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\EditorHideMethodsAttribute.dll")])
                                           
     []
     member this.CompListInDiffFileTypes() =
@@ -7710,41 +7703,11 @@ let rec f l =
         this.VerifyDotCompListContainAllAtStartOfMarker(fileContents, "(*Marker*)", 
             ["Chars";"Length"], queryAssemblyRefs )
 
-// Allow the CompletionListTests run under different context
-namespace UnitTests.Tests.LanguageService.CompletionList
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[]
-[] 
-type ``AutoCompletionMSBuild`` = 
-   inherit AutoCompletionListTests
-   new() = { inherit AutoCompletionListTests(VsOpts = fst (Models.MSBuild())); }
-
-// Context project system
-[] 
-[]
-type ``AutoCompletionProjectSystem`` = 
-    inherit AutoCompletionListTests
-    new() = { inherit AutoCompletionListTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
-
-// context msbuild
-[] 
-[]
-type ``DotCompletionMSBuild`` = 
-   inherit DotCompletionListTests
-   new() = { inherit DotCompletionListTests(VsOpts = fst (Models.MSBuild())); }
 
 // Context project system
 [] 
-[]
-type ``DotCompletionProjectSystem`` = 
-    inherit DotCompletionListTests
-    new() = { inherit DotCompletionListTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
 
 
                
diff --git a/vsintegration/src/unittests/Tests.LanguageService.ErrorList.fs b/vsintegration/src/unittests/Tests.LanguageService.ErrorList.fs
index f079b969627..a1298548ff7 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.ErrorList.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.ErrorList.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.ErrorList
 
 open System
 open System.IO
@@ -10,8 +10,10 @@ open Salsa.VsOpsUtils
 open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
-type ErrorListTests() as this = 
+[] 
+type UsingMSBuild() as this = 
     inherit LanguageServiceBaseTests()
 
     let VerifyErrorListContainedExpectedStr(expectedStr:string,project : OpenProject) = 
@@ -97,7 +99,7 @@ type ErrorListTests() as this =
         if (num = errorList.Length) then 
                 ()
             else
-                failwith "The error list number is not the expected %d" num
+                failwithf "The error list number is not the expected %d" num
     
     []
     member public this.``OverloadsAndExtensionMethodsForGenericTypes``() = 
@@ -371,7 +373,7 @@ type staticInInterface =
     []
     []
     member public this.``TypeProvider.MultipleErrors`` () =
-        let tpRef = System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")
+        let tpRef = PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")
         let checkList n = 
             printfn "===TypeProvider.MultipleErrors: %d===" n
             let content = sprintf "type Err = TPErrors.TP<%d>" n
@@ -443,7 +445,7 @@ type staticInInterface =
 but here has type
     int    """
         this.VerifyErrorListContainedExpectedString(fileContent,expectedStr,
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
     []
     []
@@ -457,7 +459,7 @@ but here has type
         let expectedStr = "An error occurred applying the static arguments to a provided type"
        
         this.VerifyErrorListContainedExpectedString(fileContent,expectedStr,
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
    
     []
     []
@@ -471,7 +473,7 @@ but here has type
         let expectedStr = "The static parameter 'ParamIgnored' of the provided type or method 'T' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. 'T'."
        
         this.VerifyErrorListContainedExpectedString(fileContent,expectedStr,
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     []
     []
     member public this.``TypeProvider.ProhibitedMethods`` () =
@@ -486,7 +488,7 @@ but here has type
                 (
                     code,
                     sprintf "Array method '%s' is supplied by the runtime and cannot be directly used in code." str,
-                    addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
+                    addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
                 )    
     
     []
@@ -511,7 +513,7 @@ but here has type
                             type foo = N1.T< 
                                 const "Hello World",2>""",
             expectedNum = 1,
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]) 
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]) 
     
     []
     []
@@ -522,7 +524,7 @@ but here has type
          this.VerifyNoErrorListAtOpenProject(
             fileContents = """
                             type foo = N1.T< const "Hello World",2>""",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]) 
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]) 
     
 
     []
@@ -917,24 +919,7 @@ but here has type
         let warnList = GetErrors(project)
         Assert.AreEqual(1,warnList.Length) 
         
-//Allow the ErrorListTests run under different context
-namespace UnitTests.Tests.LanguageService.ErrorList
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[] 
-[]
-type ``MSBuild`` = 
-   inherit ErrorListTests
-   new() = { inherit ErrorListTests(VsOpts = fst (Models.MSBuild())); }
-
 // Context project system
 [] 
-[]
-type ``ProjectSystem`` = 
-    inherit ErrorListTests
-    new() = { inherit ErrorListTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
diff --git a/vsintegration/src/unittests/Tests.LanguageService.ErrorRecovery.fs b/vsintegration/src/unittests/Tests.LanguageService.ErrorRecovery.fs
index e5fbebbef5d..012eb1d4cfb 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.ErrorRecovery.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.ErrorRecovery.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.ErrorRecovery
 
 open System
 open System.IO
@@ -10,8 +10,10 @@ open Salsa.VsOpsUtils
 open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
-type ErrorRecoveryTests()  = 
+[] 
+type UsingMSBuild()  = 
     inherit LanguageServiceBaseTests()
 
     //Verify the error list containd the expected string
@@ -263,24 +265,8 @@ type ErrorRecoveryTests()  =
              ]
             )
 
-//Allow the TimeStampTests run under different context
-namespace UnitTests.Tests.LanguageService.ErrorRecovery
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[] 
-[]
-type ``MSBuild`` = 
-   inherit ErrorRecoveryTests
-   new() = { inherit ErrorRecoveryTests(VsOpts = fst (Models.MSBuild())); }
 
 // Context project system
 [] 
-[]
-type ``ProjectSystem`` = 
-    inherit ErrorRecoveryTests
-    new() = { inherit ErrorRecoveryTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
\ No newline at end of file
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
\ No newline at end of file
diff --git a/vsintegration/src/unittests/Tests.LanguageService.F1Keyword.fs b/vsintegration/src/unittests/Tests.LanguageService.F1Keyword.fs
index 5f8b03d0c21..34206094756 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.F1Keyword.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.F1Keyword.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.F1Keyword
 
 open System
 open NUnit.Framework
@@ -9,8 +9,10 @@ open Salsa.VsOpsUtils
 open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
-type F1KeywordTests() =
+[] 
+type UsingMSBuild() =
     inherit LanguageServiceBaseTests()
 
     member private this.TestF1Keywords(expectedKeywords, testLines, ?addtlRefAssy : list) =
@@ -204,7 +206,7 @@ type F1KeywordTests() =
                 Some "N1"
             ]
         this.TestF1Keywords(keywords, file, 
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     []
@@ -222,7 +224,7 @@ type F1KeywordTests() =
                 Some "N1.T"
             ]
         this.TestF1Keywords(keywords, file, 
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
 
     []
@@ -369,24 +371,8 @@ type F1KeywordTests() =
             ]
         this.TestF1Keywords(keywords, file)
 
-// Allow the F1KeywordTests run under different context
-namespace UnitTests.Tests.LanguageService.F1Keyword
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[] 
-[]
-type ``MSBuild`` = 
-   inherit F1KeywordTests
-   new() = { inherit F1KeywordTests(VsOpts = fst (Models.MSBuild())); }
 
 // Context project system
 [] 
-[]
-type ``ProjectSystem`` = 
-    inherit F1KeywordTests
-    new() = { inherit F1KeywordTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
\ No newline at end of file
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
\ No newline at end of file
diff --git a/vsintegration/src/unittests/Tests.LanguageService.General.fs b/vsintegration/src/unittests/Tests.LanguageService.General.fs
index bcb558cfc65..62d1df9c0f8 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.General.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.General.fs
@@ -1,24 +1,36 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.General
 
 open NUnit.Framework
 open System
+open System.IO
 open System.Reflection
 open System.Runtime.InteropServices
-open Microsoft.VisualStudio.FSharp.LanguageService
+open Microsoft.FSharp.Compiler
 open Microsoft.FSharp.Compiler.SourceCodeServices
+open Microsoft.VisualStudio.FSharp.LanguageService
 open Salsa.Salsa
 open Salsa
+open Salsa.VsOpsUtils
+open UnitTests.TestLib.Salsa
+open UnitTests.TestLib.Utils
+open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
 [] 
-type IdealSource() = 
+module IFSharpSource = 
+
     []
-    member public rb.MultipleSourceIsDirtyCallsChangeTimestamps() = 
+    let MultipleSourceIsDirtyCallsChangeTimestamps() = 
         let recolorizeWholeFile() = ()
         let recolorizeLine (_line:int) = ()
         let isClosed() = false
-        let source =Source.CreateDelegatingSource(recolorizeWholeFile, recolorizeLine, "dummy.fs", isClosed, VsMocks.VsFileChangeEx())
+        let depFileChangeNotify = 
+            { new IDependencyFileChangeNotify with
+                member this.DependencyFileCreated _projectSite = ()
+                member this.DependencyFileChanged _filename = () }
+        let source = Source.CreateSourceTestable(recolorizeWholeFile, recolorizeLine, (fun () -> "dummy.fs"), isClosed, VsMocks.VsFileChangeEx(),depFileChangeNotify)
         let originalChangeCount = source.ChangeCount
         let originalDirtyTime = source.DirtyTime
 
@@ -43,16 +55,8 @@ type IdealSource() =
 
 
 
-open System
-open System.IO
-open NUnit.Framework
-open Salsa.Salsa
-open Salsa.VsOpsUtils
-open UnitTests.TestLib.Salsa
-open UnitTests.TestLib.Utils
-open Microsoft.FSharp.Compiler
-open UnitTests.TestLib.LanguageService
-type GeneralTests() =
+[] 
+type UsingMSBuild() =
     inherit LanguageServiceBaseTests()
 
     let stopWatch = new System.Diagnostics.Stopwatch()
@@ -123,28 +127,28 @@ type GeneralTests() =
 
         // n-Ui1 + n-Ui2 = n-Ui2
         requests.Enqueue(makeRequest BackgroundRequestReason.FullTypeCheck)
-        requests.Enqueue(makeRequest BackgroundRequestReason.UntypedParse)
-        verify BackgroundRequestReason.UntypedParse
+        requests.Enqueue(makeRequest BackgroundRequestReason.ParseFile)
+        verify BackgroundRequestReason.ParseFile
         Assert.AreEqual(0, requests.Count)
 
         // Ui1 + n-Ui2 = Ui1 + n-Ui2
         requests.Enqueue(makeRequest BackgroundRequestReason.MemberSelect)
-        requests.Enqueue(makeRequest BackgroundRequestReason.UntypedParse)
+        requests.Enqueue(makeRequest BackgroundRequestReason.ParseFile)
         verify BackgroundRequestReason.MemberSelect
         Assert.AreEqual(1, requests.Count)
-        verify BackgroundRequestReason.UntypedParse
+        verify BackgroundRequestReason.ParseFile
         Assert.AreEqual(0, requests.Count)
 
         // (Ui1 + n-Ui2) + Ui3 = Ui3
         requests.Enqueue(makeRequest BackgroundRequestReason.MemberSelect)
-        requests.Enqueue(makeRequest BackgroundRequestReason.UntypedParse)
+        requests.Enqueue(makeRequest BackgroundRequestReason.ParseFile)
         requests.Enqueue(makeRequest BackgroundRequestReason.MemberSelect)
         verify BackgroundRequestReason.MemberSelect
         Assert.AreEqual(0, requests.Count)
 
         // (Ui1 + n-Ui2) + n-Ui3 = Ui1 + n-Ui3
         requests.Enqueue(makeRequest BackgroundRequestReason.MemberSelect)
-        requests.Enqueue(makeRequest BackgroundRequestReason.UntypedParse)
+        requests.Enqueue(makeRequest BackgroundRequestReason.ParseFile)
         requests.Enqueue(makeRequest BackgroundRequestReason.FullTypeCheck)
         verify BackgroundRequestReason.MemberSelect
         Assert.AreEqual(1, requests.Count)
@@ -155,7 +159,7 @@ type GeneralTests() =
     []
     member public this.``PublicSurfaceArea.DotNetReflection``() =
         let ps = publicTypesInAsm @"fsharp.projectsystem.fsharp.dll"
-        Assert.AreEqual(3, ps)  // TPTOP(x2) stuff and BuildPropertyDescriptor
+        Assert.AreEqual(1, ps)  // BuildPropertyDescriptor
         let ls = publicTypesInAsm @"fsharp.languageservice.dll"
         Assert.AreEqual(0, ls)
         let comp = publicTypesInAsm @"fsharp.compiler.dll"
@@ -260,7 +264,7 @@ EdmxFile
     ResolutionFolder:String
 """
         File.WriteAllText(Path.Combine(curDir, "tmp.fsx"), script)
-        let psi = System.Diagnostics.ProcessStartInfo("fsi.exe", "-r:FSharp.Data.TypeProviders.dll tmp.fsx")
+        let psi = System.Diagnostics.ProcessStartInfo(Path.Combine(curDir, "fsi.exe"), "-r:FSharp.Data.TypeProviders.dll tmp.fsx")
         psi.WorkingDirectory <- curDir
         psi.RedirectStandardOutput <- true
         psi.UseShellExecute <- false
@@ -302,7 +306,7 @@ EdmxFile
                         let filename = "test.fs"
                         let defines = [ "COMPILED"; "EDITING" ]
             
-                        SourceTokenizer(defines,filename).CreateLineTokenizer(source))
+                        FSharpSourceTokenizer(defines,filename).CreateLineTokenizer(source))
         
         let cm = Microsoft.VisualStudio.FSharp.LanguageService.TokenColor.Comment
         let kw = Microsoft.VisualStudio.FSharp.LanguageService.TokenColor.Keyword
@@ -498,16 +502,16 @@ EdmxFile
     member public this.``TokenInfo.TriggerClasses``() =      
       let important = 
         [ // Member select for dot completions
-          Parser.DOT, (TokenColorKind.Operator,TokenCharKind.Delimiter,TriggerClass.MemberSelect)
+          Parser.DOT, (FSharpTokenColorKind.Operator,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.MemberSelect)
           // for parameter info
-          Parser.LPAREN, (TokenColorKind.Text,TokenCharKind.Delimiter, TriggerClass.ParamStart ||| TriggerClass.MatchBraces)
-          Parser.COMMA,  (TokenColorKind.Text,TokenCharKind.Delimiter, TriggerClass.ParamNext)
-          Parser.RPAREN, (TokenColorKind.Text,TokenCharKind.Delimiter, TriggerClass.ParamEnd ||| TriggerClass.MatchBraces) ]
+          Parser.LPAREN, (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter, FSharpTokenTriggerClass.ParamStart ||| FSharpTokenTriggerClass.MatchBraces)
+          Parser.COMMA,  (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter, FSharpTokenTriggerClass.ParamNext)
+          Parser.RPAREN, (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter, FSharpTokenTriggerClass.ParamEnd ||| FSharpTokenTriggerClass.MatchBraces) ]
       let matching =           
         [ // Other cases where we expect MatchBraces
           Parser.LQUOTE("", false); Parser.LBRACK; Parser.LBRACE; Parser.LBRACK_BAR;
           Parser.RQUOTE("", false); Parser.RBRACK; Parser.RBRACE; Parser.BAR_RBRACK ]
-        |> List.map (fun n -> n, (TokenColorKind.Text,TokenCharKind.Delimiter, TriggerClass.MatchBraces))
+        |> List.map (fun n -> n, (FSharpTokenColorKind.Text,FSharpTokenCharKind.Delimiter, FSharpTokenTriggerClass.MatchBraces))
       for tok, expected in List.concat [ important; matching ] do
         let info = TestExpose.TokenInfo tok
         AssertEqual(expected, info)
@@ -582,24 +586,9 @@ EdmxFile
         checkBraces "['x'" "](* E_L*)" 1
         checkBraces "[<" ">]" 2
 
-//Allow the TimeStampTests run under different context
-namespace UnitTests.Tests.LanguageService.General
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[]
-[]
-type ``MSBuild`` = 
-   inherit GeneralTests
-   new() = { inherit GeneralTests(VsOpts = fst (Models.MSBuild())); }
 
 // Context project system
 []
-[]
-type ``ProjectSystem`` = 
-    inherit GeneralTests
-    new() = { inherit GeneralTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
\ No newline at end of file
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
+
diff --git a/vsintegration/src/unittests/Tests.LanguageService.GotoDefinition.fs b/vsintegration/src/unittests/Tests.LanguageService.GotoDefinition.fs
index e3aecd7e8f1..b9c0849da18 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.GotoDefinition.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.GotoDefinition.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.GotoDefinition
 
 open System
 open System.IO
@@ -12,8 +12,10 @@ open UnitTests.TestLib.Utils
 open System.Collections.Generic
 open System.Text.RegularExpressions
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
-type GotoDefinitionTests()  = 
+[]
+type UsingMSBuild()  = 
     inherit LanguageServiceBaseTests()
 
     //GoToDefinitionSuccess Helper Function
@@ -213,7 +215,7 @@ type GotoDefinitionTests()  =
                 // C01234567890 """,
             "T(*GotoValDef*)",
              "// A0(*ColumnMarker*)1234567890",            
-            System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttribute.dll"),
+            PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttribute.dll"),
             "(*ColumnMarker*)")
 
         // This test case checks the type with space in between like N.``T T`` for GotoDefinition
@@ -225,7 +227,7 @@ type GotoDefinitionTests()  =
                 // C01234567890 """,
             "T``",
             "// A0(*ColumnMarker*)1234567890",
-            System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeWithSpaceInTheType.dll"),
+            PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeWithSpaceInTheType.dll"),
             "(*ColumnMarker*)") 
         
         // Basic scenario on a provided Constructor
@@ -238,7 +240,7 @@ type GotoDefinitionTests()  =
                 // C01234567890 """,
             "T(*GotoValDef*)",
              "// A0(*ColumnMarker*)1234567890",            
-            System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttribute.dll"),
+            PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttribute.dll"),
             "(*ColumnMarker*)")
           
         // Basic scenario on a provided Method
@@ -250,7 +252,7 @@ type GotoDefinitionTests()  =
                 // C01234567890 """,
             "M(*GotoValDef*)",
              "// A0(*ColumnMarker*)1234567890",            
-            System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttribute.dll"),
+            PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttribute.dll"),
             "(*ColumnMarker*)")
         
         // Basic scenario on a provided Property
@@ -262,7 +264,7 @@ type GotoDefinitionTests()  =
                 // C01234567890 """,
             "StaticProp(*GotoValDef*)",
              "// A0(*ColumnMarker*)1234567890",            
-            System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttribute.dll"),
+            PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttribute.dll"),
             "(*ColumnMarker*)")
         
         // Basic scenario on a provided Event
@@ -275,7 +277,7 @@ type GotoDefinitionTests()  =
                 // C01234567890 """,
             "Event1(*GotoValDef*)",
              "// A0(*ColumnMarker*)1234567890",            
-            System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttribute.dll"),
+            PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttribute.dll"),
             "(*ColumnMarker*)")
         
         // Actually execute all the scenarios...      
@@ -331,7 +333,7 @@ type GotoDefinitionTests()  =
                     Assert.IsFalse(result.Success)
                     Assert.IsTrue(result.ErrorDescription.Contains("provided type 'T'"))
                     ),
-                addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
+                addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
             )
         
     []
@@ -359,7 +361,7 @@ type GotoDefinitionTests()  =
                         let expectedText = sprintf "provided member '%s'" name
                         Assert.IsTrue(result.ErrorDescription.Contains(expectedText))
                         ),
-                    addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
+                    addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
                 )
     []
     []
@@ -373,7 +375,7 @@ type GotoDefinitionTests()  =
                 // B01234567890
                 // C01234567890 """,
             marker = "T(*GotoValDef*)",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist.dll")])
 
     []
     []
@@ -388,7 +390,7 @@ type GotoDefinitionTests()  =
                 // B01234567890
                 // C01234567890 """,
             marker = "T(*GotoValDef*)",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeLineDoesnotExist.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeLineDoesnotExist.dll")])
      
     []
     []
@@ -402,7 +404,7 @@ type GotoDefinitionTests()  =
                 // B01234567890
                 // C01234567890 """,
             marker = "T(*GotoValDef*)",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist.dll")])
 
 
          
@@ -418,7 +420,7 @@ type GotoDefinitionTests()  =
                 // B01234567890
                 // C01234567890  """,
             marker = "M(*GotoValDef*)",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist.dll")])
 
     []
     []
@@ -432,7 +434,7 @@ type GotoDefinitionTests()  =
                 // B01234567890
                 // C01234567890 """,
             marker = "StaticProp(*GotoValDef*)",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist.dll")])
     
     []
     []
@@ -447,7 +449,7 @@ type GotoDefinitionTests()  =
                 // B01234567890
                 // C01234567890 """,
             marker = "Event1(*GotoValDef*)",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DefinitionLocationAttributeFileDoesnotExist.dll")])
 
     []
     member public this.``ModuleDefintion``() =
@@ -558,12 +560,12 @@ type GotoDefinitionTests()  =
     []
     member this.``GotoDefinition.OverloadResolutionForProperties``() =
         let lines = [ "type D() ="
-                      "  member this.Foo"
-                      "    with #1##2#get(i:int) = 1"
+                      "  member this.#1##2#Foo"
+                      "    with get(i:int) = 1"
                       "    and set (i:int) v = ()"
                       ""
-                      "  member this.Foo"
-                      "    with #3##4#get (s:string) = 1"
+                      "  member this.#3##4#Foo"
+                      "    with get (s:string) = 1"
                       "    and  set (s:string) v = ()"
                       ""
                       "D().$1$Foo 1"
@@ -1060,12 +1062,12 @@ type GotoDefinitionTests()  =
     /// let a = () in let id (x : '$a) : 'a = x
     []
     member public this.``GotoDefinition.Simple.Polymorph.Leftmost`` () =
-      this.GotoDefinitionTestWithSimpleFile "a) (*loc-33*)" None
+      this.GotoDefinitionTestWithSimpleFile "a) (*loc-33*)" (Some("let id (x : 'a) (*loc-33*)", "'a"))
 
     /// let a = () in let id (x : 'a) : '$a = x
     []
     member public this.``GotoDefinition.Simple.Polymorph.NotLeftmost`` () =
-      this.GotoDefinitionTestWithSimpleFile "a = x (*loc-34*)" None
+      this.GotoDefinitionTestWithSimpleFile "a = x (*loc-34*)" (Some("let id (x : 'a) (*loc-33*)", "'a"))
 
     /// let foo = () in let f (_ as $foo) = foo in ()
     []
@@ -1448,24 +1450,7 @@ type GotoDefinitionTests()  =
         this.VerifyGoToDefnNoErrorDialogAtStartOfMarker(fileContents,"A(*Marker*)", "type A = ampere")
 
 
-// Allow languageService tests to run under different contextes
-namespace UnitTests.Tests.LanguageService.GotoDefinition
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[] 
-[]
-type ``MSBuild`` = 
-   inherit GotoDefinitionTests
-   new() = { inherit GotoDefinitionTests(VsOpts = fst (Models.MSBuild())); }
-
 // Context project system
 []
-[]
-type ``ProjectSystem`` = 
-    inherit GotoDefinitionTests
-    new() = { inherit GotoDefinitionTests(VsOpts = LanguageServiceExtension.ProjectSystem); }  
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
diff --git a/vsintegration/src/unittests/Tests.LanguageService.IncrementalBuild.fs b/vsintegration/src/unittests/Tests.LanguageService.IncrementalBuild.fs
index ed85fa340f1..29c01ec9ddb 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.IncrementalBuild.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.IncrementalBuild.fs
@@ -1,17 +1,22 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService
 
 open System
 open System.IO
 open NUnit.Framework
+#if NUNIT_V2
+#else
+open NUnit.Framework.Constraints
+#endif
 open Salsa.Salsa
 open Salsa.VsOpsUtils               
 open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.SourceCodeServices
+open Microsoft.FSharp.Compiler.IncrementalBuild
 open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-open IncrementalBuild
-    
-/// Useful methods that someday might go into IncrementalBuild
+
+// Useful methods that someday might go into IncrementalBuild
 module internal Vector = 
     /// Convert from vector to a scalar
     let ToScalar<'I> (taskname:string) (input:Vector<'I>) : Scalar<'I array> =
@@ -57,32 +62,33 @@ type IncrementalBuild() =
         let Map filename = 
             "map:"+filename
 
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let input = InputVector "InputVector"
         let stamped = Vector.Stamp "Stamp" StampFile input
         let mapped = Vector.Map "Map" Map stamped
-        build.DeclareVectorOutput("Mapped", mapped)
-        let build = build.GetInitialPartialBuild(["InputVector",1,[box path]],[])
+        buildDesc.DeclareVectorOutput mapped
+        let inputs = [ BuildInput.VectorInput(input, [path]) ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
 
-        let DoCertainStep build = 
-            match IncrementalBuild.Step "Mapped" build with
-            | Some(build) -> build
+        let DoCertainStep bound = 
+            match IncrementalBuild.Step (Target(mapped,None)) bound with
+            | Some bound -> bound
             | None -> failwith "Expected to be able to step"
 
         // While updateStamp is true we should be able to step as continuously
-        // because there will always be more to build.
-        let mutable build = build
+        // because there will always be more to bound.
+        let mutable bound = bound
         for i in 0..5 do 
             printfn "Iteration %d" i
-            build <- DoCertainStep build
+            bound <- DoCertainStep bound
             System.Threading.Thread.Sleep 2000
 
         // Now, turn off updateStamp and the build should just finish.
         updateStamp:=false
-        build <- DoCertainStep build
-        build <- DoCertainStep build
-        match IncrementalBuild.Step "Mapped" build with
-        | Some(build) -> failwith "Build should have stopped"
+        bound <- DoCertainStep bound
+        bound <- DoCertainStep bound
+        match IncrementalBuild.Step (Target (mapped, None)) bound with
+        | Some bound -> failwith "Build should have stopped"
         | None -> () 
 
             
@@ -98,33 +104,36 @@ type IncrementalBuild() =
         let StampFile(filename) = 
             !stampAs
                             
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let input = InputVector "InputVector"
         let acc = InputScalar "Accumulator"
         let stamped = Vector.Stamp "Stamp" StampFile input
         let scanned = Vector.ScanLeft "Scan" Scan acc stamped
-        build.DeclareVectorOutput("Scanned", scanned)
-        let build = build.GetInitialPartialBuild(["InputVector",3,[box "File1.fs";box "File2.fs";box "File3.fs"]],["Accumulator",box "AccVal"])
+        buildDesc.DeclareVectorOutput scanned
+        let inputs = 
+            [ BuildInput.VectorInput(input, ["File1.fs"; "File2.fs"; "File3.fs"]) 
+              BuildInput.ScalarInput(acc, "AccVal") ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
             
         printf "-[Step1]----------------------------------------------------------------------------------------\n"
         // Evaluate the first time.
-        let build = Eval "Scanned" build
-        let r = GetVectorResult("Scanned",build)
+        let bound = Eval scanned bound
+        let r = GetVectorResult (scanned, bound)
         Assert.AreEqual("AccVal-File1.fs-Suffix1-File2.fs-Suffix1",r.[1])
             
         printf "-[Step2]----------------------------------------------------------------------------------------\n"
         // Evaluate the second time. No change should be seen.
         mapSuffix:="Suffix2"
-        let build = Eval "Scanned" build
-        let r = GetVectorResult("Scanned",build)
+        let bound = Eval scanned bound
+        let r = GetVectorResult (scanned,bound)
         Assert.AreEqual("AccVal-File1.fs-Suffix1-File2.fs-Suffix1",r.[1])
 
         printf "-[Step3]----------------------------------------------------------------------------------------\n"
         // Evaluate a third time with timestamps updated. Should cause a rebuild
         System.Threading.Thread.Sleep 10 // Sleep a little to avoid grabbing the same 'Now'
         stampAs:=DateTime.Now
-        let build = Eval "Scanned" build
-        let r = GetVectorResult("Scanned",build)
+        let bound = Eval scanned bound
+        let r = GetVectorResult (scanned,bound)
         Assert.AreEqual("AccVal-File1.fs-Suffix2-File2.fs-Suffix2",r.[1])
              
             
@@ -132,35 +141,36 @@ type IncrementalBuild() =
     []
     member public rb.aaZeroElementVector() = // Starts with 'aa' to put it at the front.
         let stamp = ref DateTime.Now
-        let Mult(i:int) : string array = Array.create i ""
         let Stamp(s:string) = !stamp
         let Map(s:string) = s
         let Demult(a:string array) : int = a.Length
             
-        let build = new BuildDescriptionScope()
-        let input = InputScalar "InputScalar"
-        let multiplexed = Scalar.Multiplex "Mult" Mult input
-        let stamped = Vector.Stamp "Stamp" Stamp multiplexed
+        let buildDesc = new BuildDescriptionScope()
+        let inputVector = InputVector "InputVector"
+        let stamped = Vector.Stamp "Stamp" Stamp inputVector
         let mapped = Vector.Map "Map" Map stamped
-        let demultiplexed = Vector.Demultiplex "Demult" Demult mapped
-        build.DeclareVectorOutput("Multiplexed", multiplexed)
-        build.DeclareVectorOutput("Stamped", stamped)
-        build.DeclareVectorOutput("Mapped", mapped)
-        build.DeclareScalarOutput("Result", demultiplexed)
+        let result = Vector.Demultiplex "Demult" Demult mapped
+        buildDesc.DeclareVectorOutput stamped
+        buildDesc.DeclareVectorOutput mapped
+        buildDesc.DeclareScalarOutput result
             
         // Try first with one input
-        let build1 = build.GetInitialPartialBuild([],["InputScalar", box 1])    
-        let build1Evaled = Eval "Result" build1
-        let r1 = GetScalarResult("Result",build1Evaled)
+        let inputs1 = [ BuildInput.VectorInput(inputVector, [""]) ]
+        let build1 = buildDesc.GetInitialPartialBuild inputs1
+
+        let build1Evaled = Eval result build1
+        let r1 = GetScalarResult (result, build1Evaled)
         match r1 with
         | Some(v,dt) -> Assert.AreEqual(1,v) 
         | None -> failwith "Expected the value 1 to be returned."
             
         // Now with zero. This was the original bug.
         stamp := DateTime.Now
-        let build0 = build.GetInitialPartialBuild([],["InputScalar", box 0])            
-        let build0Evaled = Eval "Result" build0
-        let r0 = GetScalarResult("Result",build0Evaled)
+        let inputs0 = [ BuildInput.VectorInput(inputVector, []) ]
+        let build0 = buildDesc.GetInitialPartialBuild inputs0
+
+        let build0Evaled = Eval result build0
+        let r0 = GetScalarResult (result, build0Evaled)
         match r0 with
         | Some(v,dt) -> Assert.AreEqual(0,v) 
         | None -> failwith "Expected the value 0 to be returned."  
@@ -172,31 +182,31 @@ type IncrementalBuild() =
     member public rb.MultiplexTransitionUp() =
         let elements = ref 1
         let timestamp = ref System.DateTime.Now
-        let Mult(s:string) : string array =  [| for i in 1..!elements -> sprintf "Element %d" i |]
+        let Input() : string array =  [| for i in 1..!elements -> sprintf "Element %d" i |]
         let Stamp(s) = !timestamp
         let Map(s:string) = sprintf "Mapped %s " s
-        let Demult(a:string array) : string = "Demult"
-        let Result(a:string array) : string = String.Join(",", a)
+        let Result(a:string[]) : string = String.Join(",", a)
         let now = System.DateTime.Now
         let FixedTimestamp _  =  now
             
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let input = InputVector "InputVector"
         let stampedInput = Vector.Stamp "StampInput" Stamp input
-        let demultiplexedInput = Vector.Demultiplex "DemultInput" Demult stampedInput
-        let multiplexed = Scalar.Multiplex "Mult" Mult demultiplexedInput
-        let mapped = Vector.Map "Map" Map multiplexed
+        //let demultiplexedInput = Vector.Demultiplex "DemultInput" Demult stampedInput
+        //let multiplexed = Scalar.Multiplex "Mult" Mult demultiplexedInput
+        let mapped = Vector.Map "Map" Map stampedInput
         let mapped = Vector.Stamp "FixedTime" FixedTimestamp mapped // Change in vector size should x-ray through even if timestamps haven't changed in remaining items.
-        let demultiplexed = Vector.Demultiplex "DemultResult" Result mapped
-        build.DeclareScalarOutput("Result", demultiplexed)
+        let result = Vector.Demultiplex "DemultResult" Result mapped
+        buildDesc.DeclareScalarOutput result
             
         // Create the build.
-        let build = build.GetInitialPartialBuild(["InputVector",1,[box "Input 0"]],[])         
+        let inputs = [ BuildInput.VectorInput(input, ["Input 0"]) ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
             
         // Evaluate it with value 1
         elements := 1
-        let build = Eval "Result" build
-        let r1 = GetScalarResult("Result", build)
+        let bound = Eval result bound
+        let r1 = GetScalarResult(result, bound)
         match r1 with
         | Some(s,dt) -> printfn "%s" s
         | None -> failwith ""
@@ -206,14 +216,13 @@ type IncrementalBuild() =
         System.Threading.Thread.Sleep(100)
         timestamp := System.DateTime.Now
             
-            
-            
-        let build = Eval "Result" build
-        let r2 = GetScalarResult("Result", build)
+        let bound = Eval result bound
+        let r2 = GetScalarResult (result, bound)
         match r2 with
-        | Some(s,dt) -> Assert.AreEqual("Mapped Element 1 ,Mapped Element 2 ",s)
+        | Some(s,dt) -> Assert.AreEqual("Mapped Input 0 ",s)
         | None -> failwith ""
             
+    (*
     /// Here, we want a multiplex to decrease the number of items processed.
     []
     member public rb.MultiplexTransitionDown() =
@@ -236,27 +245,27 @@ type IncrementalBuild() =
             printfn "Fixing timestamp"
             now               
             
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let input = InputVector "InputVector"
         let stampedInput = Vector.Stamp "StampInput" Stamp input
         let demultiplexedInput = Vector.Demultiplex "DemultInput" Demult stampedInput
         let multiplexed = Scalar.Multiplex "Mult" Mult demultiplexedInput
         let mapped = Vector.Map "Map" Map multiplexed
         let fixedmapped = Vector.Stamp "FixedTime" FixedTimestamp mapped // Change in vector size should x-ray through even if timestamps haven't changed in remaining items.
-        let demultiplexed = Vector.Demultiplex "DemultResult" Result fixedmapped
+        let result = Vector.Demultiplex "DemultResult" Result fixedmapped
             
-        build.DeclareScalarOutput("DemultiplexedInput", demultiplexedInput)
-        build.DeclareVectorOutput("Mapped", mapped)
-        build.DeclareVectorOutput("FixedMapped", fixedmapped)            
-        build.DeclareScalarOutput("Result", demultiplexed)
+        buildDesc.DeclareScalarOutput demultiplexedInput
+        buildDesc.DeclareVectorOutput mapped
+        buildDesc.DeclareVectorOutput fixedmapped
+        buildDesc.DeclareScalarOutput result
             
         // Create the build.
-        let build = build.GetInitialPartialBuild(["InputVector",1,[box "Input 0"]],[])         
+        let bound = buildDesc.GetInitialPartialBuild(["InputVector",1,[box "Input 0"]],[])         
             
         // Evaluate it with value 2
         elements := 2
-        let build = Eval "Result" build
-        let r1 = GetScalarResult("Result", build)
+        let bound = Eval result bound
+        let r1 = GetScalarResult(result, bound)
         match r1 with
         | Some(s,dt) -> printfn "%s" s
         | None -> failwith ""
@@ -266,29 +275,30 @@ type IncrementalBuild() =
         System.Threading.Thread.Sleep(100)
         timestamp := System.DateTime.Now
             
-        let buildDemuxed = Eval "DemultiplexedInput" build
-        let rdm = GetScalarResult("DemultiplexedInput",buildDemuxed)
+        let buildDemuxed = Eval demultiplexedInput bound
+        let rdm = GetScalarResult (demultiplexedInput,buildDemuxed)
         match rdm with
         | Some(s,dt)->Assert.AreEqual("Demult Input 0", s)
         | None -> failwith "unexpected"
             
-        let buildMapped = Eval "Mapped" build
-        let mp = GetVectorResult("Mapped",buildMapped)
+        let buildMapped = Eval mapped bound
+        let mp = GetVectorResult (mapped,buildMapped)
         Assert.AreEqual(1,mp.Length)
         let melem = mp.[0]
         Assert.AreEqual("Mapped Element 1 ", melem)
             
-        let buildFixedMapped = Eval "FixedMapped" buildMapped
-        let mp = GetVectorResult("FixedMapped",buildFixedMapped)
+        let buildFixedMapped = Eval fixedmapped buildMapped
+        let mp = GetVectorResult (fixedmapped,buildFixedMapped)
         Assert.AreEqual(1,mp.Length)
         let melem = mp.[0]
         Assert.AreEqual("Mapped Element 1 ", melem)            
             
-        let build = Eval "Result" build
-        let r2 = GetScalarResult("Result", build)
+        let bound = Eval result bound
+        let r2 = GetScalarResult(result, bound)
         match r2 with
         | Some(s,dt) -> Assert.AreEqual("Mapped Element 1 ",s)
         | None -> failwith "unexpected"
+         *)
             
     /// Test that stamp works
     []
@@ -302,24 +312,25 @@ type IncrementalBuild() =
         let StampFile(filename) =  
             !stampAs
                             
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let input = InputVector "InputVector"
         let stamped = Vector.Stamp "Stamp" StampFile input
         let mapped = Vector.Map "Map" MapIt stamped
-        build.DeclareVectorOutput("Mapped", mapped)
-        let build = build.GetInitialPartialBuild(["InputVector",3,[box "File1.fs";box "File2.fs";box "File3.fs"]],[])
+        buildDesc.DeclareVectorOutput mapped
+        let inputs = [ BuildInput.VectorInput(input, ["File1.fs";"File2.fs";"File3.fs"]) ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
             
         printf "-[Step1]----------------------------------------------------------------------------------------\n"
         // Evaluate the first time.
-        let build = Eval "Mapped" build
-        let r = GetVectorResult("Mapped",build)
+        let bound = Eval mapped bound
+        let r = GetVectorResult (mapped,bound)
         Assert.AreEqual("File2.fs.Suffix1",r.[1])
             
         printf "-[Step2]----------------------------------------------------------------------------------------\n"
         // Evaluate the second time. No change should be seen.
         mapSuffix:="Suffix2"
-        let build = Eval "Mapped" build
-        let r = GetVectorResult("Mapped",build)
+        let bound = Eval mapped bound
+        let r = GetVectorResult (mapped,bound)
         Assert.AreEqual("File2.fs.Suffix1",r.[1])
 
         printf "-[Step3]----------------------------------------------------------------------------------------\n"
@@ -327,8 +338,8 @@ type IncrementalBuild() =
         while !stampAs = DateTime.Now do 
             System.Threading.Thread.Sleep 10 // Sleep a little to avoid grabbing the same 'Now'
         stampAs:=DateTime.Now
-        let build = Eval "Mapped" build
-        let r = GetVectorResult("Mapped",build)
+        let bound = Eval mapped bound
+        let r = GetVectorResult (mapped,bound)
         Assert.AreEqual("File2.fs.Suffix2",r.[1])
             
     /// Test that stamp works
@@ -343,24 +354,25 @@ type IncrementalBuild() =
         let StampFile(filename) = 
             !stampAs
                             
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let input = InputVector "InputVector"
         let stamped = Vector.Stamp "Stamp" StampFile input
         let joined = Vector.Demultiplex "Demultiplex" Join stamped
-        build.DeclareScalarOutput("Joined", joined)
-        let build = build.GetInitialPartialBuild(["InputVector",3,[box "File1.fs";box "File2.fs";box "File3.fs"]],[])
+        buildDesc.DeclareScalarOutput joined
+        let inputs = [ BuildInput.VectorInput(input, ["File1.fs";"File2.fs";"File3.fs"]) ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
             
         printf "-[Step1]----------------------------------------------------------------------------------------\n"
         // Evaluate the first time.
-        let build = Eval "Joined" build
-        let (r,_) = Option.get (GetScalarResult("Joined",build))
+        let bound = Eval joined bound
+        let (r,_) = Option.get (GetScalarResult(joined,bound))
         Assert.AreEqual("Join1",r)
             
         printf "-[Step2]----------------------------------------------------------------------------------------\n"
         // Evaluate the second time. No change should be seen.
         joinedResult:="Join2"
-        let build = Eval "Joined" build
-        let (r,_) = Option.get (GetScalarResult("Joined",build))
+        let bound = Eval joined bound
+        let (r,_) = Option.get (GetScalarResult (joined,bound))
         Assert.AreEqual("Join1",r)
 
         printf "-[Step3]----------------------------------------------------------------------------------------\n"
@@ -368,8 +380,8 @@ type IncrementalBuild() =
         while !stampAs = DateTime.Now do 
             System.Threading.Thread.Sleep 10 // Sleep a little to avoid grabbing the same 'Now'
         stampAs:=DateTime.Now
-        let build = Eval "Joined" build
-        let (r,_) = Option.get (GetScalarResult("Joined",build))
+        let bound = Eval joined bound
+        let (r,_) = Option.get (GetScalarResult (joined,bound))
         Assert.AreEqual("Join2",r)
             
 
@@ -378,62 +390,71 @@ type IncrementalBuild() =
     member public rb.DemultiplexScanLeft() =
         let Size(ar:_[]) = ar.Length
         let Scan acc (file :string) = eventually { return acc + file.Length }
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let inVector = InputVector "InputVector"
         let vectorSize = Vector.Demultiplex "Demultiplex" Size inVector
         let scanned = Vector.ScanLeft "Scan" Scan vectorSize inVector
-        build.DeclareScalarOutput("Size", vectorSize)
-        build.DeclareVectorOutput("Scanned", scanned)
-        let build = build.GetInitialPartialBuild(["InputVector",3,[box "File1.fs";box "File2.fs";box "File3.fs"]],[])
+        buildDesc.DeclareScalarOutput vectorSize
+        buildDesc.DeclareVectorOutput scanned
+        let inputs = [ BuildInput.VectorInput(inVector, ["File1.fs";"File2.fs";"File3.fs"]) ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
             
-        let e = Eval "Scanned" build   
-        let r = GetScalarResult("Size",e)  
+        let e = Eval scanned bound   
+        let r = GetScalarResult (vectorSize,e)  
         match r with 
-        | Some(r,_)->Assert.AreEqual(3,r)
+        | Some(r,_) -> Assert.AreEqual(3,r)
         | None -> Assert.Fail("No size was returned")       
             
             
+    (*
     /// Test that Scalar.Multiplex works.
     [] 
     member public rb.ScalarMultiplex() =
         let MultiplexScalar inp = [|inp+":1";inp+":2";inp+":3"|]
         
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let inScalar = InputScalar "Scalar"
-        let multiplexed = Scalar.Multiplex "MultiplexScalar" MultiplexScalar inScalar
-        build.DeclareVectorOutput("Output", multiplexed)
+        let result = Scalar.Multiplex "MultiplexScalar" MultiplexScalar inScalar
+        buildDesc.DeclareVectorOutput result 
             
-        let b = build.GetInitialPartialBuild([],["Scalar",box "A Scalar Value"])
-        let e = Eval "Output" b
-        let r = GetVectorResult("Output",e)
+        let b = buildDesc.GetInitialPartialBuild([],["Scalar",box "A Scalar Value"])
+        let e = Eval result  b
+        let r = GetVectorResult(result,e)
         Assert.AreEqual("A Scalar Value:2", r.[1])
+    
             
     /// Test that Scalar.Map works.
     [] 
     member public rb.ScalarMap() =
         let MapScalar inp = "out:"+inp
         
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let inScalar = InputScalar "Scalar"
-        let mappedScalar = Scalar.Map "MapScalar" MapScalar inScalar
-        build.DeclareScalarOutput("Output", mappedScalar)
+        let result  = Scalar.Map "MapScalar" MapScalar inScalar
+        buildDesc.DeclareScalarOutput  result 
             
-        let b = build.GetInitialPartialBuild([],["Scalar",box "A Scalar Value"])
-        let e = Eval "Output" b
-        let r = GetScalarResult("Output",e)
+        let inputs = [ BuildInput.ScalarInput(inScalar, "A Scalar Value") ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
+
+        let b = buildDesc.GetInitialPartialBuild([],["Scalar",box "A Scalar Value"])
+        let e = Eval result bound
+        let r = GetScalarResult(result,e)
         match r with 
             | Some(r,_) -> Assert.AreEqual("out:A Scalar Value", r)
             | None -> Assert.Fail()                 
-    
+    *)
+
     /// Test that a simple scalar action works.
     [] 
     member public rb.Scalar() =
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let inScalar = InputScalar "Scalar"
-        build.DeclareScalarOutput("Output", inScalar)
-        let b = build.GetInitialPartialBuild([],["Scalar",box "A Scalar Value"])
-        let e = Eval "Output" b
-        let r = GetScalarResult("Output",e)
+        buildDesc.DeclareScalarOutput  inScalar
+        let inputs = [ BuildInput.ScalarInput(inScalar, "A Scalar Value") ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
+
+        let e = Eval inScalar bound
+        let r = GetScalarResult(inScalar,e)
         match r with 
             | Some(r,_) -> Assert.AreEqual("A Scalar Value", r)
             | None -> Assert.Fail()
@@ -444,15 +465,19 @@ type IncrementalBuild() =
         let DoIt (a:int*string) (b:string) =
             eventually { return ((fst a)+1,b) }
             
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let inScalar = InputScalar "InputScalar"
         let inVector = InputVector "InputVector"
-        let scanned = Vector.ScanLeft "DoIt" DoIt inScalar inVector
-        build.DeclareVectorOutput("Output", scanned)
+        let result = Vector.ScanLeft "DoIt" DoIt inScalar inVector
+        buildDesc.DeclareVectorOutput result
             
-        let build = build.GetInitialPartialBuild(["InputVector",3,[box "File1.fs";box "File2.fs";box "File3.fs"]],["InputScalar",box (5,"")])
-        let e = Eval "Output" build
-        let r = GetVectorResult("Output",e)
+        let inputs = 
+            [ BuildInput.VectorInput(inVector, ["File1.fs";"File2.fs";"File3.fs"]);
+              BuildInput.ScalarInput(inScalar, (5,"")) ]
+
+        let bound = buildDesc.GetInitialPartialBuild(inputs)
+        let e = Eval result bound
+        let r = GetVectorResult(result,e)
         if [| (6,"File1.fs"); (7,"File2.fs"); (8, "File3.fs") |] <> r then 
             printfn "Got %A" r
             Assert.Fail()
@@ -461,13 +486,15 @@ type IncrementalBuild() =
     /// Convert a vector to a scalar
     []
     member public rb.ToScalar() =
-        let build = new BuildDescriptionScope()
+        let buildDesc = new BuildDescriptionScope()
         let inVector = InputVector "InputVector"
-        let asScalar = Vector.ToScalar "ToScalar" inVector
-        build.DeclareScalarOutput("Output", asScalar)
-        let build = build.GetInitialPartialBuild(["InputVector",3,[box "File1.fs";box "File2.fs";box "File3.fs"]],[])
-        let e = Eval "Output" build
-        let r = GetScalarResult("Output",e)
+        let result = Vector.ToScalar "ToScalar" inVector
+        buildDesc.DeclareScalarOutput result 
+        let inputs = [ BuildInput.VectorInput(inVector, ["File1.fs";"File2.fs";"File3.fs"]) ]
+        let bound = buildDesc.GetInitialPartialBuild(inputs)
+
+        let e = Eval result bound
+        let r = GetScalarResult (result, e)
         match r with 
         | Some(r,ts)->
             if "File3.fs"<>(r.[2]) then
@@ -481,58 +508,66 @@ type IncrementalBuild() =
     /// that were new at the time: Scalars, Invalidation, Disposal
     []
     member public rb.AssemblyReferenceModel() =
-        let Parse(filename) = sprintf "Parse(%s)" filename
+        let ParseTask(filename) = sprintf "Parse(%s)" filename
+        let now = System.DateTime.Now
+        let StampFileNameTask filename = now 
+        let TimestampReferencedAssemblyTask reference = now
         let ApplyMetaCommands(parseResults:string[]) = "tcConfig-of("+String.Join(",",parseResults)+")"
         let GetReferencedAssemblyNames(tcConfig) = [|"Assembly1.dll";"Assembly2.dll";"Assembly3.dll"|]
         let ReadAssembly(assemblyName) = sprintf "tcImport-of(%s)" assemblyName
-        let CombineImports(imports) = "tcAcc"
-        let TypeCheck tcAcc parseResults = eventually { return tcAcc }
+        let CombineImportedAssembliesTask(imports) = "tcAcc"
+        let TypeCheckTask tcAcc parseResults = eventually { return tcAcc }
+        let FinalizeTypeCheckTask results = "finalized"
 
         // Build rules.
-        let build = new BuildDescriptionScope()
-        let filenames = InputVector "Filenames"
-        let parseTrees = Vector.Map "Parse" Parse filenames
-        let parseTreesAsScalar = Vector.ToScalar "ScalarizeParseTrees" parseTrees
-        let tcConfig = Scalar.Map "ApplyMetaCommands" ApplyMetaCommands parseTreesAsScalar
-        let referencedAssemblyNames = Scalar.Multiplex "GetReferencedAssemblyNames" GetReferencedAssemblyNames tcConfig
-        let readAssemblies = Vector.Map "ReadAssembly" ReadAssembly referencedAssemblyNames
-        let tcAcc = Vector.Demultiplex "CombineImports" CombineImports readAssemblies
-        let tcResults = Vector.ScanLeft "TypeCheck" TypeCheck tcAcc parseTrees
-        build.DeclareVectorOutput("TypeCheckingStates",tcResults)
-            
-        let build = build.GetInitialPartialBuild(["Filenames",3,[box "File1.fs";box "File2.fs";box "File3.fs"]],[])
-        let e = Eval "TypeCheckingStates" build
-        let r = GetVectorResult("TypeCheckingStates",e)
+        let buildDesc = new BuildDescriptionScope()
+        
+        // Inputs
+        let fileNamesNode = InputVector "Filenames"
+        let referencedAssembliesNode = InputVector "ReferencedAssemblies"
+        
+        //Build
+        let stampedFileNamesNode        = Vector.Stamp "SourceFileTimeStamps" StampFileNameTask fileNamesNode
+        let parseTreesNode              = Vector.Map "ParseTrees" ParseTask stampedFileNamesNode
+        let stampedReferencedAssembliesNode = Vector.Stamp "TimestampReferencedAssembly" TimestampReferencedAssemblyTask referencedAssembliesNode
+
+        let initialTcAccNode            = Vector.Demultiplex "CombineImportedAssemblies" CombineImportedAssembliesTask stampedReferencedAssembliesNode
+
+        let tcStatesNode                = Vector.ScanLeft "TypeCheckingStates" TypeCheckTask initialTcAccNode parseTreesNode
+
+        let finalizedTypeCheckNode      = Vector.Demultiplex "FinalizeTypeCheck" FinalizeTypeCheckTask tcStatesNode
+        let buildDesc            = new BuildDescriptionScope ()
+
+        do buildDesc.DeclareVectorOutput stampedFileNamesNode
+        do buildDesc.DeclareVectorOutput stampedReferencedAssembliesNode
+        do buildDesc.DeclareVectorOutput parseTreesNode
+        do buildDesc.DeclareVectorOutput tcStatesNode
+        do buildDesc.DeclareScalarOutput initialTcAccNode
+        do buildDesc.DeclareScalarOutput finalizedTypeCheckNode
+
+        let inputs = 
+            [ BuildInput.VectorInput(fileNamesNode, ["File1.fs";"File2.fs";"File3.fs"]);
+              BuildInput.VectorInput(referencedAssembliesNode, [("lib1.dll", now);("lib2.dll", now)]) ]
+        let bound = buildDesc.GetInitialPartialBuild(inputs)
+        let e = Eval finalizedTypeCheckNode bound
+        let r = GetScalarResult(finalizedTypeCheckNode,e)
             
         ()
-        
-    [)>]
-    member public rb.DuplicateExpressionNamesNotAllowed() =
-            let DoIt s = s
-            let b = 
-                let build = new BuildDescriptionScope()
-                let i = InputVector "Input"
-                let r = Vector.Map "Input" DoIt i
-                build.DeclareVectorOutput("Output",r)
-                build.GetInitialPartialBuild(["Input",1,[box ""]],[])
-                            
-            let e = Eval "Output" b
-            ()               
 
     []
     member public rb.OneToOneWorks() =
         let VectorModify (input:int) : string =
             sprintf "Transformation of %d" input
 
-        let bound = 
-            let build = new BuildDescriptionScope()
-            let inputs = InputVector "Inputs"
-            let outputs = Vector.Map "Modify" VectorModify inputs
-            build.DeclareVectorOutput("Outputs",outputs)
-            build.GetInitialPartialBuild(["Inputs",4,[box 1;box 2;box 3;box 4]],[])
+        let buildDesc = new BuildDescriptionScope()
+        let inputs = InputVector "Inputs"
+        let outputs = Vector.Map "Modify" VectorModify inputs
+        buildDesc.DeclareVectorOutput outputs
+        let inputs = [ BuildInput.VectorInput(inputs, [1;2;3;4]) ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
 
-        let evaled = bound |> Eval "Outputs" 
-        let outputs = GetVectorResult("Outputs",evaled)
+        let evaled = Eval outputs bound
+        let outputs = GetVectorResult(outputs,evaled)
         Assert.AreEqual("Transformation of 4", outputs.[3])
         ()   
             
@@ -543,21 +578,21 @@ type IncrementalBuild() =
         let VectorModify (input:int) : string =
             sprintf "Transformation of %d" input
 
-        let bound = 
-            let build = new BuildDescriptionScope()
-            let inputs = InputVector "Inputs"
-            let outputs = Vector.Map "Modify" VectorModify inputs
-            build.DeclareVectorOutput("Inputs1", inputs)
-            build.DeclareVectorOutput("Inputs2", inputs)
-            build.DeclareVectorOutput("Inputs3", inputs)
-            build.DeclareVectorOutput("Outputs", outputs)
-            build.DeclareVectorOutput("Inputs4", inputs)
-            build.DeclareVectorOutput("Inputs5", inputs)
-            build.DeclareVectorOutput("Inputs6", inputs)
-            build.GetInitialPartialBuild(["Inputs",4,[box 1;box 2;box 3;box 4]],[])
-
-        let evaled = bound |> Eval "Outputs" 
-        let outputs = GetVectorResult("Outputs",evaled)
+        let buildDesc = new BuildDescriptionScope()
+        let inputs = InputVector "Inputs"
+        let outputs = Vector.Map "Modify" VectorModify inputs
+        buildDesc.DeclareVectorOutput inputs
+        buildDesc.DeclareVectorOutput inputs
+        buildDesc.DeclareVectorOutput inputs
+        buildDesc.DeclareVectorOutput outputs
+        buildDesc.DeclareVectorOutput inputs
+        buildDesc.DeclareVectorOutput inputs
+        buildDesc.DeclareVectorOutput inputs
+        let inputs = [ BuildInput.VectorInput(inputs, [1;2;3;4]) ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
+
+        let evaled = Eval outputs bound
+        let outputs = GetVectorResult(outputs,evaled)
         Assert.AreEqual("Transformation of 4", outputs.[3])
         ()               
             
@@ -567,14 +602,14 @@ type IncrementalBuild() =
         let VectorModify (input:int) : string =
             sprintf "Transformation of %d" input
 
-        let bound = 
-            let build = new BuildDescriptionScope()
-            let inputs = InputVector "Inputs"
-            let outputs = Vector.Map "Modify" VectorModify inputs
-            build.DeclareVectorOutput("Outputs", outputs)
-            build.GetInitialPartialBuild(["Inputs",0,[]],[])
+        let buildDesc = new BuildDescriptionScope()
+        let inputs = InputVector "Inputs"
+        let outputs = Vector.Map "Modify" VectorModify inputs
+        buildDesc.DeclareVectorOutput outputs
+        let inputs = [ BuildInput.VectorInput(inputs, []) ]
+        let bound = buildDesc.GetInitialPartialBuild inputs
 
-        let evaled = bound |> Eval "Outputs" 
-        let outputs = GetVectorResult("Outputs",evaled)
+        let evaled = Eval outputs  bound
+        let outputs = GetVectorResult(outputs,evaled)
         ()               
               
diff --git a/vsintegration/src/unittests/Tests.LanguageService.NavigationBar.fs b/vsintegration/src/unittests/Tests.LanguageService.NavigationBar.fs
index f58510d00ae..7c4c7ae20a5 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.NavigationBar.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.NavigationBar.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.NavigationBar
 
 open System
 open NUnit.Framework
@@ -9,64 +9,15 @@ open Salsa.VsOpsUtils
 open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
-type NavigationBarTests() =
+[]
+type UsingMSBuild() =
     inherit LanguageServiceBaseTests()
 
-    (* Unit tests for collapse region & navigation bar ------------------------------------- *)
-    
-    member private this.TestNavigationBar (file : string list) findDecl expectedMembers =
-        
-        let (_, _, file) = this.CreateSingleFileProject(file)
-
-        // Verify that the types&modules list contains 'findDecl'
-        let navigation = GetNavigationContentAtCursor(file)
-        AssertNavigationContains(navigation.TypesAndModules, findDecl)
-        let idxDecl = navigation.TypesAndModules |> Array.findIndex (fun nav -> nav.Label = findDecl)
-        let decl = navigation.TypesAndModules.[idxDecl]
-        
-        // Navigate to the definition and get the contents again
-        MoveCursorTo(file, decl.Span.iStartLine + 1, decl.Span.iStartIndex) // line index is in the 0-based form
-        let navigation = GetNavigationContentAtCursor(file)
-        // Ensure that the right thing is selected in the dropdown
-        AssertEqual(idxDecl, navigation.SelectedType)
-        // Ensure that member list contains expected members
-        AssertNavigationContainsAll(navigation.Members, expectedMembers)
-        
-        // Find member declaration, go to the location & test the identifier island
-        for memb in expectedMembers do
-            let decl = navigation.Members |> Array.find (fun nav -> nav.Label = memb)
-            MoveCursorTo(file, decl.Span.iStartLine + 1, decl.Span.iStartIndex + 1)
-            match GetIdentifierAtCursor file with
-            | None -> 
-                Assert.Fail("No identifier at cursor!")
-            | Some (id, _) -> 
-                if not (id.Contains(memb)) then Assert.Fail(sprintf "Found '%s' which isn't substring of the expected '%s'." id memb)
-               
-    member private this.TestHiddenRegions (file : list) regionMarkers =        
-        let (_, _, file) = this.CreateSingleFileProject(file)
-
-        // Find locations of the regions based on markers provided
-        let expectedLocations = 
-          [ for ms, me in regionMarkers do
-              MoveCursorToEndOfMarker(file, ms)
-              let sl, sc = GetCursorLocation(file)
-              MoveCursorToStartOfMarker(file, me)
-              let el, ec = GetCursorLocation(file)
-              // -1 to adjust line to VS format
-              // -1 to adjust columns (not quite sure why..)
-              yield (sl-1, sc-1), (el-1, ec-1) ]
-              
-        // Test whether the regions are same and that no 'update' commands are created (no regions exist prior to this call)
-        let toCreate, toUpdate = GetHiddenRegionCommands(file)
-        if (toUpdate <> Map.empty<_,_>) then 
-            Assert.Fail("Hidden regions, first call. Didn't expect any regions to update.")
-        AssertEqualWithMessage(expectedLocations.Length, toCreate.Length, "Different number of regions!")
-        AssertRegionListContains(expectedLocations, toCreate)
-
         (* Files for testing and tests --------------------------------------------------------- *)
                 
-    static member NavigationFile1 = 
+    let NavigationFile1 = 
       [ "#light"
         "module Example.Module"
         ""
@@ -88,38 +39,7 @@ type NavigationBarTests() =
         ""
         "    type EnumOneLine = (*5s*)| OUAaa = 0 | OUBbb = 3(*5e*)" ]
 
-    []
-    member public this.``Regions.NavigationFile1``() =        
-        this.TestHiddenRegions NavigationBarTests.NavigationFile1
-          [ "(*1s*)", "(*1e*)"
-            "(*2s*)", "(*2e*)" 
-            "(*3s*)", "(*3e*)"
-            "(*4s*)", "(*4e*)"
-            "(*5s*)", "(*5e*)"
-            "SomeModule", "(*5e*)" (* entire module *) ]
-                          
-    []
-    []
-    member public this.``Record1``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile1 "SomeModule.Rec" ["RFirst"; "RSecond"]
-        
-    []
-    member public this.``Record2``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile1 "SomeModule.Rec2" ["R2First"; "R2Second"]
-          
-    []
-    member public this.``Abbreviation``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile1 "SomeModule.Abbrev" []
-
-    []
-    member public this.``Enum``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile1 "SomeModule.Enum" [ "Aaa"; "Bbb" ]
-
-    []
-    member public this.``Enum.OneLine``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile1 "SomeModule.EnumOneLine" [ "OUAaa"; "OUBbb" ]
-
-    static member NavigationFile2 = 
+    let NavigationFile2 = 
       [ "#light"
         "module A =   "
         ""
@@ -176,64 +96,131 @@ type NavigationBarTests() =
         "        let aa () ="
         "          1(*15e*)        " ]
     
+
+    (* Unit tests for collapse region & navigation bar ------------------------------------- *)
+    
+    member private this.TestNavigationBar (file : string list) findDecl expectedMembers =
+        
+        let (_, _, file) = this.CreateSingleFileProject(file)
+
+        // Verify that the types&modules list contains 'findDecl'
+        let navigation = GetNavigationContentAtCursor(file)
+        AssertNavigationContains(navigation.TypesAndModules, findDecl)
+        let idxDecl = navigation.TypesAndModules |> Array.findIndex (fun nav -> nav.Label = findDecl)
+        let decl = navigation.TypesAndModules.[idxDecl]
+        
+        // Navigate to the definition and get the contents again
+        MoveCursorTo(file, decl.Span.iStartLine + 1, decl.Span.iStartIndex) // line index is in the 0-based form
+        let navigation = GetNavigationContentAtCursor(file)
+        // Ensure that the right thing is selected in the dropdown
+        AssertEqual(idxDecl, navigation.SelectedType)
+        // Ensure that member list contains expected members
+        AssertNavigationContainsAll(navigation.Members, expectedMembers)
+        
+        // Find member declaration, go to the location & test the identifier island
+        for memb in expectedMembers do
+            let decl = navigation.Members |> Array.find (fun nav -> nav.Label = memb)
+            MoveCursorTo(file, decl.Span.iStartLine + 1, decl.Span.iStartIndex + 1)
+            match GetIdentifierAtCursor file with
+            | None -> 
+                Assert.Fail("No identifier at cursor!")
+            | Some (id, _) -> 
+                if not (id.Contains(memb)) then Assert.Fail(sprintf "Found '%s' which isn't substring of the expected '%s'." id memb)
+               
+    member private this.TestHiddenRegions (file : list) regionMarkers =        
+        let (_, _, file) = this.CreateSingleFileProject(file)
+
+        // Find locations of the regions based on markers provided
+        let expectedLocations = 
+          [ for ms, me in regionMarkers do
+              MoveCursorToEndOfMarker(file, ms)
+              let sl, sc = GetCursorLocation(file)
+              MoveCursorToStartOfMarker(file, me)
+              let el, ec = GetCursorLocation(file)
+              // -1 to adjust line to VS format
+              // -1 to adjust columns (not quite sure why..)
+              yield (sl-1, sc-1), (el-1, ec-1) ]
+              
+        // Test whether the regions are same and that no 'update' commands are created (no regions exist prior to this call)
+        let toCreate, toUpdate = GetHiddenRegionCommands(file)
+        if (toUpdate <> Map.empty<_,_>) then 
+            Assert.Fail("Hidden regions, first call. Didn't expect any regions to update.")
+        AssertEqualWithMessage(expectedLocations.Length, toCreate.Length, "Different number of regions!")
+        AssertRegionListContains(expectedLocations, toCreate)
+
+    []
+    member public this.``Regions.NavigationFile1``() =        
+        this.TestHiddenRegions NavigationFile1
+          [ "(*1s*)", "(*1e*)"
+            "(*2s*)", "(*2e*)" 
+            "(*3s*)", "(*3e*)"
+            "(*4s*)", "(*4e*)"
+            "(*5s*)", "(*5e*)"
+            "SomeModule", "(*5e*)" (* entire module *) ]
+                          
+    []
+    []
+    member public this.``Record1``() =        
+        this.TestNavigationBar NavigationFile1 "SomeModule.Rec" ["RFirst"; "RSecond"]
+        
+    []
+    member public this.``Record2``() =        
+        this.TestNavigationBar NavigationFile1 "SomeModule.Rec2" ["R2First"; "R2Second"]
+          
+    []
+    member public this.``Abbreviation``() =        
+        this.TestNavigationBar NavigationFile1 "SomeModule.Abbrev" []
+
+    []
+    member public this.``Enum``() =        
+        this.TestNavigationBar NavigationFile1 "SomeModule.Enum" [ "Aaa"; "Bbb" ]
+
+    []
+    member public this.``Enum.OneLine``() =        
+        this.TestNavigationBar NavigationFile1 "SomeModule.EnumOneLine" [ "OUAaa"; "OUBbb" ]
+
     []
     member public this.``Record.WithMembers``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile2 "A.RecWith" ["WRFirst"; "WRSecond"; "RecMember" ]
+        this.TestNavigationBar NavigationFile2 "A.RecWith" ["WRFirst"; "WRSecond"; "RecMember" ]
         
     []
     member public this.``Union.WithMembers``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile2 "B.Union" ["UFirst"; "USecond"; "A"]
+        this.TestNavigationBar NavigationFile2 "B.Union" ["UFirst"; "USecond"; "A"]
           
     []
     member public this.``Class``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile2 "B.A" ["Prop"; "Func"; "Dispose"] // perhaps IDisposable.Dispose
+        this.TestNavigationBar NavigationFile2 "B.A" ["Prop"; "Func"; "Dispose"] // perhaps IDisposable.Dispose
 
     []
     member public this.``Exception``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile2 "B.SomeCrash" [ ]
+        this.TestNavigationBar NavigationFile2 "B.SomeCrash" [ ]
         
     []
     member public this.``Module.Alias``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile2 "B.MyList" [ ]
+        this.TestNavigationBar NavigationFile2 "B.MyList" [ ]
 
     []
     member public this.``NestedEnum``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile2 "B.MoreNested.MyEnum" [ "One"; "Two"; "Three" ]
+        this.TestNavigationBar NavigationFile2 "B.MoreNested.MyEnum" [ "One"; "Two"; "Three" ]
 
     []
     member public this.``Extension``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile2 "B.AExt" [ "Extension1"; "Extension2" ]
+        this.TestNavigationBar NavigationFile2 "B.AExt" [ "Extension1"; "Extension2" ]
         
     []
     member public this.``Type.EndingWithProperty.WithTypeAnnotation``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile2 "B.Z" [ "Z" ]   
+        this.TestNavigationBar NavigationFile2 "B.Z" [ "Z" ]   
              
     []
     member public this.``Module.Nested``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile2 "B.FooBaz" [ "toplevel" ]
+        this.TestNavigationBar NavigationFile2 "B.FooBaz" [ "toplevel" ]
 
     []
     member public this.``Module.Nested.More``() =        
-        this.TestNavigationBar NavigationBarTests.NavigationFile2 "B.FooBaz.NestedModule" [ "nestedThing" ]   
-
-// Allow the NavigationBarTests run under different context
-namespace UnitTests.Tests.LanguageService.NavigationBar
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
+        this.TestNavigationBar NavigationFile2 "B.FooBaz.NestedModule" [ "nestedThing" ]   
 
-// context msbuild
-[] 
-[]
-type ``MSBuild`` = 
-   inherit NavigationBarTests
-   new() = { inherit NavigationBarTests(VsOpts = fst (Models.MSBuild())); }
 
 // Context project system
 [] 
-[]
-type ``ProjectSystem`` = 
-    inherit NavigationBarTests
-    new() = { inherit NavigationBarTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
\ No newline at end of file
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
\ No newline at end of file
diff --git a/vsintegration/src/unittests/Tests.LanguageService.ParameterInfo.fs b/vsintegration/src/unittests/Tests.LanguageService.ParameterInfo.fs
index 10353c4cd10..f7a70ab66d8 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.ParameterInfo.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.ParameterInfo.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.ParameterInfo
 
 open System
 open NUnit.Framework
@@ -9,14 +9,15 @@ open Salsa.VsOpsUtils
 open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
-exception NoParamInfo
 []
 module ParamInfoStandardSettings = 
     let standard40AssemblyRefs  = [| "System"; "System.Core"; "System.Numerics" |]
     let queryAssemblyRefs = [ "System.Xml.Linq"; "System.Core" ]
 
-type ParameterInfoTests()  = 
+[] 
+type UsingMSBuild()  = 
     inherit LanguageServiceBaseTests()
 
     let GetParamDisplays(methods:Microsoft.VisualStudio.FSharp.LanguageService.MethodListForAMethodTip) =
@@ -25,8 +26,8 @@ type ParameterInfoTests()  =
                             let (name,display,description) = methods.GetParameterInfo(i,j) 
                             yield display ] ]
       
-    let AssertEmptyMethodGroup(resultMethodGroup:Microsoft.VisualStudio.FSharp.LanguageService.MethodListForAMethodTip) =
-        Assert.AreEqual(null, resultMethodGroup, "Expected an empty method group")              
+    let AssertEmptyMethodGroup(resultMethodGroup:Microsoft.VisualStudio.FSharp.LanguageService.MethodListForAMethodTip option) =
+        Assert.IsTrue(resultMethodGroup.IsNone, "Expected an empty method group")              
         
     let AssertMethodGroupDesciptionsDoNotContain(methods:Microsoft.VisualStudio.FSharp.LanguageService.MethodListForAMethodTip, expectNotToBeThere) = 
         for i = 0 to methods.GetCount() - 1 do
@@ -35,7 +36,9 @@ type ParameterInfoTests()  =
                 Console.WriteLine("Expected description {0} to not contain {1}", description, expectNotToBeThere)
                 AssertNotContains(description,expectNotToBeThere)
  
-    let AssertMethodGroup(resultMethodGroup:Microsoft.VisualStudio.FSharp.LanguageService.MethodListForAMethodTip, expectedParamNamesSet:string list list) =
+    let AssertMethodGroup(resultMethodGroup:Microsoft.VisualStudio.FSharp.LanguageService.MethodListForAMethodTip option, expectedParamNamesSet:string list list) =
+        Assert.IsTrue(resultMethodGroup.IsSome, "Expected a method group")
+        let resultMethodGroup = resultMethodGroup.Value
         Assert.AreEqual(expectedParamNamesSet.Length, resultMethodGroup.GetCount())           
         Assert.IsTrue(resultMethodGroup 
                          |> GetParamDisplays
@@ -45,7 +48,9 @@ type ParameterInfoTests()  =
                                        (expectedParamNames,paramDisplays) ||> List.forall2 (fun expectedParamName paramDisplay -> 
                                            paramDisplay.Contains(expectedParamName)))))
     
-    let AssertMethodGroupContain(resultMethodGroup:Microsoft.VisualStudio.FSharp.LanguageService.MethodListForAMethodTip, expectedParamNames:string list) = 
+    let AssertMethodGroupContain(resultMethodGroup:Microsoft.VisualStudio.FSharp.LanguageService.MethodListForAMethodTip option, expectedParamNames:string list) = 
+        Assert.IsTrue(resultMethodGroup.IsSome, "Expected a method group")
+        let resultMethodGroup = resultMethodGroup.Value
         Assert.IsTrue(resultMethodGroup
                           |> GetParamDisplays
                           |> Seq.exists (fun paramDisplays ->
@@ -62,59 +67,60 @@ type ParameterInfoTests()  =
 
      //Verify all the overload method parameterInfo 
     member private this.VerifyParameterInfoAtStartOfMarker(fileContents : string, marker : string, expectedParamNamesSet:string list list, ?addtlRefAssy :list) =
-        let methodstr = 
-            match addtlRefAssy with
-            |None -> this.GetMethodListForAMethodTip(fileContents,marker)
-            |Some(x) -> this.GetMethodListForAMethodTip(fileContents,marker,x)
+        let methodstr = this.GetMethodListForAMethodTip(fileContents,marker,?addtlRefAssy=addtlRefAssy)
         AssertMethodGroup(methodstr,expectedParamNamesSet)
 
    //Verify No parameterInfo at the marker     
     member private this.VerifyNoParameterInfoAtStartOfMarker(fileContents : string, marker : string, ?addtlRefAssy : list) =
-        let methodstr = 
-            match addtlRefAssy with
-            |None -> this.GetMethodListForAMethodTip(fileContents,marker)
-            |Some(x) -> this.GetMethodListForAMethodTip(fileContents,marker,x)
+        let methodstr = this.GetMethodListForAMethodTip(fileContents,marker,?addtlRefAssy=addtlRefAssy)
         AssertEmptyMethodGroup(methodstr)
 
     //Verify one method parameterInfo if contained in parameterInfo list
     member private this.VerifyParameterInfoContainedAtStartOfMarker(fileContents : string, marker : string, expectedParamNames:string list, ?addtlRefAssy : list) =
-        let methodstr = 
-            match addtlRefAssy with
-            |None -> this.GetMethodListForAMethodTip(fileContents,marker)
-            |Some(x) -> this.GetMethodListForAMethodTip(fileContents,marker,x)
+        let methodstr = this.GetMethodListForAMethodTip(fileContents,marker,?addtlRefAssy=addtlRefAssy)
         AssertMethodGroupContain(methodstr,expectedParamNames)
 
     //Verify the parameterInfo of one of the list order
     member private this.VerifyParameterInfoOverloadMethodIndex(fileContents : string, marker : string, index : int, expectedParams:string list, ?addtlRefAssy : list) = 
-        let methodstr = 
-            match addtlRefAssy with
-            |None -> this.GetMethodListForAMethodTip(fileContents,marker)
-            |Some(x) -> this.GetMethodListForAMethodTip(fileContents,marker,x)
-
-        let GetPramDisplaysByIndex(methods:Microsoft.VisualStudio.FSharp.LanguageService.MethodListForAMethodTip) =
-            [ for i = 0 to methods.GetParameterCount(index) - 1 do
-                let (name,display,description) = methods.GetParameterInfo(index,i)
+        let methodstr = this.GetMethodListForAMethodTip(fileContents,marker,?addtlRefAssy=addtlRefAssy)
+        Assert.IsTrue(methodstr.IsSome, "Expected a method group")
+        let methodstr = methodstr.Value
+
+        let paramDisplays = 
+            [ for i = 0 to methodstr.GetParameterCount(index) - 1 do
+                let (name,display,description) = methodstr.GetParameterInfo(index,i)
                 yield display]
-        let paramDisplays = GetPramDisplaysByIndex methodstr
-        Assert.IsTrue((expectedParams, paramDisplays) ||> List.forall2 (fun expectedParam paramDisplay -> 
-                                        paramDisplay.Contains(expectedParam)))
+        Assert.IsTrue((expectedParams, paramDisplays) ||> List.forall2 (fun expectedParam paramDisplay -> paramDisplay.Contains(expectedParam)))
+
     //Verify there is at least one parameterInfo
     member private this.VerifyHasParameterInfo(fileContents : string, marker : string) =
         let methodstr = this.GetMethodListForAMethodTip(fileContents,marker)
+        Assert.IsTrue(methodstr.IsSome, "Expected a method group")
+        let methodstr = methodstr.Value
+
         Assert.IsTrue (methodstr.GetCount() > 0)
+
     //Verify return content after the colon
     member private this.VerifyFirstParameterInfoColonContent(fileContents : string, marker : string, expectedStr : string, ?addtlRefAssy : list) =
-        let methodstr = 
-            match addtlRefAssy with
-            |None -> this.GetMethodListForAMethodTip(fileContents,marker)
-            |Some(x) -> this.GetMethodListForAMethodTip(fileContents,marker,x)
+        let methodstr = this.GetMethodListForAMethodTip(fileContents,marker,?addtlRefAssy=addtlRefAssy)
+        Assert.IsTrue(methodstr.IsSome, "Expected a method group")
+        let methodstr = methodstr.Value
 
         Assert.AreEqual(expectedStr, methodstr.GetType(0)) // Expecting a method info like X(a:int,b:int) : int [used to be  X(a:int,b:int) -> int]
 
+    member private this.VerifyParameterCount(fileContents : string, marker : string, expectedCount: int) =
+        let methodstr = this.GetMethodListForAMethodTip(fileContents,marker)
+        Assert.IsTrue(methodstr.IsSome, "Expected a method group")
+        let methodstr = methodstr.Value
+        Assert.AreEqual(0, methodstr.GetParameterCount(expectedCount))
+
     []
     member public this.``Regression.OnConstructor.881644``() =
         let fileContent = """new System.IO.StreamReader((*Mark*)"""
         let methodstr = this.GetMethodListForAMethodTip(fileContent,"(*Mark*)")
+        Assert.IsTrue(methodstr.IsSome, "Expected a method group")
+        let methodstr = methodstr.Value
+
         if not (methodstr.GetDescription(0).Contains("#ctor")) then
             failwith "Expected parameter info to contain #ctor"
 
@@ -127,6 +133,9 @@ type ParameterInfoTests()  =
                         let! buffer = file.AsyncRead((*Mark*)0)
                         return 0 }"""
         let methodstr = this.GetMethodListForAMethodTip(fileContent,"(*Mark*)")
+        Assert.IsTrue(methodstr.IsSome, "Expected a method group")
+        let methodstr = methodstr.Value
+
         if not (methodstr.GetDescription(0).Contains("AsyncRead")) then
             failwith "Expected parameter info to contain AsyncRead"
     
@@ -198,6 +207,9 @@ type ParameterInfoTests()  =
     member public this.``Regression.MethodInfo.Bug808310``() =
         let fileContent = """System.Console.WriteLine((*Mark*)"""
         let methodGroup = this.GetMethodListForAMethodTip(fileContent,"(*Mark*)")   
+        Assert.IsTrue(methodGroup.IsSome, "Expected a method group")
+        let methodGroup = methodGroup.Value
+
         let description = methodGroup.GetDescription(0)
         // Make sure that System.Console.WriteLine is not mentioned anywhere exception in the XML comment signature
         let xmlCommentIndex = description.IndexOf("System.Console.WriteLine]")
@@ -223,10 +235,10 @@ type ParameterInfoTests()  =
             let h((x:unit)) = 42
             let r3 = h((*3*))
             let r4 = g((*4*))"""
-        Assert.AreEqual(0, this.GetMethodListForAMethodTip(fileContents,"(*1*)").GetParameterCount(0))
-        Assert.AreEqual(0, this.GetMethodListForAMethodTip(fileContents,"(*2*)").GetParameterCount(0))
-        Assert.AreEqual(0, this.GetMethodListForAMethodTip(fileContents,"(*3*)").GetParameterCount(0))
-        Assert.AreEqual(0, this.GetMethodListForAMethodTip(fileContents,"(*4*)").GetParameterCount(0))
+        this.VerifyParameterCount(fileContents,"(*1*)", 0)
+        this.VerifyParameterCount(fileContents,"(*2*)", 0)
+        this.VerifyParameterCount(fileContents,"(*3*)", 0)
+        this.VerifyParameterCount(fileContents,"(*4*)", 0)
 
     []
     member public this.``Single.Constructor1``() =
@@ -317,7 +329,7 @@ type ParameterInfoTests()  =
             let foo = N1.T1.M1((*Marker*)
             """
         this.VerifyParameterInfoAtStartOfMarker(fileContent,"(*Marker*)",[["arg1"]],
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
                   
     []
     []
@@ -328,7 +340,7 @@ type ParameterInfoTests()  =
             let foo = N1.T1.M2((*Marker*)
             """
         this.VerifyParameterInfoAtStartOfMarker(fileContent,"(*Marker*)",[["arg1";"arg2"]],
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
     []
     []
@@ -341,7 +353,7 @@ type ParameterInfoTests()  =
             let foo = N1.T1.M2((*Marker*)
             """
         this.VerifyFirstParameterInfoColonContent(fileContent,"(*Marker*)",": int",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
 
     []
@@ -353,7 +365,7 @@ type ParameterInfoTests()  =
             let foo = new N1.T1((*Marker*)
             """
         this.VerifyParameterInfoOverloadMethodIndex(fileContent,"(*Marker*)",0,[],
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
               
     []
     []
@@ -364,7 +376,7 @@ type ParameterInfoTests()  =
             let foo = new N1.T1((*Marker*)
             """
         this.VerifyParameterInfoOverloadMethodIndex(fileContent,"(*Marker*)",1,["arg1"],
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
          
     []
     []
@@ -375,7 +387,7 @@ type ParameterInfoTests()  =
             let foo = new N1.T1((*Marker*)
             """
         this.VerifyParameterInfoOverloadMethodIndex(fileContent,"(*Marker*)",2,["arg1";"arg2"],
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
          
     []
     []
@@ -386,7 +398,7 @@ type ParameterInfoTests()  =
             type foo = N1.T<(*Marker*)
             """
         this.VerifyParameterInfoAtStartOfMarker(fileContent,"(*Marker*)",[["Param1";"ParamIgnored"]],
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
         
     []
     []
@@ -398,7 +410,7 @@ type ParameterInfoTests()  =
             type foo = N1.T< "Hello", 2>(*Marker*)
             """
         this.VerifyNoParameterInfoAtStartOfMarker(fileContent,"(*Marker*)",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
     []
     []
@@ -409,7 +421,7 @@ type ParameterInfoTests()  =
             type foo = N1.T<"Hello",(*Marker*)
             """
         this.VerifyParameterInfoContainedAtStartOfMarker(fileContent,"(*Marker*)",["Param1";"ParamIgnored"],
-             [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+             [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
         
               
     []
@@ -504,7 +516,7 @@ type ParameterInfoTests()  =
         
         let methodGroup = GetParameterInfoAtCursor file
         if (methReq = []) then
-            AssertEqual(null, methodGroup)
+            Assert.IsTrue(methodGroup.IsNone, "Expected no method group")
         else
             AssertMethodGroup(methodGroup, methReq)
             
@@ -612,7 +624,7 @@ type ParameterInfoTests()  =
         MoveCursorToEndOfMarker(file, testLine)
         let methodGroup = GetParameterInfoAtCursor file
         if (methReq = []) then
-            AssertEqual(null, methodGroup)
+            Assert.IsTrue(methodGroup.IsNone, "expected no method group")
         else
             AssertMethodGroup(methodGroup, methReq)
     
@@ -677,7 +689,7 @@ type ParameterInfoTests()  =
         let gpatcc = GlobalParseAndTypeCheckCounter.StartNew(this.VS)
         MoveCursorToEndOfMarker(file, cursorPrefix)
         let info = GetParameterInfoAtCursor file
-        AssertEqual(null, info)
+        Assert.IsTrue(info.IsNone, "expected no parameter info")
         gpatcc.AssertExactly(0,0)
         
     member public this.TestParameterInfoLocation (testLine, expectedPos, ?addtlRefAssy : list) =
@@ -690,6 +702,8 @@ type ParameterInfoTests()  =
         let (_, _, file) = this.CreateSingleFileProject(code, ?references = addtlRefAssy)
         MoveCursorToEndOfMarker(file, cursorPrefix)
         let info = GetParameterInfoAtCursor file
+        Assert.IsTrue(info.IsSome, "expected parameter info")
+        let info = info.Value
         AssertEqual(expectedPos, info.GetColumnOfStartOfLongId())
 
     // Tests the current behavior, we may want to specify it differently in the future
@@ -747,7 +761,7 @@ type ParameterInfoTests()  =
     //This test verifies that ParamInfo location on a provided type with namespace that exposes static parameter that takes >1 argument works normally.
     member public this.``TypeProvider.Type.ParameterInfoLocation.WithNamespace`` () =
         this.TestParameterInfoLocation("type boo = N1.T<$",11,
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
  
     []
     []
@@ -757,7 +771,7 @@ type ParameterInfoTests()  =
         this.TestParameterInfoLocation("open N1 \n"+ 
                                        "type boo = T<$",
             expectedPos = 11,
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
  
     []
     []
@@ -766,7 +780,7 @@ type ParameterInfoTests()  =
      //The intent here to make sure the ParamInfo is not shown when inside a string
     member public this.``TypeProvider.Type.Negative.InString`` () =
         this.TestParameterInfoNegative("type boo = \"N1.T<$\"",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
     []
     []
@@ -775,7 +789,7 @@ type ParameterInfoTests()  =
     //The intent here to make sure the ParamInfo is not shown when inside a comment
     member public this.``TypeProvider.Type.Negative.InComment`` () =
         this.TestParameterInfoNegative("// type boo = N1.T<$",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
  
 
  // Following are tricky:
@@ -861,20 +875,12 @@ type ParameterInfoTests()  =
                      "let f1 y = y  "
                      "let z = f(f1( " ] )
         MoveCursorToEndOfMarker(file, "f1(")
-        // Note: no TakeCoffeeBreak(this.VS)
-        let info = GetParameterInfoAtCursorNoFallback file  // the 'NoFallback' version will not use the name environment, only captured name resolutions at specific locations
-        AssertEqual(null, info)
         let info = GetParameterInfoAtCursor file // this will fall back to using the name environment, which is stale, but sufficient to look up the call to 'f1'
+        Assert.IsTrue(info.IsSome, "expected parameter info")
+        let info = info.Value
         AssertEqual("f1", info.GetName(0))
-        // note about (6,1): for silly implementation reasons, we always report location of 'end of file' as first the char, 3 lines past the last line of the file
-        AssertEqual([|(3,11);(3,13);(3,13);(6,1)|], info.GetNoteworthyParamInfoLocations())
-
-        // after typechecking catches up, then even NoFallback should find it
-        TakeCoffeeBreak(this.VS)
-        let info = GetParameterInfoAtCursorNoFallback file  // the 'NoFallback' version will not use the name environment, only captured name resolutions at specific locations
-        AssertEqual("f1", info.GetName(0))
-        AssertEqual([|(3,11);(3,13);(3,13);(6,1)|], info.GetNoteworthyParamInfoLocations())
-        gpatcc.AssertExactly(0,0)
+        // note about (5,0): service.fs adds three lines of empty text to the end of every file, so it reports the location of 'end of file' as first the char, 3 lines past the last line of the file
+        AssertEqual([|(2,10);(2,12);(2,12);(5,0)|], info.GetNoteworthyParamInfoLocations())
 
     []
     member this.``LocationOfParams.AfterQuicklyTyping.CallConstructor``() =        
@@ -891,19 +897,13 @@ type ParameterInfoTests()  =
                      "let foo = new Foo(    " ] )
         MoveCursorToEndOfMarker(file, "new Foo(")
         // Note: no TakeCoffeeBreak(this.VS)
-        let info = GetParameterInfoAtCursorNoFallback file  // the 'NoFallback' version will not use the name environment, only captured name resolutions at specific locations
-        AssertEqual(null, info)
         let info = GetParameterInfoAtCursor file // this will fall back to using the name environment, which is stale, but sufficient to look up the call to 'f1'
+        Assert.IsTrue(info.IsSome, "expected parameter info")
+        let info = info.Value
         AssertEqual("Foo", info.GetName(0))
-        // note about (5,1): for silly implementation reasons, we always report location of 'end of file' as first the char, 3 lines past the last line of the file
-        AssertEqual([|(2,15);(2,18);(2,18);(5,1)|], info.GetNoteworthyParamInfoLocations())
+        // note about (4,0): service.fs adds three lines of empty text to the end of every file, so it reports the location of 'end of file' as first the char, 3 lines past the last line of the file
+        AssertEqual([|(1,14);(1,17);(1,17);(4,0)|], info.GetNoteworthyParamInfoLocations())
 
-        // after typechecking catches up, then even NoFallback should find it
-        TakeCoffeeBreak(this.VS)
-        let info = GetParameterInfoAtCursorNoFallback file  // the 'NoFallback' version will not use the name environment, only captured name resolutions at specific locations
-        AssertEqual("Foo", info.GetName(0))
-        AssertEqual([|(2,15);(2,18);(2,18);(5,1)|], info.GetNoteworthyParamInfoLocations())
-        gpatcc.AssertExactly(0,0)
 
 (*
 This does not currently work, because the 'fallback to name environment' does weird QuickParse-ing and mangled the long id "Bar.Foo".
@@ -926,19 +926,10 @@ We really need to rewrite some code paths here to use the real parse tree rather
                      "let foo = new Bar.Foo(    " ] )
         MoveCursorToEndOfMarker(file, "new Bar.Foo(")
         // Note: no TakeCoffeeBreak(this.VS)
-        let info = GetParameterInfoAtCursorNoFallback file  // the 'NoFallback' version will not use the name environment, only captured name resolutions at specific locations
-        AssertEqual(null, info)
         let info = GetParameterInfoAtCursor file // this will fall back to using the name environment, which is stale, but sufficient to look up the call to 'f1'
         AssertEqual("Foo", info.GetName(0))
-        // note about (5,1): for silly implementation reasons, we always report location of 'end of file' as first the char, 3 lines past the last line of the file
-        AssertEqual([|(2,15);(2,22);(2,22);(5,1)|], info.GetNoteworthyParamInfoLocations())
-
-        // after typechecking catches up, then even NoFallback should find it
-        TakeCoffeeBreak(this.VS)
-        let info = GetParameterInfoAtCursorNoFallback file  // the 'NoFallback' version will not use the name environment, only captured name resolutions at specific locations
-        AssertEqual("Foo", info.GetName(0))
-        AssertEqual([|(2,15);(2,22);(2,22);(5,1)|], info.GetNoteworthyParamInfoLocations())
-        gpatcc.AssertExactly(0,0)
+        // note about (4,0): service.fs adds three lines of empty text to the end of every file, so it reports the location of 'end of file' as first the char, 3 lines past the last line of the file
+        AssertEqual([|(1,14);(1,21);(1,21);(4,0)|], info.GetNoteworthyParamInfoLocations())
 *)
 
     []
@@ -952,6 +943,8 @@ We really need to rewrite some code paths here to use the real parse tree rather
         let (_, _, file) = this.CreateSingleFileProject(testLines)
         MoveCursorToStartOfMarker(file, "0")
         let info = GetParameterInfoAtCursor file
+        Assert.IsTrue(info.IsSome, "expected parameter info")
+        let info = info.Value
         let names = info.GetParameterNames()
         AssertEqual([| null; null; "d"; "e"; "c" |], names)
 
@@ -969,13 +962,13 @@ We really need to rewrite some code paths here to use the real parse tree rather
                 [while r.ToString().IndexOf('^') <> -1 do
                     let c = r.ToString().IndexOf('^')
                     r.Remove(c,1) |> ignore
-                    yield (i+1,c+1)]
+                    yield (i,c)]
             r.ToString(), locs)
         let testLines = testLinesAndLocs |> List.map fst
         let expectedLocs = testLinesAndLocs |> List.map snd |> List.collect id |> List.toArray 
-        // note: for silly implementation reasons, we always report location of 'end of file' as first the char, 3 lines past the last line of the file
+        // note: service.fs adds three lines of empty text to the end of every file, so it reports the location of 'end of file' as first the char, 3 lines past the last line of the file
         let expectedLocs = if defaultArg markAtEOF false then 
-                                Array.append expectedLocs [| testLines.Length+3, 1 |] 
+                                Array.append expectedLocs [| (testLines.Length-1)+3, 0 |] 
                            else 
                                 expectedLocs
         let cursorPrefix = cursorPrefix.Replace("^","")
@@ -984,9 +977,29 @@ We really need to rewrite some code paths here to use the real parse tree rather
         let (_, _, file) = this.CreateSingleFileProject(testLines, references = references)
         MoveCursorToEndOfMarker(file, cursorPrefix)
         let info = GetParameterInfoAtCursor file
-        if info=null then raise NoParamInfo
+        Assert.IsTrue(info.IsSome, "expected parameter info")
+        let info = info.Value
         AssertEqual(expectedLocs, info.GetNoteworthyParamInfoLocations()) 
 
+    // These pin down known failing cases
+    member public this.TestNoParameterInfo (testLine, ?additionalReferenceAssemblies) =
+        let cursorPrefix, testLines = this.ExtractLineInfo testLine
+        let cursorPrefix = cursorPrefix.Replace("^","")
+        let testLinesAndLocs = testLines |> List.mapi (fun i s ->
+            let r = new System.Text.StringBuilder(s)
+            let locs = 
+                [while r.ToString().IndexOf('^') <> -1 do
+                    let c = r.ToString().IndexOf('^')
+                    r.Remove(c,1) |> ignore
+                    yield (i,c)]
+            r.ToString(), locs)
+        let testLines = testLinesAndLocs |> List.map fst
+        let references = "System.Core"::(defaultArg additionalReferenceAssemblies [])
+        let (_, _, file) = this.CreateSingleFileProject(testLines, references = references)
+        MoveCursorToEndOfMarker(file, cursorPrefix)
+        let info = GetParameterInfoAtCursor file
+        Assert.IsTrue(info.IsNone, "expected no parameter info for this particular test, though it would be nice if this has started to work")
+
     []
     member public this.``LocationOfParams.Case1``() =        
         this.TestParameterInfoLocationOfParams("""^System.Console.WriteLine^^("hel$lo"^)""")
@@ -1326,8 +1339,7 @@ We really need to rewrite some code paths here to use the real parse tree rather
 
     []
     member public this.``LocationOfParams.ThisOnceAsserted``() =        
-        try
-            this.TestParameterInfoLocationOfParams("""
+            this.TestNoParameterInfo("""
                 module CSVTypeProvider
 
                 f(fun x ->
@@ -1343,13 +1355,10 @@ We really need to rewrite some code paths here to use the real parse tree rather
                     keyType
 
                 match types |> Array.tryFind (fun ty -> ty.Name = typeName^) with _ -> ()""")
-        with
-            | NoParamInfo -> () // expect there not to be any param info because parser failed
 
     []
     member public this.``LocationOfParams.ThisOnceAssertedToo``() =        
-        try
-            this.TestParameterInfoLocationOfParams("""
+            this.TestNoParameterInfo("""
                 let readString() =
                     let x = 42
                     while ('"' = '""' then
@@ -1358,8 +1367,6 @@ We really need to rewrite some code paths here to use the real parse tree rather
                             let sb = new System.Text.StringBuilder()
                             while true do
                                 ($)  """)
-        with
-            | NoParamInfo -> () // expect there not to be any param info because parser failed
 
     []
     member public this.``LocationOfParams.UnmatchedParensBeforeModuleKeyword.Bug245850.Case1a``() =        
@@ -1514,13 +1521,13 @@ We really need to rewrite some code paths here to use the real parse tree rather
     member public this.``LocationOfParams.TypeProviders.Basic``() =        
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< "fo$o"^, 42 ^>""", 
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.BasicNamed``() =        
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< "fo$o"^, ParamIgnored=42 ^>""", 
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
 
     []
@@ -1528,92 +1535,72 @@ We really need to rewrite some code paths here to use the real parse tree rather
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< $ """, // missing all params, just have <
             markAtEnd = true,
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.Prefix1``() =        
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< "fo$o"^, 42 """, // missing >
             markAtEnd = true,
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.Prefix1Named``() =        
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< "fo$o"^, ParamIgnored=42 """, // missing >
             markAtEnd = true,
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.Prefix2``() =        
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< "fo$o"^, """, // missing last param
             markAtEnd = true,
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.Prefix2Named1``() =        
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< "fo$o"^, ParamIgnored= """, // missing last param after name with equals
             markAtEnd = true,
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.Prefix2Named2``() =        
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< "fo$o"^, ParamIgnored """, // missing last param after name sans equals
             markAtEnd = true,
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.Negative1``() =       
-        try 
-            this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
+            this.TestNoParameterInfo("""
                 type D = ^System.Collections.Generic.Dictionary^^< in$t, int ^>""")
-            failwith "unexpected param info for generic type"
-        with
-        | :? NoParamInfo -> ()
 
     []
     member public this.``LocationOfParams.TypeProviders.Negative2``() =       
-        try 
-            this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
+            this.TestNoParameterInfo("""
                 type D = ^System.Collections.Generic.List^^< in$t ^>""")
-            failwith "unexpected param info for generic type"
-        with
-        | :? NoParamInfo -> ()
 
     []
     member public this.``LocationOfParams.TypeProviders.Negative3``() =       
-        try 
-            this.TestParameterInfoLocationOfParams("""
+            this.TestNoParameterInfo("""
                 let i = 42
                 let b = ^i^^< 4$2""")
-            failwith "unexpected param info for generic type"
-        with
-        | :? NoParamInfo -> ()
 
     []
     member public this.``LocationOfParams.TypeProviders.Negative4.Bug181000``() =       
-        try 
-            this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
+            this.TestNoParameterInfo("""
                 type U = ^N1.T^^< "foo"^, 42 ^>$  """,   // when the caret is right of the '>', we should not report any param info
-                additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
-            failwith "unexpected param info for generic type"
-        with
-        | :? NoParamInfo -> ()
+                additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.BasicWithinExpr``() =
-        try
-            this.TestParameterInfoLocationOfParams("""
+            this.TestNoParameterInfo("""
                 let f() =
                     let r = id( ^N1.T^^< "fo$o"^, ParamIgnored=42 ^> )
                     r    """, 
-                additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
-            failwith "unexpected param info for invalid use of constructorless type"
-        with
-        | :? NoParamInfo -> ()
+                additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.BasicWithinExpr.DoesNotInterfereWithOuterFunction``() =        
@@ -1621,34 +1608,36 @@ We really need to rewrite some code paths here to use the real parse tree rather
             let f() =
                 let r = ^id^^( N1.$T< "foo", ParamIgnored=42 > ^)
                 r    """, 
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.Bug199744.ExcessCommasShouldNotAssertAndShouldGiveInfo.Case1``() =        
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< "fo$o"^, 42^, ^, ^>""", 
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.Bug199744.ExcessCommasShouldNotAssertAndShouldGiveInfo.Case2``() =        
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< "fo$o"^, ^, ^>""", 
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``LocationOfParams.TypeProviders.Bug199744.ExcessCommasShouldNotAssertAndShouldGiveInfo.Case3``() =        
         this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
             type U = ^N1.T^^< ^,$ ^>""", 
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            additionalReferenceAssemblies = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     member public this.``TypeProvider.FormatOfNamesOfSystemTypes``() =
         let code = ["""type TTT = N1.T< "foo", ParamIgnored=42 > """]
-        let references = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
+        let references = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
         let (_, _, file) = this.CreateSingleFileProject(code, references = references)
         let gpatcc = GlobalParseAndTypeCheckCounter.StartNew(this.VS)
         MoveCursorToEndOfMarker(file,"foo")
         let methodGroup = GetParameterInfoAtCursor file
+        Assert.IsTrue(methodGroup.IsSome, "expected parameter info")
+        let methodGroup = methodGroup.Value
         let actualDisplays =
             [ for i = 0 to methodGroup.GetCount() - 1 do
                 yield [ for j = 0 to methodGroup.GetParameterCount(i) - 1 do
@@ -1707,6 +1696,9 @@ We really need to rewrite some code paths here to use the real parse tree rather
             MoveCursorToEndOfMarker(file, marker)
             let methodGroup = GetParameterInfoAtCursor file
             
+            Assert.IsTrue(methodGroup.IsSome, "expected parameter info")
+            let methodGroup = methodGroup.Value
+
             Assert.AreEqual(1, methodGroup.GetCount(), "Only one function expected")            
 
             let expectedParamsCount = List.length expectedParams
@@ -1729,6 +1721,9 @@ We really need to rewrite some code paths here to use the real parse tree rather
     member public this.``ParameterInfo.ArgumentsWithParamsArrayAttribute``() =
         let content = """let _ = System.String.Format("",(*MARK*))"""
         let methodTip = this.GetMethodListForAMethodTip(content, "(*MARK*)")
+        Assert.IsTrue(methodTip.IsSome, "expected parameter info")
+        let methodTip = methodTip.Value
+
         let overloadWithTwoParamsOpt = 
             Seq.init (methodTip.GetCount()) (fun i -> 
                 let count = methodTip.GetParameterCount(i)
@@ -2246,24 +2241,7 @@ We really need to rewrite some code paths here to use the real parse tree rather
         this.VerifyParameterInfoContainedAtStartOfMarker(fileContents,"(*Marker*)",["int";"int";"string";"bool"],queryAssemblyRefs)
 
 
-// Allow the ParameterInfoTests run under different context
-namespace UnitTests.Tests.LanguageService.ParameterInfo
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[] 
-[]
-type ``MSBuild`` = 
-   inherit ParameterInfoTests
-   new() = { inherit ParameterInfoTests(VsOpts = fst (Models.MSBuild())); }
-
 // Context project system
 [] 
-[]
-type ``ProjectSystem`` = 
-    inherit ParameterInfoTests
-    new() = { inherit ParameterInfoTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
diff --git a/vsintegration/src/unittests/Tests.LanguageService.QuickInfo.fs b/vsintegration/src/unittests/Tests.LanguageService.QuickInfo.fs
index 3285025ffe5..53e943f555d 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.QuickInfo.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.QuickInfo.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.QuickInfo
 
 open System
 open NUnit.Framework
@@ -9,12 +9,15 @@ open Salsa.VsOpsUtils
 open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
 []
 module QuickInfoStandardSettings = 
     let standard40AssemblyRefs  = [ "System"; "System.Core"; "System.Numerics" ]
     let queryAssemblyRefs = [ "System.Xml.Linq"; "System.Core" ]
-type QuickInfoTests() = 
+
+[] 
+type UsingMSBuild() = 
     inherit LanguageServiceBaseTests()
 
     // Work around an innocuous 'feature' with how QuickInfo is displayed, lines which 
@@ -213,7 +216,7 @@ type QuickInfoTests() =
             fileContents,
             marker = "MembersTP(*Marker*)",
             expected = "type HiddenBaseMembersTP =\n  inherit TPBaseTy\n  member ShowThisProp : unit",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
     []
     member public this.``QuickInfo.OverriddenMethods``() =
@@ -266,7 +269,7 @@ type QuickInfoTests() =
     []
     member public this.``TypeProviders.NestedTypesOrder``() = 
         let code = "type t = N1.TypeWithNestedTypes(*M*)"
-        let tpReference = System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")
+        let tpReference = PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")
         this.VerifyOrderOfNestedTypesInQuickInfo(
             source = code,
             marker = "(*M*)",
@@ -320,7 +323,7 @@ type QuickInfoTests() =
                                 let a = typeof """
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)", "This is a synthetic type created by me!",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithAdequateComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithAdequateComment.dll")])
     
     []
     []
@@ -333,7 +336,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)",
          "This is a synthetic type created by me!. Which is used to test the tool tip of the typeprovider type to check if it shows the right message or not.",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLongComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLongComment.dll")])
     
     []
     []
@@ -346,7 +349,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)",
          "type T =\n  new : unit -> T\n  event Event1 : EventHandler\n  static member M : unit -> int []\n  static member StaticProp : decimal\n\nFull name: N.T", 
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithNullComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithNullComment.dll")])
     
     []
     []    
@@ -359,7 +362,7 @@ type QuickInfoTests() =
         
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)",
          "type T =\n  new : unit -> T\n  event Event1 : EventHandler\n  static member M : unit -> int []\n  static member StaticProp : decimal\n\nFull name: N.T",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithEmptyComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithEmptyComment.dll")])
          
 
     []
@@ -373,7 +376,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)",
          "This is a synthetic type Localized!  ኤፍ ሻርፕ",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLocalizedComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLocalizedComment.dll")])
    
     []
     []
@@ -385,7 +388,7 @@ type QuickInfoTests() =
                                 let foo = new N.T(*Marker*)() """
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)", "This is a synthetic .ctor created by me for N.T",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithAdequateComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithAdequateComment.dll")])
     
     []
     []
@@ -398,7 +401,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)",
          "This is a synthetic .ctor created by me for N.T. Which is used to test the tool tip of the typeprovider Constructor to check if it shows the right message or not.",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLongComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLongComment.dll")])
     
     []
     []
@@ -411,7 +414,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)",
          "N.T() : N.T", 
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithNullComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithNullComment.dll")])
     
     []
     []    
@@ -424,7 +427,7 @@ type QuickInfoTests() =
         
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)",
          "N.T() : N.T",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithEmptyComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithEmptyComment.dll")])
     
     []
     []
@@ -437,7 +440,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)",
          "This is a synthetic .ctor Localized!  ኤፍ ሻርፕ for N.T",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLocalizedComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLocalizedComment.dll")])
         
 
     []
@@ -452,7 +455,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "Event1(*Marker*)",
          "This is a synthetic *event* created by me for N.T",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithAdequateComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithAdequateComment.dll")])
     
     []
     []
@@ -466,7 +469,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "Event1(*Marker*)", 
          "This is a synthetic *event* Localized!  ኤፍ ሻርፕ for N.T",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLocalizedComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLocalizedComment.dll")])
    
     []
     []
@@ -490,7 +493,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "Event1(*Marker*)",
          "This is a synthetic *event* created by me for N.T. Which is used to test the tool tip of the typeprovider Event to check if it shows the right message or not.!",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLongComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLongComment.dll")])
     
     []
     []
@@ -504,7 +507,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "Event1(*Marker*)",
          "event N.T.Event1: IEvent", 
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithNullComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithNullComment.dll")])
     
     []
     []    
@@ -518,7 +521,7 @@ type QuickInfoTests() =
         
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "Event1(*Marker*)",
          "event N.T.Event1: IEvent",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithEmptyComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithEmptyComment.dll")])
     
 
     []
@@ -532,7 +535,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "M(*Marker*)",
          "This is a synthetic *method* created by me!!",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithAdequateComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithAdequateComment.dll")])
     
     []
     []
@@ -545,7 +548,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "M(*Marker*)", 
          "This is a synthetic *method* Localized!  ኤፍ ሻርፕ",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLocalizedComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLocalizedComment.dll")])
    
     []
     []
@@ -558,7 +561,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "M(*Marker*)",
          "This is a synthetic *method* created by me!!. Which is used to test the tool tip of the typeprovider Method to check if it shows the right message or not.!",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLongComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLongComment.dll")])
     
     []
     []
@@ -571,7 +574,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "M(*Marker*)",
          "N.T.M() : int []", 
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithNullComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithNullComment.dll")])
     
     []
     []    
@@ -584,7 +587,7 @@ type QuickInfoTests() =
         
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "M(*Marker*)",
          "N.T.M() : int []",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithEmptyComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithEmptyComment.dll")])
     
 
     []
@@ -598,7 +601,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "StaticProp(*Marker*)",
          "This is a synthetic *property* created by me for N.T",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithAdequateComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithAdequateComment.dll")])
     
     []
     []
@@ -611,7 +614,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "StaticProp(*Marker*)", 
          "This is a synthetic *property* Localized!  ኤፍ ሻርፕ for N.T",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLocalizedComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLocalizedComment.dll")])
    
     []
     []
@@ -624,7 +627,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "StaticProp(*Marker*)",
          "This is a synthetic *property* created by me for N.T. Which is used to test the tool tip of the typeprovider Property to check if it shows the right message or not.!",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLongComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithLongComment.dll")])
     
     []
     []
@@ -637,7 +640,7 @@ type QuickInfoTests() =
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "StaticProp(*Marker*)",
          "property N.T.StaticProp: decimal", 
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithNullComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithNullComment.dll")])
     
     []
     []    
@@ -650,7 +653,7 @@ type QuickInfoTests() =
         
         this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "StaticProp(*Marker*)",
          "property N.T.StaticProp: decimal",
-         addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithEmptyComment.dll")])
+         addtlRefAssy = [PathRelativeToTestAssembly( @"UnitTestsResources\MockTypeProviders\XmlDocAttributeWithEmptyComment.dll")])
     
 
     []
@@ -667,7 +670,7 @@ type QuickInfoTests() =
             fileContents,
             marker = "foo(*Marker*)",
             expected = "type foo = N1.T",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     []
@@ -684,7 +687,7 @@ type QuickInfoTests() =
             fileContents,
             marker = "foo(*Marker*)",
             expected = "type foo",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     []
@@ -701,7 +704,7 @@ type QuickInfoTests() =
             fileContents,
             marker = "foo(*Marker*)",
             expected = "XMLComment",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     []
@@ -712,7 +715,7 @@ type QuickInfoTests() =
             fileContents,
             marker = "TTT",
             expected = "type TTT = Samples.FSharp.RegexTypeProvider.RegexTyped<...>\n\nFull name: File1.TTT",
-            addtlRefAssy = ["System"; System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = ["System"; PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     []
     []
@@ -727,7 +730,7 @@ type QuickInfoTests() =
             fileContents,
             marker = "reaCode.Val",
             expected = """property Samples.FSharp.RegexTypeProvider.RegexTyped<...>.MatchType.AreaCode: System.Text.RegularExpressions.Group""",
-            addtlRefAssy = ["System"; System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            addtlRefAssy = ["System"; PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
     // Regression for 2948
     []
@@ -2962,9 +2965,9 @@ query."
         this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker5*)", "value param")
         this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker6*)", "value param")
         this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker7*)", "Param1 of string",
-                                                     addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+                                                     addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
         this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker8*)", "Ignored",
-                                                     addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+                                                     addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
 
     member private this.VerifyUsingFsTestLib fileContent queries crossProject =
         use _guard = this.UsingNewVS()
@@ -3679,26 +3682,7 @@ query."
         this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Mark2*)", "Calls EventBuilder.ScanSumBy")
 
 
-(*------------------------------------------IDE automation ends here ---------------------------------------------------*)
-
-// Allow the QuickInfoTests run under different context
-namespace UnitTests.Tests.LanguageService.QuickInfo
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[] 
-[]
-type ``MSBuild`` = 
-   inherit QuickInfoTests
-   new() = { inherit QuickInfoTests(VsOpts = fst (Models.MSBuild())); }
-
 // Context project system
 [] 
-[]
-type ``ProjectSystem`` = 
-    inherit QuickInfoTests
-    new() = { inherit QuickInfoTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
diff --git a/vsintegration/src/unittests/Tests.LanguageService.QuickParse.fs b/vsintegration/src/unittests/Tests.LanguageService.QuickParse.fs
index 5591604ef04..953c0f9371c 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.QuickParse.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.QuickParse.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests
+namespace Tests.LanguageService
 
 open System
 open System.IO
diff --git a/vsintegration/src/unittests/Tests.LanguageService.Script.fs b/vsintegration/src/unittests/Tests.LanguageService.Script.fs
index ae7cdaaa73f..d8381c51da9 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.Script.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.Script.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.Script
 
 open System
 open System.IO
@@ -10,8 +10,10 @@ open Salsa.VsOpsUtils
 open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
-type ScriptTests() as this = 
+[] 
+type UsingMSBuild() as this = 
     inherit LanguageServiceBaseTests() 
 
     let notAA l = None,l
@@ -230,7 +232,7 @@ type ScriptTests() as this =
                          "open System.Transactions"
                          ]
         AssertNoErrorsOrWarnings(project)
-        gpatcc.AssertExactly(notAA[file],notAA[file], true (* expectDelete, because dependent DLL set changed *))
+        gpatcc.AssertExactly(notAA[file],notAA[file], true (* expectCreate, because dependent DLL set changed *))
 
     // FEATURE: Adding a #load to a file will cause types from that file to be visible in intellisense
     []
@@ -350,7 +352,7 @@ type ScriptTests() as this =
         SaveFileToDisk(file)
         TakeCoffeeBreak(this.VS)
         VerifyErrorListContainedExpetedStr("Transactions",project)
-        gpatcc.AssertExactly(notAA[file], notAA[file], true (* expectDelete, because dependent DLL set changed *))
+        gpatcc.AssertExactly(notAA[file], notAA[file], true (* expectCreate, because dependent DLL set changed *))
     
 
 
@@ -920,13 +922,13 @@ type ScriptTests() as this =
         let (project, file) = createSingleFileFsxFromLines code
         MoveCursorToEndOfMarker(file, "System.ConsoleModifiers.Sh")
         let tooltip = GetQuickInfoAtCursor file
-        AssertContains(tooltip, @"[Signature:F:System.ConsoleModifiers.Shift]") // A message from the mock IdealDocumentationProvider
+        AssertContains(tooltip, @"[Signature:F:System.ConsoleModifiers.Shift]") // A message from the mock IDocumentationBuilder
         AssertContains(tooltip, @"[Filename:") 
         AssertContains(tooltip, @"mscorlib.dll]") // The assembly we expect the documentation to get taken from     
         
         MoveCursorToEndOfMarker(file, "(3).ToString().Len")
         let tooltip = GetQuickInfoAtCursor file
-        AssertContains(tooltip, @"[Signature:P:System.String.Length]") // A message from the mock IdealDocumentationProvider
+        AssertContains(tooltip, @"[Signature:P:System.String.Length]") // A message from the mock IDocumentationBuilder
         AssertContains(tooltip, @"[Filename:") 
         AssertContains(tooltip, @"mscorlib.dll]") // The assembly we expect the documentation to get taken from  
 
@@ -1225,11 +1227,11 @@ type ScriptTests() as this =
                                      ]
         let (project, file) = createSingleFileFsxFromLines code
         let projectFolder = ProjectDirectory(project)
-        let fas = GetCheckOptionsOfScript(file)
-        AssertArrayContainsPartialMatchOf(fas.ProjectOptions, "--noframework")
-        AssertArrayContainsPartialMatchOf(fas.ProjectOptions, "System.Runtime.Remoting.dll")
-        AssertArrayContainsPartialMatchOf(fas.ProjectOptions, "System.Transactions.dll")
-        AssertArrayContainsPartialMatchOf(fas.ProjectOptions, "FSharp.Compiler.Interactive.Settings.dll")
+        let fas = GetProjectOptionsOfScript(file)
+        AssertArrayContainsPartialMatchOf(fas.OtherOptions, "--noframework")
+        AssertArrayContainsPartialMatchOf(fas.OtherOptions, "System.Runtime.Remoting.dll")
+        AssertArrayContainsPartialMatchOf(fas.OtherOptions, "System.Transactions.dll")
+        AssertArrayContainsPartialMatchOf(fas.OtherOptions, "FSharp.Compiler.Interactive.Settings.dll")
         Assert.AreEqual(Path.Combine(projectFolder,"File1.fsx"), fas.ProjectFileNames.[0])
         Assert.AreEqual(1, fas.ProjectFileNames.Length)
 
@@ -1376,7 +1378,11 @@ type ScriptTests() as this =
 #if VS_VERSION_DEV12
             "4.3.1.0"
 #else
+#if VS_VERSION_DEV14
             "4.4.0.0"
+#else
+            "4.4.1.0"
+#endif
 #endif
         PlaceIntoProjectFileBeforeImport
             (project, sprintf @"
@@ -1611,7 +1617,7 @@ type ScriptTests() as this =
                                      ]
         let refs = 
             [
-                System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")
+                PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")
             ]
         let (_, project, file) = this.CreateSingleFileProject(code, references = refs)
         TakeCoffeeBreak(this.VS)
@@ -1619,7 +1625,7 @@ type ScriptTests() as this =
 
     member public this.TypeProviderDisposalSmokeTest(clearing) =
         use _guard = this.UsingNewVS()
-        let providerAssemblyName = System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")
+        let providerAssemblyName = PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")
         let providerAssembly = System.Reflection.Assembly.LoadFrom providerAssemblyName
         Assert.IsNotNull(providerAssembly, "provider assembly should not be null")
         let providerCounters = providerAssembly.GetType("DummyProviderForLanguageServiceTesting.GlobalCounters")
@@ -1628,6 +1634,8 @@ type ScriptTests() as this =
         Assert.IsNotNull(totalCreationsMeth, "totalCreationsMeth should not be null")
         let totalDisposalsMeth = providerCounters.GetMethod("GetTotalDisposals")
         Assert.IsNotNull(totalDisposalsMeth, "totalDisposalsMeth should not be null")
+        let checkConfigsMeth = providerCounters.GetMethod("CheckAllConfigsDisposed")
+        Assert.IsNotNull(checkConfigsMeth, "checkConfigsMeth should not be null")
 
         let providerCounters2 = providerAssembly.GetType("Microsoft.FSharp.TypeProvider.Emit.GlobalCountersForInvalidation")
         Assert.IsNotNull(providerCounters2, "provider counters #2 module should not be null")
@@ -1638,6 +1646,7 @@ type ScriptTests() as this =
 
         let totalCreations() = totalCreationsMeth.Invoke(null, [| |]) :?> int
         let totalDisposals() = totalDisposalsMeth.Invoke(null, [| |]) :?> int
+        let checkConfigsDisposed() = checkConfigsMeth.Invoke(null, [| |]) |> ignore
         let totalInvaldiationHandlersAdded() = totalInvaldiationHandlersAddedMeth.Invoke(null, [| |]) :?> int
         let totalInvaldiationHandlersRemoved() = totalInvaldiationHandlersRemovedMeth.Invoke(null, [| |]) :?> int
 
@@ -1656,7 +1665,7 @@ type ScriptTests() as this =
         for i in 1 .. 50 do 
             let solution = this.CreateSolution()
             let project = CreateProject(solution,"testproject" + string (i % 20))    
-            this.AddAssemblyReference(project, System.IO.Path.Combine(System.Environment.CurrentDirectory, @"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll"))
+            this.AddAssemblyReference(project, PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll"))
             let fileName = sprintf "File%d.fs" i
             let file1 = AddFileFromText(project,fileName, ["let x" + string i + " = N1.T1()" ])    
             let file = OpenFile(project,fileName)
@@ -1693,6 +1702,7 @@ type ScriptTests() as this =
         ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients(this.VS)
         Assert.IsTrue(countDisposals() = 50, "Check6b, at end, countDisposals() = 50 after explicit clearing")
         Assert.IsTrue(countInvaldiationHandlersAdded() - countInvaldiationHandlersRemoved() = 0, "Check6b2, at end, all invalidation handlers removed after explicit cleraring")
+        checkConfigsDisposed()
 
     []
     []
@@ -1702,25 +1712,9 @@ type ScriptTests() as this =
     []
     member public this.``TypeProvider.Disposal.SmokeTest2``() = this.TypeProviderDisposalSmokeTest(false)
 
-//Allow the ScriptTests run under different context
-namespace UnitTests.Tests.LanguageService.Script
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[] 
-[]
-type ``MSBuild`` = 
-   inherit ScriptTests
-   new() = { inherit ScriptTests(VsOpts = fst (Models.MSBuild())); }
 
 // Context project system
 [] 
-[]
-type ``ProjectSystem`` = 
-    inherit ScriptTests
-    new() = { inherit ScriptTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
 
diff --git a/vsintegration/src/unittests/Tests.LanguageService.Squiggles.fs b/vsintegration/src/unittests/Tests.LanguageService.Squiggles.fs
index 2c5db4199be..fc2d99e18ba 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.Squiggles.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.Squiggles.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.Squiggles
 
 open System
 open System.IO
@@ -10,8 +10,10 @@ open Salsa.VsOpsUtils
 open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
 open UnitTests.TestLib.LanguageService
+open UnitTests.TestLib.ProjectSystem
 
-type SquiggleTests() as this= 
+[] 
+type UsingMSBuild() as this= 
     inherit LanguageServiceBaseTests()
 
     #if FX_ATLEAST_45
@@ -297,7 +299,7 @@ type X() =
     []
     []
     member this.``TypeProvider.Error.VerbatimStringAccident.GoodErrorMessage``() = 
-        let r = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
+        let r = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")]
         let (sln, proj, file) = this.CreateSingleFileProject("""type foo = N1.T<@"foo">""", references = r)
         TakeCoffeeBreak(this.VS)// Wait for the background compiler to catch up.
         MoveCursorToStartOfMarker(file, "1")
@@ -313,49 +315,16 @@ type X() =
     []
     []
     member public this.``TypeProvider.WarningAboutEmptyAssembly`` () =
-        let emptyLoc = System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\EmptyAssembly.dll")
+        let emptyLoc = PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\EmptyAssembly.dll")
         this.VerifySquiggleAtStartOfMarker(
             fileContents = "type foo = N1.T<\"foo\"",
             marker = "t",
             expectedSquiggle= (Microsoft.VisualStudio.FSharp.LanguageService.Severity.Warning,
                                 "Referenced assembly '"+emptyLoc+"' has assembly level attribute 'Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute' but no public type provider classes were found"),
             // ensure that if you referenced two TP assemblies, one of which contained TPs, and the other did not, then you get the warning about a TP assembly with no TPs
-            addtlRefAssy = [emptyLoc; System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")],
+            addtlRefAssy = [emptyLoc; PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")],
             thereShouldBeNoOtherSquigglesHere=true)      
 
-    []
-    []
-    member public this.``TypeProvider.Approvals.ErrorWhenNotApproved`` () =
-        try
-            use _guard = this.UsingNewVS()
-            ClearAllTypeProviderApprovals()                
-            let solution = this.CreateSolution()
-            let project = CreateProject(solution,"testproject")
-            this.AddAssemblyReference(project,System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll"))
-            let file1 = AddFileFromText(project,"File1.fs", ["type foo = N1.T<"])
-            let file1 = OpenFile(project,"File1.fs")
-            MoveCursorToEndOfMarker(file1,"t")
-            let errs = GetSquigglesAtCursor(file1)
-            if not(errs |> List.exists (fun (sev,msg) -> 
-                        sev=Microsoft.VisualStudio.FSharp.LanguageService.Severity.Warning 
-                        && msg.Contains("is not trusted and will not be loaded for security reasons. This may cause subsequent build errors."))) then
-                Assert.Fail "did not find expected squiggle"
-            if errs.Length <> 1 then
-                Assert.Fail(sprintf "found extra squiggles; all are %A" errs)
-            // if multiple files are open, they all get the warning
-            let file2 = AddFileFromText(project,"File2.fs", ["let x = 3"])
-            let file2 = OpenFile(project,"File2.fs")
-            MoveCursorToEndOfMarker(file2,"l")
-            let errs = GetSquigglesAtCursor(file2)
-            if not(errs |> List.exists (fun (sev,msg) -> 
-                        sev=Microsoft.VisualStudio.FSharp.LanguageService.Severity.Warning 
-                        && msg.Contains("is not trusted and will not be loaded for security reasons. This may cause subsequent build errors."))) then
-                Assert.Fail "did not find expected squiggle"
-            if errs.Length <> 1 then
-                Assert.Fail(sprintf "found extra squiggles; all are %A" errs)
-        finally
-            ApproveAllMockTypeProviders()
-
     []
     []
     []
@@ -365,7 +334,7 @@ type X() =
             marker = "N1",
             expectedSquiggle= (Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error,
                               "The static parameter 'Param1' of the provided type or method 'T' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. 'T'."),
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])      
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])      
 
     []
     []
@@ -376,7 +345,7 @@ type X() =
             marker = "N1",
             expectedSquiggle= (Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error,
                               "The static parameter 'ParamIgnored' of the provided type or method 'T' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. 'T'."),
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])      
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])      
 
     []
     []
@@ -389,7 +358,7 @@ type X() =
             marker = "let",
             expectedSquiggle= (Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error,
                               "Expected type argument or static argument"),
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])      
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])      
 
     []
     []
@@ -402,7 +371,7 @@ type X() =
             marker = "let",
             expectedSquiggle= (Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error,
                               "Incomplete structured construct at or before this point in type arguments. Expected ',', '>' or other token."),
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])      
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])      
 
     []
     []
@@ -419,7 +388,7 @@ type X() =
                                "    string    \n"+
                                "but here has type\n"+
                                "    int    "),
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])   
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])   
 
     
     []
@@ -432,7 +401,7 @@ type X() =
             fileContents = """
                            type foo = N1(*Marker*).T< const "Hello World",2>""",
             marker = "(*Marker*)",
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])     
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])     
     
    
     []
@@ -451,7 +420,7 @@ type X() =
                                 "offside of context started at position (2:39). "+
                                 "Try indenting this token further or using "+
                                 "standard formatting conventions."),
-            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])     
+            addtlRefAssy = [PathRelativeToTestAssembly(@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])     
 
 
     []
@@ -899,25 +868,15 @@ type X() =
                                 ["#light"
                                  "module Module2"]
                                  
-        // Assertion below is very subtle.  Here's what happened.  After opening file1, we opened file2.  This changed the contents 
-        // of the project file, and focused file2 (and unfocused file1).  Since then, we have never done anything to file1, not even
-        // OnIdle (which salsa only does for currently-focused-file), and thus when we touch file1 again, it falls into the logic
-        // in servicem.fs here:
-        // Furthermore, if we know our project is out-of-date, this may mean that dependent DLLs may have changed on disk without us knowing, 
-        // since we only just started listening for those changes a moment ago in the SetDependencyFiles() call.  So behave just as if we were 
-        // just notified that those dependency files changed.  (In the future, it would be good to partition a source file's dependencies into
-        // 'project' dependencies (that only depend on the IProjectSite, e.g. project/asseembly references) and 'source' dependencies (e.g. #r's).)
-        //if outOfDateProjectFileNames.Contains(projectFileName) then
-        //    this.Parser.InvalidateConfiguration(checkOptions)
-        // which assumes 'the worst' and calls InvalidateConfiguration (which calls InvalidateBuildCacheEntry, which deletes the IncrementalBuilder).
-        // I am happy to have this under test.
-        // The next test below (Case B) simulates behavior more like VS, which would be idling all the open files.
-        gpatcc.AssertExactly(AA[file1;file2], AA[file1;file2], true)
+        gpatcc.AssertExactly(notAA[], notAA[])
         let gpatcc = GlobalParseAndTypeCheckCounter.StartNew(this.VS)
         printfn "Fixing file1 on disk"
         SaveFileToDisk file1      
         gpatcc.AssertExactly(notAA[file1],notAA[file1;file2])
         let gpatcc = GlobalParseAndTypeCheckCounter.StartNew(this.VS)
+        SwitchToFile this.VS file2
+        TakeCoffeeBreak(this.VS)
+
         MoveCursorToEndOfMarker(file2,"open Modu") // This switches focus back to file2
         TakeCoffeeBreak(this.VS)
         let ans = GetSquiggleAtCursor(file2)
@@ -993,24 +952,8 @@ type X() =
         | _ -> Assert.Fail("No squiggle seen")  
 
 
-//Allow the SquiggleTests run under different context
-namespace UnitTests.Tests.LanguageService.Squiggle
-open UnitTests.Tests.LanguageService
-open UnitTests.TestLib.LanguageService
-open UnitTests.TestLib.ProjectSystem
-open NUnit.Framework
-open Salsa.Salsa
-
-// context msbuild
-[] 
-[]
-type ``MSBuild`` = 
-   inherit SquiggleTests
-   new() = { inherit SquiggleTests(VsOpts = fst (Models.MSBuild())); }
 
 // Context project system
 [] 
-[]
-type ``ProjectSystem`` = 
-    inherit SquiggleTests
-    new() = { inherit SquiggleTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
diff --git a/vsintegration/src/unittests/Tests.LanguageService.TimeStamp.fs b/vsintegration/src/unittests/Tests.LanguageService.TimeStamp.fs
index 5484632296c..a7c4d5e8bf4 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.TimeStamp.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.TimeStamp.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.TimeStamp
 
 open System
 open System.IO
@@ -11,7 +11,8 @@ open UnitTests.TestLib.Salsa
 open UnitTests.TestLib.Utils
 open UnitTests.TestLib.LanguageService
 
-type TimeStampTests()  = 
+[]
+type UsingMSBuild()  = 
     inherit LanguageServiceBaseTests()
 
     (* Timings ----------------------------------------------------------------------------- *)
@@ -186,6 +187,7 @@ type TimeStampTests()  =
         // Add a new reference project2->project1. There should be no completions because Mary doesn't exist yet.
         this.AddAssemblyReference(project2,project1Dll.ExecutableOutput)
         TakeCoffeeBreak(this.VS) // Dependencies between projects get registered for file-watching during OnIdle processing
+        SwitchToFile this.VS file2
         MoveCursorToEndOfMarker(file2,"File1.File1.")
         let completions = AutoCompleteAtCursor(file2)
         Assert.AreEqual(0, completions.Length)
@@ -198,6 +200,7 @@ type TimeStampTests()  =
         SaveFileToDisk file1      
         time1 Build project1 "Time to build project1 second time" |> ignore                       
         TakeCoffeeBreak(this.VS) // Give enough time to catch up             
+        SwitchToFile this.VS file2
         MoveCursorToEndOfMarker(file2,"File1.File1.")
         TakeCoffeeBreak(this.VS) // Give enough time to catch up             
         let completions = AutoCompleteAtCursor(file2)
@@ -238,6 +241,7 @@ type TimeStampTests()  =
         // Add a new reference project2->project1. There should be no completions because Mary doesn't exist yet.
         this.AddAssemblyReference(project2,project1DllRelative)
         TakeCoffeeBreak(this.VS) // Dependencies between projects get registered for file-watching during OnIdle processing
+        SwitchToFile this.VS file2
         MoveCursorToEndOfMarker(file2,"File1.File1.")
         let completions = AutoCompleteAtCursor(file2)
         Assert.AreEqual(0, completions.Length)
@@ -250,6 +254,7 @@ type TimeStampTests()  =
         SaveFileToDisk file1      
         time1 Build project1 "Time to build project1 second time" |> ignore                       
         TakeCoffeeBreak(this.VS) // Give enough time to catch up             
+        SwitchToFile this.VS file2
         MoveCursorToEndOfMarker(file2,"File1.File1.")
         TakeCoffeeBreak(this.VS) // Give enough time to catch up             
         let completions = AutoCompleteAtCursor(file2)
@@ -290,6 +295,7 @@ type TimeStampTests()  =
         TakeCoffeeBreak(this.VS) // Dependencies between projects get registered for file-watching during OnIdle processing
         SetConfigurationAndPlatform(project1, "Debug|AnyCPU")  // maybe due to msbuild bug on dev10, we must set config/platform when building with ProjectReferences
         SetConfigurationAndPlatform(project2, "Debug|AnyCPU")  // maybe due to msbuild bug on dev10, we must set config/platform when building with ProjectReferences
+        SwitchToFile this.VS file2
         MoveCursorToEndOfMarker(file2,"File1.File1.")
         let completions = AutoCompleteAtCursor(file2)
         Assert.AreEqual(0, completions.Length)
@@ -302,6 +308,7 @@ type TimeStampTests()  =
         SaveFileToDisk file1   
         time1 Build project1 "Time to build project1 second time" |> ignore                       
         TakeCoffeeBreak(this.VS) // Give enough time to catch up             
+        SwitchToFile this.VS file2
         MoveCursorToEndOfMarker(file2,"File1.File1.")
         TakeCoffeeBreak(this.VS) // Give enough time to catch up             
         let completions = AutoCompleteAtCursor(file2)
@@ -310,23 +317,14 @@ type TimeStampTests()  =
 
 
 //Allow the TimeStampTests run under different context
-namespace UnitTests.Tests.LanguageService.TimeStamp
-open UnitTests.Tests.LanguageService
+namespace Tests.LanguageService.TimeStamp
+open Tests.LanguageService
 open UnitTests.TestLib.LanguageService
 open UnitTests.TestLib.ProjectSystem
 open NUnit.Framework
 open Salsa.Salsa
 
-// context msbuild
-[] 
-[]
-type ``MSBuild`` = 
-   inherit TimeStampTests
-   new() = { inherit TimeStampTests(VsOpts = fst (Models.MSBuild())); }
-
 // Context project system
 [] 
-[]
-type ``ProjectSystem`` = 
-    inherit TimeStampTests
-    new() = { inherit TimeStampTests(VsOpts = LanguageServiceExtension.ProjectSystem); } 
\ No newline at end of file
+type UsingProjectSystem() = 
+    inherit UsingMSBuild(VsOpts = LanguageServiceExtension.ProjectSystemTestFlavour)
\ No newline at end of file
diff --git a/vsintegration/src/unittests/Tests.Powerpack.fs b/vsintegration/src/unittests/Tests.Powerpack.fs
index 89204ddb95e..677978711f3 100644
--- a/vsintegration/src/unittests/Tests.Powerpack.fs
+++ b/vsintegration/src/unittests/Tests.Powerpack.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace UnitTests.Tests.PowerPack
 
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.Configs.fs b/vsintegration/src/unittests/Tests.ProjectSystem.Configs.fs
index 2ef7ac30076..9ac1560a56b 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.Configs.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.Configs.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.ProjectSystem
+namespace Tests.ProjectSystem
 
 // System namespaces
 open System
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.Miscellaneous.fs b/vsintegration/src/unittests/Tests.ProjectSystem.Miscellaneous.fs
index beb10055b51..744e5e823fd 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.Miscellaneous.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.Miscellaneous.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.ProjectSystem
+namespace Tests.ProjectSystem
 
 // System namespaces
 open System
@@ -329,25 +329,32 @@ type Miscellaneous() =
             let errors = List.filter (fun (s:string) -> s.Contains(expectedError)) !outputWindowPaneErrors    
             AssertEqual 1 (List.length errors)
         )        
-                
-        
+
+    member public this.``DebuggingDLLFailsFunc``() =
+        this.MakeProjectAndDoWithProjectFileAndConfigChangeNotifier(["foo.fs"], [], 
+               this.MSBuildProjectBoilerplate "Library",  
+               (fun project ccn projFileName ->
+                   ccn((project :> IVsHierarchy), "Debug|Any CPU")
+                   let fooPath = Path.Combine(project.ProjectFolder, "foo.fs")
+                   File.AppendAllText(fooPath, "#light")                
+                   let mutable configurationInterface : IVsCfg = null
+                   let hr = project.ConfigProvider.GetCfgOfName("Debug", "Any CPU", &configurationInterface)
+                   AssertEqual VSConstants.S_OK hr                
+                   let config = configurationInterface :?> ProjectConfig
+                   config.DebugLaunch(0ul) |> ignore
+                   ()
+               ))
+
+#if NUNIT_V2
     [][)>]
+    member public this.``DebuggingDLLFails``() = this.``DebuggingDLLFailsFunc``()
+#else
+    []
     member public this.``DebuggingDLLFails``() =
-        this.MakeProjectAndDoWithProjectFileAndConfigChangeNotifier(["foo.fs"], [], 
-            this.MSBuildProjectBoilerplate "Library",  
-            (fun project ccn projFileName ->
-                ccn((project :> IVsHierarchy), "Debug|Any CPU")
-                let fooPath = Path.Combine(project.ProjectFolder, "foo.fs")
-                File.AppendAllText(fooPath, "#light")                
-                let mutable configurationInterface : IVsCfg = null
-                let hr = project.ConfigProvider.GetCfgOfName("Debug", "Any CPU", &configurationInterface)
-                AssertEqual VSConstants.S_OK hr                
-                let config = configurationInterface :?> ProjectConfig
-                config.DebugLaunch(0ul) |> ignore
-                ()
-        ))
-    
-    []    
+        Assert.That((fun () -> this.``DebuggingDLLFailsFunc``()), NUnit.Framework.Throws.TypeOf(typeof))
+#endif
+
+    []
     member public this.``DebuggingEXESucceeds``() =
         this.MakeProjectAndDoWithProjectFileAndConfigChangeNotifier(["foo.fs"], [], 
             this.MSBuildProjectBoilerplate "Exe",  
@@ -637,16 +644,6 @@ type Miscellaneous() =
         )
 
 
-
-
-
-
-
-
-
-
-
-
 module Regression5312 = 
     // Regression testing ICONS in project system dll
     open System
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.MultiTargeting.fs b/vsintegration/src/unittests/Tests.ProjectSystem.MultiTargeting.fs
index 10ead201e2e..ead04ac8e57 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.MultiTargeting.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.MultiTargeting.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.ProjectSystem
+namespace Tests.ProjectSystem
 
 open System
 open System.Collections.Generic
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.Project.fs b/vsintegration/src/unittests/Tests.ProjectSystem.Project.fs
index 9f35257c3c0..ff5a91ca78d 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.Project.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.Project.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.ProjectSystem
+namespace Tests.ProjectSystem
 
 // System namespaces
 open System
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.ProjectItems.fs b/vsintegration/src/unittests/Tests.ProjectSystem.ProjectItems.fs
index f8711886aa0..5264eebbca2 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.ProjectItems.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.ProjectItems.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.ProjectSystem
+namespace Tests.ProjectSystem
 
 open System
 open System.IO
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.References.fs b/vsintegration/src/unittests/Tests.ProjectSystem.References.fs
index 01c83a940d4..35c8b7d5ced 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.References.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.References.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.ProjectSystem
+namespace Tests.ProjectSystem
 
 open System
 open System.Collections.Generic
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.RoundTrip.fs b/vsintegration/src/unittests/Tests.ProjectSystem.RoundTrip.fs
index 6fa28965eba..1b294410bbb 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.RoundTrip.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.RoundTrip.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.ProjectSystem
+namespace Tests.ProjectSystem
 
 open System
 open System.IO
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.UpToDate.fs b/vsintegration/src/unittests/Tests.ProjectSystem.UpToDate.fs
index 72fa6922f1c..5e0550d26bd 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.UpToDate.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.UpToDate.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests.ProjectSystem
+namespace Tests.ProjectSystem
 
 // System namespaces
 open System
@@ -388,7 +388,7 @@ type ``UpToDate PreserveNewest`` () =
         let test (input, inputTimestamp) (output, outputTimestamp) =
             let logs = ref []
             let outputPanel = VsMocks.vsOutputWindowPane(logs)
-            let logger = OutputWindowLogger.CreateUpToDateCheckLogger(outputPanel)
+            let logger = OutputWindowLogger((fun () -> true), outputPanel)
         
             let tryTimestamp (path: string) (_l: OutputWindowLogger) =
                 let toN = function Some d -> Nullable<_>(d) | None -> Nullable<_>()
diff --git a/vsintegration/src/unittests/Tests.TaskReporter.fs b/vsintegration/src/unittests/Tests.TaskReporter.fs
index ab5e80f4628..5bc53a95b53 100644
--- a/vsintegration/src/unittests/Tests.TaskReporter.fs
+++ b/vsintegration/src/unittests/Tests.TaskReporter.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests
+namespace Tests.LanguageService.ErrorList
 
 open NUnit.Framework
 open System
diff --git a/vsintegration/src/unittests/Tests.TypeProvidersImpl.fs b/vsintegration/src/unittests/Tests.TypeProvidersImpl.fs
index 20d4716069d..618253f4b96 100644
--- a/vsintegration/src/unittests/Tests.TypeProvidersImpl.fs
+++ b/vsintegration/src/unittests/Tests.TypeProvidersImpl.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests
+namespace Tests.DataTypeProviders
 
 open System.IO
 open NUnit.Framework
@@ -10,7 +10,7 @@ module CF = Microsoft.FSharp.Data.TypeProviders.DesignTime.ConfigFiles
 module Util = Microsoft.FSharp.Data.TypeProviders.Utility.Util
 
 []
-type TypeProviderImplTests() = 
+type ImplDetails() = 
     
     []
     member public this.``SanitizeFileName``() = 
diff --git a/vsintegration/src/unittests/Tests.Watson.fs b/vsintegration/src/unittests/Tests.Watson.fs
index 3f202302915..00013946b78 100644
--- a/vsintegration/src/unittests/Tests.Watson.fs
+++ b/vsintegration/src/unittests/Tests.Watson.fs
@@ -1,16 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests
-
-(*
-    Is NUNIT just disappearing when you run one of these tests?
-    There are paths in the compiler that call Process.Exit, if we manage to hit one of these paths then the process (nunit-gui.exe)
-    will be exited:
-    
-    Put a break point on:
-    
-        System.Environment.Exit(n)  
-*)    
+namespace Tests.Compiler.Watson
 
 #nowarn "52" // The value has been copied to ensure the original is not mutated
 
@@ -27,143 +17,144 @@ type Check =
         try 
             try
 #if DEBUG
-                Microsoft.FSharp.Compiler.Build.FullCompiler.showAssertForUnexpectedException := false
+                Microsoft.FSharp.Compiler.CompileOps.CompilerService.showAssertForUnexpectedException := false
 #endif
                 if (File.Exists("watson-test.fs")) then
                     File.Delete("watson-test.fs")
                 File.WriteAllText("watson-test.fs", "// Hello watson" )
-                let _code = Microsoft.FSharp.Compiler.CommandLineMain.main([| "--simulateException:"+simulationCode; "watson-test.fs"|]) 
+                let argv = [| "--simulateException:"+simulationCode; "watson-test.fs"|]
+                let _code = Microsoft.FSharp.Compiler.Driver.mainCompile (argv, false, Microsoft.FSharp.Compiler.ErrorLogger.QuitProcessExiter)
                 ()
             with 
             | :? 'TException as e -> 
                 let msg = e.ToString();
-                if msg.Contains("ReportTime") || msg.Contains("TypecheckOneInput") then ()
+                if msg.Contains("ReportTime") || msg.Contains("TypeCheckOneInput") then ()
                 else
                     printfn "%s" msg
                     Assert.Fail("The correct callstack was not reported to watson.")
         finally               
 #if DEBUG
-            Microsoft.FSharp.Compiler.Build.FullCompiler.showAssertForUnexpectedException := true
+            Microsoft.FSharp.Compiler.CompileOps.CompilerService.showAssertForUnexpectedException := true 
 #endif
         File.Delete("watson-test.fs")
 
 
 [] 
-type Watson() = 
+module WatsonTests = 
 
     []
-    member public w.FscOutOfMemory() = Check.FscLevelException("fsc-oom")
+    let FscOutOfMemory() = Check.FscLevelException("fsc-oom")
 
     []
-    member public w.FscArgumentNull() = Check.FscLevelException("fsc-an")        
+    let FscArgumentNull() = Check.FscLevelException("fsc-an")        
     
     []
-    member public w.FscInvalidOperation() = Check.FscLevelException("fsc-invop")        
+    let FscInvalidOperation() = Check.FscLevelException("fsc-invop")        
 
 // As of .NET 4.0 some exception types cannot be caught. As a result, we cannot test this case. I did visually confirm a Watson report is sent, though.
 //    []
-//    member public w.FscAccessViolation() = Check.FscLevelException("fsc-ac")        
+//    let FscAccessViolation() = Check.FscLevelException("fsc-ac")        
 
     []
-    member public w.FscArgumentOutOfRange() = Check.FscLevelException("fsc-aor")        
+    let FscArgumentOutOfRange() = Check.FscLevelException("fsc-aor")        
 
     []
-    member public w.FscDivideByZero() = Check.FscLevelException("fsc-dv0")        
+    let FscDivideByZero() = Check.FscLevelException("fsc-dv0")        
 
     []
-    member public w.FscNotFiniteNumber() = Check.FscLevelException("fsc-nfn")        
+    let FscNotFiniteNumber() = Check.FscLevelException("fsc-nfn")        
 
     []
-    member public w.FscOverflow() = Check.FscLevelException("fsc-oe")        
+    let FscOverflow() = Check.FscLevelException("fsc-oe")        
 
     []
-    member public w.FscArrayTypeMismatch() = Check.FscLevelException("fsc-atmm")        
+    let FscArrayTypeMismatch() = Check.FscLevelException("fsc-atmm")        
 
     []
-    member public w.FscBadImageFormat() = Check.FscLevelException("fsc-bif")        
+    let FscBadImageFormat() = Check.FscLevelException("fsc-bif")        
 
     []
-    member public w.FscKeyNotFound() = Check.FscLevelException("fsc-knf")        
+    let FscKeyNotFound() = Check.FscLevelException("fsc-knf")        
 
     []
-    member public w.FscIndexOutOfRange() = Check.FscLevelException("fsc-ior")        
+    let FscIndexOutOfRange() = Check.FscLevelException("fsc-ior")        
 
     []
-    member public w.FscInvalidCast() = Check.FscLevelException("fsc-ic")        
+    let FscInvalidCast() = Check.FscLevelException("fsc-ic")        
 
     []
-    member public w.FscInvalidProgram() = Check.FscLevelException("fsc-ip")        
+    let FscInvalidProgram() = Check.FscLevelException("fsc-ip")        
 
     []
-    member public w.FscMemberAccess() = Check.FscLevelException("fsc-ma")        
+    let FscMemberAccess() = Check.FscLevelException("fsc-ma")        
 
     []
-    member public w.FscNotImplemented() = Check.FscLevelException("fsc-ni")        
+    let FscNotImplemented() = Check.FscLevelException("fsc-ni")        
 
     []
-    member public w.FscNullReference() = Check.FscLevelException("fsc-nr")        
+    let FscNullReference() = Check.FscLevelException("fsc-nr")        
 
     []
-    member public w.FscOperationCancelled() = Check.FscLevelException("fsc-oc")        
+    let FscOperationCancelled() = Check.FscLevelException("fsc-oc")        
     
     //[]
-    //member public w.FscFailure() = Check.FscLevelException("fsc-fail")            
+    //let FscFailure() = Check.FscLevelException("fsc-fail")            
       
     []
-    member public w.TypeCheckOutOfMemory() = Check.FscLevelException("tc-oom")
+    let TypeCheckOutOfMemory() = Check.FscLevelException("tc-oom")
 
     []
-    member public w.TypeCheckArgumentNull() = Check.FscLevelException("tc-an")        
+    let TypeCheckArgumentNull() = Check.FscLevelException("tc-an")        
     
     []
-    member public w.TypeCheckInvalidOperation() = Check.FscLevelException("tc-invop")        
+    let TypeCheckInvalidOperation() = Check.FscLevelException("tc-invop")        
 
 // As of .NET 4.0 some exception types cannot be caught. As a result, we cannot test this case. I did visually confirm a Watson report is sent, though.
 //    []
-//    member public w.TypeCheckAccessViolation() = Check.FscLevelException("tc-ac")        
+//    let TypeCheckAccessViolation() = Check.FscLevelException("tc-ac")        
 
     []
-    member public w.TypeCheckArgumentOutOfRange() = Check.FscLevelException("tc-aor")        
+    let TypeCheckArgumentOutOfRange() = Check.FscLevelException("tc-aor")        
 
     []
-    member public w.TypeCheckDivideByZero() = Check.FscLevelException("tc-dv0")        
+    let TypeCheckDivideByZero() = Check.FscLevelException("tc-dv0")        
 
     []
-    member public w.TypeCheckNotFiniteNumber() = Check.FscLevelException("tc-nfn")        
+    let TypeCheckNotFiniteNumber() = Check.FscLevelException("tc-nfn")        
 
     []
-    member public w.TypeCheckOverflow() = Check.FscLevelException("tc-oe")        
+    let TypeCheckOverflow() = Check.FscLevelException("tc-oe")        
 
     []
-    member public w.TypeCheckArrayTypeMismatch() = Check.FscLevelException("tc-atmm")        
+    let TypeCheckArrayTypeMismatch() = Check.FscLevelException("tc-atmm")        
 
     []
-    member public w.TypeCheckBadImageFormat() = Check.FscLevelException("tc-bif")        
+    let TypeCheckBadImageFormat() = Check.FscLevelException("tc-bif")        
 
     []
-    member public w.TypeCheckKeyNotFound() = Check.FscLevelException("tc-knf")        
+    let TypeCheckKeyNotFound() = Check.FscLevelException("tc-knf")        
 
     []
-    member public w.TypeCheckIndexOutOfRange() = Check.FscLevelException("tc-ior")        
+    let TypeCheckIndexOutOfRange() = Check.FscLevelException("tc-ior")        
 
     []
-    member public w.TypeCheckInvalidCast() = Check.FscLevelException("tc-ic")        
+    let TypeCheckInvalidCast() = Check.FscLevelException("tc-ic")        
 
     []
-    member public w.TypeCheckInvalidProgram() = Check.FscLevelException("tc-ip")        
+    let TypeCheckInvalidProgram() = Check.FscLevelException("tc-ip")        
 
     []
-    member public w.TypeCheckMemberAccess() = Check.FscLevelException("tc-ma")        
+    let TypeCheckMemberAccess() = Check.FscLevelException("tc-ma")        
 
     []
-    member public w.TypeCheckNotImplemented() = Check.FscLevelException("tc-ni")        
+    let TypeCheckNotImplemented() = Check.FscLevelException("tc-ni")        
 
     []
-    member public w.TypeCheckNullReference() = Check.FscLevelException("tc-nr")        
+    let TypeCheckNullReference() = Check.FscLevelException("tc-nr")        
 
     []
-    member public w.TypeCheckOperationCancelled() = Check.FscLevelException("tc-oc")        
+    let TypeCheckOperationCancelled() = Check.FscLevelException("tc-oc")        
 
     []
-    member public w.TypeCheckFailure() = Check.FscLevelException("tc-fail")            
+    let TypeCheckFailure() = Check.FscLevelException("tc-fail")            
 
diff --git a/vsintegration/src/unittests/Tests.XmlDocComments.fs b/vsintegration/src/unittests/Tests.XmlDocComments.fs
index e41b317f7e1..962b84eb471 100644
--- a/vsintegration/src/unittests/Tests.XmlDocComments.fs
+++ b/vsintegration/src/unittests/Tests.XmlDocComments.fs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-namespace UnitTests.Tests
+namespace Tests.LanguageService
 
 open System
 open NUnit.Framework
@@ -11,7 +11,7 @@ open UnitTests.TestLib.Utils
 
 []
 type XmlDocComments() = 
-    inherit UnitTests.TestLib.LanguageService.LanguageServiceBaseTests(VsOpts = fst (Models.InstalledMSBuild()))
+    inherit UnitTests.TestLib.LanguageService.LanguageServiceBaseTests(VsOpts = InstalledMSBuildTestFlavour())
     // Work around an innocuous 'feature' with how QuickInfo is displayed, lines which 
     // should have a "\r\n" just have a "\r"
     let trimnewlines (str : string) = 
diff --git a/vsintegration/src/unittests/Unittests.dll.config b/vsintegration/src/unittests/Unittests.dll.config
index 67a0d2d2c1b..847de948dd9 100644
--- a/vsintegration/src/unittests/Unittests.dll.config
+++ b/vsintegration/src/unittests/Unittests.dll.config
@@ -1,5 +1,5 @@
 
-
+
 
     
         
@@ -28,7 +28,7 @@
             
             
               
-              
+              
             
         
     
diff --git a/vsintegration/src/unittests/Unittests.fsproj b/vsintegration/src/unittests/VisualFSharp.Unittests.fsproj
similarity index 87%
rename from vsintegration/src/unittests/Unittests.fsproj
rename to vsintegration/src/unittests/VisualFSharp.Unittests.fsproj
index e11d850b810..839c3284cdd 100644
--- a/vsintegration/src/unittests/Unittests.fsproj
+++ b/vsintegration/src/unittests/VisualFSharp.Unittests.fsproj
@@ -1,10 +1,11 @@
 
-
+
 
   
     ..\..\..\src
     FSharp
     true
+    VisualFSharp.Unittests
   
   
   
@@ -12,8 +13,7 @@
     2.0
     {EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}
     Library
-    Unittests
-    Unittests.fsi
+    VisualFSharp.Unittests
     LIBRARY
     58;75
     x86
@@ -62,8 +62,26 @@
     
     
     
+    
+      FsUnit.fs
+    
+    
+      Common.fs
+    
+    
+      EditorTests.fs
+    
+    
+      FileSystemTests.fs
+    
+    
+      ProjectAnalysisTests.fs
+    
+    
+      MultiProjectAnalysisTests.fs
+    
     
-        Unittests.dll.config
+      Unittests.dll.config
     
   
   
@@ -104,19 +122,10 @@
     
     
     
-    
-        True
-        $(NunitToolsLibDir)\nunit.util.dll
-    
     
-        True
-        $(NUnitLibDir)\nunit.framework.dll
-    
-    
-      {ffde9e47-9675-4498-b540-69b2583dd600}
-      Fsc
       True
-    
+      $(NUnitLibDir)\nunit.framework.dll
+    
     
       {DED3BBD7-53F4-428A-8C9F-27968E768605}
       FSharp.Core
@@ -126,11 +135,6 @@
       {702a7979-bcf9-4c41-853e-3adfc9897890}
       True
     
-    
-      {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}
-      FSharp.Compiler
-      True
-    
     
       {cb7d20c4-6506-406d-9144-5342c3595f03}
       FSharp.Data.TypeProviders
@@ -141,6 +145,11 @@
       {a437a6ec-5323-47c2-8f86-e2cac54ff152}
       True
     
+    
+      VisualFSharp.Salsa
+      {fbd4b354-dc6e-4032-8ec7-c81d8dfb1af7}
+      True
+    
     
       FSharp.LanguageService.Base
       {1c5c163c-37ea-4a3c-8ccc-0d34b74bf8ef}
@@ -161,11 +170,6 @@
       {6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}
       True
     
-    
-      Salsa
-      {fbd4b354-dc6e-4032-8ec7-c81d8dfb1af7}
-      True
-    
   
   
 
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Editor/BraceCompletion.fs b/vsintegration/src/vs/FsPkgs/FSharp.Editor/BraceCompletion.fs
index 3ee3a681328..4dff3674067 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Editor/BraceCompletion.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Editor/BraceCompletion.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.Editor
 
@@ -6,7 +6,6 @@ open System
 open System.ComponentModel.Composition
 open Microsoft.VisualStudio
 open Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.VisualStudio.FSharp.Shared
 open Microsoft.VisualStudio.Editor
 open Microsoft.VisualStudio.Shell
 open Microsoft.VisualStudio.Shell.Interop
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/vs/FsPkgs/FSharp.Editor/FSharp.Editor.fsproj
index ffa38583711..944afe5c02e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Editor/FSharp.Editor.fsproj
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Editor/FSharp.Editor.fsproj
@@ -1,5 +1,5 @@
 
-
+
 
   
     ..\..\..\..\..\src
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Editor/SmartIndent.fs b/vsintegration/src/vs/FsPkgs/FSharp.Editor/SmartIndent.fs
index 92d3d34db5a..1c9b1636fe2 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Editor/SmartIndent.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Editor/SmartIndent.fs
@@ -1,11 +1,11 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.Editor
 
 open System
 open System.ComponentModel.Composition
 open Microsoft.VisualStudio
-open Microsoft.VisualStudio.FSharp.Shared
+open Microsoft.VisualStudio.FSharp.LanguageService
 open Microsoft.VisualStudio.Shell
 open Microsoft.VisualStudio.Text
 open Microsoft.VisualStudio.Text.Editor
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Editor/TokenContext.fs b/vsintegration/src/vs/FsPkgs/FSharp.Editor/TokenContext.fs
index 12feb32c5a4..8da5b61c4f8 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Editor/TokenContext.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Editor/TokenContext.fs
@@ -1,9 +1,10 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.Editor
 
 open Microsoft.VisualStudio
 open Microsoft.VisualStudio.Editor
+open Microsoft.VisualStudio.TextManager.Interop 
 open Microsoft.VisualStudio.FSharp.LanguageService
 open Microsoft.VisualStudio.Shell
 open Microsoft.VisualStudio.Text.Editor
@@ -20,7 +21,7 @@ type internal TokenContext (serviceProvider : SVsServiceProvider, adapterService
         let hr,buffer = vsTextView.GetBuffer()
         ErrorHandler.ThrowOnFailure(hr) |> ignore
         
-        let hr,colorizer = fsLangService.GetColorizer(buffer)
+        let hr,colorizer = (fsLangService :> IVsLanguageInfo).GetColorizer(buffer)
         ErrorHandler.ThrowOnFailure(hr) |> ignore
 
         let fsColorizer = colorizer :?> FSharpColorizer
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Editor/extension.vsixmanifest b/vsintegration/src/vs/FsPkgs/FSharp.Editor/extension.vsixmanifest
index 19668d52ab2..ec8e9ea37d5 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Editor/extension.vsixmanifest
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Editor/extension.vsixmanifest
@@ -1,5 +1,5 @@
 
-
+
 
   
     Microsoft Visual FSharp Editor Extensions
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/BackgroundRequests.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/BackgroundRequests.fs
new file mode 100644
index 00000000000..8454370be55
--- /dev/null
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/BackgroundRequests.fs
@@ -0,0 +1,325 @@
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+namespace Microsoft.VisualStudio.FSharp.LanguageService
+
+open System
+open System.Runtime.InteropServices
+open Microsoft.VisualStudio
+open Microsoft.VisualStudio.TextManager.Interop 
+open Microsoft.VisualStudio.Text
+open Microsoft.VisualStudio.OLE.Interop
+open Microsoft.VisualStudio.Shell.Interop
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.SourceCodeServices
+
+type internal FSharpBackgroundRequestExtraData =
+    { ProjectSite : IProjectSite
+      CheckOptions : FSharpProjectOptions
+      ProjectFileName : string
+      FSharpChecker : FSharpChecker
+      Colorizer : Lazy }
+
+type internal FSharpBackgroundRequest
+           (line, col, info, sourceText, snapshot : ITextSnapshot, 
+            methodTipMiscellany : MethodTipMiscellany, fileName, reason, view, sink, 
+            source:ISource, timestamp:int, synchronous:bool,
+            extraData : Lazy option) = 
+
+    inherit BackgroundRequest(line, col, info, sourceText, snapshot, methodTipMiscellany, fileName, reason, view, sink, source, timestamp, synchronous)
+
+    member this.ExtraData = extraData
+
+    member this.TryGetColorizer() = 
+        match extraData with 
+        | None -> None 
+        | Some data -> Some (data.Force().Colorizer.Force())
+
+/// The slice of the language service that looks after making requests to the FSharpChecker,
+/// It also keeps and maintains parsing results for navigation bar, regions and brekpoint validation.
+type internal FSharpLanguageServiceBackgroundRequests
+                (getColorizer: IVsTextView -> FSharpColorizer, 
+                 getInteractiveChecker: unit -> FSharpChecker, 
+                 getProjectSitesAndFiles : unit -> ProjectSitesAndFiles,
+                 getServiceProvider: unit -> System.IServiceProvider,
+                 getDocumentationBuilder: unit -> IDocumentationBuilder) =    
+
+    let mutable parseFileResults : FSharpParseFileResults option = None
+    let mutable navBarAndRegionInfo : FSharpNavigationAndRegionInfo option = None
+    let mutable lastParseFileRequest : BackgroundRequest = null
+
+    let outOfDateProjectFileNames = new System.Collections.Generic.HashSet()
+
+    member this.NavigationBarAndRegionInfo with get() = navBarAndRegionInfo and set v = navBarAndRegionInfo <- v
+    member this.ParseFileResults with get() = parseFileResults and set v = parseFileResults <- v
+    member this.AddOutOfDateProjectFileName nm =
+        outOfDateProjectFileNames.Add(nm) |> ignore
+
+    // This method is executed on the UI thread
+    member this.CreateBackgroundRequest(line: int, col: int, info: TokenInfo, sourceText: string, snapshot: ITextSnapshot, methodTipMiscellany: MethodTipMiscellany, 
+                                         fileName: string, reason: BackgroundRequestReason, view: IVsTextView,
+                                         sink: AuthoringSink, source: ISource, timestamp: int, synchronous: bool) =
+        let extraData =
+            match sourceText with
+            |   null -> 
+                // sourceText being null indicates that the cached results for this request will be used, so 
+                // ExecuteBackgroundRequest will not be called.                    
+                None 
+            |   _ ->       
+                // For scripts, GetCheckOptionsFromScriptRoot involves parsing and sync op, so is run on the language service thread later
+                // For projects, we need to access RDT on UI thread, so do it on the GUI thread now
+                if SourceFile.MustBeSingleFileProject(fileName) then
+                    let data = 
+                        lazy // This portion is executed on the language service thread
+                            let timestamp = if source=null then System.DateTime(2000,1,1) else source.OpenedTime // source is null in unit tests
+                            let checker = getInteractiveChecker()
+                            let checkOptions = checker.GetProjectOptionsFromScript(fileName, sourceText, timestamp, [| |]) |> Async.RunSynchronously
+                            let projectSite = ProjectSitesAndFiles.CreateProjectSiteForScript(fileName, checkOptions)
+                            { ProjectSite = projectSite
+                              CheckOptions = checkOptions 
+                              ProjectFileName = projectSite.ProjectFileName()
+                              FSharpChecker = checker
+                              Colorizer = lazy getColorizer(view) } 
+                    Some data
+                else 
+                    // This portion is executed on the UI thread.
+                    let rdt = getServiceProvider().RunningDocumentTable
+                    let projectSite = getProjectSitesAndFiles().FindOwningProject(rdt,fileName)
+                    let checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(projectSite, fileName)                            
+                    let projectFileName = projectSite.ProjectFileName()
+                    let data = 
+                        {   ProjectSite = projectSite
+                            CheckOptions = checkOptions 
+                            ProjectFileName = projectFileName 
+                            FSharpChecker = getInteractiveChecker()
+                            Colorizer = lazy getColorizer(view) } 
+                    Some (Lazy<_>.CreateFromValue data)
+
+        new FSharpBackgroundRequest(line, col, info, sourceText, snapshot, methodTipMiscellany, fileName, reason, view, sink, source, timestamp, synchronous, extraData)
+
+    /// Handle an incoming request to analyze a file.
+    ///
+    /// Executed either on the UI thread (for req.IsSynchronous) or the background request thread.
+    member this.ExecuteBackgroundRequest(req:FSharpBackgroundRequest, source:IFSharpSource) = 
+        try
+            let data =
+                match req.ExtraData with
+                |   Some lazyData -> lazyData.Force()
+                |   None -> failwith "ExecuteFSharpBackgroundRequest called for supposedly cached request"
+
+            let projectSite = data.ProjectSite
+            let checkOptions = data.CheckOptions
+            let projectFileName = data.ProjectFileName
+            let interactiveChecker = data.FSharpChecker
+            let colorizer = data.Colorizer 
+            source.ProjectSite <- Some projectSite
+            
+            // Do brace matching if required
+            if req.ResultSink.BraceMatching then  
+                // Record brace-matching
+                let braceMatches = interactiveChecker.MatchBracesAlternate(req.FileName,req.Text,checkOptions) |> Async.RunSynchronously
+                    
+                let mutable pri = 0
+                for (b1,b2) in braceMatches do
+                    req.ResultSink.MatchPair(TextSpanOfRange b1, TextSpanOfRange b2, pri)
+                    pri<-pri+1
+                          
+            match req.Reason with 
+            | BackgroundRequestReason.MatchBraces -> () // work has already been done above
+            | BackgroundRequestReason.ParseFile ->
+
+                // invoke ParseFile directly - relying on cache inside the interactiveChecker
+                let parseResults = interactiveChecker.ParseFileInProject(req.FileName, req.Text, checkOptions) |> Async.RunSynchronously
+
+                parseFileResults <- Some parseResults
+                navBarAndRegionInfo <- Some(FSharpNavigationAndRegionInfo.WithNewParseInfo(parseResults, navBarAndRegionInfo))                  
+
+            | _ -> 
+                let syncParseInfoOpt = 
+                    if FSharpIntellisenseInfo.IsReasonRequiringSyncParse(req.Reason) then
+                        let parseResults = interactiveChecker.ParseFileInProject(req.FileName,req.Text,checkOptions) |> Async.RunSynchronously
+                        Some parseResults
+                    else None
+
+                // Try to grab recent results, unless BackgroundRequestReason = Check
+                // This may fail if the CompilerServices API decides that
+                // it would like a chance to really check the contents of the file again,
+                let parseResults,typedResults,containsFreshFullTypeCheck,aborted,resultTimestamp = 
+                    let possibleShortcutResults = 
+                        if (req.Reason = BackgroundRequestReason.FullTypeCheck) || req.RequireFreshResults = RequireFreshResults.Yes then
+                            // Getting here means we're in second chance intellisense. For example, the user has pressed dot 
+                            // we tried stale results and got nothing. Now we need real results even if we have to wait.
+                            None
+                        else                            
+                            // This line represents a critical decision in the LS. If we're _not_
+                            // doing a full typecheck, and some stale typecheck results are available, then
+                            // use the stale results. This means, for example, that completion is fast,
+                            // but less accurate (since we can't possibly afford to typecheck while generating a completion)
+                            interactiveChecker.TryGetRecentCheckResultsForFile(req.FileName,checkOptions)
+                    
+                    match possibleShortcutResults with 
+                    | Some (parseResults,typedResults,fileversion) -> 
+                        defaultArg syncParseInfoOpt parseResults,Some typedResults, false, false, fileversion // Note: untypedparse and typed results have different timestamps/snapshots, typed may be staler
+                    | None -> 
+                        // Perform a fresh two-phase parse of the source file
+                        let parseResults = 
+                            match syncParseInfoOpt with 
+                            | Some x -> x
+                            | None -> interactiveChecker.ParseFileInProject(req.FileName,req.Text,checkOptions) |> Async.RunSynchronously
+                        
+                        // Should never matter but don't let anything in FSharp.Compiler extend the lifetime of 'source'
+                        let sr = ref (Some source)
+
+                        // Determine whether to abandon the CheckFileIfReady operation
+                        let isResultObsolete() = 
+                            match !sr with
+                            | None -> false
+                            | Some source -> req.Timestamp <> source.ChangeCount
+                        
+                        // Type-checking
+                        let typedResults,aborted = 
+                            match interactiveChecker.CheckFileInProjectIfReady(parseResults,req.FileName,req.Timestamp,req.Text,checkOptions,IsResultObsolete(isResultObsolete),req.Snapshot) |> Async.RunSynchronously with 
+                            | None -> None,false
+                            | Some FSharpCheckFileAnswer.Aborted -> 
+                                // isResultObsolete returned true during the type check.
+                                None,true
+                            | Some (FSharpCheckFileAnswer.Succeeded results) -> Some results, false
+
+                        sr := None
+                        parseResults,typedResults,true,aborted,req.Timestamp
+                
+                // Now that we have the parseResults, we can SetDependencyFiles().
+                // 
+                // If the set of dependencies changes, the file needs to be re-checked
+                let anyDependenciesChanged = source.SetDependencyFiles(parseResults.DependencyFiles)
+                if anyDependenciesChanged then
+                    req.ResultClearsDirtinessOfFile <- false
+                    // Furthermore, if the project is out-of-date behave just as if we were notified dependency files changed.  
+                    if outOfDateProjectFileNames.Contains(projectFileName) then
+                        interactiveChecker.InvalidateConfiguration(checkOptions)
+                        interactiveChecker.CheckProjectInBackground(checkOptions) 
+                        outOfDateProjectFileNames.Remove(projectFileName) |> ignore
+
+                else
+                    parseFileResults <- Some parseResults
+                    navBarAndRegionInfo <- Some(FSharpNavigationAndRegionInfo.WithNewParseInfo(parseResults, navBarAndRegionInfo))                  
+                    
+                    match typedResults with 
+                    | None -> 
+                        // OK, the typed results were not available because the background state to typecheck the file is not yet
+                        // ready.  However, we will be notified when it _is_ ready, courtesy of the background builder. Hence
+                        // we can clear the dirty bit and wait for that notification.
+                        req.ResultClearsDirtinessOfFile <- not aborted
+                        req.IsAborted <- aborted
+                        // On 'FullTypeCheck', send a message to the reactor to start the background compile for this project, just in case
+                        if req.Reason = BackgroundRequestReason.FullTypeCheck then    
+                            interactiveChecker.CheckProjectInBackground(checkOptions) 
+
+                    | Some typedResults -> 
+                        // Post the parse errors. 
+                        if containsFreshFullTypeCheck then 
+                            for error in typedResults.Errors do
+                                let span = new TextSpan(iStartLine=error.StartLineAlternate-1,iStartIndex=error.StartColumn,iEndLine=error.EndLineAlternate-1,iEndIndex=error.EndColumn)                             
+                                let sev = 
+                                    match error.Severity with 
+                                    | FSharpErrorSeverity.Warning -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Warning
+                                    | FSharpErrorSeverity.Error -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error
+                                req.ResultSink.AddError(req.FileName, error.Subcategory, error.Message, span, sev)
+                          
+
+                        let provideMethodList = (req.Reason = BackgroundRequestReason.MethodTip || req.Reason = BackgroundRequestReason.MatchBracesAndMethodTip)
+
+                        let scope = new FSharpIntellisenseInfo(parseResults, req.Line, req.Col, req.Snapshot, typedResults, projectSite, req.View, colorizer, getDocumentationBuilder(), provideMethodList) 
+
+                        req.ResultIntellisenseInfo <- scope
+                        req.ResultTimestamp <- resultTimestamp  // This will be different from req.Timestamp when we're using stale results.
+                        req.ResultClearsDirtinessOfFile <- containsFreshFullTypeCheck
+
+
+                        // On 'FullTypeCheck', send a message to the reactor to start the background compile for this project, just in case
+                        if req.Reason = BackgroundRequestReason.FullTypeCheck then    
+                            interactiveChecker.CheckProjectInBackground(checkOptions) 
+                            
+                        // On 'QuickInfo', get the text for the quick info while we're off the UI thread, instead of doing it later
+                        if req.Reason = BackgroundRequestReason.QuickInfo then 
+                            let text,span = scope.GetDataTipText(req.Line, req.Col)
+                            req.ResultQuickInfoText <- text
+                            req.ResultQuickInfoSpan <- span 
+
+        with e ->
+            req.IsAborted <- true
+            Assert.Exception(e)
+            reraise()                
+
+    member fls.TriggerParseFile(view: IVsTextView, source: ISource) = 
+        source.BeginBackgroundRequest(0, 0, new TokenInfo(), BackgroundRequestReason.ParseFile, view, RequireFreshResults.No, new BackgroundRequestResultHandler(source.HandleUntypedParseOrFullTypeCheckResponse))
+
+    // Called before a Goto Definition to wait a moment to synchonize the parse
+    member fls.TrySynchronizeParseFileInformation(view: IVsTextView, source: ISource, millisecondsTimeout:int) =
+
+        if (lastParseFileRequest = null || lastParseFileRequest.Timestamp <> source.ChangeCount) then
+            let req = fls.TriggerParseFile(view, source)
+                    
+            if req <> null && (req.IsSynchronous || req.Result <> null) then
+                // This blocks the UI thread. Give it a slice of time (1000ms) and then just give up on this particular synchronization.
+                // If we end up aborting here then the caller has the option of just using the old untyped parse information 
+                // for the active view if one is available. Sooner or later the request may complete and the new untyped parse information
+                // will become available.
+                lastParseFileRequest <- req
+                req.Result.TryWaitForBackgroundRequestCompletion(millisecondsTimeout) 
+            else
+                false
+        else
+            // OK, the last request is still active, so try to wait again
+            lastParseFileRequest.Result.TryWaitForBackgroundRequestCompletion(millisecondsTimeout) 
+
+    member __.OnActiveViewChanged(_textView: IVsTextView) =
+        match navBarAndRegionInfo with
+        | Some scope -> scope.ClearDisplayedRegions()
+        | None -> ()
+        navBarAndRegionInfo <- None
+        parseFileResults <- None
+        lastParseFileRequest <- null // abandon any request for untyped parse information, without cancellation
+
+    // Check if we can shortcut executing the background request and just fill in the latest
+    // cached scope for the active view from this.service.RecentFullTypeCheckResults.
+    //
+    // THIS MUST ONLY RETURN TRUE IF ---> ExecuteBackgroundRequest is equivalent to fetching a recent,
+    // perhaps out-of-date scope.
+    member __.IsRecentScopeSufficientForBackgroundRequest(reason:BackgroundRequestReason) = 
+    
+        match reason with 
+        | BackgroundRequestReason.MatchBraces 
+        | BackgroundRequestReason.MatchBracesAndMethodTip
+        | BackgroundRequestReason.ParseFile 
+        | BackgroundRequestReason.FullTypeCheck -> false
+            
+        // For QuickInfo, we grab the result while we're on the background thread,
+        // so returning the scope alone is not sufficient
+        | BackgroundRequestReason.QuickInfo -> false
+        // For MethodTip, we need a fresh parse to get accurate position info for arguments
+        | BackgroundRequestReason.MethodTip -> false
+        // For all others, the request is identical to using the latest cached scope
+        | BackgroundRequestReason.MemberSelect 
+        | BackgroundRequestReason.MemberSelectAndHighlightBraces 
+        | BackgroundRequestReason.CompleteWord 
+        | BackgroundRequestReason.DisplayMemberList
+        | BackgroundRequestReason.Goto
+        | _ -> true
+
+
+    // This is called on the UI thread after fresh full typecheck results are available
+    member this.OnParseFileOrCheckFileComplete(req:BackgroundRequest, enableRegions, lastActiveTextView) =
+        match req.Source, req.ResultIntellisenseInfo, req.View with 
+        | (:? IFSharpSource as source), (:? FSharpIntellisenseInfo as scope), textView when textView <> null && not req.Source.IsClosed -> 
+
+             scope.OnParseFileOrCheckFileComplete(source)
+             
+        | _ -> ()
+
+        // Process regions only if they are enabled
+        if enableRegions then
+            // REVIEW: Do we need to update regions during every parse request?
+            match navBarAndRegionInfo with
+            | Some scope -> scope.UpdateHiddenRegions(req.Source, lastActiveTextView)  // This should probably use req.View instead of LastActiveTextView
+            | None -> ()
+
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Colorize.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Colorize.fs
index 761681fd812..7b28f32df60 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Colorize.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Colorize.fs
@@ -1,15 +1,17 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService
 
 open System.Collections.Generic
-open Microsoft.FSharp.Compiler.SourceCodeServices
+open System.Collections
+open System.Diagnostics
 open Microsoft.VisualStudio.FSharp.LanguageService
 open Microsoft.VisualStudio.TextManager.Interop 
-open System.Diagnostics
 open Microsoft.VisualStudio
-open System.Collections
 open Microsoft.VisualStudio.Text
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.Range
+open Microsoft.FSharp.Compiler.SourceCodeServices
 
 #nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method
 
@@ -19,8 +21,8 @@ open Microsoft.VisualStudio.Text
 module internal ColorStateLookup =
     type ColorStateTable() = 
         let mutable nextInt = 0
-        let toInt = Dictionary()
-        let toLexState = Dictionary()
+        let toInt = Dictionary()
+        let toLexState = Dictionary()
             
         let Add(lexState) =
             let result = nextInt
@@ -53,77 +55,72 @@ module internal ColorStateLookup =
     let ColorStateOfLexState lexState = cst.ColorStateOfLexState(lexState)
     let LexStateOfColorState colorState = cst.LexStateOfColorState(colorState)
     
+/// A single scanner object which can be used to scan different lines of text.
+/// Each time a scan of new line of text is started the makeLineTokenizer function is called.
+///
+/// An instance of this is stored in the IVsUserData for the IVsTextLines buffer
+/// and retrieved using languageServiceState.GetColorizer(IVsTextLines).
+//
 //    Notes:
 //      - SetLineText() is called one line at a time.
 //      - An instance of FSharpScanner is associated with exactly one buffer (IVsTextLines).
-type internal FSharpScanner(makeLineTokenizer : string -> LineTokenizer) = 
+type internal FSharpScanner(makeLineTokenizer : string -> FSharpLineTokenizer) = 
     let mutable lineTokenizer = makeLineTokenizer ""
 
-    let mutable extraColorizations = None
-    let tryFindExtraInfo ((* newSnapshot:Lazy, *) line, c1, c2) = 
+    let mutable extraColorizations : IDictionary option = None
+
+    let tryFindExtraInfo (line, c1, c2) = 
         match extraColorizations with 
         | None -> None
-        | Some ((* hasTextChanged, *) table:IDictionary<_,_>) -> 
+        | Some (table:IDictionary<_,_>) -> 
              match table.TryGetValue line with 
              | false,_ -> None
              | true,entries -> 
-                 entries |> Array.tryPick (fun ((((_,sc),(_,ec)) as range),t) ->
-                     ignore range 
-#if COLORIZE_TYPES
-                     // If we are colorizing type names, then a lot more late-colorization is going on, and we have to be more precise and
-                     // check snapshots. However it is not clear where to get the new snapshot from, or if it is expensive to get it.
-                     // This is one of the reasons why COLORIZE_TYPES is not enabled.
-                     if sc <= c1 &&  c2+1 <= ec (* && not (hasTextChanged (newSnapshot.Force(),range)) *) then 
-#else
-                     // If we are only colorizing query keywords, and not types, then we can check the exact token range, and that tends to be enough 
-                     // to get pretty good incremental accuracy (while waiting for a re-typecheck to refresh results completely)
-                     if sc = c1 &&  c2+1 = ec then 
-#endif
+                 entries |> Array.tryPick (fun (range: Range.range,t) ->
+                     if range.StartColumn = c1 &&  c2+1 = range.EndColumn then 
                          Some t 
                      else 
                          None)
                  
-    /// Decode compiler TokenColorKind into VS TokenColor.
+    /// Decode compiler FSharpTokenColorKind into VS TokenColor.
     let lookupTokenColor colorKind = 
         match colorKind with
-        | TokenColorKind.Comment -> TokenColor.Comment
-        | TokenColorKind.Identifier -> TokenColor.Identifier
-        | TokenColorKind.Keyword -> TokenColor.Keyword
-        | TokenColorKind.String -> TokenColor.String
-        | TokenColorKind.Text -> TokenColor.Text
-        | TokenColorKind.UpperIdentifier -> TokenColor.Identifier
-        | TokenColorKind.Number -> TokenColor.Number
-        | TokenColorKind.InactiveCode -> enum 6          // Custom index into colorable item array, 1-based index, see array of FSharpColorableItem in servicem.fs
-        | TokenColorKind.PreprocessorKeyword -> enum 7   // Custom index into colorable item array, 1-based index, see array of FSharpColorableItem in servicem.fs
-        | TokenColorKind.Operator -> enum 8              // Custom index into colorable item array, 1-based index, see array of FSharpColorableItem in servicem.fs
-#if COLORIZE_TYPES
-        | TokenColorKind.TypeName -> enum 9              // Custom index into colorable item array, 1-based index, see array of FSharpColorableItem in servicem.fs
-#endif
-        | TokenColorKind.Default | _ -> TokenColor.Text
+        | FSharpTokenColorKind.Comment -> TokenColor.Comment
+        | FSharpTokenColorKind.Identifier -> TokenColor.Identifier
+        | FSharpTokenColorKind.Keyword -> TokenColor.Keyword
+        | FSharpTokenColorKind.String -> TokenColor.String
+        | FSharpTokenColorKind.Text -> TokenColor.Text
+        | FSharpTokenColorKind.UpperIdentifier -> TokenColor.Identifier
+        | FSharpTokenColorKind.Number -> TokenColor.Number
+        | FSharpTokenColorKind.InactiveCode -> enum 6          // Custom index into colorable item array, 1-based index, see array of FSharpColorableItem in servicem.fs
+        | FSharpTokenColorKind.PreprocessorKeyword -> enum 7   // Custom index into colorable item array, 1-based index, see array of FSharpColorableItem in servicem.fs
+        | FSharpTokenColorKind.Operator -> enum 8              // Custom index into colorable item array, 1-based index, see array of FSharpColorableItem in servicem.fs
+        | FSharpTokenColorKind.Default | _ -> TokenColor.Text
 
+    /// Decode compiler FSharpTokenColorKind into VS TokenType.
     let lookupTokenType colorKind = 
         match colorKind with
-        | TokenColorKind.Comment -> TokenType.Comment
-        | TokenColorKind.Identifier -> TokenType.Identifier
-        | TokenColorKind.Keyword -> TokenType.Keyword
-        | TokenColorKind.String -> TokenType.String
-        | TokenColorKind.Text -> TokenType.Text
-        | TokenColorKind.UpperIdentifier -> TokenType.Identifier
-        | TokenColorKind.Number -> TokenType.Literal
-        | TokenColorKind.InactiveCode -> TokenType.Unknown
-        | TokenColorKind.PreprocessorKeyword -> TokenType.Unknown
-        | TokenColorKind.Operator -> TokenType.Operator
-#if COLORIZE_TYPES
-        | TokenColorKind.TypeName -> TokenType.Identifier
-#endif
-        | TokenColorKind.Default 
+        | FSharpTokenColorKind.Comment -> TokenType.Comment
+        | FSharpTokenColorKind.Identifier -> TokenType.Identifier
+        | FSharpTokenColorKind.Keyword -> TokenType.Keyword
+        | FSharpTokenColorKind.String -> TokenType.String
+        | FSharpTokenColorKind.Text -> TokenType.Text
+        | FSharpTokenColorKind.UpperIdentifier -> TokenType.Identifier
+        | FSharpTokenColorKind.Number -> TokenType.Literal
+        | FSharpTokenColorKind.InactiveCode -> TokenType.Unknown
+        | FSharpTokenColorKind.PreprocessorKeyword -> TokenType.Unknown
+        | FSharpTokenColorKind.Operator -> TokenType.Operator
+        | FSharpTokenColorKind.Default 
         | _ -> TokenType.Text
         
+    /// Scan a token from a line. This should only be used in cases where color information is irrelevant. 
+    /// Used by GetFullLineInfo (and only thus in a small workaroud in GetDeclarations) and GetTokenInformationAt (thus GetF1KeywordString).
     member ws.ScanTokenWithDetails lexState =
         let colorInfoOption, newLexState = lineTokenizer.ScanToken(!lexState)
         lexState := newLexState
         colorInfoOption
             
+    /// Scan a token from a line and write information about it into the tokeninfo object.
     member ws.ScanTokenAndProvideInfoAboutIt(line, tokenInfo:TokenInfo, lexState) =
         let colorInfoOption, newLexState = lineTokenizer.ScanToken(!lexState)
         lexState := newLexState
@@ -133,14 +130,14 @@ type internal FSharpScanner(makeLineTokenizer : string -> LineTokenizer) =
             let color = 
                 // Upgrade identifiers to keywords based on extra info
                 match colorInfo.ColorClass with 
-                | TokenColorKind.Identifier 
-                | TokenColorKind.UpperIdentifier -> 
+                | FSharpTokenColorKind.Identifier 
+                | FSharpTokenColorKind.UpperIdentifier -> 
                     match tryFindExtraInfo (line, colorInfo.LeftColumn, colorInfo.RightColumn) with 
-                    | None -> TokenColorKind.Identifier 
+                    | None -> FSharpTokenColorKind.Identifier 
                     | Some info -> info // extra info found
                 | c -> c
 
-            tokenInfo.Trigger <- enum (int32 colorInfo.TriggerClass) // cast one enum to another
+            tokenInfo.Trigger <- enum (int32 colorInfo.FSharpTokenTriggerClass) // cast one enum to another
             tokenInfo.StartIndex <- colorInfo.LeftColumn
             tokenInfo.EndIndex <- colorInfo.RightColumn
             tokenInfo.Color <- lookupTokenColor color
@@ -148,16 +145,16 @@ type internal FSharpScanner(makeLineTokenizer : string -> LineTokenizer) =
             tokenInfo.Type <- lookupTokenType color 
             true
 
-    // This is called one line at a time.
+    /// Start tokenizing a line
     member ws.SetLineText lineText = 
         lineTokenizer <- makeLineTokenizer lineText
 
-    /// Adjust the set of extra colorizations and return a sorted list of changed lines.
-    member __.SetExtraColorizations (tokens: (Microsoft.FSharp.Compiler.SourceCodeServices.Range * Microsoft.FSharp.Compiler.SourceCodeServices.TokenColorKind)[]) = 
+    /// Adjust the set of extra colorizations and return a sorted list of affected lines.
+    member __.SetExtraColorizations (tokens: (Range.range * FSharpTokenColorKind)[]) = 
         if tokens.Length = 0 && extraColorizations.IsNone then 
             [| |] 
         else
-            let newExtraColorizationsKeyed = dict (tokens |> Seq.groupBy (fun (((sl,_),(_,_)), _) -> sl) |> Seq.map (fun (k,v) -> (k, Seq.toArray v))) 
+            let newExtraColorizationsKeyed = dict (tokens |> Array.groupBy (fun (r, _) -> Range.Line.toZ r.StartLine))
             let oldExtraColorizationsKeyedOpt = extraColorizations
             extraColorizations <- Some newExtraColorizationsKeyed
             let changedLines = 
@@ -173,18 +170,8 @@ type internal FSharpScanner(makeLineTokenizer : string -> LineTokenizer) =
                    Array.append (Seq.toArray inOneButNotTheOther) (Seq.toArray inBoth)
             Array.sortInPlace changedLines
             changedLines
-            (*
-            if changedLines.Length = 0 then [| |] else
-            // Skip common parts in the sequence
-            [| let prev = ref (changedLines.[0] - 1)
-               let prevIdx = ref 0
-               for i in 0 .. changedLines.Length - 1 do 
-                   let curr = changedLines.[i]
-                   if curr <> prev.Value + 1 then 
-                       yield (prevIdx,curr)
-                       prevIdx := i
-                       prev := curr |]
-                       *)
+
+
 /// Implement the MPF Colorizer functionality.
 ///   onClose is a method to call when shutting down the colorizer.
 type internal FSharpColorizer(onClose:FSharpColorizer->unit,        
@@ -219,7 +206,7 @@ type internal FSharpColorizer(onClose:FSharpColorizer->unit,
         
         let length = lineText.Length
         let mutable linepos = 0
-        //let newSnapshot = lazy (SourceImpl.GetWpfTextViewFromVsTextView(scanner.TextView).TextSnapshot)
+        //let newSnapshot = lazy (FSharpSourceBase.GetWpfTextViewFromVsTextView(scanner.TextView).TextSnapshot)
         try 
             scanner.SetLineText lineText
             currentTokenInfo.EndIndex <- -1
@@ -278,7 +265,7 @@ type internal FSharpColorizer(onClose:FSharpColorizer->unit,
         let cache = new ResizeArray()
         let mutable tokenInfo = new TokenInfo(EndIndex = -1)
         let mutable firstTime = true 
-        //let newSnapshot = lazy (SourceImpl.GetWpfTextViewFromVsTextView(textView).TextSnapshot)
+        //let newSnapshot = lazy (FSharpSourceBase.GetWpfTextViewFromVsTextView(textView).TextSnapshot)
         while scanner.ScanTokenAndProvideInfoAboutIt(line, tokenInfo, refState) do
             if firstTime && tokenInfo.StartIndex > 1 then
                 cache.Add(new TokenInfo(0, tokenInfo.StartIndex - 1, TokenType.WhiteSpace)) 
@@ -312,6 +299,7 @@ type internal FSharpColorizer(onClose:FSharpColorizer->unit,
                 let _ = c.GetColorInfo(line,lineText, length, vsState)
                 cachedLineInfo
        
+    /// Provide token information for the token at the given line and column
     member c.GetTokenInfoAt(colorState,line,col) =
         let state = VsTextColorState.GetColorStateAtStartOfLine colorState line
         let lexState = ref (ColorStateLookup.LexStateOfColorState state)
@@ -324,6 +312,7 @@ type internal FSharpColorizer(onClose:FSharpColorizer->unit,
             ()
         tokenInfo
 
+    /// Provide token information for the token at the given line and column (2nd variation - allows caller to get token info if an additional string were to be inserted)
     member c.GetTokenInfoAt(colorState,line,col,trialString,trialStringInsertionCol) =
         let state = VsTextColorState.GetColorStateAtStartOfLine colorState line
         let lexState = ref (ColorStateLookup.LexStateOfColorState state)
@@ -336,6 +325,7 @@ type internal FSharpColorizer(onClose:FSharpColorizer->unit,
             ()
         tokenInfo
 
+    /// Provide token information for the token at the given line and column (3rd variation)
     member c.GetTokenInformationAt(colorState,line,col) =
         let state = VsTextColorState.GetColorStateAtStartOfLine colorState line
         let lexState = ref (ColorStateLookup.LexStateOfColorState state)
@@ -356,3 +346,40 @@ type internal FSharpColorizer(onClose:FSharpColorizer->unit,
     member c.Buffer = buffer
 
     member __.SetExtraColorizations tokens = scanner.SetExtraColorizations tokens
+
+
+/// Implements IVsColorableItem and IVsMergeableUIItem, for colored text items
+type internal FSharpColorableItem(canonicalName: string, displayName : Lazy, foreground, background) =
+
+    interface IVsColorableItem with 
+
+        member x.GetDefaultColors(piForeground, piBackground) =
+            piForeground.[0] <- foreground
+            piBackground.[0] <- background
+            VSConstants.S_OK
+
+        member x.GetDefaultFontFlags(pdwFontFlags) =
+            pdwFontFlags <- 0u
+            VSConstants.S_OK
+
+        member x.GetDisplayName(pbstrName) =
+            pbstrName <- displayName.Force()
+            VSConstants.S_OK 
+
+    interface IVsMergeableUIItem with
+
+        member this.GetCanonicalName(s) =
+            s <- canonicalName
+            VSConstants.S_OK 
+
+        member this.GetDescription(s) =
+            s <- ""
+            VSConstants.S_OK 
+
+        member x.GetDisplayName(s) =
+            s <- displayName.Force()
+            VSConstants.S_OK 
+
+        member x.GetMergingPriority(i) =
+            i <- 0x1000  // as per docs, MS products should use a value between 0x1000 and 0x2000
+            VSConstants.S_OK 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Colorize.fsi b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Colorize.fsi
deleted file mode 100644
index 423a8e0dbe7..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Colorize.fsi
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService
-    open Microsoft.VisualStudio.FSharp.LanguageService
-    open Microsoft.FSharp.Compiler.SourceCodeServices
-    open Microsoft.VisualStudio.TextManager.Interop
-    open Microsoft.VisualStudio.Text
-    
-    /// An instance of this is stored in the IVsUserData for the IVsTextLines buffer
-    /// and retrieved using languageServiceState.GetColorizer(IVsTextLines).
-    type internal FSharpScanner =
-        /// Construct a single scanner object which can be used to scan different lines of text.
-        /// Each time a scan of new line of text is started the makeLineTokenizer function is called.
-        new : makeLineTokenizer:(string -> LineTokenizer) -> FSharpScanner
-
-        /// Scan a token from a line. This should only be used in cases where color information is irrelevant. 
-        /// Used by GetFullLineInfo (and only thus in a small workaroud in GetDeclarations) and GetTokenInformationAt (thus GetF1KeywordString).
-        member ScanTokenWithDetails: lexState:LexState ref -> TokenInformation option
-
-        /// Scan a token from a line and write information about it into the tokeninfo object.
-        member ScanTokenAndProvideInfoAboutIt: line:int * tokenInfo:TokenInfo * lexState:LexState ref -> bool
-
-        /// Start tokenizing a line
-        member SetLineText: lineText:string -> unit
- 
-    type internal FSharpColorizer =
-        inherit Colorizer
-        new : onClose:(FSharpColorizer -> unit) * buffer:IVsTextLines * scanner:FSharpScanner -> FSharpColorizer
-        member GetFullLineInfo : line:string * lastColorState:int -> TokenInformation[]
-        member Buffer: IVsTextLines 
-
-        /// Adjust the set of extra colorizations and return a sorted list of affected lines.
-        member SetExtraColorizations : (* (ITextSnapshot * Range -> bool) * *) (Range * TokenColorKind)[] -> int[]
-
-        /// Provide token information for the token at the given line and column
-        member GetTokenInfoAt: colorState:IVsTextColorState * line:int * column:int -> TokenInfo
-
-        /// Provide token information for the token at the given line and column (2nd variation - allows caller to get token info if an additional string were to be inserted)
-        member GetTokenInfoAt: colorState:IVsTextColorState * line:int * column:int * trialString:string * trialStringInsertionCol:int-> TokenInfo
-
-        /// Provide token information for the token at the given line and column (3rd variation)
-        member GetTokenInformationAt: colorState:IVsTextColorState * line:int * column:int -> option
-
-    // ~- These are unittest-only ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
-    module internal ColorStateLookup = 
-        val LexStateOfColorState : int -> LexState
-    // ~- These are unittest-only ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Com.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Com.fs
deleted file mode 100644
index b9552cb3456..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Com.fs
+++ /dev/null
@@ -1,617 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
-open Microsoft.VisualStudio
-open System.Runtime.InteropServices
-open Internal.Utilities.Debug
-open System
-
-/// Helper methods for interoperating with COM                
-module internal Com = 
-   /// Execute managed code and return COM error information
-    let Method methodDescription f = 
-        Trace.Print("LanguageService", fun () -> sprintf "Enter %s\n" methodDescription)
-        try 
-            f() 
-            Trace.Print("LanguageService", fun () -> sprintf "Exit %s normally\n" methodDescription)
-            VSConstants.S_OK
-        with e -> 
-            Trace.Print("LanguageService", fun () -> sprintf "Exit %s with exception %A\n" methodDescription e)
-            VSConstants.E_FAIL
-
-    let ThrowOnFailure0(hr) = 
-        ErrorHandler.ThrowOnFailure(hr)  |> ignore
-        
-    let ThrowOnFailure1(hr,res) = 
-        ErrorHandler.ThrowOnFailure(hr) |> ignore; 
-        res
-        
-    let ThrowOnFailure2(hr,res1,res2) = 
-        ErrorHandler.ThrowOnFailure(hr) |> ignore; 
-        res1,res2
-        
-    let ThrowOnFailure3(hr,res1,res2,res3) = 
-        ErrorHandler.ThrowOnFailure(hr) |> ignore; 
-        res1,res2,res3
-
-    let ThrowOnFailure4(hr,res1,res2,res3,res4) = 
-        ErrorHandler.ThrowOnFailure(hr) |> ignore; 
-        res1,res2,res3,res4
-        
-    let ThrowOnFailure7(hr,res1,res2,res3,res4,res5,res6,res7) = 
-        ErrorHandler.ThrowOnFailure(hr) |> ignore; 
-        res1,res2,res3,res4,res5,res6,res7
-        
-    let Succeeded hr = 
-        // REVIEW: Not the correct check for succeeded
-        hr = VSConstants.S_OK
-        
-    let BoolToHResult = function
-          true -> VSConstants.S_OK 
-        | false -> VSConstants.S_FALSE;            
-
-#if DEBUG
-    []
-    type ITypeInfo = 
-      interface 
-//        []
-//        int GetTypeAttr(out IntPtr pTypeAttr);
-//        []
-//        int GetTypeComp(out UnsafeNativeMethods.ITypeComp pTComp);
-//        []
-//        int GetFuncDesc([>] int index, out IntPtr pFuncDesc);
-//        []
-//        int GetVarDesc([>] int index, out IntPtr pVarDesc);
-//        []
-//        int GetNames([] int memid, [>] string[] rgBstrNames, [>] int cMaxNames, [>] out int cNames);
-//        []
-//        int GetIDsOfNames([] IntPtr rgszNames, [>] int cNames, out IntPtr pMemId);
-        []
-        abstract GetDocumentation : [] memid : int * [] pBstrName: string byref * [] pBstrDocString : string byref * [] pdwHelpContext : int byref * [] pBstrHelpFile : string byref -> int
-//        []
-//        int GetRefTypeInfo([] IntPtr hreftype, out ITypeInfo pTypeInfo);
-//        []
-//        int GetContainingTypeLib([>] int[] pIndex);
-//        []
-//        void ReleaseTypeAttr(IntPtr typeAttr);
-//        []
-//        void ReleaseFuncDesc(IntPtr funcDesc);
-//        []
-//        void ReleaseVarDesc(IntPtr varDesc);
-      end
-
-    []
-    type IDispatch =
-      interface
-        []
-        abstract GetTypeInfo: [] index : int * [] lcid : int * [] pTypeInfo:ITypeInfo byref -> int
-//        [PreserveSig]
-//        int GetIDsOfNames();
-//        [PreserveSig]
-//        int Invoke();
-    end
-
-    let TrueTypeName(o) = 
-        let o = box o
-        let simpletypename = (o.GetType()).FullName
-        match o with
-        | :? IDispatch as dispatch -> 
-            let pTypeInfo : ITypeInfo = unbox null
-            let pBstrName = ""
-            let pBstrDocString = ""
-            let pBstrHelpFile = ""
-            let num = 0
-            if Succeeded(dispatch.GetTypeInfo(0,0x409,ref pTypeInfo)) then
-                if Succeeded(pTypeInfo.GetDocumentation(-1, ref pBstrName, ref pBstrDocString, ref num, ref pBstrHelpFile)) then
-                    pBstrName
-                else simpletypename
-            else simpletypename
-        | _ -> simpletypename
-
-    let DiscoverKnownInterfaces o = 
-        let CanQueryInterface iunk (iid:string) = 
-            let mutable iid = Guid(iid)
-            let hr,i = Marshal.QueryInterface(iunk,ref iid)
-            try 
-                Succeeded hr
-            finally
-                if IntPtr.Zero <> i then
-                    Marshal.Release(i) |> ignore
-            
-        let knownInterfaces = 
-          [ ("C7FEDB89-B36D-4a62-93F4-DC7A95999921","ICSharpProjectRoot") 
-            ("1F3B9583-A66A-4be1-A15B-901DA4DB4ACF","ICSharpProjectHost")
-            ("D4F3F4B1-E900-4e51-ADB3-D532348F83CB","new IVsPackage")
-            ("7d960b00-7af8-11d0-8e5e-00a0c911005a","old IVsPackage")
-            ("A7A1C907-C3D2-4acb-9114-4EE23B6FCF7E","new IVsToolWindowFactory")
-            ("94E6E7DE-F418-11d2-B6FA-00C04F9901D1","old IVsToolWindowFactory")
-            ("53BA0F89-24DD-46e1-A7D6-ED24C039FBC4","new IVsPersistSolutionOpts")
-            ("45CF6805-93EB-11D0-AF4C-00A0C90F9DE6","old IVsPersistSolutionOpts")
-            ("0D0E68EA-C910-45a7-8C24-7BBFA7D2D201","new IVsPersistSolutionProps")
-            ("45CF6806-93EB-11D0-AF4C-00A0C90F9DE6","old IVsPersistSolutionProps")
-            ("8D2EC486-8098-4afa-AB94-D270A5EF08CE","new IVsPersistSolutionProps2")
-            ("8D2EC486-8098-4afa-AB94-D270A5EF08CE","old IVsPersistSolutionProps2")
-            ("67A65088-52F3-4c47-B829-1B53A112E8DC","new IVsSolutionPersistence")
-            ("45CF6807-93EB-11D0-AF4C-00A0C90F9DE6","old IVsSolutionPersistence")
-            ("33FCD00A-BD45-403c-9C66-07BA9A923501","new IVsProjectFactory")
-            ("7d960b05-7af8-11d0-8e5e-00a0c911005a","old IVsProjectFactory")
-            ("8CBFFBBE-241E-4b9c-9926-C06F7374386C","new IVsNonSolutionProjectFactory")
-            ("BC798C3A-4EB9-11d3-B2BF-00C04F688E57","old IVsNonSolutionProjectFactory")
-            ("F08400BB-0960-47f4-9E12-591DBF370546","new IVsRegisterProjectTypes")
-            ("7d960b06-7af8-11d0-8e5e-00a0c911005a","old IVsRegisterProjectTypes")
-            ("E4197123-1086-4d51-B2D5-903F4D61C5AA","new IVsOwnedProjectFactory")
-            ("70F026F7-E043-4634-9DFF-C1ED96C264D6","old IVsOwnedProjectFactory")
-            ("59B2D1D0-5DB0-4f9f-9609-13F0168516D6","new IVsHierarchy")
-            ("7d960b01-7af8-11d0-8e5e-00a0c911005a","old IVsHierarchy")
-            ("E82609EA-5169-47f4-91D0-6957272CBE9F","new IVsUIHierarchy")
-            ("7d960b02-7af8-11d0-8e5e-00a0c911005a","old IVsUIHierarchy")
-            ("6DDD8DC3-32B2-4bf1-A1E1-B6DA40526D1E","new IVsHierarchyEvents")
-            ("7d960b03-7af8-11d0-8e5e-00a0c911005a","old IVsHierarchyEvents")
-            ("8FE0E50A-785A-4a50-8EDB-1D054D68EF87","new IVsParentHierarchy")
-            ("92D73940-C541-11d2-8598-006097C68E81","old IVsParentHierarchy")
-            ("7F7CD0DB-91EF-49dc-9FA9-02D128515DD4","new IVsSolution")
-            ("054AECC1-AC4D-11d0-AF54-00A0C90F9DE6","old IVsSolution")
-            ("95C6A090-BB9E-4bf2-B0BE-F1D04F0ECEA3","new IVsSolution2")
-            ("95C6A090-BB9E-4bf2-B0BE-F1D04F0ECEA3","old IVsSolution2")
-            ("58DCF7BF-F14E-43ec-A7B2-9F78EDD06418","new IVsSolution3")
-            ("58DCF7BF-F14E-43ec-A7B2-9F78EDD06418","old IVsSolution3")
-            ("A8516B56-7421-4dbd-AB87-57AF7A2E85DE","new IVsSolutionEvents")
-            ("054AECC2-AC4D-11d0-AF54-00A0C90F9DE6","old IVsSolutionEvents")
-            ("A711DF67-B00A-4e82-A990-51B2B450EA0F","new IVsSolutionEvents2")
-            ("710932AF-2116-4cbd-8E48-0C5944EF0C6A","old IVsSolutionEvents2")
-            ("F1DE2D75-3B95-4510-9B2B-565BC0E38877","new IVsSolutionEvents3")
-            ("F1DE2D75-3B95-4510-9B2B-565BC0E38877","old IVsSolutionEvents3")
-            ("23EC4D20-54A9-4365-82C8-ABDFBA686ECF","new IVsSolutionEvents4")
-            ("23EC4D20-54A9-4365-82C8-ABDFBA686ECF","old IVsSolutionEvents4")
-            ("A4662D0F-FA14-48ac-8E68-D481EF200627","new IVsFireSolutionEvents")
-            ("054AECC2-AC4D-11d0-AF54-00A0C90F9DE6","old IVsFireSolutionEvents")
-            ("ED6AAB26-108F-4b4f-A57B-14D20982713D","new IVsFireSolutionEvents2")
-            ("ED6AAB26-108F-4b4f-A57B-14D20982713D","old IVsFireSolutionEvents2")
-            ("925E8559-17DF-494c-87DA-BBEE251702DE","new IVsPrioritizedSolutionEvents")
-            ("925E8559-17DF-494c-87DA-BBEE251702DE","old IVsPrioritizedSolutionEvents")
-            ("7B1D55C6-4F6A-4865-B9B3-1A696E233065","new IVsSolutionEventsProjectUpgrade")
-            ("7B1D55C6-4F6A-4865-B9B3-1A696E233065","old IVsSolutionEventsProjectUpgrade")
-            ("CD4028ED-C4D8-44ba-890F-E7FB02A380C6","new IVsProject")
-            ("625911f3-af99-11d0-8e69-00a0c911005a","old IVsProject")
-            ("4AF886C3-7796-4c81-A174-4A87080DEE58","new IVsProject2")
-            ("669B7232-890C-11d1-BC18-0000F87552E7","old IVsProject2")
-            ("1C11116E-4FF2-4a80-82DC-69F95042E0A4","new IVsProject3")
-            ("36201871-BC59-11d2-BFC9-00C04F990235","old IVsProject3")
-            ("79001CD1-69C6-45b8-8F7A-DCCCE0469E8D","new IVsParentProject")
-            ("79001CD1-69C6-45b8-8F7A-DCCCE0469E8D","old IVsParentProject")
-            ("D63BB7D7-D7A0-4c02-AA85-7E9233797CDB","new IVsParentProject2")
-            ("D63BB7D7-D7A0-4c02-AA85-7E9233797CDB","old IVsParentProject2")
-            ("75661D39-F5DA-41b9-ABDA-9CF54C6B1AC9","new IVsProjectUpgrade")
-            ("75661D39-F5DA-41b9-ABDA-9CF54C6B1AC9","old IVsProjectUpgrade")
-            ("83B2961F-AC2B-409b-89BD-DCF698E3C402","new IVsDeferredSaveProject")
-            ("83B2961F-AC2B-409b-89BD-DCF698E3C402","old IVsDeferredSaveProject")
-            ("4B2BEBAA-BA1E-4479-8720-8CE19D276098","new IVsProjectSpecificEditorMap")
-            ("21f29401-a80b-4a7f-b5c4-a9f9ca849447","old IVsProjectSpecificEditorMap")
-            ("F84A6D1D-F305-4055-A02C-A642B871BB20","new IVsProjectSpecificEditorMap2")
-            ("F84A6D1D-F305-4055-A02C-A642B871BB20","old IVsProjectSpecificEditorMap2")
-            ("3F819030-50CF-4b72-B3FC-B3B9BFBBEE69","new IVsProjectResources")
-            ("9c68abb3-d1e5-4986-a501-e1f446005a43","old IVsProjectResources")
-            ("E09C9DCF-D4B7-4d6e-A676-1FC64B4BF6EB","new IVsSupportItemHandoff")
-            ("3E7CBE01-C114-4291-80DE-7DCDE3AB0032","old IVsSupportItemHandoff")
-            ("2AFA4F74-7A1A-4dee-8F99-46E74E5A3C0F","new IVsSupportItemHandoff2")
-            ("2AFA4F74-7A1A-4dee-8F99-46E74E5A3C0F","old IVsSupportItemHandoff2")
-            ("11DFCCEB-D935-4a9f-9796-5BA433C5AF8E","new IVsAddProjectItemDlg")
-            ("a448e7a0-b830-11d0-9ffd-00a0c911e8e9","old IVsAddProjectItemDlg")
-            ("6B90D260-E363-4e8a-AE51-BD19C493416D","new IVsAddProjectItemDlg2")
-            ("8C73614F-7E67-11d2-BFB9-00C04F990235","old IVsAddProjectItemDlg2")
-            ("D93A191C-525A-43bc-ACFD-7EF494143CF4","new IVsFilterAddProjectItemDlg")
-            ("75437597-FE86-11d2-BECE-00C04F682A08","old IVsFilterAddProjectItemDlg")
-            ("61116CFF-5319-440a-81CE-5D9F54A610DE","new IVsFilterAddProjectItemDlg2")
-            ("61116CFF-5319-440a-81CE-5D9F54A610DE","old IVsFilterAddProjectItemDlg2")
-            ("82A40D77-D2D4-4c93-AB11-8D50ADF02B1E","new IVsProjectTextImageProvider")
-            ("6EF99245-719D-4d55-8955-7F9E9A1ADFD1","old IVsProjectTextImageProvider")
-            ("C3E2ED14-4E64-4c26-84D7-68CCD071A0C8","new IVsSaveOptionsDlg")
-            ("9B550A73-1215-11d3-BED1-00C04F682A08","old IVsSaveOptionsDlg")
-            ("D5C658C5-59A1-414f-AF5E-E72E83377EAE","new IEnumRunningDocuments")
-            ("6b60be84-7b47-11d2-b2c2-00c04fb17608","old IEnumRunningDocuments")
-            ("A928AA21-EA77-47ac-8A07-355206C94BDD","new IVsRunningDocumentTable")
-            ("625911f2-af99-11d0-8e69-00a0c911005a","old IVsRunningDocumentTable")
-            ("CD68D3CF-7124-4d3a-AFED-3E305C2B7D0B","new IVsRunningDocumentTable2")
-            ("625911f2-af99-11d0-8e69-00a0c911005a","old IVsRunningDocumentTable2")
-            ("BEA6BB4F-A905-49ca-A216-202DF370E07E","new IVsRunningDocTableEvents")
-            ("5579c9f0-d09d-11d0-8e75-00a0c911005a","old IVsRunningDocTableEvents")
-            ("15C7826F-443C-406d-98F8-55F6260669EC","new IVsRunningDocTableEvents2")
-            ("e38a9670-8e0b-11d1-b278-00c04fb17608","old IVsRunningDocTableEvents2")
-            ("376ED667-F576-458f-B991-2CFD3EBC7B08","new IVsRunningDocTableEvents3")
-            ("e69a388a-fce0-11d2-8a60-00c04f682e21","old IVsRunningDocTableEvents3")
-            ("685933F2-C1AD-4540-A15A-D3F977A81AF7","new IVsDocumentLockHnewer")
-            ("e2334ed2-43b5-11d3-8a7c-00c04f682e21","old IVsDocumentLockHnewer")
-            ("11138F8A-38C0-4436-B5A6-2F5EF2C3E242","new IVsWindowFrame")
-            ("7d960b0d-7af8-11d0-8e5e-00a0c911005a","old IVsWindowFrame")
-            ("FE46E1DF-E8A8-48d3-932E-B61BC092E681","new IVsWindowFrameNotify")
-            ("A31CAE00-0AB0-11d1-B646-00A0C922E851","old IVsWindowFrameNotify")
-            ("F4DE74E7-078A-430E-B0E1-8B131BDEF335","new IVsWindowFrameNotify2")
-            ("f4de74e7-078a-430e-b0e1-8b131bdef335","old IVsWindowFrameNotify2")
-            ("B7EE8DBA-E930-4c5d-984D-B07F8EB60977","new IVsBackForwardNavigation")
-            ("349D5D4E-5811-11d3-B741-00C04F9901D1","old IVsBackForwardNavigation")
-            ("7E7C4B21-079F-4830-9ED5-E0CB0BF281F1","new IVsWindowView")
-            ("C562FF5A-FE57-11d2-B709-00C04F9901D1","old IVsWindowView")
-            ("CF7549A9-7A2A-4a6e-ACF4-05452C98CF7E","new IVsToolWindowToolbarHost")
-            ("34ECEDC1-06FE-11d1-AED2-549FFB000000","old IVsToolWindowToolbarHost")
-            ("4544D333-8D5F-4517-9113-3550D618F2AD","new IVsToolWindowToolbar")
-            ("34ECEDC2-06FE-11d1-AED2-549FFB000000","old IVsToolWindowToolbar")
-            ("B61FC35B-EEBF-4dec-BFF1-28A2DD43C38F","new IVsUIShell")
-            ("7d960b1d-7af8-11d0-8e5e-00a0c911005a","old IVsUIShell")
-            ("4E6B6EF9-8E3D-4756-99E9-1192BAAD5496","new IVsUIShell2")
-            ("4E6B6EF9-8E3D-4756-99E9-1192BAAD5496","old IVsUIShell2")
-            ("686C2AF1-A2E5-4f6c-B660-B63FD4F70C18","new IVsUIShellDocumentWindowMgr")
-            ("A33B889B-18C2-4c4e-B561-4D95F0C3DD40","old IVsUIShellDocumentWindowMgr")
-            ("7DB81657-7722-4407-B675-9F4A6FEEEA15","new IVsPackageDynamicToolOwner")
-            ("914C74A0-8F69-11d1-BC27-0000F87552E7","old IVsPackageDynamicToolOwner")
-            ("E36756DE-BB4F-4900-A7F0-E827BDBD2092","new IVsExternalFilesManager")
-            ("2FC2CA21-B6AA-11d0-AE1A-00A0C90FFFC3","old IVsExternalFilesManager")
-            ("999B1784-A1EE-42eb-B4B6-E928008FFB5D","new IVsExternalFilesManager2")
-            ("74C9E366-2BCD-11D2-B2B4-00C04FB17608","old IVsExternalFilesManager2")
-            ("F04C8816-7F77-450d-9527-14D0B93DA159","new IVsFileChangeEvents")
-            ("b4e98631-f322-11d0-8e89-00a0c911005a","old IVsFileChangeEvents")
-            ("250E1E9A-D2FC-410f-99E4-1ABA5B390A9A","new IVsFileChange")
-            ("b4e98630-f322-11d0-8e89-00a0c911005a","old IVsFileChange")
-            ("9bc72973-194a-4ea8-b4d5-afb0b0d0dcb1","new IVsFileChangeEx")
-            ("9bc72973-194a-4ea8-b4d5-afb0b0d0dcb1","old IVsFileChangeEx")
-            ("DC7EDE19-3DD1-4e20-A7F1-110883ED996F","new IVsIME")
-            ("632f13be-b1cc-11d0-ae4c-00c04fb68006","old IVsIME")
-            ("26831FB7-7C55-4ab1-B4AD-E37783F2D4A8","new IVsRelativePathResolver")
-            ("702312F2-461F-45b2-8EEA-DA1D566115DF","old IVsRelativePathResolver")
-            ("35299EEC-11EE-4518-9F08-401638D1D3BC","new IVsUIShellOpenDocument")
-            ("7d960b17-7af8-11d0-8e5e-00a0c911005a","old IVsUIShellOpenDocument")
-            ("0F4B629E-8C34-4b5e-A450-F9F8DCFE3009","new IVsMultiViewDocumentView")
-            ("46ca0880-0ed7-11d1-8ebd-00a0c90f26ea","old IVsMultiViewDocumentView")
-            ("D5D49C61-1C0B-4ea1-9ADB-A79FB1DBC7B5","new IVsPersistDocData")
-            ("7d960b1c-7af8-11d0-8e5e-00a0c911005a","old IVsPersistDocData")
-            ("9D71890D-090C-4b67-80C3-4CB55C600B60","new IVsPersistDocData2")
-            ("1E3A7DC6-800A-11d2-ADD5-00C04F7971C3","old IVsPersistDocData2")
-            ("BF955013-A875-439d-A4E7-A3BBDF12AA4F","new IVsDocDataFileChangeControl")
-            ("04F29FC4-CE44-11d1-88B1-0000F87579D2","old IVsDocDataFileChangeControl")
-            ("18933F6E-0937-4888-8C77-EC8A393B21EA","new IVsPersistHierarchyItem")
-            ("a12946d0-bcf3-11d0-8e69-00a0c911005a","old IVsPersistHierarchyItem")
-            ("5A494367-DF56-4062-8EDA-54E2C1FF42BC","new IVsPersistHierarchyItem2")
-            ("EEFEA81A-8949-4f04-A089-CFBF9BC414C5","old IVsPersistHierarchyItem2")
-            ("A2DD88C9-D878-4323-95A3-77DAF258E5D0","new IVsUIHierarchyWindow")
-            ("7d960b0e-7af8-11d0-8e5e-00a0c911005a","old IVsUIHierarchyWindow")
-            ("B0834D0F-ACFF-4ea5-809B-97CBB5D3D26B","new IVsWindowPane")
-            ("7d960b08-7af8-11d0-8e5e-00a0c911005a","old IVsWindowPane")
-            ("9673A35F-C03A-438d-BD7E-27D9E28AC184","new IEnumPackages")
-            ("7d960b0c-7af8-11d0-8e5e-00a0c911005a","old IEnumPackages")
-            ("BEC77711-2DF9-44d7-B478-A453C2E8A134","new IEnumHierarchies")
-            ("A2C2BCF9-AC4D-11d0-AF54-00A0C90F9DE6","old IEnumHierarchies")
-            ("8C453B03-8907-435b-96D7-573C40948F5C","new IEnumWindowFrames")
-            ("46052C70-DCFB-11d0-9404-00A0C90F2734","old IEnumWindowFrames")
-            ("FD9DC8E3-2FFC-446D-8C50-99CA4A3D2D1C","new IVsShell")
-            ("7d960b09-7af8-11d0-8e5e-00a0c911005a","old IVsShell")
-            ("F3519E2D-D5D2-4455-B9F4-5F61F993BD66","new IVsShell2")
-            ("F3519E2D-D5D2-4455-B9F4-5F61F993BD66","old IVsShell2")
-            ("FC5EF273-DCE3-4DBB-AEE3-F54F91F00286","new IVsBroadcastMessageEvents")
-            ("9A726311-D779-11d0-AE21-00A0C90FFFC3","old IVsBroadcastMessageEvents")
-            ("7A54FEA1-E786-4A30-8F38-45B3703E50DD","new IVsShellPropertyEvents")
-            ("8C506C01-D7A0-11d0-AE21-00A0C90FFFC3","old IVsShellPropertyEvents")
-            ("40FB079B-B62C-486F-9823-C9A2EAE8DBFD","new IVsEditorFactory")
-            ("7d960b13-7af8-11d0-8e5e-00a0c911005a","old IVsEditorFactory")
-            ("78036A8D-A04C-43E4-8BC0-846E63AFA9A2","new IVsRegisterEditors")
-            ("7d960b14-7af8-11d0-8e5e-00a0c911005a","old IVsRegisterEditors")
-            ("02AC210F-139B-4F8E-9159-501CF2A87D6E","new IVsEditorFactoryNotify")
-            ("fa50ef7c-2b83-42c5-ab89-e9395e9731d8","old IVsEditorFactoryNotify")
-            ("96973FC6-C2E4-4CB9-8BAF-7F7CD6DBC604","new IVsMultiItemSelect")
-            ("7d960b0f-7af8-11d0-8e5e-00a0c911005a","old IVsMultiItemSelect")
-            ("687396AE-252E-460F-8F54-EF2C521BB6D8","new IEnumHierarchyItems")
-            ("1C97C7F5-8C7B-46a2-A84B-AB12A5833A45","old IEnumHierarchyItems")
-            ("30E5C390-C3E6-40AC-BD1D-7015B1B5F541","new IVsEnumHierarchyItemsFactory")
-            ("65C8CA4C-0871-48c5-A2E5-FB2F4DC4DB23","old IVsEnumHierarchyItemsFactory")
-            ("E68652D0-396C-4937-95A3-F0AE7ACD0E15","new IVsSwatchClient")
-            ("4C8F7500-5106-11d3-8821-00C04F7971A5","old IVsSwatchClient")
-            ("18291FD1-A1DD-4264-AEAD-6AFD616BF15A","new IVsTrackSelectionEx")
-            ("7d960b10-7af8-11d0-8e5e-00a0c911005a","old IVsTrackSelectionEx")
-            ("82871589-D680-4D86-B969-9D1102B00F6F","new IVsSelectionEvents")
-            ("7d960b11-7af8-11d0-8e5e-00a0c911005a","old IVsSelectionEvents")
-            ("55AB9450-F9C7-4305-94E8-BEF12065338D","new IVsMonitorSelection")
-            ("7d960b12-7af8-11d0-8e5e-00a0c911005a","old IVsMonitorSelection")
-            ("9D21BCC5-2C63-4A61-B055-2F3DF78EB30A","new IVsTaskList")
-            ("BC5955D1-AA0D-11d0-A8C5-00A0C921A4D2","old IVsTaskList")
-            ("6909C6ED-2AF5-4A35-8EA7-E6095A3ECF9E","new IVsTaskProvider")
-            ("BC5955D2-AA0D-11d0-A8C5-00A0C921A4D2","old IVsTaskProvider")
-            ("A7E6B1F9-DFF1-4354-870F-196BE871F329","new IVsTaskProvider2")
-            ("842BEEF8-B57A-11d2-8B97-00C04F8EC28C","old IVsTaskProvider2")
-            ("0F6D7FB4-2649-4E51-BC20-3698F9F51358","new IVsTaskItem")
-            ("BC5955D3-AA0D-11d0-A8C5-00A0C921A4D2","old IVsTaskItem")
-            ("970A6925-5FFA-4A77-972F-7AB90C0130E5","new IVsTaskItem2")
-            ("D30A201A-7837-11d2-8B81-00C04F8EC28C","old IVsTaskItem2")
-            ("66638598-522B-4058-9E65-FAF237700E81","new IVsEnumTaskItems")
-            ("BC5955D4-AA0D-11d0-A8C5-00A0C921A4D2","old IVsEnumTaskItems")
-            ("327C43D7-CCB1-41D7-9A7B-CE87751201F7","new IVsCommentTaskToken")
-            ("92ED80E0-144D-11d1-8F8B-00A0C91BBFA2","old IVsCommentTaskToken")
-            ("EC47207E-5A2A-45D4-9FA4-F9AB94E380B4","new IVsEnumCommentTaskTokens")
-            ("92ED80E1-144D-11d1-8F8B-00A0C91BBFA2","old IVsEnumCommentTaskTokens")
-            ("D94C96DA-A6C4-4F52-84F6-52ECF05DEA3A","new IVsCommentTaskInfo")
-            ("92ED80E2-144D-11d1-8F8B-00A0C91BBFA2","old IVsCommentTaskInfo")
-            ("D529FAD1-4BE0-4BEA-92A3-A58A4B89D056","new IVsTaskListEvents")
-            ("92ED80E3-144D-11d1-8F8B-00A0C91BBFA2","old IVsTaskListEvents")
-            ("9B878A55-296A-404D-80C4-1468BB7CDC43","new IVsOutputWindowPane")
-            ("B7886422-E776-11d0-AE28-00A0C90FFFC3","old IVsOutputWindowPane")
-            ("533FAD11-FE7F-41EE-A381-8B67792CD692","new IVsOutputWindow")
-            ("B7886421-E776-11d0-AE28-00A0C90FFFC3","old IVsOutputWindow")
-            ("C734671A-9BB0-45C5-A08E-B9AB73CF5F47","new IVsAsyncEnum")
-            ("d0b027c6-8c1f-11d0-8a34-00a0c91e2acd","old IVsAsyncEnum")
-            ("EE559C3D-0189-4F81-B088-C6CC6A394CA1","new IVsAsyncEnumCallback")
-            ("d0b027c7-8c1f-11d0-8a34-00a0c91e2acd","old IVsAsyncEnumCallback")
-            ("AC7D8BE5-B7F5-400B-B02C-35207672F56B","new IVsHierarchyDropDataSource")
-            ("7d960b1b-7af8-11d0-8e5e-00a0c911005a","old IVsHierarchyDropDataSource")
-            ("D84D04B8-8E0D-4298-AD9C-27F8C0D5484A","new IVsHierarchyDropDataSource2")
-            ("C43E5BC8-14FC-4b6d-9237-1ADD628D4899","old IVsHierarchyDropDataSource2")
-            ("5AA5B118-B3D4-40C5-8739-231CE192850C","new IVsHierarchyDropDataTarget")
-            ("7d960b1a-7af8-11d0-8e5e-00a0c911005a","old IVsHierarchyDropDataTarget")
-            ("09b17094-f50c-40e0-8ab5-57c22a786596","new IVsOpenProjectOrSolutionDlg")
-            ("09b17094-f50c-40e0-8ab5-57c22a786596","old IVsOpenProjectOrSolutionDlg")
-            ("368FC032-AE91-44a2-BE6B-093A8A9E63CC","new IVsBrowseProjectLocation")
-            ("368FC032-AE91-44a2-BE6B-093A8A9E63CC","old IVsBrowseProjectLocation")
-            ("42085C99-3F5B-4b61-9737-592479718CEC","new IVsDetermineWizardTrust")
-            ("42085C99-3F5B-4b61-9737-592479718CEC","old IVsDetermineWizardTrust")
-            ("D6F79714-BFA9-4F00-98CF-E2FA31802694","new lib_VsShell")
-            ("455AD7A0-8C58-11d0-A8AB-00A0C921A4D2","old lib_VsShell")
-            ("22F1DA29-E27F-46c4-AAFE-F1DF81DCCD3E","new lib_VsShell2")
-            ("22F1DA29-E27F-46c4-AAFE-F1DF81DCCD3E","old lib_VsShell2")
-            ("F7C88E0E-A5C6-4E32-BD42-AFFCFB94A1D1","new IVsDebuggerEvents")
-            ("7d960b15-7af8-11d0-8e5e-00a0c911005a","old IVsDebuggerEvents")
-            ("E2E82904-6072-4F8E-A4F5-9AF15A98F444","new IVsDebugLaunch")
-            ("A5412570-5FB9-11d1-A811-00A0C9110051","old IVsDebugLaunch")
-            ("2E10DD68-AD50-4D3C-94F7-D6C165C7E25D","new IVsDebugger")
-            ("7d960b16-7af8-11d0-8e5e-00a0c911005a","old IVsDebugger")
-            ("B33300FB-FEFE-4E00-A74A-17A5EED1B1ED","new IVsDebugger2")
-            ("B33300FB-FEFE-4E00-A74A-17A5EED1B1ED","old IVsDebugger2")
-            ("D53BFAC7-AE4E-4500-AFB0-3925AE60B2BC","new IVsLaunchPad")
-            ("EF16A8B0-41CF-11d1-84A4-00A0C9110055","old IVsLaunchPad")
-            ("0DBD685A-0A10-4e25-B88E-02E58E60785E","new IVsLaunchPad2")
-            ("0DBD685A-0A10-4e25-B88E-02E58E60785E","old IVsLaunchPad2")
-            ("A9832932-5F3B-487d-A80D-95115EADDAC3","new IVsLaunchPadOutputParser")
-            ("65BC5C20-41D1-11d1-84A4-00A0C9110055","old IVsLaunchPadOutputParser")
-            ("A847B389-401A-4438-8A90-CA5BF2451E13","new IVsLaunchPadEvents")
-            ("65BC5C20-41D1-11d1-84A4-00A0C9110055","old IVsLaunchPadEvents")
-            ("6979C82C-21DB-4E5C-A225-C50A766AA5BA","new IVsLaunchPadFactory")
-            ("c21c16a2-1612-4995-b445-f7b1c1657878","old IVsLaunchPadFactory")
-            ("374FAF39-7EF3-4877-8667-7E96EC0C1771","new IVsJavaClassLocatorService")
-            ("53525550-C745-11d0-A7A6-00A0C9110051","old IVsJavaClassLocatorService")
-            ("A001CA6F-F6FF-4C98-873A-845B1C917B96","new IVsTextBufferProvider")
-            ("76A3B2C0-C743-11d0-A7A6-00A0C9110051","old IVsTextBufferProvider")
-            ("F925DA6B-3F43-4437-9E1E-4D4C1BBDAB3F","new IVsToolboxDataProvider")
-            ("E370AEAA-AA14-11d0-8C46-00C04FC2AA89","old IVsToolboxDataProvider")
-            ("B5E12E94-6653-4A0D-9C42-5357F2654360","new IVsToolboxUser")
-            ("E370AEAB-AA14-11d0-8C46-00C04FC2AA89","old IVsToolboxUser")
-            ("5303CCDE-D37A-445B-88A1-A71742F66345","new IEnumToolboxItems")
-            ("ADB5A663-C641-11d0-8C54-00C04FC2AA89","old IEnumToolboxItems")
-            ("CC81495D-3C2B-4B1E-82CE-965EA5FCA2A0","new IEnumToolboxTabs")
-            ("ADB5A664-C641-11d0-8C54-00C04FC2AA89","old IEnumToolboxTabs")
-            ("70E643E2-1673-4764-8A39-63CB1AEE0DC9","new IVsToolbox")
-            ("E370AEA9-AA14-11d0-8C46-00C04FC2AA89","old IVsToolbox")
-            ("08E728DC-9C45-4060-A243-B73443B7CA16","new IVsToolbox2")
-            ("0F844C7D-5EF0-11d2-B213-0000F87570EE","old IVsToolbox2")
-            ("6A2A1D82-C590-4AB1-8CC2-D95BACBBA9E0","new IVsToolboxClipboardCycler")
-            ("E31E5D50-D8A6-11d2-AFBD-00105A9991EF","old IVsToolboxClipboardCycler")
-            ("D388BD3B-4D50-4356-B09A-8917E706D196","new IVsStatusbarUser")
-            ("DB5CFB59-FC95-11d0-8C7E-00C04FC2AA89","old IVsStatusbarUser")
-            ("DC0AF70E-5097-4DD3-9983-5A98C3A19942","new IVsStatusbar")
-            ("1F9C665D-F96A-11d0-8C7E-00C04FC2AA89","old IVsStatusbar")
-            ("47B1D60A-4EB8-4723-B991-992E6393E392","new IVsDocOutlineProvider")
-            ("81CD5C00-FFA1-11d0-B63F-00A0C922E851","old IVsDocOutlineProvider")
-            ("1375E029-1FDD-47FF-A22C-6709242133E2","new IVsComponentSelectorProvider")
-            ("040F3EE3-55D8-11d3-9ECE-00C04F682A08","old IVsComponentSelectorProvider")
-            ("910035B1-D8BE-403A-975E-E4FB68CE40A1","new IVsComponentUser")
-            ("0E3C4039-6639-11d3-BFFC-00C04F990235","old IVsComponentUser")
-            ("66899421-F497-4503-8C9D-ADAE290F2F27","new IVsComponentSelectorDlg")
-            ("2F952EED-564F-11d3-9ECE-00C04F682A08","old IVsComponentSelectorDlg")
-            ("A4AAB3EC-A9BB-42E2-8FD4-B01FE406D3F1","new IVsObjectBrowser")
-            ("970D9860-EE83-11d0-A778-00A0C91110C3","old IVsObjectBrowser")
-            ("1E425321-94CB-448e-8E1E-E1EA2479E5E2","new IVsLiteTreeList")
-            ("D1E5F1F2-66F8-4384-BB9E-38DA0DCCE632","old IVsLiteTreeList")
-            ("C4158C7D-5052-48D9-8643-7A821BB0F50B","new IVsLiteTree")
-            ("CC27B016-3D1E-469e-A0B6-9CFAB0E6DBF6","old IVsLiteTree")
-            ("87066898-76AB-45E2-B33C-C5B6B99BB03E","new IVsLiteTreeEvents")
-            ("E85449F3-F8BC-11d0-A77A-00A0C91110C3","old IVsLiteTreeEvents")
-            ("E86128E4-3B1B-4BE9-BEB6-D30E5BF40850","new IVsLibrary")
-            ("1FF9C984-5E75-47cd-B65F-FB63445BFCD7","old IVsLibrary")
-            ("DC1B976F-4DC7-4B3D-9EC7-A0DE9D39BC13","new IVsLibraryMgr")
-            ("7E547EFB-5DBB-4049-B039-86E416220E30","old IVsLibraryMgr")
-            ("44CCEB38-619B-401C-9B48-B9E874FFEE21","new IVsObjectBrowserList")
-            ("E85449F6-F8BC-11d0-A77A-00A0C91110C3","old IVsObjectBrowserList")
-            ("C48F7AB9-8966-4138-B602-14C5EB8BD857","new IVsObjectList")
-            ("07f5fbe1-1abb-11d3-85aa-006097c68e81","old IVsObjectList")
-            ("5801DB45-16AA-4F08-BB57-82A070B79512","new IVsObjectListOwner")
-            ("0e801c7a-479b-11d3-bdba-00c04f688e50","old IVsObjectListOwner")
-            ("01E95D2E-2D20-4662-9DE7-4C1C35524260","new IVsObjectManager")
-            ("07f5fbe0-1abb-11d3-85aa-006097c68e81","old IVsObjectManager")
-            ("7C4C8065-FB7E-45D8-9B50-940A8FCB5876","new IVsObjectManagerEvents")
-            ("07f5fbe2-1abb-11d3-85aa-006097c68e81","old IVsObjectManagerEvents")
-            ("EA31732A-0A11-4E80-8DCC-9E6DB395BE59","new IVsObjectBrowserDescription")
-            ("E85449F8-F8BC-11d0-A77A-00A0C91110C3","old IVsObjectBrowserDescription")
-            ("0587FED2-8072-401F-9090-BCA98C44BBF7","new IVsObjectBrowserDescription2")
-            ("7178484A-76B0-11d3-BDC7-00C04F688E50","old IVsObjectBrowserDescription2")
-            ("D7ECCE71-9C14-49A9-A93D-A5ED6286AC46","new IVsClassView")
-            ("C9C0AE26-AA77-11d2-B3F0-0000F87570EE","old IVsClassView")
-            ("0DF98187-FD9A-4669-8A56-727910A4866C","new IVsObjBrowser")
-            ("269A02DC-6AF8-11d3-BDC4-00C04F688E50","old IVsObjBrowser")
-            ("46B4B7C2-11EB-4753-BE4B-0E0A16E9CE53","new IEnumComReferences")
-            ("6114C8A0-0CE9-11d1-8BD9-00A0C90F26F7","old IEnumComReferences")
-            ("66A77728-86E1-4D18-88C5-EE0D4FD4BF60","new IVsComReferenceDlgEvents")
-            ("6114C8A1-0CE9-11d1-8BD9-00A0C90F26F7","old IVsComReferenceDlgEvents")
-            ("CC05EE57-C6C0-4742-A469-0961E50B0049","new IVsComReferenceDlg")
-            ("6114C8A2-0CE9-11d1-8BD9-00A0C90F26F7","old IVsComReferenceDlg")
-            ("D2C45F92-23B5-408B-B41D-D4365FB7EDA8","new IVsExtensibleObject")
-            ("94017641-2BA3-11d1-AE65-00A0C90F26F4","old IVsExtensibleObject")
-            ("8C444EF9-5863-4AB1-A1D0-55CC60AC253A","new IVsLanguageInfoPackage")
-            ("5E0EEA6C-2EBD-11d1-8CC5-00C04FC2AB22","old IVsLanguageInfoPackage")
-            ("34DBAA55-2CA4-44EF-9F92-85435D3E4451","new IVsSwitchToolWindow")
-            ("3d4683e0-313b-11d1-a04a-00a0c911e8e9","old IVsSwitchToolWindow")
-            ("DC0A8728-F58B-4444-B9F0-32D6868BF399","new IVsMenuItem")
-            ("F71AA513-9038-11d0-8C3C-00C04FC2AA89","old IVsMenuItem")
-            ("6FBCB271-B391-4F80-B560-45E650DEF0A7","new IVsMenuEditor")
-            ("559BAFB1-8396-11d0-B668-00AA00A3EE26","old IVsMenuEditor")
-            ("61B34381-6D7C-461D-949A-1AE178CBA00D","new IVsMenuEditorSite")
-            ("6A213651-8396-11d0-B668-00AA00A3EE26","old IVsMenuEditorSite")
-            ("EAF61568-F99B-4BC2-83C4-1DAD8FFAE9E5","new IVsMenuEditorFactory")
-            ("6513023F-94BD-11d0-8C3E-00C04FC2AA89","old IVsMenuEditorFactory")
-            ("35A96FFB-7ED0-4D76-93CE-49BE83A9C91E","new IVsIntelliMouseHandler")
-            ("B9C589F8-471B-11d1-8862-0000F87579D2","old IVsIntelliMouseHandler")
-            ("F4936BE4-7AE0-4C97-9D82-51D219FC5D77","new IVsCodeShareHandler")
-            ("16c5b4c1-03b3-11d1-a39a-006097df2373","old IVsCodeShareHandler")
-            ("508ED8E9-923D-44ED-8165-5B96DA4E0829","new IVsWindowPaneCommit")
-            ("AEC7E124-7662-11d1-9CF5-00C04FB17665","old IVsWindowPaneCommit")
-            ("B1E402B6-D8E0-4422-9164-421FEE099F00","new IVsPropertyBrowser")
-            ("AA71B5C0-CD90-11d1-B4D6-00A0C911E8B1","old IVsPropertyBrowser")
-            ("DF29D855-D0EC-4DA1-BCC3-42FA3A09B1CB","new IVsUIHierWinClipboardHelper")
-            ("7EEDD561-FC1E-11d2-BECD-00C04F682A08","old IVsUIHierWinClipboardHelper")
-            ("4D25F3C7-3138-4AC6-91AF-D7FF6929DB9F","new IVsUIHierWinClipboardHelperEvents")
-            ("7EEDD562-FC1E-11d2-BECD-00C04F682A08","old IVsUIHierWinClipboardHelperEvents")
-            ("320E51F6-D238-4BD0-BA89-CCA91DBCF411","new IVsHierarchyDeleteHandler")
-            ("8F97C0CD-2B64-11d3-BEDD-00C04F682A08","old IVsHierarchyDeleteHandler")
-            ("78FD1CBD-387B-4262-BD7B-65C34F86356E","new IVsHierarchyDeleteHandler2")
-            ("78FD1CBD-387B-4262-BD7B-65C34F86356E","old IVsHierarchyDeleteHandler2")
-            ("6D10BA00-9465-4F93-8B1D-11E36EE1FF65","new IVsCmdNameMapping")
-            ("D3EE8D38-78D7-11d2-8776-00C04F7971A5","old IVsCmdNameMapping")
-            ("366704D5-85D0-4F7D-B267-90FA4DD37D5B","new IVsParseCommandLine")
-            ("1B04D776-CAB7-11d2-A41B-00C04F72D18A","old IVsParseCommandLine")
-            ("2BD8D42F-5BC5-4B7F-AB50-FE9310F2FE53","new IVsTextOut")
-            ("2CAA1AB2-0261-11d3-BE8A-0080C747D9A0","old IVsTextOut")
-            ("0660CD86-F3AB-4008-930D-BAE8B10FF8CA","new IVsCommandWindow")
-            ("94964F2F-FF42-11d2-A434-00C04F72D18A","old IVsCommandWindow")
-            ("811DEB01-C1B0-4172-9CA3-504C5095882E","new IVsThreadSafeCommandWindow")
-            ("1D009554-87E2-11d3-A45A-00C04F72D18A","old IVsThreadSafeCommandWindow")
-            ("575BC578-7562-44E7-986C-5B31398CF121","new IVsTestLog")
-            ("9A90C18F-7F31-11d2-9BFC-00C04F9901D1","old IVsTestLog")
-            ("CA3E5036-9567-407C-B464-5ECA98B533A0","new IVsTshell")
-            ("F6A0FA50-B78B-11d0-A79E-00A0C9110051","old IVsTshell")
-            ("BC039978-213E-4CA0-81C4-10EDF2AF2D66","new IVsPropertyPageFrame")
-            ("41218D4C-AC2A-11d2-8B91-00C04F8EC28C","old IVsPropertyPageFrame")
-            ("5FA2AC9A-3BEF-423A-8B5E-6645811BFB6B","new IVsFontAndColorDefaults")
-            ("0514444A-F8DB-11d2-AE7D-00C04F7971C3","old IVsFontAndColorDefaults")
-            ("1D42A4C9-57DE-4D3E-8010-485ADFC1E95B","new IVsFontAndColorGroup")
-            ("A76B7F30-50CF-11d3-8E5C-00104BC90F0C","old IVsFontAndColorGroup")
-            ("F73E1D1E-3D1B-44F0-B736-D59F960B7F9E","new IVsFontAndColorEvents")
-            ("12F8E1DA-1EB3-11d3-AE9B-00C04F7971C3","old IVsFontAndColorEvents")
-            ("3448FF72-B072-435E-9059-29D89C0A3CD0","new IVsFontAndColorDefaultsProvider")
-            ("9B7C3392-145C-11d3-AE91-00C04F7971C3","old IVsFontAndColorDefaultsProvider")
-            ("40BC7B1A-E625-4DA1-86B4-7660F3CCBB16","new IVsFontAndColorStorage")
-            ("1369CBD4-0FBD-11d3-AE8E-00C04F7971C3","old IVsFontAndColorStorage")
-            ("82780F79-A3ED-4B7F-90C0-5FEE14CBB53E","new IVsProjectStartupServices")
-            ("30B4F22A-0EE3-11d3-9B52-00C04F68380C","old IVsProjectStartupServices")
-            ("9E6F916A-3E8B-4741-8AFB-5187F82B699B","new IEnumProjectStartupServices")
-            ("746797AC-0EE3-11d3-9B52-00C04F68380C","old IEnumProjectStartupServices")
-            ("237ABD5F-9537-4AEE-A893-72AB9A0EA8E8","new IVsPropertyPage")
-            ("6DD48D3C-1BD1-11d3-8BBD-00C04F8EC28C","old IVsPropertyPage")
-            ("0FF510A3-5FA5-49F1-8CCC-190D71083F3E","new IVsPerPropertyBrowsing")
-            ("0A55B998-D98E-11D2-91DF-00A0CC394083","old IVsPerPropertyBrowsing")
-            ("ED77D5EC-B0DE-4721-BDC6-38DCBE589B4C","new IVsRegisterPriorityCommandTarget")
-            ("C96FC5D4-DE9F-43bf-B197-03897D829800","old IVsRegisterPriorityCommandTarget")
-            ("44A39218-81BD-4669-9DE0-F282A8BAEE34","new IVsObjectSearch")
-            ("1AB09D1C-6A1F-410f-856D-7C35D386A068","old IVsObjectSearch")
-            ("BED89B98-6EC9-43CB-B0A8-41D6E2D6669D","new IVsGeneratorProgress")
-            ("bdb56d23-712a-43f0-a2d0-5cf06e71003d","old IVsGeneratorProgress")
-            ("3634494C-492F-4F91-8009-4541234E4E99","new IVsSingleFileGenerator")
-            ("edea12ea-3621-4a7e-ac32-8940f17453b7","old IVsSingleFileGenerator")
-            ("B8F932A5-5037-48C9-AB3A-A4ABBA79358B","new IVsCfg")
-            ("d0b027b1-8c1f-11d0-8a34-00a0c91e2acd","old IVsCfg")
-            ("2BC88742-618D-46B2-B65D-67AC990E3215","new IVsDebuggableProjectCfg")
-            ("d0b027dc-8c1f-11d0-8a34-00a0c91e2acd","old IVsDebuggableProjectCfg")
-            ("A17326AD-C97B-4278-86E2-72163C4C6A8C","new IVsBuildStatusCallback")
-            ("d0b027c3-8c1f-11d0-8a34-00a0c91e2acd","old IVsBuildStatusCallback")
-            ("8588E475-BB33-4763-B4BA-0322F839AA3C","new IVsBuildableProjectCfg")
-            ("d0b027c0-8c1f-11d0-8a34-00a0c91e2acd","old IVsBuildableProjectCfg")
-            ("09857e8e-74cc-43a7-993d-3ec774dca298","new IVsBuildableProjectCfg2")
-            ("09857e8e-74cc-43a7-993d-3ec774dca298","old IVsBuildableProjectCfg2")
-            ("E9964F8D-5600-4623-B611-FF4007B22419","new IVsDeployStatusCallback")
-            ("942DCAB5-BA5D-11d0-AB23-00A0C90F2713","old IVsDeployStatusCallback")
-            ("358F6C9F-CD65-446A-B79A-30CEE094FDC1","new IVsDeployableProjectCfg")
-            ("2bc4e9c7-66b3-11d1-b194-00a0c91e2acd","old IVsDeployableProjectCfg")
-            ("A981529F-4D0D-46ee-A758-AC26E50E099D","new IVsDeployableProjectCfg2")
-            ("a981529f-4d0d-46ee-a758-ac26e50e099d","old IVsDeployableProjectCfg2")
-            ("2DBDF061-439B-4822-9727-CA3ED918B658","new IVsProjectCfg")
-            ("d0b027b2-8c1f-11d0-8a34-00a0c91e2acd","old IVsProjectCfg")
-            ("A7ADE7A0-F286-4C03-8137-D6D0EF3D6848","new IVsProjectCfg2")
-            ("521F66DD-F1C1-11d2-B0AD-00A0C9CFCEE6","old IVsProjectCfg2")
-            ("EEABD2BE-4F4F-4CCB-86AD-9F469C5C9686","new IVsCfgProvider")
-            ("d0b027e0-8c1f-11d0-8a34-00a0c91e2acd","old IVsCfgProvider")
-            ("E6D78900-BB40-4039-9C54-593A242B65DA","new IVsCfgProviderEvents")
-            ("2bc4e9f0-66b3-11d1-b194-00a0c91e2acd","old IVsCfgProviderEvents")
-            ("0D6D480C-894F-48E4-98D2-E0A7127750E4","new IVsCfgProviderEventsHelper")
-            ("99913f1e-1ee3-11d3-8a6e-00c04f682e21","old IVsCfgProviderEventsHelper")
-            ("623E34D5-82C1-42ED-A82C-6CA0478FFDDA","new IVsCfgProvider2")
-            ("2bc4e9f1-66b3-11d1-b194-00a0c91e2acd","old IVsCfgProvider2")
-            ("803E46E2-6A0D-4D5D-9F84-6CE1248B068D","new IVsProjectCfgProvider")
-            ("e0b027b0-8c1f-11d0-8a34-00a0c91e2acd","old IVsProjectCfgProvider")
-            ("509D0E4F-A770-44C3-9185-D4F1E4813AD6","new IVsGetCfgProvider")
-            ("BFDCD88A-30CA-11d3-9B5F-00C04F68380C","old IVsGetCfgProvider")
-            ("0A8AC2FB-87BC-4795-8C8B-47E877F48FE8","new IVsEnumOutputs")
-            ("d0b027b3-8c1f-11d0-8a34-00a0c91e2acd","old IVsEnumOutputs")
-            ("0238DCC5-62D6-4DAC-A977-2C6A36C502F4","new IVsOutput")
-            ("d0b027b4-8c1f-11d0-8a34-00a0c91e2acd","old IVsOutput")
-            ("2D39742A-C729-44C3-AC5B-85785D4C1C22","new IVsHierarchicalOutput")
-            ("d0b027c8-8c1f-11d0-8a34-00a0c91e2acd","old IVsHierarchicalOutput")
-            ("FCC03D95-7C2E-4398-AAAE-0F4B56104FC8","new IVsOutputGroup")
-            ("521F66DE-F1C1-11d2-B0AD-00A0C9CFCEE6","old IVsOutputGroup")
-            ("653BB330-1205-4CF8-8F88-723D6E199A01","new IVsOutput2")
-            ("521F66DF-F1C1-11d2-B0AD-00A0C9CFCEE6","old IVsOutput2")
-            ("A086E870-AA0B-4EF9-8CF3-4A38267B9C7D","new IVsDeployDependency")
-            ("521F66E0-F1C1-11d2-B0AD-00A0C9CFCEE6","old IVsDeployDependency")
-            ("B4D28A5B-063D-4622-B0C7-C3DDEBFCDCCF","new IVsProjectDeployDependency")
-            ("06e2018b-568f-44e9-8af7-5d501cae6eb7","old IVsProjectDeployDependency")
-            ("9DB6689F-3C5F-43ED-B0D5-54851A980B93","new IVsDependency")
-            ("d0b027b6-8c1f-11d0-8a34-00a0c91e2acd","old IVsDependency")
-            ("28D58EEE-EFFC-4B4D-834C-3A746FEAC7AE","new IVsBuildDependency")
-            ("d0b027d6-8c1f-11d0-8a34-00a0c91e2acd","old IVsBuildDependency")
-            ("0ED850AF-C30A-42BA-AA20-3436ADF24937","new IVsEnumDependencies")
-            ("d0b027b5-8c1f-11d0-8a34-00a0c91e2acd","old IVsEnumDependencies")
-            ("819CC554-C7BF-4965-A4D4-937B2B6CD2E1","new IVsDependencyProvider")
-            ("d0b027c9-8c1f-11d0-8a34-00a0c91e2acd","old IVsDependencyProvider")
-            ("EC9ABAFB-E744-44B5-8771-0B875EE6FC5C","new IVsPropertyStreamIn")
-            ("d0b027cb-8c1f-11d0-8a34-00a0c91e2acd","old IVsPropertyStreamIn")
-            ("805B0E0A-7122-4855-962F-887E46D2F112","new IVsPropertyFileIn")
-            ("2bc4e9c0-66b3-11d1-b194-00a0c91e2acd","old IVsPropertyFileIn")
-            ("BF283741-E0AD-49C0-BEA4-1E267E52208F","new IVsPropertyStreamOut")
-            ("d0b027cc-8c1f-11d0-8a34-00a0c91e2acd","old IVsPropertyStreamOut")
-            ("3018E511-6282-41FC-8E1F-77AB1BDDE523","new IVsPropertyFileOut")
-            ("2bc4e9c1-66b3-11d1-b194-00a0c91e2acd","old IVsPropertyFileOut")
-            ("0612FCA3-B60E-410B-BCCE-43953FF0763C","new IVsStructuredFileIOHelper")
-            ("2bc4e9c2-66b3-11d1-b194-00a0c91e2acd","old IVsStructuredFileIOHelper")
-            ("12B43F9F-8550-4FFA-850F-FE9D4D396C20","new IVsStructuredFileIO")
-            ("d0b027e1-8c1f-11d0-8a34-00a0c91e2acd","old IVsStructuredFileIO")
-            ("218D0424-9C53-4EA1-A679-A0AED59B0E4F","new IVsHTMLConverter")
-            ("CB89733A-B2E0-11d1-981B-0000F8058E9D","old IVsHTMLConverter")
-            ("05A323E9-5069-474E-9BCC-14F87302B213","new IVsSolutionSecurityOptions")
-            ("96313150-6AA6-11d1-A202-0000F8026F55","old IVsSolutionSecurityOptions")
-            ("A9F86308-5EA7-485D-BAB8-E8989C3CFBDC","new IVsUpdateSolutionEvents")
-            ("d0b027da-8c1f-11d0-8a34-00a0c91e2acd","old IVsUpdateSolutionEvents")
-            ("F59DBC1A-91C3-45C9-9796-1CAB558502DD","new IVsUpdateSolutionEvents2")
-            ("868163bb-1da7-41df-87b8-ce64439a4093","old IVsUpdateSolutionEvents2")
-            ("40025C28-3303-42CA-BED8-0F3BD856BD6D","new IVsUpdateSolutionEvents3")
-            ("40025C28-3303-42CA-BED8-0F3BD856BD6D","old IVsUpdateSolutionEvents3")
-            ("93E969D6-1AA0-455F-B208-6ED3C82B5C58","new IVsSolutionBuildManager")
-            ("d0b027db-8c1f-11d0-8a34-00a0c91e2acd","old IVsSolutionBuildManager")
-            ("80353F58-F2A3-47B8-B2DF-0475E07BB1C6","new IVsSolutionBuildManager2")
-            ("e823a2b0-88ed-44c8-98de-73fd5d54b908","old IVsSolutionBuildManager2")
-            ("B6EA87ED-C498-4484-81AC-0BED187E28E6","new IVsSolutionBuildManager3")
-            ("B6EA87ED-C498-4484-81AC-0BED187E28E6","old IVsSolutionBuildManager3")
-            ("910ACC85-ECD4-4CF8-85E0-EB105ABE8008","new IVsLibraryReferenceManager")
-            ("699D5E17-9B22-466b-ACFA-2E12CD64E249","old IVsLibraryReferenceManager")
-            ("0E7798AD-4000-48DF-AA1D-851425D45825","new IVsLangSpecificSyntax")
-            ("9E9AB119-D2A1-4381-9020-6B771DC46AE9","old IVsLangSpecificSyntax")
-            ("ad98f020-bad0-0000-0000-abc037459871","IProvideProjectSite")
-            ]
-            
-        let iunk = Marshal.GetIUnknownForObject(o)
-        try
-            knownInterfaces 
-            |> Seq.filter(fun (iid,_)->CanQueryInterface iunk iid) 
-            |> Seq.map(snd)
-        finally 
-            let _ = Marshal.Release(iunk)
-            ()
-
-    let ReportKnownInterfaces o = 
-        (DiscoverKnownInterfaces o) |> Seq.iter (fun s-> Trace.PrintLine("ReportKnownInterfaces", fun _ -> sprintf "  matched %s" s))
-            
-#endif            
-
-
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Error.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Error.fs
index d961dd28976..e9965c6febf 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Error.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Error.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService
 open System
@@ -48,9 +48,7 @@ module internal Strings =
         let GotoDefinitionFailed_NoSourceCode () = GetString "GotoDefinitionFailed_NotSourceCode"
 
 /// Assert helpers
-[]
-[]
-type internal Assert private() = 
+type internal Assert() = 
     /// Display a good exception for this error message and then rethrow.
     static member Exception(e:Exception) =  
         System.Diagnostics.Debug.Assert(false, "Unexpected exception seen in language service", e.ToString())
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSLangSvcStrings.resx b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSLangSvcStrings.resx
index c1439736138..d59cbf8bc16 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSLangSvcStrings.resx
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSLangSvcStrings.resx
@@ -1,5 +1,5 @@
 
-
+
 
   
+
 
   
     ..\..\..\..\..\..\src
@@ -27,7 +27,8 @@
     $(DefineConstants);QUERIES_IN_FSLIB
     $(DefineConstants);PUT_TYPE_PROVIDERS_IN_FSCORE;
     $(DefineConstants);FX_ATLEAST_LINQ
-    
+    
+    
   
   
     true
@@ -38,6 +39,10 @@
   
   
   
+    
+      {991dcf75-c2eb-42b6-9a0d-aa1d2409d519}
+      FSharp.VS.FSI
+    
     
     
     
@@ -74,11 +79,6 @@
       {DED3BBD7-53F4-428A-8C9F-27968E768605}
       FSharp.Core
     
-    
-      FSharp.VS.FSI
-      {991dcf75-c2eb-42b6-9a0d-aa1d2409d519}
-      True
-    
   
   
     
@@ -88,7 +88,6 @@
     
     
     
-    
     
     
     
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Interfaces.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Interfaces.cs
index 76ac9607478..0c33c6bec6d 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Interfaces.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Interfaces.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.TextManager.Interop;
 using Microsoft.VisualStudio.Shell;
@@ -29,7 +29,7 @@ enum RequireFreshResults
         No = 0
     }
 
-    // The interface between SourceImpl+FSharpSourceImpl and the rest of the language service.
+    // The interface between FSharpSourceBase+FSharpSource and the rest of the language service.
     interface ISource : IDisposable
     {
         void Open();
@@ -79,9 +79,6 @@ interface ISource : IDisposable
         void HandleUntypedParseOrFullTypeCheckResponse(BackgroundRequest req);
         IVsHiddenTextSession GetHiddenTextSession();
         string GetExpressionAtPosition(int line, int column);
-#if DEBUG
-        string OriginalFilename { get; }
-#endif
         DateTime OpenedTime { get; }
     }
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/InternalsVisibleTo.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/InternalsVisibleTo.cs
index 7f5c55aec31..6b0c3755cfb 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/InternalsVisibleTo.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/InternalsVisibleTo.cs
@@ -1,11 +1,11 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 
-[assembly: InternalsVisibleTo("Salsa, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
-[assembly: InternalsVisibleTo("Unittests, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
+[assembly: InternalsVisibleTo("VisualFSharp.Salsa, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
+[assembly: InternalsVisibleTo("VisualFSharp.Unittests, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
 [assembly: InternalsVisibleTo("FSharp.LanguageService, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
 [assembly: InternalsVisibleTo("FSharp.ProjectSystem.Base, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
 [assembly: InternalsVisibleTo("FSharp.ProjectSystem.FSharp, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/LanguageService.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/LanguageService.cs
index c003821d2ef..59185d842e6 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/LanguageService.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/LanguageService.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.OLE.Interop;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -49,21 +49,21 @@ internal enum BackgroundRequestReason
         /// update the untyped AST information (e.g. when a different file is opened). After updating
         /// the untyped scope (in F# LS), a 'null' can be returned as the result of 'ExecuteBackgroundRequest'.
         /// 
-        UntypedParse
+        ParseFile
     };
 
     [CLSCompliant(false), ComVisible(true)]
-    public abstract class LanguageService : IDisposable, IVsLanguageInfo, IVsLanguageDebugInfo,
-        IVsProvideColorableItems, IVsLanguageContextProvider, IOleServiceProvider,
+    public abstract class LanguageService : IDisposable, 
+        IVsLanguageContextProvider, IOleServiceProvider,
         IObjectWithSite, IVsDebuggerEvents,
         IVsFormatFilterProvider,
         ILanguageServiceTestHelper
-    { //, IVsOutliningCapableLanguage {
+    {
 
         private IServiceProvider site;
         private ArrayList codeWindowManagers;
         private LanguagePreferences preferences;
-        private ArrayList sources;
+        internal ArrayList sources;
         private bool disposed;
         private IVsDebugger debugger;
         private uint cookie;
@@ -151,35 +151,16 @@ public virtual void Dispose()
 
         internal abstract void ExecuteBackgroundRequest(BackgroundRequest req);
 
-        /// If this returns true we can reuse a recent AuthoringScope if its available
+        /// If this returns true we can reuse a recent IntellisenseInfo if its available
         internal abstract bool IsRecentScopeSufficientForBackgroundRequest(BackgroundRequestReason req);
 
-        /// Return the name of the language, such as "HTML" or "C++", and so on.
-        internal abstract string Name { get; }
-
-        internal abstract object GetInteractiveChecker();
-
         internal Guid GetLanguageServiceGuid()
         {
             return this.GetType().GUID;
         }
 
-        #region IVsProvideColorableItems
-        public virtual int GetItemCount(out int count)
-        {
-            count = 0;
-            return NativeMethods.E_NOTIMPL;
-        }
-
-        public virtual int GetColorableItem(int index, out IVsColorableItem item)
-        {
-            item = null;
-            return NativeMethods.E_NOTIMPL;
-        }
-        #endregion
-
-        #region IVsLanguageContextProvider
-        int IVsLanguageContextProvider.UpdateLanguageContext(uint dwHint, IVsTextLines buffer, TextSpan[] ptsSelection, object ptr)
+		// Provides context from the language service to the Visual Studio core editor.
+		int IVsLanguageContextProvider.UpdateLanguageContext(uint dwHint, IVsTextLines buffer, TextSpan[] ptsSelection, object ptr)
         {
             if (ptr != null && ptr is IVsUserContext && buffer is IVsTextBuffer)
                 return UpdateLanguageContext((LanguageContextHint)dwHint, buffer, ptsSelection, (IVsUserContext)ptr);
@@ -212,8 +193,6 @@ internal void SetUserContextDirty(string fileName)
             }
         }
 
-        #endregion
-
         internal virtual int UpdateLanguageContext(LanguageContextHint hint, IVsTextLines buffer, TextSpan[] ptsSelection, IVsUserContext context)
         {
             // From the docs: Any failure code: means the implementer is "passing" on this opportunity to provide context and the text editor will fall back to other mechanisms.
@@ -228,7 +207,7 @@ internal virtual int UpdateLanguageContext(LanguageContextHint hint, IVsTextLine
             ISource source = GetSource(buffer);
             if (source == null) return NativeMethods.E_FAIL;
 
-            var req = source.BeginBackgroundRequest(span.iStartLine, span.iStartIndex, new TokenInfo(), BackgroundRequestReason.FullTypeCheck, lastActiveView, RequireFreshResults.No, new BackgroundRequestResultHandler(this.HandleUpdateLanguageContextResponse));
+            var req = source.BeginBackgroundRequest(span.iStartLine, span.iStartIndex, new TokenInfo(), BackgroundRequestReason.FullTypeCheck, lastActiveView, RequireFreshResults.Yes, new BackgroundRequestResultHandler(this.HandleUpdateLanguageContextResponse));
 
             if (req == null || req.Result == null) return NativeMethods.E_FAIL;
 
@@ -236,9 +215,9 @@ internal virtual int UpdateLanguageContext(LanguageContextHint hint, IVsTextLine
                     ((req.Result != null) && req.Result.TryWaitForBackgroundRequestCompletion(1000))))
             {
                 if (req.IsAborted) return NativeMethods.E_FAIL;
-                if (req.ResultScope != null)
+                if (req.ResultIntellisenseInfo != null)
                 {
-                    req.ResultScope.GetF1KeywordString(span, context);
+                    req.ResultIntellisenseInfo.GetF1KeywordString(span, context);
                     return NativeMethods.S_OK;
                 }
             }
@@ -319,7 +298,7 @@ internal void OpenDocument(string path)
         internal string lastFileName;
         internal IVsTextView lastActiveView;
         // STATIC ROOT INTO PROJECT BUILD
-        internal AuthoringScope recentFullTypeCheckResults = null;
+        internal IntellisenseInfo recentFullTypeCheckResults = null;
         internal string recentFullTypeCheckFile = null;
 
         /// 
@@ -330,11 +309,11 @@ internal IVsTextView LastActiveTextView
             get { return this.lastActiveView; }
         }
 
-        /// Returns the last active successful fetch of an AuthoringScope that is managed by this language service.
+        /// Returns the last active successful fetch of an IntellisenseInfo that is managed by this language service.
         /// This is only relevant to the active text view and is cleared each time the text view is switched. If it
         /// is null we must make a background request to the language service to get the recent full typecheck results.
         /// If a file is dirty, an OnIdle call will kick in to refresh the recent results.
-        internal AuthoringScope RecentFullTypeCheckResults
+        internal IntellisenseInfo RecentFullTypeCheckResults
         {
             get { return this.recentFullTypeCheckResults; }
             set { this.recentFullTypeCheckResults = value; }
@@ -360,18 +339,6 @@ internal bool IsActive
             }
         }
 
-        /// 
-        /// Trigger the quick-parse to update the untyped AST information in the F# language service.
-        /// 
-        internal virtual BackgroundRequest TriggerUntypedParse()
-        {
-            IVsTextView view = this.lastActiveView;
-            if (view == null) return null;
-            ISource s = this.GetSource(view);
-            if (s == null) return null;
-            return s.BeginBackgroundRequest(0, 0, new TokenInfo(), BackgroundRequestReason.UntypedParse, this.LastActiveTextView, RequireFreshResults.No, new BackgroundRequestResultHandler(s.HandleUntypedParseOrFullTypeCheckResponse));
-        }
-
         internal virtual int OnIdle(bool periodic, IOleComponentManager mgr)
         {
             if (!this.IsActive)
@@ -435,7 +402,7 @@ internal virtual void OnActiveViewChanged(IVsTextView textView)
         }
         internal virtual void OnActiveViewLostFocus(IVsTextView textView)
         {
-            SourceImpl s = (SourceImpl)this.GetSource(textView);
+            FSharpSourceBase s = (FSharpSourceBase)this.GetSource(textView);
             if (s != null) s.HandleLostFocus();
         }
         internal virtual void OnCaretMoved(CodeWindowManager mgr, IVsTextView textView, int line, int col)
@@ -470,14 +437,6 @@ protected virtual void OnChangesCommitted(uint flags, Microsoft.VisualStudio.Tex
 
         internal abstract Colorizer GetColorizer(IVsTextLines buffer);
 
-        internal abstract ISource CreateSource(IVsTextLines buffer);
-
-        /// For enumerating all the known 'Source' objects.
-        internal IEnumerable GetSources()
-        {
-            return this.sources;
-        }
-
         // We have to make sure we return the same colorizer for each text buffer,
         // so we keep a hashtable of IVsTextLines -> Source objects, the Source
         // object owns the Colorizer for that buffer.  If this method returns null
@@ -566,141 +525,13 @@ internal virtual ExpansionProvider CreateExpansionProvider(ISource src)
             return new ExpansionProvider(src);
         }
 
-        #region IVsLanguageInfo methods
-        // GetCodeWindowManager -- this gives us the VsCodeWindow which is what we need to
-        // add adornments and so forth.
-        public int GetCodeWindowManager(IVsCodeWindow codeWindow, out IVsCodeWindowManager mgr)
-        {
-            Initialize();
-            IVsTextLines buffer = null;
-            NativeMethods.ThrowOnFailure(codeWindow.GetBuffer(out buffer));
-            mgr = CreateCodeWindowManager(codeWindow, GetOrCreateSource(buffer));
-            return NativeMethods.S_OK;
-        }
-
-        private ISource GetOrCreateSource(IVsTextLines buffer)
-        {
-            // see if we already have a Source object.
-            ISource s = GetSource(buffer);
-            if (s == null)
-            {
-                // Ok, then create one.
-                s = CreateSource(buffer);
-                this.sources.Add(s);
-            }
-            return s;
-        }
-
         internal virtual CodeWindowManager CreateCodeWindowManager(IVsCodeWindow codeWindow, ISource source)
         {
             return new CodeWindowManager(this, codeWindow, source);
         }
 
-        public int GetColorizer(IVsTextLines buffer, out IVsColorizer result)
-        {
-            // Do NOT create source object yet - this might be an invisible editor in which
-            // case Source object will create shutdown problems.
-            result = this.GetColorizer(buffer);
-            return NativeMethods.S_OK;
-        }
 
-        public virtual int GetLanguageName(out string name)
-        {
-            name = this.Name;
-            return NativeMethods.S_OK;
-        }
 
-        public virtual int GetFileExtensions(out string extensions)
-        {
-            extensions = "";
-            return NativeMethods.S_OK;
-        }
-
-        #endregion
-
-        #region IVsLanguageDebugInfo methods
-        public abstract int GetLanguageID(IVsTextBuffer buffer, int line, int col, out Guid langId);
-
-        public virtual int GetLocationOfName(string name, out string pbstrMkDoc, TextSpan[] spans)
-        {
-            pbstrMkDoc = null;
-            return NativeMethods.E_NOTIMPL;
-        }
-
-        public virtual int GetNameOfLocation(IVsTextBuffer buffer, int line, int col, out string name, out int lineOffset)
-        {
-            name = null;
-            lineOffset = 0;
-            /*
-         TRACE1( "LanguageService(%S)::GetNameOfLocation", m_languageName );
-        OUTARG(lineOffset);
-        OUTARG(name);
-        INARG(textBuffer);
-
-        HRESULT hr;
-        IScope* scope = NULL;
-        hr = GetScopeFromBuffer( textBuffer, &scope );
-        if (FAILED(hr)) return hr;
-  
-        long realLine = line;
-        hr = scope->Narrow( line, idx, name, &realLine );
-        RELEASE(scope);
-        if (hr != S_OK) return hr;
-
-        *lineOffset = line - realLine;
-        return S_OK;
-      */
-            return NativeMethods.S_OK;
-        }
-
-        public virtual int GetProximityExpressions(IVsTextBuffer buffer, int line, int col, int cLines, out IVsEnumBSTR ppEnum)
-        {
-            ppEnum = null;
-            /*
-        TRACE2( "LanguageService(%S)::GetProximityExpressions: line %i", m_languageName, line );
-        OUTARG(exprs);
-        INARG(textBuffer);
-
-        //check the linecount
-        if (lineCount <= 0) lineCount = 1;
-
-        //get the source 
-        //TODO: this only works for sources that are opened in the environment
-        HRESULT hr;
-        Source* source = NULL;
-        hr = GetSource( textBuffer, &source );
-        if (FAILED(hr)) return hr;
-
-        //parse and find the proximity expressions
-        StringList* strings = NULL;
-        hr = source->GetAutos( line, line + lineCount, &strings );
-        RELEASE(source);
-        if (FAILED(hr)) return hr;
-
-        hr = strings->QueryInterface( IID_IVsEnumBSTR, reinterpret_cast(exprs) );
-        RELEASE(strings);
-        if (FAILED(hr)) return hr;
-  
-        return S_OK;
-      */
-            return NativeMethods.S_FALSE;
-        }
-
-        public virtual int IsMappedLocation(IVsTextBuffer buffer, int line, int col)
-        {
-            return NativeMethods.S_FALSE;
-        }
-
-        public virtual int ResolveName(string name, uint flags, out IVsEnumDebugName ppNames)
-        {
-            ppNames = null;
-            return NativeMethods.E_NOTIMPL;
-        }
-
-        public abstract int ValidateBreakpointLocation(IVsTextBuffer buffer, int line, int col, TextSpan[] pCodeSpan);
-        #endregion
-
-        /// 
         internal object GetService(Type serviceType)
         {
             if (this.site != null)
@@ -710,7 +541,6 @@ internal object GetService(Type serviceType)
             return null;
         }
 
-        #region Microsoft.VisualStudio.OLE.Interop.IServiceProvider methods
         public virtual int QueryService(ref Guid guidService, ref Guid iid, out IntPtr obj)
         {
             obj = IntPtr.Zero;
@@ -723,7 +553,6 @@ public virtual int QueryService(ref Guid guidService, ref Guid iid, out IntPtr o
             }
             return (int)NativeMethods.E_UNEXPECTED;
         }
-        #endregion
 
         // Override this method if you want to insert your own view filter
         // into the command chain.  
@@ -835,8 +664,7 @@ internal BackgroundRequestAsyncResult BeginBackgroundRequest(BackgroundRequest r
         }
 
 
-        internal BackgroundRequest CreateBackgroundRequest(SourceImpl s, int line, int idx, TokenInfo info, string sourceText, ITextSnapshot snapshot, MethodTipMiscellany methodTipMiscellany,
-                                                           string fname, BackgroundRequestReason reason, IVsTextView view)
+        internal BackgroundRequest CreateBackgroundRequest(FSharpSourceBase s, int line, int idx, TokenInfo info, string sourceText, ITextSnapshot snapshot, MethodTipMiscellany methodTipMiscellany, string fname, BackgroundRequestReason reason, IVsTextView view)
         {
             // We set this to "false" because we are effectively abandoning any currently executing background request, e.g. an OnIdle request
             this.isServingBackgroundRequest = false;
@@ -848,28 +676,11 @@ internal BackgroundRequest CreateBackgroundRequest(SourceImpl s, int line, int i
             return CreateBackgroundRequest(line, idx, info, sourceText, snapshot, methodTipMiscellany, fname, reason, view, s.CreateAuthoringSink(reason, line, idx), s, s.ChangeCount, sync);
         }
 
-        // Implemented in servicem.fs
-        internal abstract BackgroundRequest CreateBackgroundRequest(int line, int col, TokenInfo info, string sourceText, ITextSnapshot snapshot, MethodTipMiscellany methodTipMiscellany, string fname,
-                                 BackgroundRequestReason reason, IVsTextView view,
-                                 AuthoringSink sink, ISource source, int timestamp, bool synchronous);
-
-        /// Override this method if you need to do any post-parse work on the main UI thread.
-        /// Be sure to call this base method in order to get the dynamic help context updated.
-        internal virtual void OnUntypedParseOrFullTypeCheckComplete(BackgroundRequest req)
-        {
-            if (req == null || req.Source == null || req.Source.IsClosed) return;
-            SetUserContextDirty(req.FileName);
-            RefreshUI();
-        }
+        // Implemented in FSharpLanguageService.fs
+        internal abstract BackgroundRequest CreateBackgroundRequest(int line, int col, TokenInfo info, string sourceText, ITextSnapshot snapshot, MethodTipMiscellany methodTipMiscellany, string fname, BackgroundRequestReason reason, IVsTextView view,AuthoringSink sink, ISource source, int timestamp, bool synchronous);
 
-        internal void RefreshUI()
-        {
-            IVsUIShell uiShell = this.GetService(typeof(SVsUIShell)) as IVsUIShell;
-            if (uiShell != null)
-            {
-                uiShell.UpdateCommandUI(0);
-            }
-        }
+		// Implemented in FSharpLanguageService.fs
+		internal abstract void OnParseFileOrCheckFileComplete(BackgroundRequest req);
 
         internal void EnsureBackgroundThreadStarted()
         {
@@ -1009,7 +820,6 @@ internal void BackgroundRequestThread()
         }
 
 
-        #region IObjectWithSite
         public void GetSite(ref Guid iid, out IntPtr ptr)
         {
             IntPtr pUnk = Marshal.GetIUnknownForObject(this.site);
@@ -1037,17 +847,6 @@ public void SetSite(object site)
             Microsoft.VisualStudio.Shell.Package pkg = (Microsoft.VisualStudio.Shell.Package)this.site.GetService(typeof(Microsoft.VisualStudio.Shell.Package));
             this.lcid = pkg.GetProviderLocale();
         }
-        #endregion
-
-#if IVsOutliningCapableLanguage                 
-        public virtual void CollapseToDefinitions(IVsTextLines buffer, IVsOutliningSession session) {
-            Source source = this.GetSource(buffer);
-            source.CollapseAllHiddenRegions(session);
-        }
-#endif
-
-
-        #region IVsDebuggerEvents Members
 
         public virtual int OnModeChange(DBGMODE dbgmodeNew)
         {
@@ -1055,9 +854,6 @@ public virtual int OnModeChange(DBGMODE dbgmodeNew)
             return NativeMethods.S_OK;
         }
 
-        #endregion
-
-
         /// Return true if the given encoding information is invalid for your language service
         /// Default always returns false.  If you return true, then also return an error
         /// message to display to the user.
@@ -1067,55 +863,15 @@ internal virtual bool QueryInvalidEncoding(__VSTFF format, out string errorMessa
             return false;
         }
 
-        // Provides the list of available extensions for Save As.
-        // The following default filter string is automatically added
-        // by Visual Studio:
-        // "All Files (*.*)\n*.*\nText Files (*.txt)\n*.txt\n"
-        internal virtual string GetFormatFilterList()
-        {
-            return "";
-        }
-
-        // Provides the index to the filter matching the extension of the file passed in.
-        // The default behavior for this method is to look for the matching extension 
-        // in the list returned from GetFormatFilterList and return the index to that extension.
-        // It expects GetFormatFilterList to return newline separated or '|' separated 
-        // list of label/extension pairs. It expects the extensions to be in the format "*.x"
-        // where x is the extension you want to match.  Returns -1 if there is no match.
-        internal virtual int CurFileExtensionFormat(string fileName)
-        {
-
-            string filter = GetFormatFilterList();
-            if (string.IsNullOrEmpty(filter)) return -1;
-
-            string fileext = FilePathUtilities.GetFileExtension(fileName);
-
-            string[] sa = null;
-            if (filter.Contains("\n"))
-            {
-                sa = filter.Split('\n');
-            }
-            else if (filter.Contains("|"))
-            {
-                sa = filter.Split('|');
-            }
-            else
-            {
-                throw new ArgumentException(SR.GetString(SR.UnrecognizedFilterFormat), "GetFormatFilterList");
-            }
+		// Provides the list of available extensions for Save As.
+		// The following default filter string is automatically added
+		// by Visual Studio:
+		// "All Files (*.*)\n*.*\nText Files (*.txt)\n*.txt\n"
+		internal abstract string GetFormatFilterList();
 
-            for (int i = 0, n = sa.Length - 1; i < n; i += 2)
-            {
-                string ext = sa[i + 1].Trim();
-                if (ext.Length > 1 && string.Compare(ext.Substring(1), fileext, StringComparison.OrdinalIgnoreCase) == 0)
-                {
-                    return i / 2;
-                }
-            }
-            return -1;
-        }
+		// Provides the index to the filter matching the extension of the file passed in.
+		internal abstract int CurFileExtensionFormat(string fileName);
 
-        #region IVsFormatFilterProvider Members
         int IVsFormatFilterProvider.QueryInvalidEncoding(uint format, out string pbstrMessage)
         {
             if (QueryInvalidEncoding((__VSTFF)format, out pbstrMessage))
@@ -1161,10 +917,6 @@ int IVsFormatFilterProvider.GetFormatFilterList(out string pbstrFilterList)
             return NativeMethods.S_OK;
         }
 
-        #endregion
-
-        #region ILanguageServiceTestHelper
-
         /// 
         /// Version number will increment to indicate a change in the semantics of preexisting methods. 
         /// 
@@ -1173,7 +925,6 @@ int ILanguageServiceTestHelper.GetSemanticsVersion()
             return 3;
         }
 
-        #endregion
     } // end class LanguageService
 
     internal class BackgroundRequestAsyncResult
@@ -1218,7 +969,7 @@ internal class BackgroundRequest
         bool terminate;
         BackgroundRequestResultHandler callback;
         AuthoringSink sink;
-        AuthoringScope scope;
+        IntellisenseInfo scope;
         bool isFreshFullTypeCheck;
         int startTimeForOnIdleRequest;
         string quickInfoText;
@@ -1315,7 +1066,7 @@ internal AuthoringSink ResultSink
             set { this.sink = value; }
         }
 
-        internal AuthoringScope ResultScope
+        internal IntellisenseInfo ResultIntellisenseInfo
         {
             get { return this.scope; }
             set { this.scope = value; }
@@ -1400,7 +1151,7 @@ internal BackgroundRequest(int line, int col, TokenInfo info, string src, ITextS
             this.TokenInfo = info;
             this.isSynchronous = synchronous;
 
-            this.ResultScope = null;
+            this.ResultIntellisenseInfo = null;
             this.ResultClearsDirtinessOfFile = false;
         }
     }
@@ -1610,7 +1361,7 @@ private static RequestType GetRequestType(BackgroundRequest r)
         {
             switch (r.Reason)
             {
-                case BackgroundRequestReason.UntypedParse:
+                case BackgroundRequestReason.ParseFile:
                 case BackgroundRequestReason.FullTypeCheck:
                     return RequestType.NonUi;
                 default:
@@ -1619,13 +1370,13 @@ private static RequestType GetRequestType(BackgroundRequest r)
         }
     }
 
-    internal abstract class AuthoringScope
+    internal abstract class IntellisenseInfo
     {
         internal abstract System.Tuple GetDataTipText(int line, int col);
 
         internal abstract Microsoft.FSharp.Control.FSharpAsync GetDeclarations(ITextSnapshot textSnapshot, int line, int col, BackgroundRequestReason reason);
 
-        internal abstract MethodListForAMethodTip GetMethodListForAMethodTip(bool useNameResolutionFallback);
+        internal abstract Microsoft.FSharp.Core.FSharpOption GetMethodListForAMethodTip();
 
         internal abstract GotoDefinitionResult Goto(IVsTextView textView, int line, int col);
 
@@ -1687,7 +1438,7 @@ internal abstract class MethodListForAMethodTip
 
         internal abstract bool IsThereACloseParen();  // false if either this is a call without parens "f x" or the parser recovered as in "f(x,y"
 
-        internal abstract Tuple[] GetNoteworthyParamInfoLocations(); // 1-based: longId start, longId end, open paren,  (see below) - relative to the ITextSnapshot this was created against
+        internal abstract Tuple[] GetNoteworthyParamInfoLocations(); // 0-based: longId start, longId end, open paren,  (see below) - relative to the ITextSnapshot this was created against
         //          let resultVal = some.functionOrMethod.call   (   arg1 ,  arg2 )
         //                          ^                        ^   ^        ^       ^
         // start of call identifier ^                        ^   ^        ^       ^
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Microsoft.VisualStudio.Package.LanguageService.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Microsoft.VisualStudio.Package.LanguageService.cs
index 8cb8df21596..ff8dac51234 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Microsoft.VisualStudio.Package.LanguageService.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Microsoft.VisualStudio.Package.LanguageService.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService.Resources {
     using System;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Microsoft.VisualStudio.Package.LanguageService.resx b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Microsoft.VisualStudio.Package.LanguageService.resx
index 3a5d074a279..84e7150076e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Microsoft.VisualStudio.Package.LanguageService.resx
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Microsoft.VisualStudio.Package.LanguageService.resx
@@ -1,5 +1,5 @@
 
-
+
 
   
+
 
   
     ..\..\..\..\..\src
@@ -24,31 +24,21 @@
   
     
     
-    
     
-    
-    
-    
-    
-    
-    
     
-    
     
     
-    
-    
-    
     
     
-    
-    
-    
+    
+    
+    
     
-    
-    
-    
-    
+    
+    
+    
+    
+    
   
   
     
@@ -65,7 +55,7 @@
     
     
     
-    
+    
     
     
     
@@ -101,16 +91,16 @@
       FSharp.Core
       True
     
+    
+      FSHarp.VS.FSI
+      {991dcf75-c2eb-42b6-9a0d-aa1d2409d519}
+      True
+    
     
       FSharp.LanguageService.Base
       {1c5c163c-37ea-4a3c-8ccc-0d34b74bf8ef}
       True
     
-    
-      FSharp.VS.FSI
-      {991dcf75-c2eb-42b6-9a0d-aa1d2409d519}
-      True
-    
     
       {a437a6ec-5323-47c2-8f86-e2cac54ff152}
       FSharp.LanguageService.Compiler
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharpLanguageService.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharpLanguageService.fs
new file mode 100644
index 00000000000..54b2110fbd5
--- /dev/null
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharpLanguageService.fs
@@ -0,0 +1,620 @@
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+namespace Microsoft.VisualStudio.FSharp.LanguageService
+
+open System
+open System.IO
+open System.Collections.Generic
+open System.Configuration
+open System.Globalization
+open System.Runtime.InteropServices
+open Microsoft.VisualStudio
+open Microsoft.VisualStudio.Shell
+open Microsoft.VisualStudio.Shell.Interop 
+open Microsoft.VisualStudio.TextManager.Interop 
+open Microsoft.VisualStudio.Text
+open Microsoft.VisualStudio.OLE.Interop
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.SourceCodeServices
+
+// This is the list of known owners of callbacks that may register themselves.
+// Consumers not in this list should use a GUID our some other strongly unique key string
+module internal KnownAdviseProjectSiteChangesCallbackOwners = 
+    let LanguageService = "F# Language Service"
+
+module internal FSharpCommonConstants =
+    []
+    let languageServiceGuidString = "BC6DD5A5-D4D6-4dab-A00D-A51242DBAF1B"
+
+
+module internal FSharpConstants = 
+    let fsharpLanguageName = "F#"
+
+    // These are the IDs from fslangservice.dll
+    let packageGuidString               = "871D2A70-12A2-4e42-9440-425DD92A4116"
+    []
+    let languageServiceGuidString       = FSharpCommonConstants.languageServiceGuidString
+
+    // These are the IDs from the Python sample:
+    let intellisenseProviderGuidString  = "8b1807ea-d222-4765-afa8-c092d480e451"
+        
+    // These are the entries from fslangservice.dll
+    let PLKMinEdition                   = "standard"
+    let PLKCompanyName                  = "Microsoft" // "Microsoft Corporation"
+    let PLKProductName                  = "f#" // "Visual Studio Integration of FSharp Language Service"
+    let PLKProductVersion               = "1.0"
+    let PLKResourceID                   = 1s        
+    let enableLanguageService = "fsharp-language-service-enabled"
+
+
+                
+/// This class defines capabilities of the language service. 
+/// CodeSense = true\false, for example
+type internal FSharpLanguagePreferences(site, langSvc, name) = 
+    inherit LanguagePreferences(site, langSvc, name) 
+
+// Container class that delays loading of FSharp.Compiler.dll compiler types until they're actually needed
+type internal FSharpCheckerContainer(checker) =
+    member this.FSharpChecker = checker
+
+/// LanguageService state. 
+type internal FSharpLanguageServiceTestable() as this =
+    static let colorizerGuid = new Guid("{A2976312-7D71-4BB4-A5F8-66A08EBF46C8}") // Guid for colorizwed user data on IVsTextBuffer
+    let mutable checkerContainerOpt : FSharpCheckerContainer option = None
+    let mutable artifacts : ProjectSitesAndFiles option = None
+    let mutable serviceProvider : System.IServiceProvider option = None
+    let mutable preferences : LanguagePreferences option = None
+    let mutable documentationBuilder : IDocumentationBuilder option = None
+    let mutable sourceFactory : (IVsTextLines -> IFSharpSource) option = None
+    let mutable dirtyForTypeCheckFiles : Set = Set.empty
+    let mutable isInitialized = false
+    let mutable unhooked = false
+    let getColorizer (view:IVsTextView) = 
+        let buffer = Com.ThrowOnFailure1(view.GetBuffer())
+        this.GetColorizer(buffer)                         
+
+    let bgRequests = new FSharpLanguageServiceBackgroundRequests(getColorizer,(fun () -> this.FSharpChecker),(fun () -> this.ProjectSitesAndFiles),(fun () -> this.ServiceProvider),(fun () -> this.DocumentationBuilder))
+    
+    member this.FSharpChecker = 
+        if this.Unhooked then raise Error.UseOfUnhookedLanguageServiceState
+        if not this.IsInitialized then raise Error.UseOfUninitializedLanguageServiceState
+        checkerContainerOpt.Value.FSharpChecker
+
+    member this.ServiceProvider = 
+        if this.Unhooked then raise Error.UseOfUnhookedLanguageServiceState
+        if not this.IsInitialized then raise Error.UseOfUninitializedLanguageServiceState
+        serviceProvider.Value 
+
+    member this.ProjectSitesAndFiles = 
+        if not this.IsInitialized then raise Error.UseOfUninitializedLanguageServiceState
+        artifacts.Value
+        
+    member this.Preferences = 
+        if this.Unhooked then raise Error.UseOfUnhookedLanguageServiceState
+        if not this.IsInitialized then raise Error.UseOfUninitializedLanguageServiceState
+        preferences.Value
+        
+    member this.SourceFactory = 
+        if this.Unhooked then raise Error.UseOfUnhookedLanguageServiceState
+        if not this.IsInitialized then raise Error.UseOfUninitializedLanguageServiceState
+        sourceFactory.Value
+        
+    member this.IsInitialized = isInitialized
+    member this.Unhooked = unhooked
+    member this.DocumentationBuilder = documentationBuilder.Value
+    
+    /// Handle late intialization pieces
+    member this.Initialize (sp, dp, prefs, sourceFact) = 
+        if this.Unhooked then raise Error.UseOfUnhookedLanguageServiceState        
+        artifacts <- Some (ProjectSitesAndFiles())
+        let checker = FSharpChecker.Create()
+        checker.BeforeBackgroundFileCheck.Add (fun filename -> UIThread.Run(fun () -> this.NotifyFileTypeCheckStateIsDirty(filename)))
+        checkerContainerOpt <- Some (FSharpCheckerContainer checker)
+        serviceProvider <- Some sp
+        isInitialized <- true
+        unhooked <- false
+        documentationBuilder <- Some dp
+        preferences <- Some prefs
+        sourceFactory <- Some sourceFact
+
+    
+    member this.NotifyFileTypeCheckStateIsDirty(filename) = 
+        dirtyForTypeCheckFiles <- dirtyForTypeCheckFiles.Add filename
+
+    /// Clear all language service caches and finalize all transient references to compiler objects
+    member this.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() = 
+        if this.Unhooked then raise Error.UseOfUnhookedLanguageServiceState
+        if this.IsInitialized then
+            this.FSharpChecker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients()
+
+    /// Unhook the object. These are the held resources that need to be disposed.
+    member this.Unhook() =
+        if this.Unhooked then raise Error.UseOfUnhookedLanguageServiceState
+        if this.IsInitialized then
+            // Dispose the preferences.
+            if this.Preferences <> null then this.Preferences.Dispose()
+            // Stop the background compile.
+            // here we refer to checkerContainerOpt directly to avoid triggering its creation
+            match checkerContainerOpt with
+            | Some container -> 
+                let checker = container.FSharpChecker
+                checker.StopBackgroundCompile()
+                checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients()
+            | None -> ()
+            
+            checkerContainerOpt <- None 
+            artifacts <- None
+            preferences <- None
+            documentationBuilder <- None
+            unhooked <- true
+            sourceFactory <- None
+            serviceProvider <- None
+    
+    /// Respond to project settings changes
+    member this.OnProjectSettingsChanged(site:IProjectSite) = 
+        // The project may have changed its references.  These would be represented as 'dependency files' of each source file.  Each source file will eventually start listening
+        // for changes to those dependencies, at which point we'll get OnDependencyFileCreateOrDelete notifications.  Until then, though, we just 'make a note' that this project is out of date.
+        bgRequests.AddOutOfDateProjectFileName(site.ProjectFileName()) 
+        for filename in site.SourceFilesOnDisk() do
+            let rdt = this.ServiceProvider.RunningDocumentTable
+            match this.ProjectSitesAndFiles.TryGetSourceOfFile(rdt,filename) with
+            | Some source -> 
+                source.RecolorizeWholeFile()
+                source.RecordChangeToView()
+            | None -> ()
+
+    /// Respond to project being cleaned/rebuilt (any live type providers in the project should be refreshed)
+    member this.OnProjectCleaned(projectSite:IProjectSite) = 
+        let checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(projectSite, "")
+        this.FSharpChecker.NotifyProjectCleaned(checkOptions)
+
+    member this.OnActiveViewChanged(textView) =
+        bgRequests.OnActiveViewChanged(textView)
+
+    member this.BackgroundRequests = bgRequests
+    
+    /// Unittestable complement to LanguageServce.CreateSource
+    member this.CreateSource(buffer:IVsTextLines) : IFSharpSource =
+    
+        // Each time a source is created, also verify that the IProjectSite has been initialized to listen to changes to the project.
+        // We can't listen to OnProjectLoaded because the language service is not guaranteed to be loaded when this is called.
+        let filename = VsTextLines.GetFilename buffer
+        let rdt = this.ServiceProvider.RunningDocumentTable
+        let result = VsRunningDocumentTable.FindDocumentWithoutLocking(rdt,filename)
+        match result with 
+        | Some(hier,_) -> 
+            match hier with 
+            | :? IProvideProjectSite as siteProvider ->
+                let site = siteProvider.GetProjectSite()
+                site.AdviseProjectSiteChanges(KnownAdviseProjectSiteChangesCallbackOwners.LanguageService, 
+                                              new AdviseProjectSiteChanges(fun () -> this.OnProjectSettingsChanged(site))) 
+                site.AdviseProjectSiteCleaned(KnownAdviseProjectSiteChangesCallbackOwners.LanguageService, 
+                                              new AdviseProjectSiteChanges(fun () -> this.OnProjectCleaned(site))) 
+            | _ -> 
+                // This can happen when the file is in a solution folder or in, say, a C# project.
+                ()
+        | _ ->
+            // This can happen when renaming a file from a different language service into .fs or fsx.
+            // This naturally won't have an associated project.
+            ()
+        
+        // Create the source and register file change callbacks there.       
+        let source = this.SourceFactory(buffer)
+        this.ProjectSitesAndFiles.SetSource(buffer, source)
+        source
+    
+    // For each change in dependency files, notify the language service of the change and propagate the update
+    interface IDependencyFileChangeNotify with
+        member this.DependencyFileCreated projectSite = 
+            // Invalidate the configuration if we notice any add for any DependencyFiles 
+            let checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(projectSite, "")
+            this.FSharpChecker.InvalidateConfiguration(checkOptions)
+
+        member this.DependencyFileChanged (filename) = 
+            this.NotifyFileTypeCheckStateIsDirty filename
+
+
+    /// Do OnIdle processing for the whole language service. dirtyForTypeCheckFiles can be set by events 
+    /// raised on the background compilation thread.  
+    member this.OnIdle() = 
+        for file in dirtyForTypeCheckFiles do
+            let rdt = this.ServiceProvider.RunningDocumentTable
+            match this.ProjectSitesAndFiles.TryGetSourceOfFile(rdt, file) with
+            | Some source -> source.RecordChangeToView()
+            | None ->  ()
+        dirtyForTypeCheckFiles <- Set.empty
+        
+
+    /// Remove a colorizer.
+    member this.CloseColorizer(colorizer:FSharpColorizer) = 
+        let buffer = colorizer.Buffer
+        let mutable guid = colorizerGuid
+        (buffer :?> IVsUserData).SetData(&guid, null) |> ErrorHandler.ThrowOnFailure |> ignore
+
+    /// Get a colorizer for a particular buffer.
+    member this.GetColorizer(buffer:IVsTextLines) : FSharpColorizer = 
+        let mutable guid = colorizerGuid
+        let mutable colorizerObj = null
+        
+        (buffer :?> IVsUserData).GetData(&guid, &colorizerObj) |> ignore
+        match colorizerObj with
+        | null ->
+            let scanner = 
+                new FSharpScanner(fun source ->
+                    // Note: in theory, the next few lines do not need to be recomputed every line.  Instead we could just cache the tokenizer
+                    // and only update it when e.g. the project system notifies us there is an important change (e.g. a file rename, etc).
+                    // In practice we have been there, and always screwed up some non-unit-tested/testable corner-cases.
+                    // So this is not ideal from a perf perspective, but it is easy to reason about the correctness.
+                    let filename = VsTextLines.GetFilename buffer
+                    let rdt = this.ServiceProvider.RunningDocumentTable
+                    let defines = this.ProjectSitesAndFiles.GetDefinesForFile(rdt, filename)
+                    let sourceTokenizer = FSharpSourceTokenizer(defines,filename)
+                    sourceTokenizer.CreateLineTokenizer(source))
+
+            let colorizer = new FSharpColorizer(this.CloseColorizer, buffer, scanner) 
+            (buffer :?> IVsUserData).SetData(&guid, colorizer) |> ErrorHandler.ThrowOnFailure |> ignore
+            colorizer
+        | _ -> colorizerObj :?> FSharpColorizer
+    
+    /// Block until the background compile finishes.
+    //
+    // This is for unit testing only
+    member this.WaitForBackgroundCompile() =
+        this.FSharpChecker.WaitForBackgroundCompile()            
+
+module internal VsConstants =
+    let guidStdEditor = new Guid("9ADF33D0-8AAD-11D0-B606-00A0C922E851")
+    let guidCodeCloneProvider = new Guid("38fd587e-d4b7-4030-9a95-806ff0d5c2c6")
+
+    let cmdidGotoDecl = 936u // "Go To Declaration"
+    let cmdidGotoRef = 1107u // "Go To Reference"
+    
+    let IDM_VS_EDITOR_CSCD_OUTLINING_MENU = 773u // "Outlining"
+    let ECMD_OUTLN_HIDE_SELECTION = 128u // "Hide Selection" - 
+    let ECMD_OUTLN_TOGGLE_CURRENT = 129u // "Toggle Outlining Expansion" - 
+    let ECMD_OUTLN_TOGGLE_ALL = 130u // "Toggle All Outlining"
+    let ECMD_OUTLN_STOP_HIDING_ALL = 131u // "Stop Outlining"
+    let ECMD_OUTLN_STOP_HIDING_CURRENT = 132u // "Stop Hiding Current"
+
+type private QueryStatusResult =
+    | NOTSUPPORTED = 0
+    | SUPPORTED = 1
+    | ENABLED = 2
+    | LATCHED = 4
+    | NINCHED = 8
+    | INVISIBLE = 16
+
+type internal FSharpViewFilter(mgr:CodeWindowManager,view:IVsTextView) =
+    inherit ViewFilter(mgr,view)
+
+    override this.Dispose() = base.Dispose()
+
+    member this.IsSupportedCommand(guidCmdGroup:byref,cmd:uint32) =
+        if guidCmdGroup = VsMenus.guidStandardCommandSet97 && (cmd = VsConstants.cmdidGotoDecl || cmd = VsConstants.cmdidGotoRef) then false
+        elif guidCmdGroup = VsConstants.guidCodeCloneProvider then false // disable commands for CodeClone package
+        else
+            // These are all the menu options in the "Outlining" cascading menu. We need to disable all the individual
+            // items to disable the cascading menu. QueryCommandStatus does not get called for the cascading menu itself.
+            assert((guidCmdGroup = VsConstants.guidStdEditor && cmd = VsConstants.IDM_VS_EDITOR_CSCD_OUTLINING_MENU) = false)
+            if guidCmdGroup = VsMenus.guidStandardCommandSet2K && (cmd = VsConstants.ECMD_OUTLN_HIDE_SELECTION ||
+                                                                   cmd = VsConstants.ECMD_OUTLN_TOGGLE_CURRENT ||
+                                                                   cmd = VsConstants.ECMD_OUTLN_TOGGLE_ALL ||
+                                                                   cmd = VsConstants.ECMD_OUTLN_STOP_HIDING_ALL ||
+                                                                   cmd = VsConstants.ECMD_OUTLN_STOP_HIDING_CURRENT) then false
+            else true
+
+    override this.QueryCommandStatus(guidCmdGroup:byref,cmd:uint32) =        
+        if this.IsSupportedCommand(&guidCmdGroup,cmd) then
+            base.QueryCommandStatus(&guidCmdGroup,cmd)
+        else
+            // Hide the menu item. Just returning QueryStatusResult.NOTSUPPORTED does not work
+            QueryStatusResult.INVISIBLE ||| QueryStatusResult.SUPPORTED |> int
+
+        
+[]
+type internal FSharpLanguageService() as fls = 
+    inherit LanguageService() 
+    
+    let ls = FSharpLanguageServiceTestable()
+    let mutable rdtCookie = VSConstants.VSCOOKIE_NIL
+    
+    let thisAssembly = typeof.Assembly 
+    let resources = lazy (new System.Resources.ResourceManager("VSPackage", thisAssembly))
+    let GetString(name:string) = resources.Force().GetString(name, CultureInfo.CurrentUICulture)
+
+    let navigation = FSharpNavigationController()
+
+    let formatFilterList = lazy(
+                                    let fsFile = GetString("FSharpFile")
+                                    let fsInterfaceFile = GetString("FSharpInterfaceFile")
+                                    let fsxFile = GetString("FSXFile")
+                                    let fsScriptFile = GetString("FSharpScriptFile")
+                                    let result = sprintf "%s|*.fs\n%s|*.fsi\n%s|*.fsx\n%s|*.fsscript"
+                                                             fsFile fsInterfaceFile fsxFile fsScriptFile
+                                    result)
+    
+    // This array contains the definition of the colorable items provided by this
+    // language service.
+    let colorableItems = [|
+            // See e.g. the TokenColor type defined in Scanner.cs.  Position 0 is implicit and always means "Plain Text".
+            // The next 5 items in this list MUST be these default items in this order:
+            new FSharpColorableItem("Keyword",              lazy (GetString("Keyword")),             COLORINDEX.CI_BLUE,         COLORINDEX.CI_USERTEXT_BK)
+            new FSharpColorableItem("Comment",              lazy (GetString("Comment")),             COLORINDEX.CI_DARKGREEN,    COLORINDEX.CI_USERTEXT_BK)
+            new FSharpColorableItem("Identifier",           lazy (GetString("Identifier")),          COLORINDEX.CI_USERTEXT_FG,  COLORINDEX.CI_USERTEXT_BK)
+            new FSharpColorableItem("String",               lazy (GetString("String")),              COLORINDEX.CI_MAROON,       COLORINDEX.CI_USERTEXT_BK)
+            new FSharpColorableItem("Number",               lazy (GetString("Number")),              COLORINDEX.CI_USERTEXT_FG,  COLORINDEX.CI_USERTEXT_BK)
+            // User-defined color classes go here:
+            new FSharpColorableItem("Excluded Code",        lazy (GetString("ExcludedCode")),         COLORINDEX.CI_DARKGRAY,     COLORINDEX.CI_USERTEXT_BK)
+            new FSharpColorableItem("Preprocessor Keyword", lazy (GetString("PreprocessorKeyword")),  COLORINDEX.CI_BLUE,         COLORINDEX.CI_USERTEXT_BK)
+            new FSharpColorableItem("Operator",             lazy (GetString("Operator")),             COLORINDEX.CI_USERTEXT_FG,  COLORINDEX.CI_USERTEXT_BK)
+        |]
+
+    let sourceFactory(buffer:IVsTextLines) = 
+        let vsFileWatch = fls.GetService(typeof) :?> IVsFileChangeEx
+        Source.CreateSource(fls, buffer, fls.GetColorizer(buffer), vsFileWatch, ls :> IDependencyFileChangeNotify, (fun () -> ls.FSharpChecker))
+
+    let refreshUI() =
+        let uiShell = fls.Site.GetService()
+        if (uiShell <> null) then
+            uiShell.UpdateCommandUI(0) |> ignore
+            
+
+    /// Initialize the language service
+    override fls.Initialize() =
+        if not ls.IsInitialized then 
+            let preferences = new FSharpLanguagePreferences(fls.Site, (typeof).GUID, FSharpConstants.fsharpLanguageName)
+            preferences.Init() // Reads preferences from the VS registry.
+            preferences.MaxErrorMessages <- 1000
+            
+            let serviceProvider = fls.Site 
+            let docBuilder = XmlDocumentation.CreateDocumentationBuilder(serviceProvider.XmlService, serviceProvider.DTE)
+            
+            ls.Initialize(serviceProvider, docBuilder, preferences, sourceFactory)
+
+            rdtCookie <- (Com.ThrowOnFailure1 (serviceProvider.RunningDocumentTable.AdviseRunningDocTableEvents (fls:>IVsRunningDocTableEvents)))
+
+                          
+    override fls.Dispose() =
+        try
+            try
+                if rdtCookie <> VSConstants.VSCOOKIE_NIL then 
+                    let rdt = fls.Site.RunningDocumentTable
+                    Com.ThrowOnFailure0 (rdt.UnadviseRunningDocTableEvents rdtCookie)
+            finally
+                if ls.IsInitialized then 
+                    ls.Unhook()
+        finally 
+            base.Dispose()
+
+    member fls.Core = ls
+
+    // -----------------------------------------------------------------------
+    // Implement IVsLanguageInfo 
+
+    interface IVsLanguageInfo with
+        /// Allows a language to add adornments to a code editor.
+        member this.GetCodeWindowManager(codeWindow, mgr) =
+            fls.Initialize();
+            let mutable buffer = null;
+            NativeMethods.ThrowOnFailure(codeWindow.GetBuffer(&buffer)) |> ignore;
+            // see if we already have a Source object.
+            let source = 
+                match this.GetSource(buffer) with 
+                | null -> 
+                    let s = ls.CreateSource(buffer) :?> ISource 
+                    this.sources.Add(s) |> ignore;  
+                    s
+                | s -> s
+
+            mgr <- this.CreateCodeWindowManager(codeWindow, source);
+            NativeMethods.S_OK;
+
+        /// Returns the colorizer.
+        member this.GetColorizer(buffer, result) =
+            result <- this.GetColorizer(buffer)
+            NativeMethods.S_OK
+
+        /// Returns the file extensions belonging to this language.
+        member this.GetFileExtensions(extensions) =
+            extensions <- ""
+            NativeMethods.S_OK
+
+        member this.GetLanguageName(name) =
+            name <- FSharpConstants.fsharpLanguageName
+            NativeMethods.S_OK
+
+    // -----------------------------------------------------------------------
+    // Implement LanguageService base methods from the C# code
+
+    override fls.OnActiveViewChanged(textView) =
+        base.OnActiveViewChanged(textView)
+        ls.OnActiveViewChanged(textView)
+        if navigation.EnableNavBar || navigation.EnableRegions then
+           match fls.GetSource(textView) with
+           | null -> ()
+           | source -> ls.BackgroundRequests.TriggerParseFile(textView, source) |> ignore
+
+
+    // Provides the index to the filter matching the extension of the file passed in.
+    override fls.CurFileExtensionFormat(filename) = 
+        // These indexes match the "GetFormatFilterList" function
+        match Path.GetExtension(filename) with
+        | ".fs" -> 0
+        | ".ml" -> 1
+        | ".fsi" -> 2
+        | ".mli" -> 3
+        | ".fsx" -> 4
+        | ".fsscript" -> 5
+        | _ -> -1
+
+    /// Provides the list of available extensions for Save As.
+    /// The following default filter string is automatically added by Visual Studio:
+    /// "All Files (*.*)\n*.*\nText Files (*.txt)\n*.txt\n"
+    override fls.GetFormatFilterList() = 
+        formatFilterList.Value 
+
+    // This seems to be called by codeWinMan.OnNewView(textView) to install a ViewFilter on the TextView.    
+    override this.CreateViewFilter(mgr:CodeWindowManager,newView:IVsTextView) = new FSharpViewFilter(mgr,newView) :> ViewFilter
+
+    override fls.GetLanguagePreferences() = ls.Preferences
+
+    override fls.CreateBackgroundRequest(line, col, info, sourceText, snapshot, methodTipMiscellany, fname, reason, view, sink, source, timestamp, synchronous) =
+        ls.BackgroundRequests.CreateBackgroundRequest(line, col, info, sourceText, snapshot, methodTipMiscellany, fname,reason, view,sink, source, timestamp, synchronous) :> BackgroundRequest                                                
+        
+    /// Handle an incoming request to analyze a file.
+    ///
+    /// Executed either on the UI thread (for req.IsSynchronous) or the background request thread.
+    override fls.ExecuteBackgroundRequest(req:BackgroundRequest) = 
+        ls.BackgroundRequests.ExecuteBackgroundRequest(req :?> FSharpBackgroundRequest, req.Source :?> IFSharpSource)
+
+    // Check if we can shortcut executing the background request and just fill in the latest
+    // cached scope for the active view from this.service.RecentFullTypeCheckResults.
+    //
+    // THIS MUST ONLY RETURN TRUE IF ---> ExecuteBackgroundRequest is equivalent to fetching a recent,
+    // perhaps out-of-date scope.
+    override fls.IsRecentScopeSufficientForBackgroundRequest(reason) = 
+        ls.BackgroundRequests.IsRecentScopeSufficientForBackgroundRequest(reason)
+      
+    // This is called on the UI thread after fresh full typecheck results are available
+    override fls.OnParseFileOrCheckFileComplete( req:BackgroundRequest) =
+        if (req <> null && req.Source <> null && not req.Source.IsClosed) then 
+            fls.SetUserContextDirty(req.FileName)
+            refreshUI()
+            ls.BackgroundRequests.OnParseFileOrCheckFileComplete(req, navigation.EnableRegions, fls.LastActiveTextView)
+
+    override fls.GetColorizer(buffer) = 
+        fls.Initialize()
+        ls.GetColorizer(buffer) :> Colorizer
+
+            
+    override fls.CreateDropDownHelper(_view) =
+        if navigation.EnableNavBar then 
+            (new FSharpNavigationBars(fls, fun () -> ls.BackgroundRequests.NavigationBarAndRegionInfo)) :> TypeAndMemberDropdownBars
+        else null
+
+    /// Do OnIdle processing    
+    override fls.OnIdle(periodic, mgr : IOleComponentManager) =
+        try
+            let r = base.OnIdle(periodic, mgr)
+            ls.OnIdle()
+            r
+        with e-> 
+            Assert.Exception(e)
+            reraise()
+
+    // -----------------------------------------------------------------------
+    // Implement IVsLanguageDebugInfo 
+
+    /// This is used to return the expression evaluator language to the debugger
+    interface IVsLanguageDebugInfo with 
+        // Returns the corresponding debugger back-end "language ID".
+        member fls.GetLanguageID(_buffer,_line, _col, langId) =
+            langId <- DebuggerEnvironment.GetLanguageID()
+            VSConstants.S_OK
+
+        // Deprecated. Do not use.
+        member fls.GetLocationOfName(_name, pbstrMkDoc, _spans) =
+            pbstrMkDoc <- null
+            NativeMethods.E_NOTIMPL
+
+        // Generates a name for the given location in the file.
+        member fls.GetNameOfLocation(_buffer, _line, _col, name, lineOffset) =
+            name <- null;
+            lineOffset <- 0;
+            NativeMethods.S_OK;
+
+        // Generates proximity expressions, used to populate the "Autos" window
+        member fls.GetProximityExpressions(_buffer, _line, _col, _cLines, ppEnum) =
+            ppEnum <- null
+            NativeMethods.S_FALSE
+
+        // Returns whether the location contains code that is mapped to another document, for example, client-side script code.
+        member fls.IsMappedLocation(_buffer, _line, _col) =
+            NativeMethods.S_FALSE
+
+        // Disambiguates the given name, providing non-ambiguous names for all entities that "match" the name.
+        member fls.ResolveName(_name, _flags, ppNames) =
+            ppNames <- null
+            NativeMethods.E_NOTIMPL
+
+        // Validates the given position as a place to set a breakpoint.
+        member fls.ValidateBreakpointLocation(buffer:IVsTextBuffer, line, col, pCodeSpan:TextSpan[]) =
+          let result = 
+            if (pCodeSpan <> null) && (pCodeSpan.Length > 0) && (buffer :? IVsTextLines) then
+                let syncOk = 
+                    let view = fls.LastActiveTextView 
+                    view <> null &&
+                    let source = fls.GetSource(view) 
+                    source <> null &&
+                    ls.BackgroundRequests.TrySynchronizeParseFileInformation(view, source, millisecondsTimeout = 100)
+                let lineText = VsTextLines.LineText (buffer :?> IVsTextLines) line
+                let firstNonWhitespace = lineText.Length - (lineText.TrimStart [| ' '; '\t' |]).Length 
+                let lastNonWhitespace = (lineText.TrimEnd [| ' '; '\t' |]).Length 
+                // If the column is before the range of text then zap it to the text
+                // If the column is after the range of text then zap it to the _start_ of the text (like C#)
+                let attempt1, haveScope  = 
+                    let col = if col > lastNonWhitespace || col < firstNonWhitespace then firstNonWhitespace else col
+                    match ls.BackgroundRequests.ParseFileResults with
+                    | Some parseResults -> 
+                        match parseResults.ValidateBreakpointLocation(Range.Pos.fromZ line col) with
+                        | Some bpl -> Some (TextSpanOfRange bpl), true
+                        | None -> None, true
+                    | None ->   
+                        None, false
+                match attempt1 with 
+                | Some r -> Some r
+                | None -> 
+                    if syncOk || haveScope then 
+                        None
+                    else 
+                        // If we didn't sync OK AND we don't even have an ParseFileResults then just accept the whole line.
+                        // This is unfortunate but necessary.
+                        Some (TextSpan(iStartLine = line, iStartIndex = firstNonWhitespace, iEndLine = line, iEndIndex = lastNonWhitespace))
+            else 
+                None
+                 
+          match result with 
+          | Some span -> 
+            pCodeSpan.[0] <- span
+            VSConstants.S_OK
+          | None -> 
+            VSConstants.S_FALSE                
+                        
+    // -----------------------------------------------------------------------
+    // Implement IVsProvideColorableItems 
+
+    interface IVsProvideColorableItems with
+
+        member x.GetItemCount(count: int byref) =
+            count <- colorableItems.Length
+            VSConstants.S_OK
+
+        member  x.GetColorableItem(index, item: IVsColorableItem byref) =
+            if (index < 1) || (index > colorableItems.Length) then 
+                VSConstants.E_INVALIDARG
+            else
+                item <- colorableItems.[index - 1]
+                VSConstants.S_OK
+
+    /// Respond to changes to documents in the Running Document Table.
+    interface IVsRunningDocTableEvents with
+        member this.OnAfterAttributeChange(_docCookie, _grfAttribs) = VSConstants.S_OK
+        member this.OnAfterDocumentWindowHide(_docCookie, _frame) = VSConstants.S_OK
+        member this.OnAfterFirstDocumentLock(_docCookie,_dwRDTLockType,_dwReadLocks,_dwEditLocks) = VSConstants.S_OK
+        member this.OnAfterSave(_docCookie) = VSConstants.S_OK
+        member this.OnBeforeDocumentWindowShow(_docCookie,_isFirstShow,_frame) = VSConstants.S_OK
+        member this.OnBeforeLastDocumentUnlock(docCookie,_dwRDTLockType,dwReadLocksRemaining,dwEditLocksRemaining) =
+            let rdt = this.Site.RunningDocumentTable
+            let (_, _, _, _, file, _, _, unkdoc) = rdt.GetDocumentInfo docCookie // see here http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsrunningdocumenttable.getdocumentinfo(VS.80).aspx for info on the `GetDocumentInfo` results we're ignoring
+            try
+                if int dwReadLocksRemaining = 0 && int dwEditLocksRemaining = 0 then // check that this is there are no other read / edit locks
+                    if SourceFile.IsCompilable file then
+                        if IntPtr.Zero<>unkdoc then
+                            match Marshal.GetObjectForIUnknown(unkdoc) with
+                            | :? IVsTextLines as tl ->
+                                ls.ProjectSitesAndFiles.UnsetSource(tl)
+                            | _ -> ()
+            finally 
+                if IntPtr.Zero <> unkdoc then Marshal.Release(unkdoc)|>ignore
+            VSConstants.S_OK
+
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharpPackage.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharpPackage.fs
new file mode 100644
index 00000000000..fb61e0e854a
--- /dev/null
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharpPackage.fs
@@ -0,0 +1,150 @@
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+namespace Microsoft.VisualStudio.FSharp.LanguageService
+
+open System
+open System.Configuration
+open System.ComponentModel.Design
+open System.Runtime.InteropServices
+open Microsoft.VisualStudio
+open Microsoft.VisualStudio.Shell
+open Microsoft.VisualStudio.OLE.Interop
+
+
+// Workaround to access non-public settings persistence type.
+// GetService( ) with this will work as long as the GUID matches the real type.
+[]
+type internal SVsSettingsPersistenceManager = class end
+
+[]
+type internal FSharpPackage() as self =
+    inherit Package()
+    
+    // In case the config file is incorrect, we silently recover and leave the feature enabled
+    let enableLanguageService = 
+        try 
+            "false" <> ConfigurationManager.AppSettings.[FSharpConstants.enableLanguageService]
+        with e -> 
+            System.Diagnostics.Debug.Assert
+              (false, sprintf "Error while loading 'devenv.exe.config' configuration: %A" e)
+            true         
+
+    let mutable componentID = 0u
+    
+    let CreateIfEnabled container serviceType = 
+        if enableLanguageService then 
+            self.CreateService(container,serviceType) 
+        else 
+            null
+            
+    let callback = new ServiceCreatorCallback(CreateIfEnabled)
+    
+    let mutable mgr : IOleComponentManager = null
+
+#if !VS_VERSION_DEV12
+    let fsharpSpecificProfileSettings =
+        [| "TextEditor.F#.Insert Tabs", box false
+           "TextEditor.F#.Brace Completion", box true
+           "TextEditor.F#.Make URLs Hot", box false
+           "TextEditor.F#.Indent Style", box 1u |]
+#endif
+
+    override self.Initialize() =
+        UIThread.CaptureSynchronizationContext()
+        self.EstablishDefaultSettingsIfMissing()
+        (self :> IServiceContainer).AddService(typeof, callback, true)
+        base.Initialize()
+
+    /// In case custom VS profile settings for F# are not applied, explicitly set them here.
+    /// e.g. 'keep tabs' is the text editor default, but F# requires 'insert spaces'.
+    /// We specify our customizations in the General profile for VS, but we have found that in some cases
+    /// those customizations are incorrectly ignored.
+    member private this.EstablishDefaultSettingsIfMissing() =
+#if VS_VERSION_DEV12
+        ()  // ISettingsManager only implemented for VS 14.0+
+#else
+        match this.GetService(typeof) with
+        | :? Microsoft.VisualStudio.Settings.ISettingsManager as settingsManager ->
+            for settingName,defaultValue in fsharpSpecificProfileSettings do
+                // Only take action if the setting has no current custom value
+                // If cloud-synced settings have already been applied or the user has made an explicit change, do nothing
+                match settingsManager.TryGetValue(settingName) with
+                | Microsoft.VisualStudio.Settings.GetValueResult.Missing, _ ->
+                    settingsManager.SetValueAsync(settingName, defaultValue, false) |> ignore
+                | _ -> ()
+        | _ -> ()
+#endif
+
+    member self.RegisterForIdleTime() =
+        mgr <- (self.GetService(typeof) :?> IOleComponentManager)
+        if (componentID = 0u && mgr <> null) then
+            let crinfo = Array.zeroCreate(1)
+            let mutable crinfo0 = crinfo.[0]
+            crinfo0.cbSize <- Marshal.SizeOf(typeof) |> uint32
+            crinfo0.grfcrf <- uint32 (_OLECRF.olecrfNeedIdleTime ||| _OLECRF.olecrfNeedPeriodicIdleTime)
+            crinfo0.grfcadvf <- uint32 (_OLECADVF.olecadvfModal ||| _OLECADVF.olecadvfRedrawOff ||| _OLECADVF.olecadvfWarningsOff)
+            crinfo0.uIdleTimeInterval <- 1000u
+            crinfo.[0] <- crinfo0 
+            let componentID_out = ref componentID
+            let _hr = mgr.FRegisterComponent(self, crinfo, componentID_out)
+            componentID <- componentID_out.Value
+            ()
+
+    member self.CreateService(_container:IServiceContainer, serviceType:Type) =
+        match serviceType with 
+        | x when x = typeof -> 
+            let language = new FSharpLanguageService()
+            language.SetSite(self)
+            language.Initialize()
+            self.RegisterForIdleTime()
+            box language
+        | _ -> null
+
+    override self.Dispose(disposing) =
+        try 
+            if (componentID <> 0u) then
+                begin match self.GetService(typeof) with 
+                | :? IOleComponentManager as mgr -> 
+                    mgr.FRevokeComponent(componentID) |> ignore
+                | _ -> ()
+                end
+                componentID <- 0u
+        finally
+            base.Dispose(disposing)
+
+    interface IOleComponent with
+
+        override x.FContinueMessageLoop(_uReason:uint32, _pvLoopData:IntPtr, _pMsgPeeked:MSG[]) = 
+            1
+
+        override x.FDoIdle(grfidlef:uint32) =
+            // see e.g "C:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Common\IDL\olecm.idl" for details
+            //Trace.Print("CurrentDirectoryDebug", (fun () -> sprintf "curdir='%s'\n" (System.IO.Directory.GetCurrentDirectory())))  // can be useful for watching how GetCurrentDirectory changes
+            match x.GetService(typeof) with 
+            | :? FSharpLanguageService as pl -> 
+                let periodic = (grfidlef &&& (uint32 _OLEIDLEF.oleidlefPeriodic)) <> 0u
+                let mutable r = pl.OnIdle(periodic, mgr)
+                if r = 0 && periodic && mgr.FContinueIdle() <> 0 then
+                    r <- TaskReporterIdleRegistration.DoIdle(mgr)
+                r
+            | _ -> 0
+
+        override x.FPreTranslateMessage(_pMsg) = 0
+
+        override x.FQueryTerminate(_fPromptUser) = 1
+
+        override x.FReserved1(_dwReserved, _message, _wParam, _lParam) = 1
+
+        override x.HwndGetWindow(_dwWhich, _dwReserved) = 0n
+
+        override x.OnActivationChange(_pic, _fSameComponent, _pcrinfo, _fHostIsActivating, _pchostinfo, _dwReserved) = ()
+
+        override x.OnAppActivate(_fActive, _dwOtherThreadID) = ()
+
+        override x.OnEnterState(_uStateID, _fEnter)  = ()
+        
+        override x.OnLoseActivation() = ()
+
+        override x.Terminate() = ()
+
+     
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Source.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharpSource.fs
similarity index 64%
rename from vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Source.fs
rename to vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharpSource.fs
index d695cbedaff..56df3d9fcd6 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Source.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharpSource.fs
@@ -1,89 +1,115 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 #nowarn "40"
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService
 
-open Internal.Utilities.Collections
-open Microsoft.FSharp.Compiler.SourceCodeServices
 open System
 open System.Text
-open System.IO
 open System.Collections.Generic
-open System.Collections
-open System.Configuration
 open System.Diagnostics
-open System.Globalization
 open System.Threading
-open System.ComponentModel.Design
 open System.Runtime.InteropServices
 open Microsoft.VisualStudio
-open Microsoft.VisualStudio.FSharp.LanguageService
 open Microsoft.VisualStudio.Shell
 open Microsoft.VisualStudio.Shell.Interop 
+open Microsoft.VisualStudio.Text
 open Microsoft.VisualStudio.Text.Editor
 open Microsoft.VisualStudio.Text.Formatting
 open Microsoft.VisualStudio.TextManager.Interop 
 open Microsoft.VisualStudio.OLE.Interop
-open Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
-open Microsoft.FSharp.Compiler.Lib
-open Internal.Utilities.Debug
+open Microsoft.FSharp.Compiler
 open Microsoft.FSharp.Compiler.SourceCodeServices
 
-open Microsoft.VisualStudio.Editor
-open Microsoft.VisualStudio.Text
-
 #nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method
 
-module internal Source =
-    type DelegatingSource(  recolorizeWholeFile:unit->unit,
-                            recolorizeLine:int->unit,
-                            currentFileName:unit -> string,
-                            isClosed:unit->bool,
-                            fileChangeEx:IVsFileChangeEx) =         
+type internal IDependencyFileChangeNotify = 
+
+     /// Invoked when a dependency file gets created or deleted 
+     abstract DependencyFileCreated : IProjectSite -> unit
+
+     /// Invoked when a dependency file changes
+     abstract DependencyFileChanged : string -> unit
+
+/// An interface implemented by both the unit-testable FSharpSourceTestable
+/// and the actual FSharpSource.
+type internal IFSharpSource =
+    /// Request colorization of the whole source file
+    abstract RecolorizeWholeFile : unit -> unit
+    abstract RecolorizeLine : line:int -> unit
+    // Called to notify the source that the user has changed the source text in the editor.
+    abstract RecordChangeToView: unit -> unit
+    // Called to notify the source the file has been redisplayed.
+    abstract RecordViewRefreshed: unit -> unit
+    // If true, the file displayed has changed and needs to be redisplayed to some extent.
+    abstract NeedsVisualRefresh : bool with get
+    /// Number of most recent change to this file.
+    abstract ChangeCount : int with get,set
+    /// Timestamp of the last change
+    abstract DirtyTime : int with get,set
+    /// Whether or not this source is closed.
+    abstract IsClosed: unit -> bool with get
+    /// Store a ProjectSite for obtaining a task provider
+    abstract ProjectSite : IProjectSite option with get,set
+    /// Specify the files that should trigger a rebuild for the project behind this source
+    abstract SetDependencyFiles : string list -> bool
+    
+    
+
+/// The core implementation of IFSharpSource and IVsFileChangeEvents, delegating to the given 
+/// functions to allow some unit testing. This implements IFSharpSource (used during unit-testing).
+type internal FSharpSourceTestable
+                    (recolorizeWholeFile:unit->unit, 
+                     recolorizeLine:int->unit, 
+                     currentFileName:unit -> string, 
+                     isClosed:unit->bool, 
+                     vsFileWatch:IVsFileChangeEx, 
+                     depFileChange: IDependencyFileChangeNotify) =         
             
-        let projectSite : IProjectSite option ref = ref None
-        let dependencyFileChangeCallback : (ProjectSiteRebuildCallbackSignature*DependencyFileChangeCallbackSignature) option ref = ref None
+        let mutable projectSite : IProjectSite option = None
 
         let mutable isDisposed = false
-        let mutable hasCalledSetDependencyFilesAtLeastOnce = false            
         let lastDependencies = new Dictionary()  // filename, cookie
-        let fileChangeFlags = _VSFILECHANGEFLAGS.VSFILECHG_Add ||| 
-                              // _VSFILECHANGEFLAGS.VSFILECHG_Del ||| // don't listen for deletes - if a file (such as a 'Clean'ed project reference) is deleted, just keep using stale info
-                              _VSFILECHANGEFLAGS.VSFILECHG_Time
-        let fileChangeFlags : uint32 = uint32 fileChangeFlags
+        let fileChangeFlags = 
+            uint32 (_VSFILECHANGEFLAGS.VSFILECHG_Add ||| 
+                    // _VSFILECHANGEFLAGS.VSFILECHG_Del ||| // don't listen for deletes - if a file (such as a 'Clean'ed project reference) is deleted, just keep using stale info
+                    _VSFILECHANGEFLAGS.VSFILECHG_Time)
         
-        let mutable isDirty = true
+        let mutable needsVisualRefresh = true
         let mutable changeCount = 0
         let mutable dirtyTime = 0
         
         let IncrementWithWrap(v:int) =
             if v = Int32.MaxValue then 0 else v + 1    
         
-        interface IdealSource with 
+        interface IFSharpSource with 
             member source.RecolorizeWholeFile() = recolorizeWholeFile() 
             member source.RecolorizeLine line = recolorizeLine line
             
             member source.ChangeCount
                 with get() = changeCount
                 and set(value) = changeCount <- value
+
             member source.DirtyTime
                 with get() = dirtyTime
                 and set(value) = dirtyTime <- value   
+
             member source.RecordChangeToView() = 
-                isDirty <- true
+                needsVisualRefresh <- true
                 dirtyTime <- System.Environment.TickCount; // NOTE: If called fast enough, it is possible for dirtyTime to have the same value as it had before.
                 changeCount <- IncrementWithWrap(changeCount)
+
             member source.RecordViewRefreshed() = 
-                isDirty <- false
-            member source.NeedsVisualRefresh 
-                with get() = isDirty
-            member source.IsClosed 
-                with get() = isClosed()
+                needsVisualRefresh <- false
+
+            member source.NeedsVisualRefresh = needsVisualRefresh
+
+            member source.IsClosed = isClosed()
+
             member source.ProjectSite
-                with get() = !projectSite // REVIEW: Could get this from IVsTextBuffer->IVsHierarchy->IProjectSite
-                and set(value) = projectSite := value
+                with get() = projectSite // REVIEW: Could get this from IVsTextBuffer->IVsHierarchy->IProjectSite
+                and set(value) = projectSite <- value
+
             /// returns true if the set of dependency files we're watching changes, false otherwise (except that it always returns false on the first call to this method on this object)
             member source.SetDependencyFiles(files) = 
                 let changeEvents = source :> IVsFileChangeEvents
@@ -91,101 +117,72 @@ module internal Source =
                 // As a result, we compute the diffs, and only act on the diff.
                 
                 // figure out dependencies that are no longer needed
-                let cookiesToRemove = ref []
-                let filesToRemove = ref []
+                let mutable cookiesToRemove = []
+                let mutable filesToRemove = []
                 let newFilesSet = new System.Collections.Generic.HashSet(files)  // may do lots of .Contains() calls, so do this to avoid O(N^2)
                 for key in lastDependencies.Keys do
                     if not( newFilesSet.Contains(key) ) then
-                        filesToRemove := key :: !filesToRemove
-                        cookiesToRemove := lastDependencies.[key] :: !cookiesToRemove
+                        filesToRemove <- key :: filesToRemove
+                        cookiesToRemove <- lastDependencies.[key] :: cookiesToRemove
                 // remove from local dictionary
-                Trace.PrintLine("ChangeEvents", (fun () -> sprintf "IdealSource() will stop watching %A" filesToRemove))
-                for key in !filesToRemove do
+                for key in filesToRemove do
                     lastDependencies.Remove(key) |> ignore
                     
                 // figure out new dependencies that must be added
-                let filesToAdd = ref []
+                let mutable filesToAdd = []
                 for file in files do
                     if not( lastDependencies.ContainsKey(file) ) then
-                        filesToAdd := file :: !filesToAdd
-                Trace.PrintLine("ChangeEvents", (fun () -> sprintf "IdealSource() will start watching %A" filesToAdd))
+                        filesToAdd <- file :: filesToAdd
 
-                let r = hasCalledSetDependencyFilesAtLeastOnce
-                hasCalledSetDependencyFilesAtLeastOnce <- true
-                
-                match !filesToAdd, !cookiesToRemove with
+                match filesToAdd, cookiesToRemove with
                 | [], [] -> false // nothing changed
-                | _ ->
+                | filesToAdd, cookiesToRemove ->
                     // talk to IVsFileChangeEx to update set of notifications we want
-                    match fileChangeEx with
-                    |   null -> ()
+                    match vsFileWatch with
+                    |   null -> false
                     |   _ ->
                             UIThread.RunSync(fun () ->
                                 if not isDisposed then
-                                    for file in !filesToAdd do
+                                    for file in filesToAdd do
                                         if not (lastDependencies.ContainsKey file) then 
                                             try
-                                                let cookie = Com.ThrowOnFailure1(fileChangeEx.AdviseFileChange(file, fileChangeFlags, changeEvents))
+                                                let cookie = Com.ThrowOnFailure1(vsFileWatch.AdviseFileChange(file, fileChangeFlags, changeEvents))
                                                 lastDependencies.Add(file, cookie)
                                             with _ -> ()  // can throw, e.g. when file/directory to watch does not exist; this is safe to ignore
-                                    for cookie in !cookiesToRemove do
-                                        Com.ThrowOnFailure0(fileChangeEx.UnadviseFileChange(cookie))
+                                    for cookie in cookiesToRemove do
+                                        Com.ThrowOnFailure0(vsFileWatch.UnadviseFileChange(cookie))
                             )
-                    r
+                            true
                         
-            member source.SetDependencyFileChangeCallback(projectSiteCallback,sourceFileCallback) = 
-                dependencyFileChangeCallback := Some(projectSiteCallback,sourceFileCallback)
-                           
-        // Hook file change events                
+        // Hook file change events in dependency files.
         interface IVsFileChangeEvents with 
-            member changes.FilesChanged(_count : uint32, files: string [], changeFlags : uint32 []) = 
-                match !dependencyFileChangeCallback with
-                | None -> failwith "expected a dependencyFileChangeCallback"
-                | Some(projectRetypecheckCallback, fileChangeCallback) ->
-                    let changeFlags : DependencyChangeCode seq = changeFlags |> Seq.map int |> Seq.map enum
-                    let zip : (string*DependencyChangeCode) seq = Seq.zip files changeFlags
-                    let zip : (string * DependencyChangeCode) list = Seq.toList zip
-                    let LogChangeEvent msg (file,flag) = 
-                        Trace.PrintLine("ChangeEvents", (fun () -> sprintf " IdealSource saw change (%A) in file %s %s " flag file msg))
-                    let source = changes :> IdealSource
-                    let dcc = DependencyChangeCode.FileChanged ||| DependencyChangeCode.TimeChanged
-                    match source.ProjectSite with
-                    | Some(projectSite) -> 
-                        if Trace.ShouldLog("ChangeEvents") then 
-                            zip |> List.iter (LogChangeEvent "and is sending to callback")
-                        if Seq.forall (fun cf -> cf &&& (~~~ dcc) = DependencyChangeCode.NoChange) changeFlags then
-                            fileChangeCallback(currentFileName())
-                        else
-                            projectRetypecheckCallback(projectSite)                               
-                    | None ->
-                        if Trace.ShouldLog("ChangeEvents") then 
-                            zip |> List.iter (LogChangeEvent "and is NOT sending to callback because there is no project site")
-                    0
+            member changes.FilesChanged(_count : uint32, _files: string [], changeFlags : uint32 []) = 
+                let changeFlags = changeFlags |> Array.map int |> Array.map enum<_VSFILECHANGEFLAGS>
+        
+                match projectSite with
+                | Some projectSite -> 
+                    depFileChange.DependencyFileChanged(currentFileName())
+                    if changeFlags |> Array.exists (fun cf -> cf &&& (_VSFILECHANGEFLAGS.VSFILECHG_Add ||| _VSFILECHANGEFLAGS.VSFILECHG_Del) <> enum 0) then
+                        depFileChange.DependencyFileCreated(projectSite)                               
+                | None -> ()
+                0
+
             member changes.DirectoryChanged(_directory: string) = 0
             
         interface IDisposable with
             member disp.Dispose() =         
                 UIThread.MustBeCalledFromUIThread()
                 isDisposed <- true
-                Trace.PrintLine("ChangeEvents", (fun () -> sprintf "An IdealSource() is being disposed, and thus removing its file watchers"))
-                match fileChangeEx with
+                match vsFileWatch with
                 |   null -> ()
                 |   _ ->
                     for KeyValue(_,cookie) in lastDependencies do
-                        fileChangeEx.UnadviseFileChange(cookie) |> ignore
+                        vsFileWatch.UnadviseFileChange(cookie) |> ignore
                 lastDependencies.Clear()
 
-    /// This is the ideal implementation of the Source concept abstracted from MLS.  
-    let internal CreateDelegatingSource
-                   (recolorizeWholeFile:unit->unit, 
-                    recolorizeLine:int->unit, 
-                    filename:string,
-                    isClosed:unit->bool,
-                    fileChangeEx:IVsFileChangeEx
-                    ) = new DelegatingSource(recolorizeWholeFile,recolorizeLine,(fun () -> filename), isClosed,fileChangeEx) :> IdealSource
-
-    []
-    type VSFontsAndColorsHelper private(fontFamily, pointSize, excludedCodeForegroundColorBrush, backgroundBrush) =
+
+[]
+type internal VSFontsAndColorsHelper private(fontFamily, pointSize, excludedCodeForegroundColorBrush, backgroundBrush) =
         static let Compute(site:System.IServiceProvider) =
             UIThread.MustBeCalledFromUIThread()
             let mutable guidStatementCompletionFC = new Guid("C1614BB1-734F-4a31-BD42-5AE6275E16D2") // GUID_StatementCompletionFC
@@ -194,25 +191,15 @@ module internal Source =
             vsFontAndColorStorage.OpenCategory(&guidTextEditorFontCategory, (uint32 __FCSTORAGEFLAGS.FCSF_LOADDEFAULTS) ||| (uint32 __FCSTORAGEFLAGS.FCSF_NOAUTOCOLORS) ||| (uint32 __FCSTORAGEFLAGS.FCSF_READONLY)) |> ignore
             let itemInfo : ColorableItemInfo[] = Array.zeroCreate 1  
             vsFontAndColorStorage.GetItem("Excluded Code", itemInfo) |> ignore
-#if FX_ATLEAST_45
             let fgColorInfo = itemInfo.[0].crForeground 
             let winFormColor = System.Drawing.ColorTranslator.FromOle(int fgColorInfo)
             let color = System.Windows.Media.Color.FromArgb(winFormColor.A, winFormColor.R, winFormColor.G, winFormColor.B)
             let excludedCodeForegroundColorBrush = new System.Windows.Media.SolidColorBrush(color)
-#else
-            let color = System.Windows.Media.Colors.Blue
-            let excludedCodeForegroundColorBrush = new System.Windows.Media.SolidColorBrush(color)
-#endif
             vsFontAndColorStorage.GetItem("Plain Text", itemInfo) |> ignore
-#if FX_ATLEAST_45
             let bgColorInfo = itemInfo.[0].crBackground
             let winFormColor = System.Drawing.ColorTranslator.FromOle(int bgColorInfo)
             let color = System.Windows.Media.Color.FromArgb(winFormColor.A, winFormColor.R, winFormColor.G, winFormColor.B)
             let backgroundBrush = new System.Windows.Media.SolidColorBrush(color)
-#else
-            let color = System.Windows.Media.Colors.White
-            let backgroundBrush = new System.Windows.Media.SolidColorBrush(color)
-#endif
             vsFontAndColorStorage.CloseCategory() |> ignore
             vsFontAndColorStorage.OpenCategory(&guidStatementCompletionFC, (uint32 __FCSTORAGEFLAGS.FCSF_LOADDEFAULTS) ||| (uint32 __FCSTORAGEFLAGS.FCSF_NOAUTOCOLORS) ||| (uint32 __FCSTORAGEFLAGS.FCSF_READONLY)) |> ignore
             let fontInfo : FontInfo[] = Array.zeroCreate 1
@@ -221,12 +208,14 @@ module internal Source =
             let pointSize = fontInfo.[0].wPointSize 
             vsFontAndColorStorage.CloseCategory() |> ignore
             fontFamily, pointSize, excludedCodeForegroundColorBrush, backgroundBrush
+
         static let mutable theInstance = null  // only ever updated on UI thread
         static let WM_SYSCOLORCHANGE : uint32 = 0x0015u
         static let WM_THEMECHANGED : uint32 = 0x031Au
-        member private this.getFontFamilyAndPointSizeAndExcludedCodeForegroundColorBrushAndBackgroundBrush() =
-            fontFamily, pointSize, excludedCodeForegroundColorBrush, backgroundBrush
-        static member GetFontFamilyAndPointSizeAndExcludedCodeForegroundColorBrushAndBackgroundBrush(site:System.IServiceProvider) =
+
+        member private this.Contents = fontFamily, pointSize, excludedCodeForegroundColorBrush, backgroundBrush
+
+        static member GetContents(site:System.IServiceProvider) =
             if theInstance=null then
                 theInstance <- new VSFontsAndColorsHelper(Compute(site))
                 let vsShell = site.GetService(typeof) :?> IVsShell
@@ -237,10 +226,10 @@ module internal Source =
                                                             theInstance <- new VSFontsAndColorsHelper(Compute(site))
                                                         NativeMethods.S_OK
                                                  }, &k) |> ignore
-            theInstance.getFontFamilyAndPointSizeAndExcludedCodeForegroundColorBrushAndBackgroundBrush()
+            theInstance.Contents
            
-    type FSharpIntelliSenseToAppearAdornment(view : IWpfTextView, cursorPoint : SnapshotPoint, site : System.IServiceProvider) as this =
-        let fontFamily, pointSize, excludedCodeForegroundColorBrush, backgroundBrush = VSFontsAndColorsHelper.GetFontFamilyAndPointSizeAndExcludedCodeForegroundColorBrushAndBackgroundBrush(site)
+type internal FSharpIntelliSenseToAppearAdornment(view: IWpfTextView, cursorPoint: SnapshotPoint, site: System.IServiceProvider) as this =
+        let fontFamily, pointSize, excludedCodeForegroundColorBrush, backgroundBrush = VSFontsAndColorsHelper.GetContents(site)
         // TODO: We should really create our own adornment layer.  It is possible (unlikely) that pre-existing layers may be re-ordered, or that
         // code 'owning' the layer will choose to clear all adornments, for example.  But creating a new adornment layer can only be done via MEF-export, and
         // as of yet, we have not done any MEF-exporting in the language service.  So for now, use the existing VisibleWhitespace layer, and incur some risk, just to 
@@ -291,40 +280,41 @@ module internal Source =
         member this.RemoveSelf() =
             layer.RemoveAdornmentsByTag(tag)
 
-    // Can't untangle from MLS Source. The purpose of this class is to 
-    // satisfy the requirement of inheriting from Source. 
-#if DEBUG
-    []
-#endif
-    type internal SourceOverIdealSource(service:LanguageService, textLines, colorizer, filechange:IVsFileChangeEx) = 
-        inherit SourceImpl(service, textLines, colorizer)
+/// Implements ISource, IVsTextLinesEvents, IVsHiddenTextClient, IVsUserDataEvents etc. via FSharpSourceBase by filling in the remaining functionality 
+type internal FSharpSource(service:LanguageService, textLines, colorizer, vsFileWatch:IVsFileChangeEx, depFileChange: IDependencyFileChangeNotify, getInteractiveChecker) as source = 
+        inherit FSharpSourceBase(service, textLines, colorizer)
         
         let mutable lastCommentSpan = new TextSpan()
-        let mutable idealSource : IdealSource option = None
-        let mutable filechange = filechange
+        let mutable vsFileWatch = vsFileWatch
         let mutable textLines = textLines
 
-#if DEBUG        
-        let originalFilename = VsTextLines.GetFilename textLines
-#endif
         let mutable fileName = VsTextLines.GetFilename textLines
 
+        let recolorizeWholeFile() = 
+            if source.ColorState<>null && textLines<>null then      // textlines is used by GetLineCount()
+                    source.ColorState.ReColorizeLines(0, source.GetLineCount() - 1) |> ignore
 
-        override source.NormalizeErrorString(message) = Microsoft.FSharp.Compiler.ErrorLogger.NormalizeErrorString message
-        override source.NewlineifyErrorString(message) = Microsoft.FSharp.Compiler.ErrorLogger.NewlineifyErrorString message
+        let recolorizeLine(line:int) = 
+            if source.ColorState<>null && textLines<>null && line >= 0 && line < source.GetLineCount() then      // textlines is used by GetLineCount()
+                    source.ColorState.ReColorizeLines(line, line) |> ignore
+
+        let iSource = new FSharpSourceTestable(recolorizeWholeFile,recolorizeLine,(fun () -> VsTextLines.GetFilename textLines),(fun () -> source.IsClosed),vsFileWatch, depFileChange) :> IFSharpSource
+
+        override source.NormalizeErrorString(message) = ErrorLogger.NormalizeErrorString message
+        override source.NewlineifyErrorString(message) = ErrorLogger.NewlineifyErrorString message
 
         override source.GetExpressionAtPosition(line, col) = 
             let upi = source.GetParseTree()
-            match Microsoft.FSharp.Compiler.SourceCodeServices.UntypedParseInfoImpl.TryFindExpressionIslandInPosition(line, col, upi.ParseTree) with
+            match UntypedParseImpl.TryFindExpressionIslandInPosition(Range.Pos.fromZ line col, upi.ParseTree) with
             | Some islandToEvaluate -> islandToEvaluate
             | None -> null
 
-        member source.GetParseTree() : UntypedParseInfo =
-            // get our hands on lss.Parser (InteractiveChecker)
-            let ic = service.GetInteractiveChecker() :?> Microsoft.FSharp.Compiler.SourceCodeServices.InteractiveChecker 
+        member source.GetParseTree() : FSharpParseFileResults =
+            // get our hands on lss.Parser (FSharpChecker)
+            let ic : FSharpChecker = getInteractiveChecker() 
             let flags = 
                 [|
-                    match (source :> IdealSource).ProjectSite with
+                    match iSource.ProjectSite with
                     | Some pi -> 
                         yield! pi.CompilerFlags () |> Array.filter(fun flag -> flag.StartsWith("--define:"))
                     | None -> ()
@@ -335,31 +325,15 @@ module internal Source =
             let co = 
                 { ProjectFileName = fileName + ".dummy.fsproj"
                   ProjectFileNames = [| fileName |]
-                  ProjectOptions = flags
+                  OtherOptions = flags
+                  ReferencedProjects = [| |]
                   IsIncompleteTypeCheckEnvironment = true
                   UseScriptResolutionRules = false
                   LoadTime = new System.DateTime(2000,1,1)   // dummy data, just enough to get a parse
                   UnresolvedReferences = None }
 
-            ic.UntypedParse(fileName, source.GetText(), co)
-
-        member source.IdealSource =
-            match idealSource with
-            | Some(x) -> x
-            | None -> 
-                let recolorizeWholeFile() = 
-                    if source.ColorState<>null && textLines<>null then      // textlines is used by GetLineCount()
-                            source.ColorState.ReColorizeLines(0, source.GetLineCount() - 1) |> ignore
+            ic.ParseFileInProject(fileName, source.GetText(), co) |> Async.RunSynchronously
 
-                let recolorizeLine(line:int) = 
-                    if source.ColorState<>null && textLines<>null && line >= 0 && line < source.GetLineCount() then      // textlines is used by GetLineCount()
-                            source.ColorState.ReColorizeLines(line, line) |> ignore
-
-                let isClosed() = source.IsClosed
-                let currentFileName() = VsTextLines.GetFilename textLines
-                idealSource <- Some(new DelegatingSource(recolorizeWholeFile,recolorizeLine,currentFileName,isClosed,filechange) :> IdealSource)
-                source.IdealSource
-        
         override source.GetCommentFormat() = 
             let mutable info = new CommentInfo()
             info.BlockEnd<-"(*"
@@ -369,7 +343,7 @@ module internal Source =
             info
             
         override source.GetTaskProvider() =
-            match source.IdealSource.ProjectSite with
+            match iSource.ProjectSite with
             | Some ps ->
                 match ps.ErrorListTaskProvider() with
                 | Some etp -> etp
@@ -377,7 +351,7 @@ module internal Source =
             | _ -> base.GetTaskProvider()
             
         override source.GetTaskReporter() =
-            match source.IdealSource.ProjectSite with
+            match iSource.ProjectSite with
             | Some(ps) ->
                 match ps.ErrorListTaskReporter() with
                 | Some(etr) -> etr
@@ -433,7 +407,7 @@ module internal Source =
             NativeMethods.ThrowOnFailure(textView.GetCaretPos(line, idx)) |> ignore
             if requireFreshResults <> RequireFreshResults.Yes then
                 // if it was Yes, then we are in second-chance intellisense and we already started the task for the first-chance
-                let wpfTextView = SourceImpl.GetWpfTextViewFromVsTextView(textView)
+                let wpfTextView = FSharpSourceBase.GetWpfTextViewFromVsTextView(textView)
                 let ss = wpfTextView.TextSnapshot
                 let tsLine = ss.GetLineFromLineNumber(!line)
                 let lineLen = tsLine.End.Position - tsLine.Start.Position 
@@ -448,7 +422,7 @@ module internal Source =
                 if reason = BackgroundRequestReason.CompleteWord then
                     let upi = source.GetParseTree()
                     let isBetweenDotAndIdent =
-                        match Microsoft.FSharp.Compiler.SourceCodeServices.UntypedParseInfoImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(!line, !idx, upi.ParseTree) with
+                        match Microsoft.FSharp.Compiler.SourceCodeServices.UntypedParseImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(Range.Pos.fromZ !line !idx, upi.ParseTree) with
                         | Some(_,isBetweenDotAndIdent) -> isBetweenDotAndIdent
                         | None -> false
                     if isBetweenDotAndIdent then
@@ -464,7 +438,7 @@ module internal Source =
         member source.HandleCompletionResponse(req) =
             match req with
             | null -> source.ResetFSharpIntelliSenseToAppearAdornment()
-            | _ when req.View = null || req.ResultScope = null -> source.ResetFSharpIntelliSenseToAppearAdornment()
+            | _ when req.View = null || req.ResultIntellisenseInfo = null -> source.ResetFSharpIntelliSenseToAppearAdornment()
             | _ when (req.Timestamp <> source.ChangeCount) -> source.ResetFSharpIntelliSenseToAppearAdornment()
             | _ ->
                   source.HandleResponseHelper(req)
@@ -472,7 +446,7 @@ module internal Source =
                   if reason = BackgroundRequestReason.MemberSelectAndHighlightBraces then
                       source.HandleMatchBracesResponse(req)
                   async {
-                      let! decls = req.ResultScope.GetDeclarations(req.Snapshot, req.Line, req.Col, reason)
+                      let! decls = req.ResultIntellisenseInfo.GetDeclarations(req.Snapshot, req.Line, req.Col, reason)
                       do! Async.SwitchToContext UIThread.TheSynchronizationContext
                       if (decls = null || decls.IsEmpty()) && req.Timestamp <> req.ResultTimestamp then
                           // Second chance intellisense: we didn't get any result and the basis typecheck was stale. We need to retrigger the completion.
@@ -539,76 +513,57 @@ module internal Source =
             base.CommentSpan(span) |> ignore
             lastCommentSpan
             
-        override source.RecordChangeToView() = source.IdealSource.RecordChangeToView()
-        override source.RecordViewRefreshed() = source.IdealSource.RecordViewRefreshed()
-        override source.NeedsVisualRefresh 
-            with get() = source.IdealSource.NeedsVisualRefresh
+        override source.RecordChangeToView() = iSource.RecordChangeToView()
+        override source.RecordViewRefreshed() = iSource.RecordViewRefreshed()
+        override source.NeedsVisualRefresh = iSource.NeedsVisualRefresh
             
         override source.ChangeCount
-            with get() = source.IdealSource.ChangeCount
-            and set(value) = source.IdealSource.ChangeCount <- value                
+            with get() = iSource.ChangeCount
+            and set(value) = iSource.ChangeCount <- value                
             
         override source.DirtyTime
-            with get() = source.IdealSource.DirtyTime
-            and set(value) = source.IdealSource.DirtyTime <- value                
+            with get() = iSource.DirtyTime
+            and set(value) = iSource.DirtyTime <- value                
                             
         override source.Dispose() =
             try 
                 base.Dispose()       
             finally
-                match idealSource with
-                | None -> ()
-                | Some(is) -> 
-                    ((box is):?>IDisposable).Dispose()       
-                    filechange<-null
-                    idealSource<-None
-                    textLines<-null
+                ((box iSource):?>IDisposable).Dispose()       
+                vsFileWatch<-null
+                textLines<-null
 
         override source.OnUserDataChange(riidKey, _vtNewValue) =
             let newfileName = VsTextLines.GetFilename textLines
             if not (String.Equals(fileName, newfileName, StringComparison.InvariantCultureIgnoreCase)) then
                 // the filename of the text buffer is changing, could be changing e.g. .fsx to .fs or vice versa
                 fileName <- newfileName
-                (source :> IdealSource).RecolorizeWholeFile()
-
-#if DEBUG        
-        override source.OriginalFilename = originalFilename
-#endif
-
-        // Just forward to IdealSource  
-        interface IdealSource with
-            member source.RecolorizeWholeFile() = source.IdealSource.RecolorizeWholeFile() 
-            member source.RecolorizeLine line = source.IdealSource.RecolorizeLine line
-            member source.RecordChangeToView() = source.IdealSource.RecordChangeToView()
-            member source.RecordViewRefreshed() = source.IdealSource.RecordViewRefreshed()
-            member source.NeedsVisualRefresh 
-                with get() = source.IdealSource.NeedsVisualRefresh
-            member source.IsClosed 
-                with get() = source.IdealSource.IsClosed
-            member source.ProjectSite
-                with get() = source.IdealSource.ProjectSite
-                and set(value) = source.IdealSource.ProjectSite <- value
-            member source.ChangeCount
-                with get() = source.IdealSource.ChangeCount
-                and set(value) = source.IdealSource.ChangeCount <- value                
-            member source.DirtyTime
-                with get() = source.IdealSource.DirtyTime
-                and set(value) = source.IdealSource.DirtyTime <- value                
-            member source.SetDependencyFiles(files) = 
-                source.IdealSource.SetDependencyFiles(files)
-            member source.SetDependencyFileChangeCallback(projectCallback,fileCallback) = 
-                source.IdealSource.SetDependencyFileChangeCallback(projectCallback,fileCallback)
+                iSource.RecolorizeWholeFile()
+
+        // Just forward to IFSharpSource  
+        interface IFSharpSource with
+            member source.RecolorizeWholeFile() = iSource.RecolorizeWholeFile() 
+            member source.RecolorizeLine line = iSource.RecolorizeLine line
+            member source.RecordChangeToView() = iSource.RecordChangeToView()
+            member source.RecordViewRefreshed() = iSource.RecordViewRefreshed()
+            member source.NeedsVisualRefresh = iSource.NeedsVisualRefresh
+            member source.IsClosed = iSource.IsClosed
+            member source.ProjectSite with get() = iSource.ProjectSite and set(value) = iSource.ProjectSite <- value
+            member source.ChangeCount with get() = iSource.ChangeCount and set(value) = iSource.ChangeCount <- value                
+            member source.DirtyTime with get() = iSource.DirtyTime and set(value) = iSource.DirtyTime <- value                
+            member source.SetDependencyFiles(files) = iSource.SetDependencyFiles(files)
                 
-        // Hook file change events                
+        /// Hook file change events.  It's not clear that this implementation is ever utilized, since
+        /// the implementation on FSharpSourceTestable is used instead.
         interface IVsFileChangeEvents with 
             member changes.FilesChanged(_count : uint32, _files: string [], _changeFlags : uint32 []) = 0
             member changes.DirectoryChanged(_directory: string) = 0
-
-
                 
-    let internal CreateSource(service:LanguageService,
-                              textLines:IVsTextLines,
-                              colorizer:Colorizer,
-                              filechange:IVsFileChangeEx) : IdealSource =
-        new SourceOverIdealSource(service,textLines,colorizer,filechange) :> IdealSource    
+module internal Source = 
+        /// This is the ideal implementation of the Source concept abstracted from MLS.  
+        let CreateSourceTestable (recolorizeWholeFile, recolorizeLine, filename, isClosed, vsFileWatch, depFileChangeNotify) = 
+            new FSharpSourceTestable(recolorizeWholeFile, recolorizeLine, filename, isClosed, vsFileWatch, depFileChangeNotify) :> IFSharpSource
+
+        let CreateSource(service, textLines, colorizer, vsFileWatch, depFileChangeNotify, getInteractiveChecker) =
+            new FSharpSource(service, textLines, colorizer, vsFileWatch, depFileChangeNotify, getInteractiveChecker) :> IFSharpSource
                 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FoolFsSrGen.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FoolFsSrGen.fs
index 55061cf2de5..e3c4da68f98 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FoolFsSrGen.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FoolFsSrGen.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 // ModelStrings.SR.modelTimeInfoMainString
 // ModelStrings.SR.modelTimeInfoGCGenerationLabelSomeShorthandForTheWordGeneration
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/GetVerifiedPublisherInfo.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/GetVerifiedPublisherInfo.fs
deleted file mode 100644
index b16ab8fcfa0..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/GetVerifiedPublisherInfo.fs
+++ /dev/null
@@ -1,337 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService
-
-module internal GetVerifiedPublisherInfo =
-/// Returns either the name of the verified publisher (e.g. Some("Microsoft") or Some("Contoso")), or None if there is no 
-/// verified publisher info (or unverifiable) available.
-
-    // can test e.g. with Office EXEs
-
-    open System.Runtime.InteropServices
-    open System
-
-    // These aliases make transcribing types more straightforward
-    type DWORD = int32
-    type WCHAR = int16
-    type PTR = System.IntPtr
-    type HANDLE = System.IntPtr
-    type BOOL = uint32
-
-    ////////////////////////////////////////////////////////////////
-    // Native Win32 API type transcriptions
-    ////////////////////////////////////////////////////////////////
-
-    // A hand-marshalled Win32 GUID struct
-    type Win32Guid =
-        struct
-            val D1  : uint32
-            val D2  : uint16
-            val D3  : uint16
-            val D4  : byte 
-            val D5  : byte
-            val D6  : byte
-            val D7  : byte
-            val D8  : byte
-            val D9  : byte
-            val D10 : byte
-            val D11 : byte
-
-            new(data1 : uint32, 
-                data2 : uint16, 
-                data3 : uint16, 
-                data4 : byte, 
-                data5 : byte, 
-                data6 : byte, 
-                data7 : byte, 
-                data8 : byte, 
-                data9 : byte, 
-                data10 : byte, 
-                data11 : byte) = 
-                {   D1 = data1;
-                    D2 = data2;
-                    D3 = data3;
-                    D4 = data4;
-                    D5 = data5; 
-                    D6 = data6; 
-                    D7 = data7; 
-                    D8 = data8; 
-                    D9 = data9; 
-                    D10 = data10; 
-                    D11 = data11}
-        end
-
-    // from WinDef.h
-    type FILETIME =
-        struct
-            val mutable dwLowDateTime : DWORD
-            val mutable dwHighDateTime : DWORD
-        end
-
-    // from WinTrust.h
-    type WINTRUST_DATA =
-        struct
-            val mutable cbStruct : DWORD
-            val mutable pPolicyCallbackData : PTR
-            val mutable pSIPClientData : PTR
-            val mutable dwUIChoice : DWORD
-            val mutable fdwRevocationChecks : DWORD
-            val mutable dwUnionChoice : DWORD
-            val mutable pFile : PTR // actually a union of choices
-            val mutable dwStateAction : DWORD
-            val mutable hWVTStateData : HANDLE
-            val mutable pwszURLReference : PTR
-            val mutable dwProvFlags : DWORD
-            val mutable dwUIContext : DWORD
-        end
-
-    // from WinTrust.h
-    type WINTRUST_FILE_INFO =
-        struct
-            val mutable cbStruct : DWORD
-            val mutable pcwszFilePath : PTR
-            val mutable hFile : HANDLE
-            val mutable pgKnownSubject : PTR
-        end
-
-    // from WinTrust.h
-    type CRYPT_PROVIDER_DATA =
-        struct
-            val mutable cbStruct : DWORD
-            val mutable pWintrustData : PTR
-            val mutable fOpenedFile : BOOL
-            val mutable hWndParent : HANDLE
-            val mutable pgActionID : PTR
-            val mutable hProv : HANDLE
-            val mutable dwError : DWORD
-            val mutable dwRegSecuritySettings : DWORD
-            val mutable dwRegPolicySettings : DWORD
-            val mutable psPfns : PTR
-            val mutable cdwTrustStepErrors : DWORD
-            val mutable padwTrustStepErrors : PTR
-            val mutable chStores : DWORD
-            val mutable pahStores : PTR
-            val mutable dwEncoding : PTR
-            val mutable hMsg : HANDLE
-            val mutable csSigners : DWORD
-            val mutable pasSigners : PTR
-            val mutable csProvPrivData : DWORD
-            val mutable pasProvPrivDAta : PTR
-            val mutable dwSubjectChoice : DWORD
-            val mutable pPDSip : PTR
-            val mutable pszUsageOID : PTR
-            val mutable fRecallWithState : BOOL
-            val mutable sftSystemTime : FILETIME
-            val mutable pszCTLSignerUsageOID : PTR
-            val mutable dwProvFlags : DWORD
-            val mutable dwFinalError : DWORD
-            val mutable pRequestUsage : PTR
-            val mutable dwTrustPubSettings : DWORD
-            val mutable dwUIStateFlags : DWORD
-        end
-
-    // from WinTrust.h
-    type CRYPT_PROVIDER_SGNR =
-        struct
-            val mutable cbStruct : DWORD
-            val mutable sftVerifyAsOf : FILETIME
-            val mutable csCertChain : DWORD
-            val mutable pasCertChain : PTR
-            val mutable dwSignerType : DWORD
-            val mutable psSigner : PTR
-            val mutable dwError : DWORD
-            val mutable csCounterSigners : DWORD
-            val mutable pasCounterSigners : PTR
-            val mutable pChainContext : PTR
-        end
-
-    // from WinCrypt.h
-    type CERT_TRUST_STATUS =
-        struct
-            val mutable dwErrorStatus : DWORD
-            val mutable dwInfoStatus : DWORD
-        end
-
-    // from WinCrypt.h
-    type CERT_CHAIN_CONTEXT =
-        struct
-            val mutable cbSize : DWORD
-            val mutable TrustStatus : CERT_TRUST_STATUS
-            val mutable cChain : DWORD
-            val mutable rgpChain : PTR // PCERT_SIMPLE_CHAIN*
-        end
-
-    // from WinCrypt.h
-    type CERT_SIMPLE_CHAIN =
-        struct
-            val mutable cbSize : DWORD
-            val mutable TrustStatus: CERT_TRUST_STATUS
-            val mutable cElement : DWORD
-            val mutable rgpElement : PTR // PCERT_CHAIN_ELEMENT*
-            val mutable pTrustListInfo : PTR
-            val mutable fHasRevocationFreshnessTime : BOOL
-            val mutable dwRevocationFreshnessTime : DWORD
-        end
-
-    // from WinCrypt.h
-    type CERT_CHAIN_ELEMENT =
-        struct
-            val mutable cbSize : DWORD
-            val mutable pCertContext : PTR
-            val mutable TrustStatus : CERT_TRUST_STATUS
-            val mutable pRevocationInfo : PTR
-            val mutable pIssuanceUsage : PTR
-            val mutable pApplicationUsage : PTR
-            val mutable pwszExtendedErrorInfo : PTR
-        end
-
-    ////////////////////////////////////////////////////////////////
-    // Flags and constants
-    ////////////////////////////////////////////////////////////////
-    // from WinTrust.h
-    let WTD_UI_NONE = 2
-    let WTD_REVOKE_WHOLECHAIN = 1
-    let WTD_CHOICE_FILE = 1
-    let WTD_STATEACTION_VERIFY = 1
-    let WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x80
-    let WTD_STATEACTION_CLOSE = 2
-    let CERT_NAME_ATTR_TYPE = 3
-
-    let INVALID_HANDLE_VALUE = System.IntPtr(-1)
-    let nullPTR = System.IntPtr.Zero
-
-
-    // GUID from SoftPub.h for pulling the correct authenticode certificate
-    let WINTRUST_ACTION_GENERIC_VERIFY_V2 = Win32Guid(  uint32(0xaac56b),
-                                                        uint16(0xcd44),
-                                                        uint16(0x11d0),
-                                                        byte(0x8c),
-                                                        byte(0xc2),
-                                                        byte(0x0),
-                                                        byte(0xc0),
-                                                        byte(0x4f),
-                                                        byte(0xc2),
-                                                        byte(0x95),
-                                                        byte(0xee))
-
-
-    ////////////////////////////////////////////////////////////////
-    // P/Invokes
-    ////////////////////////////////////////////////////////////////
-    // see wintrust.h for details
-    []
-    extern int WinVerifyTrust (HANDLE _hwnd, PTR _pProvGuid, PTR _pwtd)
-
-    // returns an unmarshalled pointer to a CRYPT_PROVIDER_DATA struct
-    []
-    extern PTR WTHelperProvDataFromStateData(HANDLE _hStateData)
-
-    // returns an unmarshalled pointer to a CRYPT_PROVIDER_SGNR struct
-    []
-    extern PTR WTHelperGetProvSignerFromChain(PTR _pProvData, int32 _idxSigner, int32 _fCounterSigner, int32 _idxCounterSigner)
-
-    []
-    extern DWORD CertGetNameStringW(PTR _pCertContext, DWORD _dwType, DWORD _dwFlags, PTR _pvTypePara, PTR _pszNameString, DWORD _cchNameString)
-
-    ////////////////////////////////////////////////////////////////
-    // GetVerifiedPublisherInfo
-    //  takes a path to a possibly signed binary, returns 
-    //  Some(publisher_name) for verified binaries, None for 
-    //  unverifed ones
-    ////////////////////////////////////////////////////////////////
-    let GetVerifiedPublisherInfo(path : string) =
-        let mutable wtd = WINTRUST_DATA()
-        let mutable wtfi = WINTRUST_FILE_INFO()
-
-        // track GCHandle object for 
-        let gcHandles = ref List.empty
-
-        let pin o =
-            let handle = GCHandle.Alloc(o, GCHandleType.Pinned)
-            let ptr = handle.AddrOfPinnedObject()
-            gcHandles := handle :: !gcHandles
-            handle,ptr
-
-        let freeHandles() = for handle in !gcHandles do handle.Free()
-
-        let _pathHandle, ppath = pin path 
-
-        wtfi.cbStruct <- Marshal.SizeOf(wtfi)
-        wtfi.pcwszFilePath <- ppath
-        wtfi.hFile <- nullPTR
-        wtfi.pgKnownSubject <- nullPTR
-
-        let _pwtfiHandle, pwtfi = pin wtfi
-
-        wtd.cbStruct <- Marshal.SizeOf(wtd)
-        wtd.pPolicyCallbackData <- nullPTR
-        wtd.pSIPClientData <- nullPTR
-        wtd.dwUIChoice <- WTD_UI_NONE
-        wtd.fdwRevocationChecks <- WTD_REVOKE_WHOLECHAIN
-        wtd.dwUnionChoice <- WTD_CHOICE_FILE
-        wtd.pFile <- pwtfi
-        wtd.dwStateAction <- WTD_STATEACTION_VERIFY
-        wtd.hWVTStateData <- nullPTR
-        wtd.pwszURLReference <- nullPTR
-        wtd.dwProvFlags <- WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT
-
-        let _guidHandle,pGuid = pin WINTRUST_ACTION_GENERIC_VERIFY_V2
-        let _wtdHandle,pwtd = pin wtd
-
-        let isAuthenticated = WinVerifyTrust(INVALID_HANDLE_VALUE,pGuid,pwtd) = 0  
-
-        let publisherName =
-            if isAuthenticated then
-                // we need to remarshal because the call to WinVerifyTrust has changed the object's state
-                wtd <- Marshal.PtrToStructure(pwtd,typeof) :?> WINTRUST_DATA
-
-                let pUnmarshalledProvData = WTHelperProvDataFromStateData(wtd.hWVTStateData)
-                let pUnmarshalledSGNRData = WTHelperGetProvSignerFromChain(pUnmarshalledProvData, 0, 0, 0)
-
-                let pProvSigner = Marshal.PtrToStructure(pUnmarshalledSGNRData, typeof) :?> CRYPT_PROVIDER_SGNR
-                let pChainContext = Marshal.PtrToStructure(pProvSigner.pChainContext, typeof) :?> CERT_CHAIN_CONTEXT
-
-                // WARNING: technically pChainContext->rgpChain[0]
-                let ppChain = Marshal.PtrToStructure(pChainContext.rgpChain, typeof) :?> HANDLE
-                let pChain = Marshal.PtrToStructure(ppChain, typeof) :?> CERT_SIMPLE_CHAIN
-
-                // WARNING: technically pChain->rgpElement[0]
-                let ppElement = Marshal.PtrToStructure(pChain.rgpElement, typeof) :?> HANDLE
-                let pElement = Marshal.PtrToStructure(ppElement, typeof) :?> CERT_CHAIN_ELEMENT
-
-                let pCertContext = pElement.pCertContext
-
-                // get the length of the name string
-                let attrStringLength = CertGetNameStringW(pCertContext,CERT_NAME_ATTR_TYPE,0,nullPTR,nullPTR,0)
-
-                // allocate buffer for unicode publisher string
-                let pNameBuffer = Marshal.AllocHGlobal(attrStringLength * 2)
-
-
-                let _ = CertGetNameStringW(pCertContext,CERT_NAME_ATTR_TYPE,0,nullPTR,pNameBuffer,attrStringLength)
-                let publisherNameString = Marshal.PtrToStringAuto(pNameBuffer)
-
-                // free the unmanaged buffer
-                Marshal.FreeHGlobal(pNameBuffer)
-
-                Some(publisherNameString)
-            else
-                None
-
-        // Clean up verification state
-        wtd.dwStateAction <- WTD_STATEACTION_CLOSE
-        WinVerifyTrust(INVALID_HANDLE_VALUE,pGuid,pwtd) |> ignore
-
-        // free pinned data
-        freeHandles()
-    
-        publisherName
-
-    (* sample code
-    let wordPath = @"c:\Program Files (x86)\Microsoft Office\Office14\WinWord.exe"
-    let fooPath = @"c:\lab\fs\sltest.exe" // some random exe
-
-    printfn "Is it authenticated?"
-    printfn "%s: %A" wordPath (match GetVerifiedPublisherInfo wordPath with | Some(n) -> n | _ -> "Not authenticated")
-    printfn "%s: %A" fooPath (match GetVerifiedPublisherInfo fooPath with | Some(n) -> n | _ -> "Not authenticated")
-    *)
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/GotoDefinition.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/GotoDefinition.fs
index 5c33fb5476c..5ae4eb5200a 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/GotoDefinition.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/GotoDefinition.fs
@@ -1,26 +1,18 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService
 
-open Microsoft.FSharp.Compiler.SourceCodeServices
 open System
 open System.IO
 open System.Collections.Generic
-open System.Collections
 open System.Diagnostics
-open System.Globalization
-open System.ComponentModel.Design
-open System.Runtime.InteropServices
 open Microsoft.VisualStudio
-open Microsoft.VisualStudio.FSharp.LanguageService
 open Microsoft.VisualStudio.Shell
 open Microsoft.VisualStudio.Shell.Interop 
 open Microsoft.VisualStudio.TextManager.Interop 
-open Microsoft.VisualStudio.OLE.Interop
-open Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
+open Microsoft.FSharp.Compiler
 open Microsoft.FSharp.Compiler.Lib
-open Internal.Utilities.Debug
+open Microsoft.FSharp.Compiler.SourceCodeServices
 
 module internal OperatorToken =
     
@@ -33,9 +25,7 @@ module internal OperatorToken =
 
 module internal GotoDefinition =
     
-    module Parser = Microsoft.FSharp.Compiler.Parser  
-
-    let GotoDefinition (colourizer: FSharpColorizer, typedResults : TypeCheckResults, textView : IVsTextView, line : int, col : int) : GotoDefinitionResult =
+    let GotoDefinition (colourizer: FSharpColorizer, typedResults : FSharpCheckFileResults, textView : IVsTextView, line : int, col : int) : GotoDefinitionResult =
         
         let ls = textView.GetBuffer() |> Com.ThrowOnFailure1
         let len = ls.GetLengthOfLine line |> Com.ThrowOnFailure1
@@ -73,20 +63,20 @@ module internal GotoDefinition =
                         Strings.Errors.GotoDefinitionFailed_NotIdentifier ()
                         |> GotoDefinitionResult.MakeError
                     else
-                      match typedResults.GetDeclarationLocation ((line, colIdent), lineStr, qualId, tag, false) with
-                      | DeclFound ((r, c), file) -> 
-                          let span = TextSpan (iStartLine = r, iEndLine = r, iStartIndex = c, iEndIndex = c) 
-                          GotoDefinitionResult.MakeSuccess(file, span)
-                      | FindDeclResult.DeclNotFound(reason) ->
+                      match typedResults.GetDeclarationLocationAlternate (line+1, colIdent, lineStr, qualId, false) |> Async.RunSynchronously with
+                      | FSharpFindDeclResult.DeclFound m -> 
+                          let span = TextSpan (iStartLine = m.StartLine-1, iEndLine = m.StartLine-1, iStartIndex = m.StartColumn, iEndIndex = m.StartColumn) 
+                          GotoDefinitionResult.MakeSuccess(m.FileName, span)
+                      | FSharpFindDeclResult.DeclNotFound(reason) ->
                           if makeAnotherAttempt then gotoDefinition true
                           else
                           Trace.Write("LanguageService", sprintf "Goto definition failed: Reason %+A" reason)
                           let text = 
                               match reason with                    
-                              | FindDeclFailureReason.Unknown -> Strings.Errors.GotoDefinitionFailed()
-                              | FindDeclFailureReason.NoSourceCode -> Strings.Errors.GotoDefinitionFailed_NoSourceCode()
-                              | FindDeclFailureReason.ProvidedType(typeName) -> Strings.Errors.GotoDefinitionFailed_ProvidedType(typeName)
-                              | FindDeclFailureReason.ProvidedMember(name) -> Strings.Errors.GotoFailed_ProvidedMember(name)
+                              | FSharpFindDeclFailureReason.Unknown -> Strings.Errors.GotoDefinitionFailed()
+                              | FSharpFindDeclFailureReason.NoSourceCode -> Strings.Errors.GotoDefinitionFailed_NoSourceCode()
+                              | FSharpFindDeclFailureReason.ProvidedType(typeName) -> Strings.Errors.GotoDefinitionFailed_ProvidedType(typeName)
+                              | FSharpFindDeclFailureReason.ProvidedMember(name) -> Strings.Errors.GotoFailed_ProvidedMember(name)
                           GotoDefinitionResult.MakeError text
                 else 
                     Trace.Write("LanguageService", "Goto definition: No 'TypeCheckInfo' available")
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/ProjectSite.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/IProjectSite.fs
similarity index 64%
rename from vsintegration/src/vs/FsPkgs/FSharp.LanguageService/ProjectSite.fs
rename to vsintegration/src/vs/FsPkgs/FSharp.LanguageService/IProjectSite.fs
index de7e558de73..d7b6e498b83 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/ProjectSite.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/IProjectSite.fs
@@ -1,43 +1,45 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.VisualStudio.Shell
-open Microsoft.VisualStudio.Shell.Interop
-open System.Runtime.InteropServices
-
-// This is the list of known owners of callbacks that may register themselves.
-// Consumers not in this list should use a GUID our some other strongly unique key string
-module internal KnownAdviseProjectSiteChangesCallbackOwners = 
-    let LanguageService = "F# Language Service"
 
 /// Narrow abstraction over the project system.
 type internal AdviseProjectSiteChanges = delegate of unit -> unit  
+
+/// Represents known F#-specific information about a project.
 type internal IProjectSite = 
+
     /// List of files in the project. In the correct order.
     abstract SourceFilesOnDisk : unit -> string[]
+
     /// Flags that the compiler would need to understand how to compile.
     abstract CompilerFlags : unit -> string[]
+
     /// Register for notifications for when the above change
     abstract AdviseProjectSiteChanges : (*callbackOwnerKey*)string * AdviseProjectSiteChanges -> unit
+
     /// Register for notifications when project is cleaned/rebuilt (and thus any live TypeProviders should be refreshed)
     abstract AdviseProjectSiteCleaned : (*callbackOwnerKey*)string * AdviseProjectSiteChanges -> unit
+
     /// A user-friendly description of the project. Used only for developer/DEBUG tooltips and such.
     abstract DescriptionOfProject : unit -> string
+
     /// The name of the project file.
     abstract ProjectFileName : unit -> string
+
     /// The error list task provider (should one exist - null, otherwise)
-    abstract ErrorListTaskProvider : unit -> TaskProvider option
+    abstract ErrorListTaskProvider : unit -> Microsoft.VisualStudio.Shell.TaskProvider option
+
     /// The error list task reporter
     abstract ErrorListTaskReporter : unit -> Microsoft.VisualStudio.FSharp.LanguageService.TaskReporter option
+
     /// False type resolution errors are invalid. This occurs with orphaned source files. The prior 
     /// type checking state is unknown. In this case we don't want to squiggle the type checking files.
-    abstract IsTypeResolutionValid : bool
+    abstract IsIncompleteTypeCheckEnvironment : bool
+
     /// target framework moniker
     abstract TargetFrameworkMoniker : string
+
     /// timestamp the site was last loaded
     abstract LoadTime : System.DateTime 
 
-  []
- type internal IProvideProjectSite =
-    abstract GetProjectSite : unit -> IProjectSite
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/IdealManagedLanguageService.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/IdealManagedLanguageService.fs
deleted file mode 100644
index 0d5d3ee348e..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/IdealManagedLanguageService.fs
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-/// This file contains idealized versions of the MLS in which things have been factored into interfaces rather
-/// than being coupled everywhere.
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService
-open System.Text
-open Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.FSharp.Compiler.SourceCodeServices
-open Microsoft.VisualStudio.TextManager.Interop
-open Microsoft.VisualStudio.Shell
-open Microsoft.VisualStudio.Shell.Interop
-open Microsoft.FSharp.Compiler.SourceCodeServices
-
-
-/// XmlDocumentation provider
-type internal IdealDocumentationProvider =
-    /// Append the given raw XML formatted into the string builder
-    abstract AppendDocumentationFromProcessedXML : StringBuilder * string * bool * bool * string option-> unit
-    /// Appends text for the given filename and signature into the StringBuilder
-    abstract AppendDocumentation : StringBuilder * string * string * bool * bool * string option-> unit
-
-type internal ProjectSiteRebuildCallbackSignature = IProjectSite -> unit
-/// Invoked when a file that IdealSource depends on changes
-type internal DependencyFileChangeCallbackSignature = string -> unit
-
-/// Ideal Source 
-type internal IdealSource =
-    /// Request colorization of the whole source file
-    abstract RecolorizeWholeFile : unit -> unit
-    abstract RecolorizeLine : line:int -> unit
-    // Called to notify the source that the user has changed the source text in the editor.
-    abstract RecordChangeToView: unit -> unit
-    // Called to notify the source the file has been redisplayed.
-    abstract RecordViewRefreshed: unit -> unit
-    // If true, the file displayed has changed and needs to be redisplayed to some extent.
-    abstract NeedsVisualRefresh : bool with get
-    /// Number of most recent change to this file.
-    abstract ChangeCount : int with get,set
-    /// Timestamp of the last change
-    abstract DirtyTime : int with get,set
-    /// Whether or not this source is closed.
-    abstract IsClosed: unit -> bool with get
-    /// Store a ProjectSite for obtaining a task provider
-    abstract ProjectSite : IProjectSite option with get,set
-    /// Specify the files that should trigger a rebuild for the project behind this source
-    abstract SetDependencyFiles : string list -> bool
-    /// Function the source should call when there have been changes to files.
-    abstract SetDependencyFileChangeCallback : ProjectSiteRebuildCallbackSignature*DependencyFileChangeCallbackSignature -> unit
-    
-    
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Intellisense.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Intellisense.fs
new file mode 100644
index 00000000000..3bfaa3f58a1
--- /dev/null
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Intellisense.fs
@@ -0,0 +1,554 @@
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+namespace Microsoft.VisualStudio.FSharp.LanguageService
+
+open System
+open System.Collections.Generic
+open Microsoft.VisualStudio
+open Microsoft.VisualStudio.Shell.Interop 
+open Microsoft.VisualStudio.TextManager.Interop 
+open Microsoft.VisualStudio.Text
+open Microsoft.VisualStudio.OLE.Interop
+open Microsoft.FSharp.Compiler
+open Microsoft.FSharp.Compiler.Range
+open Microsoft.FSharp.Compiler.SourceCodeServices
+
+ 
+/// Represents all the information necessary to display and navigate 
+/// within a method tip (e.g. param info, overloads, ability to move thru overloads and params)
+///
+/// Completes the base class "MethodListForAMethodTip" with F#-specific implementations.
+//
+// Note, the MethodListForAMethodTip type inherited by this code is defined in the F# Project System C# code. This is the only implementation
+// in the codebase, hence we are free to change it and refactor things (e.g. bring more things into F# code) 
+// if we wish.
+type internal FSharpMethodListForAMethodTip(documentationBuilder: IDocumentationBuilder, methodsName, methods: FSharpMethodGroupItem[], nwpl: FSharpNoteworthyParamInfoLocations, snapshot: ITextSnapshot, isThisAStaticArgumentsTip: bool) =
+    inherit MethodListForAMethodTip() 
+
+    // Compute the tuple end points
+    let tupleEnds = 
+        let oneColBefore ((l,c): Pos01) = (l,c-1)
+        [| yield Pos.toZ nwpl.LongIdStartLocation
+           yield Pos.toZ nwpl.LongIdEndLocation
+           yield Pos.toZ nwpl.OpenParenLocation
+           for i in 0..nwpl.TupleEndLocations.Length-2 do
+                yield oneColBefore (Pos.toZ nwpl.TupleEndLocations.[i])
+           let last = Pos.toZ nwpl.TupleEndLocations.[nwpl.TupleEndLocations.Length-1]
+           yield if nwpl.IsThereACloseParen then oneColBefore last else last  |]
+
+    let safe i dflt f = if 0 <= i && i < methods.Length then f methods.[i] else dflt
+
+    let parameterRanges =
+        let ss = snapshot
+        [|  // skip 2 because don't want longid start&end, just want open paren and tuple ends
+            for (sl,sc),(el,ec) in tupleEnds |> Seq.skip 2 |> Seq.pairwise do
+                let span = ss.CreateTrackingSpan(MakeSpan(ss,sl,sc,el,ec), SpanTrackingMode.EdgeInclusive)
+                yield span  |]
+
+    do assert(methods.Length > 0)
+
+    override x.GetColumnOfStartOfLongId() = nwpl.LongIdStartLocation.Column
+
+    override x.IsThereACloseParen() = nwpl.IsThereACloseParen
+
+    override x.GetNoteworthyParamInfoLocations() = tupleEnds
+
+    override x.GetParameterNames() = nwpl.NamedParamNames
+
+    override x.GetParameterRanges() = parameterRanges
+
+    override x.GetCount() = methods.Length
+
+    override x.GetDescription(index) = safe index "" (fun m -> XmlDocumentation.BuildMethodOverloadTipText(documentationBuilder, m.Description))
+            
+    override x.GetType(index) = safe index "" (fun m -> m.TypeText)
+
+    override x.GetParameterCount(index) =  safe index 0 (fun m -> m.Parameters.Length) 
+            
+    override x.GetParameterInfo(index, parameter, nameOut, displayOut, descriptionOut) =
+        let name,display = safe index ("","") (fun m -> let p = m.Parameters.[parameter] in p.ParameterName,p.Display )
+           
+        nameOut <- name
+        displayOut <- display
+        descriptionOut <- ""
+
+    override x.GetName(_index) = methodsName
+
+    override x.OpenBracket = if isThisAStaticArgumentsTip then "<" else "("
+    override x.CloseBracket = if isThisAStaticArgumentsTip then ">" else ")"
+
+/// A collections of declarations as would be returned by a dot-completion request.
+//
+// Note, the Declarations type inherited by this code is defined in the F# Project System C# code. This is the only implementation
+// in the codebase, hence we are free to change it and refactor things (e.g. bring more things into F# code) 
+// if we wish.
+type internal FSharpDeclarations(documentationBuilder, declarations: FSharpDeclarationListItem[], reason: BackgroundRequestReason) = 
+        
+    inherit Declarations()  
+
+    // Sort the declarations, NOTE: we used ORDINAL comparison here, this is "by design" from F# 2.0, partly because it puts lowercase last.
+    let declarations = declarations |> Array.sortWith (fun d1 d2 -> compare d1.Name d2.Name)
+    let mutable lastBestMatch = ""
+    let isEmpty = (declarations.Length = 0)
+
+    let tab = Dictionary()
+
+    // Given a prefix, narrow the items to the include the ones containing that prefix, and store in a lookaside table
+    // attached to this declaration set.
+    let trimmedDeclarations filterText = 
+        if reason = BackgroundRequestReason.DisplayMemberList then declarations 
+        elif tab.ContainsKey filterText then tab.[filterText] 
+        else 
+            let matcher = AbstractPatternMatcher.Singleton
+            let decls = 
+                // Find the first prefix giving a non-empty declaration set after filtering
+                seq { for i in filterText.Length-1 .. -1 .. 0 do 
+                            let filterTextPrefix = filterText.[0..i]
+                            match tab.TryGetValue filterTextPrefix with
+                            | true, decls -> yield decls
+                            | false, _ -> yield declarations |> Array.filter (fun s -> matcher.MatchSingleWordPattern(s.Name, filterTextPrefix)<>null) 
+                      yield declarations }
+                |> Seq.tryFind (fun arr -> arr.Length > 0)
+                |> (function None -> declarations | Some s -> s)
+            tab.[filterText] <- decls
+            decls
+
+    override decl.GetCount(filterText) = 
+        let decls = trimmedDeclarations filterText
+        decls.Length
+
+    override decl.GetDisplayText(filterText, index) =
+        let decls = trimmedDeclarations filterText
+        if (index >= 0 && index < decls.Length) then
+            decls.[index].Name
+        else ""
+
+    override decl.IsEmpty() = isEmpty
+
+    override decl.GetName(filterText, index) =
+        let decls = trimmedDeclarations filterText
+        if (index >= 0 && index < decls.Length) then
+            let item = decls.[index]
+            if (item.Glyph = 205) then
+                ""
+            else 
+                item.Name
+        else String.Empty
+
+    override decl.GetDescription(filterText, index) =
+        let decls = trimmedDeclarations filterText
+        if (index >= 0 && index < decls.Length) then
+            XmlDocumentation.BuildDataTipText(documentationBuilder,decls.[index].DescriptionText) 
+        else ""
+
+    override decl.GetGlyph(filterText, index) =
+        let decls = trimmedDeclarations filterText
+        //The following constants are the index of the various glyphs in the ressources of Microsoft.VisualStudio.Package.LanguageService.dll
+        if (index >= 0 && index < decls.Length) then
+            let item = decls.[index]
+            item.Glyph
+        else 0
+
+    // This method is called to get the string to commit to the source buffer.
+    // Note that the initial extent is only what the user has typed so far.
+    override decl.OnCommit(filterText, index) =
+        // We intercept this call only to get the initial extent
+        // of what was committed to the source buffer.
+        let result = decl.GetName(filterText, index)
+        Microsoft.FSharp.Compiler.Lexhelp.Keywords.QuoteIdentifierIfNeeded result
+
+    override decl.IsCommitChar(commitCharacter) =
+        // Usual language identifier rules...
+        not (Char.IsLetterOrDigit(commitCharacter) || commitCharacter = '_')
+        
+    // A helper to aid in determining how much text is relevant to the items chosen in the completion list.
+    override decl.Reason = reason
+        
+    // Note, there is no real reason for this code to use byrefs, except that we're calling it from C#.
+    override decl.GetBestMatch(filterText, textSoFar, index : int byref, uniqueMatch : bool byref, shouldSelectItem : bool byref) =
+        let decls = trimmedDeclarations filterText
+        let compareStrings(s,t,l,b : bool) = System.String.Compare(s,0,t,0,l,b)
+        let tryFindDeclIndex text length ignoreCase = 
+            decls 
+            |> Array.tryFindIndex (fun d -> compareStrings(d.Name, text, length, ignoreCase) = 0)
+        // The best match is the first item that begins with the longest prefix of the 
+        // given word (value).  
+        let rec findMatchOfLength len ignoreCase = 
+            if len = 0 then
+                let indexLastBestMatch = tryFindDeclIndex lastBestMatch lastBestMatch.Length ignoreCase
+                match indexLastBestMatch with
+                | Some index -> (index, false, false)
+                | None -> (0,false, false)
+            else 
+                let firstMatchingLenChars = tryFindDeclIndex textSoFar len ignoreCase
+                match firstMatchingLenChars with
+                | Some index -> 
+                    lastBestMatch <- decls.[index].Name
+                    let select = len = textSoFar.Length
+                    if (index <> decls.Length- 1) && (compareStrings(decls.[index+1].Name , textSoFar, len, ignoreCase) = 0) 
+                    then (index, false, select)
+                    else (index, select, select)
+                | None -> 
+                    match ignoreCase with
+                    | false -> findMatchOfLength len true
+                    | true -> findMatchOfLength (len-1) false
+        let (i, u, p) = findMatchOfLength textSoFar.Length false
+        index <- i
+        uniqueMatch <- u
+        let preselect =
+            // select an item in the list if what the user has typed is a prefix...
+            p || (
+                // ... or if the list has filtered down to a single item, and the user's text is still a 'match'
+                // for example, "System.Console.WrL" will filter down to one, and still be a match, whereas
+                // "System.Console.WrLx" will filter down to one, but no longer be a match
+                decls.Length = 1 &&
+                AbstractPatternMatcher.Singleton.MatchSingleWordPattern(decls.[0].Name, textSoFar)<>null
+            )
+        shouldSelectItem <- preselect
+
+    // This method is called after the string has been committed to the source buffer.
+    //
+    // Note: this override is a bit out of place as nothing in this type has anything to do with text buffers.
+    override decl.OnAutoComplete(_textView, _committedText, _commitCharacter, _index) =
+        // Would need special handling code for snippets.
+        '\000'
+
+
+                   
+/// Implements the remainder of the IntellisenseInfo base type from MPF.
+/// 
+/// The scope object is the result of computing a particular typecheck. It may be queried for things like
+/// data tip text, member completion and so forth.
+type internal FSharpIntellisenseInfo 
+                    (/// The recent result of parsing
+                     untypedResults: FSharpParseFileResults,
+                     /// Line/column/snapshot of BackgroundRequest that initiated creation of this scope
+                     brLine:int, brCol:int, brSnapshot:ITextSnapshot,
+                     /// The possibly staler result of typechecking
+                     typedResults: FSharpCheckFileResults,
+                     /// The project
+                     projectSite: IProjectSite,
+                     /// The text view
+                     view: IVsTextView,
+                     /// The colorizer for this view (though why do we need to be lazy about creating this?)
+                     colorizer: Lazy,
+                     /// A service that will provide Xml Content
+                     documentationBuilder : IDocumentationBuilder,
+                     provideMethodList : bool
+                     ) = 
+        inherit IntellisenseInfo() 
+
+        // go ahead and compute this now, on this background thread, so will have info ready when UI thread asks
+        let noteworthyParamInfoLocations = untypedResults.FindNoteworthyParamInfoLocations(Range.Pos.fromZ brLine brCol)
+
+        let methodList = 
+          if provideMethodList then 
+            try
+                // we need some typecheck info, even if stale, in order to look up e.g. method overload types/xmldocs
+                if typedResults.HasFullTypeCheckInfo then 
+
+                    // we need recent parse info to e.g. know how many commas and thus how many args there are
+                    match noteworthyParamInfoLocations with
+                    | Some nwpl -> 
+                        // Note: this may alternatively workaround some parts of 90778 - the real fix for that is to have before-overload-resolution name-sink work correctly.
+                        // However it also deals with stale typecheck info that may not have recorded name resolutions for a recently-typed long-id.
+                        let names = Some nwpl.LongId
+                        // "names" is a long-id that we can fallback-lookup in the local environment if captured name resolutions finds nothing at the location.
+                        // This can happen e.g. if you are typing quickly and the typecheck results are stale enough that you don't have a captured resolution for
+                        // the name you just typed, but fresh enough that you do have the right name-resolution-environment to look up the name.
+                        let lidEndLine,lidEndCol = Pos.toZ nwpl.LongIdEndLocation 
+                        let methods = typedResults.GetMethodsAlternate(Range.Line.fromZ lidEndLine, lidEndCol, "", names)  |> Async.RunSynchronously
+                        
+                        // If the name is an operator ending with ">" then it is a mistake 
+                        // we can't tell whether "  >(" is a generic method call or an operator use 
+                        // (it depends on the previous line), so we fitler it
+                        //
+                        // Note: this test isn't particularly elegant - encoded operator name would be something like "( ...> )"                        
+                        if (methods.Methods.Length = 0 || methods.MethodName.EndsWith("> )")) then
+                            None
+                        else                    
+                            // "methods" contains both real methods for this longId, as well as static-parameters in the case of type providers.
+                            // They "conflict" for cases of TP(...) (calling a constructor, no static args provided) versus TP<...> (static args), since
+                            // both point to the same longId.  However we can look at the character at the 'OpenParen' location and see if it is a '(' or a '<' and then
+                            // filter the "methods" list accordingly.
+                            let isThisAStaticArgumentsTip =
+                                let parenLine, parenCol = Pos.toZ nwpl.OpenParenLocation 
+                                let textAtOpenParenLocation =
+                                    if brSnapshot=null then
+                                        // we are unit testing, use the view
+                                        let _hr, buf = view.GetBuffer()
+                                        let _hr, s = buf.GetLineText(parenLine, parenCol, parenLine, parenCol+1)  
+                                        s
+                                    else
+                                        // we are in the product, use the ITextSnapshot
+                                        brSnapshot.GetText(MakeSpan(brSnapshot, parenLine, parenCol, parenLine, parenCol+1))
+                                if textAtOpenParenLocation = "<" then
+                                    true
+                                else
+                                    false  // note: textAtOpenParenLocation is not necessarily otherwise "(", for example in "sin 42.0" it is "4"
+                            let filteredMethods =
+                                [| for m in methods.Methods do 
+                                        if m.IsStaticArguments = isThisAStaticArgumentsTip then   // need to distinguish TP<...>(...)  angle brackets tip from parens tip
+                                            yield m |]
+                            if filteredMethods.Length <> 0 then
+                                Some (FSharpMethodListForAMethodTip(documentationBuilder, methods.MethodName, filteredMethods, nwpl, brSnapshot, isThisAStaticArgumentsTip) :> MethodListForAMethodTip)
+                            else
+                                None
+                    | _ -> 
+                        None
+                else
+                    // GetMethodListForAMethodTip found no TypeCheckInfo in ParseResult.
+                    None
+            with e-> 
+                Assert.Exception(e)
+                reraise()
+          else None
+
+        let hasTextChangedSinceLastTypecheck (curTextSnapshot: ITextSnapshot, oldTextSnapshot: ITextSnapshot, ((sl:int,sc:int),(el:int,ec:int))) = 
+            // compare the text from (sl,sc) to (el,ec) to see if it changed from the old snapshot to the current one
+            // (sl,sc)-(el,ec) are line/col positions in the current snapshot
+            if el >= oldTextSnapshot.LineCount then
+                true  // old did not even have 'el' many lines, note 'el' is zero-based
+            else
+                assert(el < curTextSnapshot.LineCount)
+                let oldFirstLine = oldTextSnapshot.GetLineFromLineNumber sl  
+                let oldLastLine = oldTextSnapshot.GetLineFromLineNumber el
+                if oldFirstLine.Length < sc || oldLastLine.Length < ec then
+                    true  // one of old lines was not even long enough to contain the position we're looking at
+                else
+                    let posOfStartInOld = oldFirstLine.Start.Position + sc
+                    let posOfEndInOld = oldLastLine.Start.Position + ec
+                    let curFirstLine = curTextSnapshot.GetLineFromLineNumber sl  
+                    let curLastLine = curTextSnapshot.GetLineFromLineNumber el  
+                    assert(curFirstLine.Length >= sc)
+                    assert(curLastLine.Length >= ec)
+                    let posOfStartInCur = curFirstLine.Start.Position + sc
+                    let posOfEndInCur = curLastLine.Start.Position + ec
+                    if posOfEndInCur - posOfStartInCur <> posOfEndInOld - posOfStartInOld then
+                        true  // length of text between two endpoints changed
+                    else
+                        let mutable oldPos = posOfStartInOld
+                        let mutable curPos = posOfStartInCur
+                        let mutable ok = true
+                        while ok && oldPos < posOfEndInOld do
+                            let oldChar = oldTextSnapshot.[oldPos]
+                            let curChar = curTextSnapshot.[curPos]
+                            if oldChar <> curChar then
+                                ok <- false
+                            oldPos <- oldPos + 1
+                            curPos <- curPos + 1
+                        not ok
+
+        /// Implements the corresponding abstract member from IntellisenseInfo in MPF.
+        override scope.GetDataTipText(line, col) =
+            // in cases like 'A' when cursor in on '<' there is an ambiguity that cannot be resolved based only on lexer information
+            // '<' can be treated both as operator and as part of identifier
+            // in this case we'll do 2 passes:
+            // 1. treatTokenAsIdentifier=false - we'll pick raw token under the cursor and try find it among resolved names, is attempt was successful - great we are done, otherwise
+            // 2. treatTokenAsIdentifier=true - even if raw token was recognized as operator we'll use different branch 
+            // that calls QuickParse.GetCompleteIdentifierIsland and then tries previous column...
+            let rec getDataTip alwaysTreatTokenAsIdentifier =
+                let token = colorizer.Value.GetTokenInfoAt(VsTextLines.TextColorState (VsTextView.Buffer view),line,col)
+
+                try
+                    let lineText = VsTextLines.LineText (VsTextView.Buffer view) line
+                    
+                    // Try the actual column first...
+                    let tokenTag, col, possibleIdentifier, makeSecondAttempt =
+                      if token.Type = TokenType.Operator && not alwaysTreatTokenAsIdentifier then                      
+                          let tag, startCol, endCol = OperatorToken.asIdentifier token                      
+                          let op = lineText.Substring(startCol, endCol - startCol)
+                          tag, startCol, Some(op, endCol, false), true
+                      else
+                          match (QuickParse.GetCompleteIdentifierIsland false lineText col) with
+                          | None when col > 0 -> 
+                              // Try the previous column & get the token info for it
+                              let tokenTag = 
+                                  let token = colorizer.Value.GetTokenInfoAt(VsTextLines.TextColorState (VsTextView.Buffer view),line,col - 1)
+                                  token.Token 
+                              let possibleIdentifier = QuickParse.GetCompleteIdentifierIsland false lineText (col - 1)
+                              tokenTag, col - 1, possibleIdentifier, false
+                          | _ as poss -> token.Token, col, poss, false
+
+                    let diagnosticTipSpan = TextSpan(iStartLine=line, iEndLine=line, iStartIndex=col, iEndIndex=col+1)
+                    match possibleIdentifier with 
+                    | None -> "",diagnosticTipSpan
+                    | Some (s,colAtEndOfNames, isQuotedIdentifier) -> 
+
+                        if typedResults.HasFullTypeCheckInfo then 
+                            let qualId  = PrettyNaming.GetLongNameFromString s
+                                                
+                            // Correct the identifier (e.g. to correctly handle active pattern names that end with "BAR" token)
+                            let tokenTag = QuickParse.CorrectIdentifierToken s tokenTag
+                            let dataTip = typedResults.GetToolTipTextAlternate(Range.Line.fromZ line, colAtEndOfNames, lineText, qualId, tokenTag) |> Async.RunSynchronously
+
+                            match dataTip with
+                            | FSharpToolTipText.FSharpToolTipText [] when makeSecondAttempt -> getDataTip true
+                            | _ -> 
+                                let dataTipText =  XmlDocumentation.BuildDataTipText(documentationBuilder, dataTip)
+
+                                // The data tip is located w.r.t. the start of the last identifier
+                                let sizeFixup = if isQuotedIdentifier then 4 else 0
+                                let lastStringLength = (qualId |> List.rev |> List.head).Length  + sizeFixup
+
+                                // This is the span of text over which the data tip is active. If the mouse moves away from it then the
+                                // data tip goes away
+                                let dataTipSpan = TextSpan(iStartLine=line, iEndLine=line, iStartIndex=max 0 (colAtEndOfNames-lastStringLength), iEndIndex=colAtEndOfNames)
+                                (dataTipText, dataTipSpan)                                
+                        else
+                            "Bug: TypeCheckInfo option was None", diagnosticTipSpan
+                with e -> 
+                    Assert.Exception(e)
+                    reraise()
+
+            getDataTip false
+            
+
+        /// Determine whether to force the use a synchronous parse 
+        static member IsReasonRequiringSyncParse(reason) =
+            match reason with
+            | BackgroundRequestReason.MethodTip // param info...
+            | BackgroundRequestReason.MatchBracesAndMethodTip // param info...
+            | BackgroundRequestReason.CompleteWord | BackgroundRequestReason.MemberSelect | BackgroundRequestReason.DisplayMemberList // and intellisense-completion...
+                -> true // ...require a sync parse (so as to call FindNoteworthyParamInfoLocations and GetRangeOfExprLeftOfDot, respectively)
+            | _ -> false
+
+        /// Implements the corresponding abstract member from IntellisenseInfo in MPF.
+        override scope.GetDeclarations(textSnapshot, line, col, reason) =
+            assert(FSharpIntellisenseInfo.IsReasonRequiringSyncParse(reason))
+            async {
+                try
+                    let isInCommentOrString =
+                        let tokenInfo = colorizer.Value.GetTokenInfoAt(VsTextLines.TextColorState (VsTextView.Buffer view),line,col)
+                        let prevCol = max 0 (col - 1)
+                        let prevTokenInfo = colorizer.Value.GetTokenInfoAt(VsTextLines.TextColorState (VsTextView.Buffer view),line,prevCol)
+                        // denotes if we got token that matches exact specified position or it was just last token before EOF
+                        let exactMatch = col >= tokenInfo.StartIndex && col <= tokenInfo.EndIndex
+                        exactMatch && ((tokenInfo.Color = TokenColor.Comment && prevTokenInfo.Color = TokenColor.Comment) || 
+                                       (tokenInfo.Color = TokenColor.String  && prevTokenInfo.Color = TokenColor.String))
+                    if isInCommentOrString then
+                        // We don't want to show info in comments & strings (in case of exact match)
+                        // (but we want to show it if the thing before or after isn't comment/string)
+                        return null 
+                    
+                    elif typedResults.HasFullTypeCheckInfo then 
+                        let lineText = VsTextLines.LineText (VsTextView.Buffer view) line
+                        let colorState = VsTextLines.TextColorState (VsTextView.Buffer view)
+                        let state = VsTextColorState.GetColorStateAtStartOfLine colorState line
+                        let tokens = colorizer.Value.GetFullLineInfo(lineText, state)
+                        // An ugly check to suppress declaration lists at 'System.Int32.'
+                        if reason = BackgroundRequestReason.MemberSelect && col > 1 && lineText.[col-2]='.' then
+                            //           System.Int32..Parse("42")
+                            // just pressed dot here  ^
+                            // don't want any completion for that, we only trigger a MemberSelect on the ".." token in order to be able to get completion
+                            //           System.Int32..Parse("42")
+                            //                 here  ^
+                            return null
+                        // An ugly check to suppress declaration lists at 'member' declarations
+                        elif QuickParse.TestMemberOrOverrideDeclaration tokens then  
+                            return null
+                        else
+                            let untypedParseInfoOpt =
+                                if reason = BackgroundRequestReason.MemberSelect || reason = BackgroundRequestReason.DisplayMemberList || reason = BackgroundRequestReason.CompleteWord then
+                                    Some untypedResults
+                                else
+                                    None
+                            // TODO don't use QuickParse below, we have parse info available
+                            let plid = QuickParse.GetPartialLongNameEx(lineText, col-1) 
+                            ignore plid // for breakpoint
+
+                            let detectTextChange (oldTextSnapshotInfo: obj, range) = 
+                                let oldTextSnapshot = oldTextSnapshotInfo :?> ITextSnapshot
+                                hasTextChangedSinceLastTypecheck (textSnapshot, oldTextSnapshot, Range.Range.toZ range)
+
+                            let! decls = typedResults.GetDeclarationListInfo(untypedParseInfoOpt, Range.Line.fromZ line, col, lineText, fst plid, snd plid, detectTextChange) 
+                            return (new FSharpDeclarations(documentationBuilder, decls.Items, reason) :> Declarations) 
+                    else
+                        // no TypeCheckInfo in ParseResult.
+                        return null 
+                with e-> 
+                    Assert.Exception(e)
+                    raise e
+                    return null
+            }
+
+        /// Get methods for parameter info
+        override scope.GetMethodListForAMethodTip() = methodList
+
+        override this.GetF1KeywordString(span : TextSpan, context : IVsUserContext) : unit =
+            let shouldTryToFindIdentToTheLeft (token : FSharpTokenInfo) =
+                match token.CharClass with
+                | FSharpTokenCharKind.WhiteSpace -> true
+                | FSharpTokenCharKind.Delimiter -> true
+                | _ -> false
+
+            let keyword =
+                let line = span.iStartLine
+                let lineText = VsTextLines.LineText (VsTextView.Buffer view) line                       
+                let tokenInformation, col =
+                    let col = 
+                        if span.iStartIndex = lineText.Length && span.iStartIndex > 0 then
+                            // if we are at the end of the line, we always step back one character
+                            span.iStartIndex - 1
+                        else
+                            span.iStartIndex
+                    let textColorState = VsTextLines.TextColorState (VsTextView.Buffer view)
+                    match colorizer.Value.GetTokenInformationAt(textColorState,line,col) with
+                    | Some token as original when col > 0 && shouldTryToFindIdentToTheLeft token ->
+                        // try to step back one char
+                        match colorizer.Value.GetTokenInformationAt(textColorState,line,col-1) with
+                        | Some token as newInfo when token.CharClass <> FSharpTokenCharKind.WhiteSpace -> newInfo, col - 1
+                        |   _ -> original, col
+                    | otherwise -> otherwise, col
+
+                match tokenInformation with
+                |   None -> None
+                |   Some token ->
+                        match token.CharClass, token.ColorClass with
+                        |   FSharpTokenCharKind.Keyword, _
+                        |   FSharpTokenCharKind.Operator, _ 
+                        |   _, FSharpTokenColorKind.PreprocessorKeyword ->
+                                lineText.Substring(token.LeftColumn, token.RightColumn - token.LeftColumn + 1) + "_FS" |> Some
+                                
+                        |   (FSharpTokenCharKind.Comment|FSharpTokenCharKind.LineComment), _ -> Some "comment_FS"
+                                
+                        |   FSharpTokenCharKind.Identifier, _ ->            
+                                try
+                                    let lineText = VsTextLines.LineText (VsTextView.Buffer view) line
+                                    let possibleIdentifier = QuickParse.GetCompleteIdentifierIsland false lineText col
+                                    match possibleIdentifier with
+                                    |   None -> None // no help keyword
+                                    |   Some(s,colAtEndOfNames, _) ->
+                                            if typedResults.HasFullTypeCheckInfo then 
+                                                let qualId = PrettyNaming.GetLongNameFromString s
+                                                match typedResults.GetF1KeywordAlternate(Range.Line.fromZ line,colAtEndOfNames, lineText, qualId) |> Async.RunSynchronously with
+                                                | Some s -> Some s
+                                                | None -> None 
+                                            else None                           
+                                with e ->
+                                    Assert.Exception (e)
+                                    reraise()
+                        | _ -> None
+            match keyword with
+            |   Some f1Keyword ->
+                    context.AddAttribute(VSUSERCONTEXTATTRIBUTEUSAGE.VSUC_Usage_Filter, "devlang", "fsharp") |> ignore
+                    // TargetFrameworkMoniker is not set for files that are not part of project (scripts and orphan fs files)
+                    if not (String.IsNullOrEmpty projectSite.TargetFrameworkMoniker) then
+                        context.AddAttribute(VSUSERCONTEXTATTRIBUTEUSAGE.VSUC_Usage_Filter, "TargetFrameworkMoniker", projectSite.TargetFrameworkMoniker) |> ignore
+                    context.AddAttribute(VSUSERCONTEXTATTRIBUTEUSAGE.VSUC_Usage_LookupF1_CaseSensitive, "keyword", f1Keyword) |> ignore
+                    ()
+            |   None -> ()
+
+          
+        // for tests
+        member this.GotoDefinition (textView, line, column) =
+            GotoDefinition.GotoDefinition (colorizer.Value, typedResults, textView, line, column)
+
+        override this.Goto (textView, line, column) =
+            GotoDefinition.GotoDefinition (colorizer.Value, typedResults, textView, line, column)
+
+        // This is called on the UI thread after fresh full typecheck results are available
+        member this.OnParseFileOrCheckFileComplete(source: IFSharpSource) =
+            for line in colorizer.Value.SetExtraColorizations(typedResults.GetExtraColorizationsAlternate()) do
+                source.RecolorizeLine line
+
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/InternalsVisibleTo.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/InternalsVisibleTo.fs
index 04325c51878..6d08cd63f7e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/InternalsVisibleTo.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/InternalsVisibleTo.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp
 open System.Reflection
@@ -10,8 +10,8 @@ open System.Reflection
 []
 []
 []
-[]
-[]
+[]
+[]
 []
 []
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Keyboard.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Keyboard.fs
deleted file mode 100644
index 33b0a7202eb..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Keyboard.fs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService
-
-open System.Runtime.InteropServices
-
-/// Keyboard functions
-module internal Keyboard =
-
-    /// Determine the state of a particular key on the keyboard.
-    /// See Win32 API
-    []   
-    let private GetKeyState(_key:int) : int16 = failwith ""
-    
-    /// Well-known keys
-    type Keys = Shift = 16 | Whatever = 0 // VK_SHIFT
-
-    /// Private hook vector for key state.
-    let mutable private GetKeyStateHook = (fun (key:Keys)->GetKeyState(int32 key))
-    
-    /// Hook the key press handler
-    let HookGetKeyState hook = 
-        let orig = GetKeyStateHook
-        GetKeyStateHook<-hook
-        orig
-
-    /// Determine whether a key is pressed.
-    let IsKeyPressed key = (GetKeyStateHook key) < 0s
-    
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/NavigationBar.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/NavigationBar.fs
new file mode 100644
index 00000000000..01f51557f3d
--- /dev/null
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/NavigationBar.fs
@@ -0,0 +1,232 @@
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+namespace Microsoft.VisualStudio.FSharp.LanguageService
+
+open System
+open System.IO
+open System.Collections.Generic
+open System.Collections
+open System.Configuration
+open System.Diagnostics
+open System.Globalization
+open Microsoft.VisualStudio
+open Microsoft.VisualStudio.Shell
+open Microsoft.VisualStudio.Shell.Interop 
+open Microsoft.VisualStudio.TextManager.Interop 
+open Microsoft.VisualStudio.Text
+open Microsoft.VisualStudio.OLE.Interop
+open Microsoft.FSharp.Compiler.SourceCodeServices
+
+
+/// The extract of information from the parsed AST related to navigation bars and regions.
+///
+///    -- Each time we get a new FSharpParseFileResults, we create a new FSharpNavigationAndRegionInfo that "folds in" the
+///       new region information while keeping the same unique identifiers for the regions in the text
+///
+///    -- The navigation items in the object are computed lazily 
+    
+type internal FSharpNavigationAndRegionInfo(parseResults:FSharpParseFileResults, prevRegions: Map, regionGenerator: unit -> uint32) =
+        
+    // Do we need to update the list?
+    let mutable navigationItems : FSharpNavigationItems option = None
+    let mutable displayedRegions = prevRegions
+
+    // Utilities
+    let copyTo (target:ArrayList) arr selector =
+        target.Clear()
+        for m in arr do 
+            let (m:FSharpNavigationDeclarationItem) = selector m
+            let memb = new DropDownMember(m.Name, TextSpanOfRange m.Range, m.Glyph, DROPDOWNFONTATTR.FONTATTR_PLAIN)
+            target.Add(memb) |> ignore
+
+    let findDeclaration (declarations:'a[]) allowEqualEndLine (selector:'a -> FSharpNavigationDeclarationItem) line _col = 
+        let _, sel, _ = 
+            declarations
+            |> Array.fold (fun (n, idx, size) decl -> 
+                // TODO this looks like an algorithm that was ad-hoc'd to deal with bad ranges from the interactiveChecker, maybe can be simplified now
+                let r1 = (selector decl).Range // 1-base line numbers
+                let sl = r1.StartLine 
+                let el = r1.EndLine
+                if ((line >= sl) && (line < el || (allowEqualEndLine && el = line))) && (el - sl) < size then
+                    (n+1, n, el - sl) 
+                else 
+                    (n+1, idx, size)                    
+            ) (0, -1, Int32.MaxValue)
+                
+        if sel<> -1 then sel else
+            let mutable lastBefore = -1
+            let mutable lastLine = -1
+            for i in 0 .. declarations.Length - 1 do
+                let decl = declarations.[i]
+                let r1 = (selector decl).Range // 1-base line numbers
+                let el = r1.EndLine
+                if el < line && el > lastLine then 
+                    lastBefore <- i
+                    lastLine <- el
+            if (lastBefore = -1 && declarations.Length > 0) 
+            then 0 else lastBefore 
+        
+    let ensureNavigationItemsUpToDate() =
+        if navigationItems.IsNone then
+            navigationItems <- Some(parseResults.GetNavigationItems())
+        
+    member this.FileName  = parseResults.FileName
+    member this.Regions = displayedRegions
+    member this.RegionGenerator = regionGenerator
+        
+    static member WithNewParseInfo(parseResults:FSharpParseFileResults, prev:FSharpNavigationAndRegionInfo option) =
+            match prev with
+            | Some(prev) -> 
+                let regs = 
+                    if (prev.FileName = parseResults.FileName) then 
+                        prev.Regions 
+                    else 
+                        Map.empty 
+                new FSharpNavigationAndRegionInfo(parseResults, regs, prev.RegionGenerator)
+            | None -> 
+                let generator = 
+                  let count = ref 0u
+                  (fun () -> count := !count + 1u; !count) // unchecked? overflow?
+                new FSharpNavigationAndRegionInfo(parseResults, Map.empty, generator)
+                
+        // Synchronize...
+    member this.SynchronizeNavigationDropDown(file, line, col:int, dropDownTypes:ArrayList, dropDownMembers:ArrayList, selectedType:int byref, selectedMember:int byref) =    
+            
+            try
+                let current = parseResults.FileName
+                
+                if file <> current then
+                    dropDownTypes.Clear()
+                    dropDownTypes.Add(new DropDownMember("(Parsing project files)", new TextSpan(), -1, DROPDOWNFONTATTR.FONTATTR_GRAY)) |> ignore
+                    dropDownMembers.Clear()
+                    selectedType <- 0
+                    selectedMember <- -1
+                    true
+                else
+                    ensureNavigationItemsUpToDate () 
+                    
+                    // Test whether things have changed so that we don't update the dropdown every time
+                    copyTo dropDownTypes navigationItems.Value.Declarations (fun decl -> decl.Declaration)    
+                    let line = line + 1
+                    let selLeft = findDeclaration navigationItems.Value.Declarations true (fun decl -> decl.Declaration) line col
+                    selectedType <- selLeft
+                    match selLeft with 
+                    | n when n >= 0 -> 
+                        copyTo dropDownMembers (navigationItems.Value.Declarations.[n].Nested) id
+                        selectedMember <- findDeclaration navigationItems.Value.Declarations.[n].Nested true id line col
+                    | _ -> 
+                        selectedMember <- -1
+                    true
+            with e-> 
+                Assert.Exception(e)
+                reraise()        
+
+
+    member x.GetHiddenRegions(file) =
+            ensureNavigationItemsUpToDate()
+            let current = parseResults.FileName
+            match navigationItems with 
+            | Some(res) when file = current ->
+                res.Declarations 
+                  |> Array.filter(fun decl -> not(decl.Declaration.IsSingleTopLevel))
+                  |> Array.fold (fun (toCreate, toUpdate:Map<_,_>) decl ->
+                    let declKey = decl.Declaration.UniqueName
+                    let context = TextSpanOfRange decl.Declaration.BodyRange
+                    match (Map.tryFind declKey displayedRegions) with
+                    | Some(uniqueId) ->
+                        // do not add if the region hasn't changed
+                        (toCreate, toUpdate.Add(uniqueId, context))
+                    | None ->
+                        let id = regionGenerator()
+                        let reg = 
+                          new NewHiddenRegion
+                            (iType = int HIDDEN_REGION_TYPE.hrtCollapsible, dwBehavior = uint32 HIDDEN_REGION_BEHAVIOR.hrbClientControlled,
+                             dwState = uint32 HIDDEN_REGION_STATE.hrsExpanded, tsHiddenText = context, pszBanner = null, dwClient = id)
+                        displayedRegions <- displayedRegions.Add(declKey, id)
+                        (reg::toCreate, toUpdate)
+                        ) ([], Map.empty)
+            | _ -> 
+                displayedRegions <- Map.empty
+                [], Map.empty
+        
+    member x.ClearDisplayedRegions() =
+            displayedRegions <- Map.empty
+            
+                   
+    member x.UpdateHiddenRegions(source:ISource,textView) =
+
+        let toCreate, toUpdate = x.GetHiddenRegions(FilePathUtilities.GetFilePath(VsTextView.Buffer textView))
+        if not (toCreate = [] && toUpdate = Map.empty) then
+            // Compare the existing regions with the new regions and 
+            // remove any that do not match the new regions.
+            let session = source.GetHiddenTextSession()
+            let (aregion:IVsHiddenRegion[]) = Array.zeroCreate(1)
+            
+            // Get current regions from Visual Studio        
+            let ppenum = Com.ThrowOnFailure1(session.EnumHiddenRegions(uint32 FIND_HIDDEN_REGION_FLAGS.FHR_ALL_REGIONS, 0u, Array.zeroCreate(1)))
+            let regions = 
+              seq { let fetched = ref 0u
+                    while (ppenum.Next(1u, aregion, fetched) = VSConstants.S_OK && !fetched = 1u) do
+                      yield aregion.[0] }
+            
+            for reg in regions do
+                let unique = Com.ThrowOnFailure1(reg.GetClientData())
+                match toUpdate.TryFind(unique) with
+                | Some(span) -> reg.SetSpan( [| span |]) |> Com.ThrowOnFailure0
+                | _ -> reg.Invalidate(uint32 CHANGE_HIDDEN_REGION_FLAGS.chrNonUndoable) |> Com.ThrowOnFailure0
+                    
+            // TODO: this is what MPF comment says...
+            //    For very large documents this can take a while, so add them in chunks of 
+            //    1000 and stop after 5 seconds. 
+            
+            if (toCreate.Length > 0) then
+                let arr = toCreate |> Array.ofList
+                let mutable (outEnum:IVsEnumHiddenRegions[]) = Array.zeroCreate(arr.Length)
+                session.AddHiddenRegions(uint32 CHANGE_HIDDEN_REGION_FLAGS.chrNonUndoable, arr.Length, arr, outEnum) |> Com.ThrowOnFailure0
+        
+
+/// Implements the remainder of the logic from the MPF class TypeAndMemberDropdownBars
+/// by forwarding requests for navigation info to the current FSharpNavigationAndRegionInfo.
+type internal FSharpNavigationBars(svc:LanguageService, stateFunc:unit -> FSharpNavigationAndRegionInfo option) = 
+    inherit TypeAndMemberDropdownBars(svc)        
+
+    override x.OnSynchronizeDropdowns(_, textView, line, col, dropDownTypes, dropDownMembers, selectedType:int byref, selectedMember:int byref) =
+            match stateFunc() with
+            | Some scope -> 
+                let file = FilePathUtilities.GetFilePath(VsTextView.Buffer textView)
+                scope.SynchronizeNavigationDropDown(file, line, col, dropDownTypes, dropDownMembers, &selectedType, &selectedMember)
+            | _ -> 
+                dropDownTypes.Clear()
+                dropDownTypes.Add(new DropDownMember("(Parsing project files)", new TextSpan(), -1, DROPDOWNFONTATTR.FONTATTR_GRAY)) |> ignore
+                dropDownMembers.Clear()
+                selectedType <- 0
+                selectedMember <- -1
+                true
+
+/// Determines whether the navigation bar and regions are active features.
+type internal FSharpNavigationController() =
+
+    // App.config keys for determining whether not-shipping features are turned on or off
+    // Edit devenv.exe.config and place these at the end.
+    //   
+    //      
+    //      
+    //      
+    //   
+    let enableNavBarKey = "fsharp-navigationbar-enabled"
+    let enableRegionsKey = "fsharp-regions-enabled"
+
+    // In case the config file is incorrect, we silently recover and disable the feature
+    member val EnableRegions = 
+        try "true" = System.Configuration.ConfigurationManager.AppSettings.[enableRegionsKey]
+        with e ->  
+            Debug.Assert (false, sprintf "Error while loading 'devenv.exe.config' configuration: %A" e)
+            false
+        
+    // In case the config file is incorrect, we silently recover and disable the feature
+    member val EnableNavBar = 
+        try "true" = ConfigurationManager.AppSettings.[enableNavBarKey]
+        with e -> 
+            Debug.Assert (false, sprintf "Error while loading 'devenv.exe.config' configuration: %A" e)
+            false
+            
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Project.fsi b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Project.fsi
deleted file mode 100644
index ec71681f495..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Project.fsi
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.FSharp.Compiler.SourceCodeServices
-open Microsoft.VisualStudio.TextManager.Interop
-open Microsoft.VisualStudio.Shell.Interop
-
-module internal ProjectSiteOptions = 
-    val Create : IProjectSite*string -> CheckOptions
-    val ToProjectSite : filename : string * CheckOptions -> IProjectSite
-    
-[]
-type internal Artifacts = 
-    new : adviseProjectSiteChanges: unit -> Artifacts        
-    member SetSource : buffer:IVsTextLines * source:IdealSource -> unit
-    member UnsetSource : buffer:IVsTextLines -> unit
-    member TryGetProjectSite : hierarchy:IVsHierarchy -> IProjectSite option
-    member TryFindOwningProject : rdt:IVsRunningDocumentTable * filename:string -> IProjectSite option
-    /// Find the project that "owns" this filename.  That is,
-    ///  - if the file is associated with an F# IVsHierarchy in the RDT, and
-    ///  - the .fsproj has this file in its list of  items,
-    /// then the project is considered the 'owner'.  Otherwise a 'single file project' is returned. 
-    member FindOwningProject : rdt:IVsRunningDocumentTable * filename:string * enableStandaloneFileIntellisense:bool -> IProjectSite
-    member GetSourceOfFilename : rdt:IVsRunningDocumentTable * filename:string -> IdealSource option // REVIEW: Should be TryGetSourceOfFilename
-    member GetDefinesForFile : rdt:IVsRunningDocumentTable * filename:string * enableStandaloneFileIntellisense:bool-> string list
-    
-    
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Project.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/ProjectSitesAndFiles.fs
similarity index 53%
rename from vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Project.fs
rename to vsintegration/src/vs/FsPkgs/FSharp.LanguageService/ProjectSitesAndFiles.fs
index 79552d9d509..8441e4e57b5 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Project.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/ProjectSitesAndFiles.fs
@@ -1,106 +1,92 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 (* Project handling. *)
 namespace Microsoft.VisualStudio.FSharp.LanguageService
+
+open System
+open System.IO
+open System.Diagnostics
+open System.Runtime.InteropServices
 open Microsoft.VisualStudio
 open Microsoft.VisualStudio.TextManager.Interop
-open Microsoft.VisualStudio.Shell
 open Microsoft.VisualStudio.Shell.Interop
-open Microsoft.VisualStudio.FSharp.LanguageService
 open Microsoft.FSharp.Compiler.SourceCodeServices
-open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
-open Internal.Utilities.Collections
-open Internal.Utilities.Debug
-open System
-open System.IO
-open System.Diagnostics
-open System.Collections.Generic
 
-module internal ProjectSiteOptions =    
+/// An additional interface that an IProjectSite object can implement to indicate it has an FSharpProjectOptions 
+/// already available, so we don't have to recreate it
+type private IHaveCheckOptions = 
+    abstract OriginalCheckOptions : unit -> FSharpProjectOptions
 
-    /// Roundtrip CheckOptions when we know them so we don't have to recreate.
-    type IHaveCheckOptions = 
-        abstract OriginalCheckOptions : unit -> CheckOptions
-        
-    /// Create project options for this project site.
-    let Create(projectSite:IProjectSite,filename)= 
-        use t = Trace.Call("ProjectSite","ProjectSiteOptions::Create", fun _->sprintf " projectSite=%s flags=%A" (projectSite.DescriptionOfProject()) (projectSite.CompilerFlags()))
+[]
+type internal IProvideProjectSite =
+    abstract GetProjectSite : unit -> IProjectSite
         
-        match projectSite with
-        | :? IHaveCheckOptions as hco -> hco.OriginalCheckOptions()
-        | _ -> 
-            {ProjectFileName = projectSite.ProjectFileName()
-             ProjectFileNames = projectSite.SourceFilesOnDisk()
-             ProjectOptions = projectSite.CompilerFlags()
-             IsIncompleteTypeCheckEnvironment = not (projectSite.IsTypeResolutionValid)
-             UseScriptResolutionRules = SourceFile.MustBeSingleFileProject(filename)
-             LoadTime = projectSite.LoadTime
-             UnresolvedReferences = None }      
-         
-    /// Convert from CheckOptions into IProjectSite.         
-    let ToProjectSite(filename:string, checkOptions : CheckOptions)= 
-        { new IProjectSite with
-            override this.SourceFilesOnDisk() = checkOptions.ProjectFileNames
-            override this.DescriptionOfProject() = sprintf "Script Closure at Root %s" filename
-            override this.CompilerFlags() = checkOptions.ProjectOptions
-            override this.ProjectFileName() = checkOptions.ProjectFileName
-            override this.ErrorListTaskProvider() = None
-            override this.ErrorListTaskReporter() = None
-            override this.AdviseProjectSiteChanges(_,_) = ()
-            override this.AdviseProjectSiteCleaned(_,_) = ()
-            override this.IsTypeResolutionValid = not(checkOptions.IsIncompleteTypeCheckEnvironment)
-            override this.TargetFrameworkMoniker = ""
-            override this.LoadTime = checkOptions.LoadTime
-          interface IHaveCheckOptions with
-            override this.OriginalCheckOptions() = checkOptions
-        } 
+/// Convert from FSharpProjectOptions into IProjectSite.         
+type private ProjectSiteOfScriptFile(filename:string, checkOptions : FSharpProjectOptions) = 
+    interface IProjectSite with
+        override this.SourceFilesOnDisk() = checkOptions.ProjectFileNames
+        override this.DescriptionOfProject() = sprintf "Script Closure at Root %s" filename
+        override this.CompilerFlags() = checkOptions.OtherOptions
+        override this.ProjectFileName() = checkOptions.ProjectFileName
+        override this.ErrorListTaskProvider() = None
+        override this.ErrorListTaskReporter() = None
+        override this.AdviseProjectSiteChanges(_,_) = ()
+        override this.AdviseProjectSiteCleaned(_,_) = ()
+        override this.IsIncompleteTypeCheckEnvironment = checkOptions.IsIncompleteTypeCheckEnvironment
+        override this.TargetFrameworkMoniker = ""
+        override this.LoadTime = checkOptions.LoadTime
+
+    interface IHaveCheckOptions with
+        override this.OriginalCheckOptions() = checkOptions
         
         
 /// An orphan file project is a .fs, .ml, .fsi, .mli that is not associated with a .fsproj.
 /// By design, these are never going to typecheck because there is no affiliated references.
 /// We show many squiggles in this case because they're not particularly informational. 
-module OrphanFileProjectSite =         
+type private ProjectSiteOfSingleFile(sourceFile) =         
     // CompilerFlags() gets called a lot, so pre-compute what we can
-    let compilerFlags = 
+    static let compilerFlags = 
         let flags = ["--noframework";"--warn:3"]
         let defaultReferences = CompilerEnvironment.DefaultReferencesForOrphanSources 
                                 |> List.map(fun r->sprintf "-r:%s.dll" r)
         (flags @ defaultReferences) |> List.toArray
-    let public Create(sourceFile,enableStandaloneFileIntellisense) = 
-        let projectFileName = Path.Combine(System.IO.Path.GetDirectoryName(sourceFile),"orphan.fsproj")
-        { new IProjectSite with
-            override this.SourceFilesOnDisk() = [|sourceFile|]
-            override this.DescriptionOfProject() = "Orphan File Project"
-            override this.CompilerFlags() = compilerFlags
-            override this.ProjectFileName() = projectFileName                
-            override this.ErrorListTaskProvider() = None
-            override this.ErrorListTaskReporter() = None
-            override this.AdviseProjectSiteChanges(_,_) = ()
-            override this.AdviseProjectSiteCleaned(_,_) = ()
-            override this.IsTypeResolutionValid = not enableStandaloneFileIntellisense
-            override this.TargetFrameworkMoniker = ""
-            override this.LoadTime = new System.DateTime(2000,1,1)  // any constant time is fine, orphan files do not interact with reloading based on update time
-        }
+
+    let projectFileName = Path.Combine(System.IO.Path.GetDirectoryName(sourceFile),"orphan.fsproj")
+
+    interface IProjectSite with
+        override this.SourceFilesOnDisk() = [|sourceFile|]
+        override this.DescriptionOfProject() = "Orphan File Project"
+        override this.CompilerFlags() = compilerFlags
+        override this.ProjectFileName() = projectFileName                
+        override this.ErrorListTaskProvider() = None
+        override this.ErrorListTaskReporter() = None
+        override this.AdviseProjectSiteChanges(_,_) = ()
+        override this.AdviseProjectSiteCleaned(_,_) = ()
+        override this.IsIncompleteTypeCheckEnvironment = true
+        override this.TargetFrameworkMoniker = ""
+        override this.LoadTime = new System.DateTime(2000,1,1)  // any constant time is fine, orphan files do not interact with reloading based on update time
     
-/// Information about projects, open files and other active artifacts in visual studio
+/// Information about projects, open files and other active artifacts in visual studio.
+/// Keeps track of the relationship between IVsTextLines buffers, IFSharpSource objects, IProjectSite objects and FSharpProjectOptions
 []
-type internal Artifacts() =
+type internal ProjectSitesAndFiles() =
     static let sourceUserDataGuid = new Guid("{55F834FD-B950-4C61-BBAA-0511ABAF4AE2}") // Guid for source user data on text buffer
     
-    member art.TryGetProjectSite(hierarchy:IVsHierarchy) =
+    static let tryGetProjectSite(hierarchy:IVsHierarchy) =
         match hierarchy with
         | :? IProvideProjectSite as siteFactory -> 
             Some(siteFactory.GetProjectSite())
         | _ -> None
 
     /// Construct a project site for a single file. May be a single file project (for scripts) or an orphan project site (for everything else).
-    static member ProjectSiteOfSingleFile(filename:string,enableStandaloneFileIntellisense) : IProjectSite = 
+    static member ProjectSiteOfSingleFile(filename:string) : IProjectSite = 
         if SourceFile.MustBeSingleFileProject(filename) then 
             System.Diagnostics.Debug.Assert(false, ".fsx or .fsscript should have been treated as implicit project")
             failwith ".fsx or .fsscript should have been treated as implicit project"
-        else OrphanFileProjectSite.Create(filename,enableStandaloneFileIntellisense)                                          
+
+        new ProjectSiteOfSingleFile(filename) :> IProjectSite
     
-    member art.SetSource(buffer:IVsTextLines, source:IdealSource) : unit =
+    member art.SetSource(buffer:IVsTextLines, source:IFSharpSource) : unit =
         let mutable guid = sourceUserDataGuid
         (buffer :?> IVsUserData).SetData(&guid, source) |> ErrorHandler.ThrowOnFailure |> ignore
 
@@ -109,7 +95,7 @@ type internal Artifacts() =
         (buffer :?> IVsUserData).SetData(&guid, null) |> ErrorHandler.ThrowOnFailure |> ignore
         
     /// Given a filename get the corresponding Source
-    member art.GetSourceOfFilename(rdt:IVsRunningDocumentTable, filename:string) : IdealSource option =
+    member art.TryGetSourceOfFile(rdt:IVsRunningDocumentTable, filename:string) : IFSharpSource option =
         match VsRunningDocumentTable.FindDocumentWithoutLocking(rdt,filename) with 
         | Some(_hier, textLines) ->
             match textLines with
@@ -120,25 +106,26 @@ type internal Artifacts() =
                 (textLines :?> IVsUserData).GetData(&guid, &result) |> ignore
                 match result with
                 |   null -> None
-                |   source -> Some(source :?> IdealSource)
+                |   source -> Some(source :?> IFSharpSource)
                 
         | None -> None                
 
-
     /// Get the list of Defines for a given buffer
-    member art.GetDefinesForFile(rdt:IVsRunningDocumentTable, filename : string, enableStandaloneFileIntellisense) =
+    member art.GetDefinesForFile(rdt:IVsRunningDocumentTable, filename : string) =
         // The only caller of this function calls it each time it needs to colorize a line, so this call must execute very fast.  
         if SourceFile.MustBeSingleFileProject(filename) then 
             CompilerEnvironment.GetCompilationDefinesForEditing(filename,[])
         else 
-            let StandaloneSite() =  Artifacts.ProjectSiteOfSingleFile(filename,enableStandaloneFileIntellisense)
-            let site = 
+            let siteOpt = 
                 match VsRunningDocumentTable.FindDocumentWithoutLocking(rdt,filename) with 
-                | Some(hier,_) -> 
-                    match art.TryGetProjectSite(hier) with 
-                    | Some(site)->site
-                    | None -> StandaloneSite()
-                | None -> StandaloneSite()
+                | Some(hier,_) -> tryGetProjectSite(hier) 
+                | None -> None
+
+            let site = 
+               match siteOpt with
+               | Some site -> site
+               | None -> ProjectSitesAndFiles.ProjectSiteOfSingleFile(filename)
+
             CompilerEnvironment.GetCompilationDefinesForEditing(filename,site.CompilerFlags() |> Array.toList)
 
     member art.TryFindOwningProject(rdt:IVsRunningDocumentTable, filename) = 
@@ -146,7 +133,7 @@ type internal Artifacts() =
         else
             match VsRunningDocumentTable.FindDocumentWithoutLocking(rdt,filename) with 
             | Some(hier, _textLines) ->
-                match art.TryGetProjectSite(hier) with
+                match tryGetProjectSite(hier) with
                 | Some(site) -> 
 #if DEBUG
                     site.SourceFilesOnDisk() |> Seq.iter (fun src -> 
@@ -164,8 +151,26 @@ type internal Artifacts() =
     ///  - if the file is associated with an F# IVsHierarchy in the RDT, and
     ///  - the .fsproj has this file in its list of  items,
     /// then the project is considered the 'owner'.  Otherwise a 'single file project' is returned.
-    member art.FindOwningProject(rdt:IVsRunningDocumentTable, filename,enableStandaloneFileIntellisense) = 
-        let SiteOfSingleFile() = Artifacts.ProjectSiteOfSingleFile(filename,enableStandaloneFileIntellisense)        
+    member art.FindOwningProject(rdt:IVsRunningDocumentTable, filename) = 
         match art.TryFindOwningProject(rdt, filename) with
         | Some site -> site
-        | None -> SiteOfSingleFile()
\ No newline at end of file
+        | None -> ProjectSitesAndFiles.ProjectSiteOfSingleFile(filename)        
+
+    /// Create project options for this project site.
+    static member GetProjectOptionsForProjectSite(projectSite:IProjectSite,filename)= 
+        
+        match projectSite with
+        | :? IHaveCheckOptions as hco -> hco.OriginalCheckOptions()
+        | _ -> 
+            {ProjectFileName = projectSite.ProjectFileName()
+             ProjectFileNames = projectSite.SourceFilesOnDisk()
+             OtherOptions = projectSite.CompilerFlags()
+             ReferencedProjects = [| |]
+             IsIncompleteTypeCheckEnvironment = projectSite.IsIncompleteTypeCheckEnvironment
+             UseScriptResolutionRules = SourceFile.MustBeSingleFileProject(filename)
+             LoadTime = projectSite.LoadTime
+             UnresolvedReferences = None }      
+         
+    /// Create project site for these project options
+    static member CreateProjectSiteForScript (filename, checkOptions) = ProjectSiteOfScriptFile (filename, checkOptions) :> IProjectSite
+
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/QuickParse.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/QuickParse.fs
index c733dd2463e..28fa4fb3b1e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/QuickParse.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/QuickParse.fs
@@ -1,11 +1,27 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
-open System.Globalization
+
 open System
+open System.Globalization
+open Microsoft.FSharp.Compiler.SourceCodeServices
 
-/// Methods for cheaply and innacurately parsing F#
+/// Methods for cheaply and innacurately parsing F#.
+///
+/// These methods are very old and are mostly to do with extracting "long identifier islands" 
+///     A.B.C
+/// from F# source code, an approach taken from pre-F# VS samples for implementing intelliense.
+///
+/// This code should really no longer be needed since the language service has access to 
+/// parsed F# source code ASTs.  However, the long identifiers are still passed back to GetDeclarations and friends in the 
+/// F# Compiler Service and it's annoyingly hard to remove their use completely.
+///
+/// In general it is unlikely much progress will be made by fixing this code - it will be better to 
+/// extract more information from the F# ASTs.
+///
+/// It's also surprising how hard even the job of getting long identifier islands can be. For example the code 
+/// below is inaccurate for long identifier chains involving ``...`` identifiers.  And there are special cases
+/// for active pattern names and so on.
 module internal QuickParse =
     open Microsoft.FSharp.Compiler.SourceCodeServices.PrettyNaming
   
@@ -17,15 +33,16 @@ module internal QuickParse =
         if (s.EndsWith("|")) then (Microsoft.FSharp.Compiler.Parser.tagOfToken (Microsoft.FSharp.Compiler.Parser.token.IDENT s)) 
         else tokenTag
 
+    let rec isValidStrippedName (name:string) idx = 
+        if (idx = name.Length) then false
+        elif (IsIdentifierPartCharacter name.[idx]) then true
+        else isValidStrippedName name (idx + 1)
+
     // Utility function that recognizes whether a name is valid active pattern name
     // Extracts the 'core' part without surrounding bars and checks whether it contains some identifier
     // (Note, this doesn't have to be precise, because this is checked by backround compiler,
     // but it has to be good enough to distinguish operators and active pattern names)
     let private isValidActivePatternName (name:string) = 
-      let rec isValidStrippedName (name:string) idx = 
-        if (idx = name.Length) then false
-        elif (IsIdentifierPartCharacter name.[idx]) then true
-        else isValidStrippedName name (idx + 1)
 
       // Strip the surrounding bars (e.g. from "|xyz|_|") to get "xyz"
       match name.StartsWith("|", System.StringComparison.Ordinal), 
@@ -157,6 +174,7 @@ module internal QuickParse =
                 elif IsIdentifierPartCharacter(pos) then InLeadingIdentifier(pos-1,right,(prior,residue))
                 elif IsDot(pos) then InLeadingIdentifier(pos-1,pos,PushName())
                 else PushName()
+
             let rec InName(pos,startResidue,right) =
                 let NameAndResidue() = 
                     [line.Substring(pos+1,startResidue-pos-1)],(line.Substring(startResidue+1,right-startResidue))
@@ -164,6 +182,7 @@ module internal QuickParse =
                 elif IsIdentifierPartCharacter(pos) then InName(pos-1,startResidue,right) 
                 elif IsDot(pos) then InLeadingIdentifier(pos-1,pos,NameAndResidue())
                 else NameAndResidue()
+
             let rec InResidue(pos,right) =
                 if pos < 0 then [],(line.Substring(pos+1,right-pos))
                 elif IsDot(pos) then InName(pos-1,pos,right)
@@ -197,6 +216,7 @@ module internal QuickParse =
                 elif IsDot(pos) then AtStartOfIdentifier(pos+1,ident::current,throwAwayNext)
                 elif IsStartOfComment pos then EatComment(1, pos + 1, EatCommentCallContext.SkipWhiteSpaces(ident, current, throwAwayNext))
                 else AtStartOfIdentifier(pos,[],false) // Throw away what we have and start over.
+
             and EatComment (nesting, pos, callContext) = 
                 if pos > index then [], ""
                 else
@@ -218,6 +238,7 @@ module internal QuickParse =
                 else
                     // eat next char
                     EatComment(nesting, pos + 1, callContext)
+
             and InUnquotedIdentifier(left:int,pos:int,current,throwAwayNext) =
                 if pos > index then 
                     if throwAwayNext then [],"" else current,(line.Substring(left,pos-left))
@@ -230,6 +251,7 @@ module internal QuickParse =
                         let ident = line.Substring(left,pos-left)
                         SkipWhitespaceBeforeDotIdentifier(pos, ident, current,throwAwayNext)
                     else AtStartOfIdentifier(pos,[],false) // Throw away what we have and start over.
+
             and InQuotedIdentifier(left:int,pos:int, current,throwAwayNext) =
                 if pos > index then 
                     if throwAwayNext then [],"" else current,(line.Substring(left,pos-left))
@@ -239,6 +261,7 @@ module internal QuickParse =
                         let ident = line.Substring(left, pos-left)
                         SkipWhitespaceBeforeDotIdentifier(pos+2,ident,current,throwAwayNext) 
                     else InQuotedIdentifier(left,pos+1,current,throwAwayNext)                    
+
             and AtStartOfIdentifier(pos:int, current, throwAwayNext) =
                 if pos > index then 
                     if throwAwayNext then [],"" else current,""
@@ -273,15 +296,15 @@ module internal QuickParse =
             | _ -> plid, residue
 
 
-    open Microsoft.FSharp.Compiler.SourceCodeServices
     
-    let TokenNameEquals (tokenInfo : TokenInformation) token2 = 
-        String.Compare(tokenInfo.TokenName, token2, StringComparison.OrdinalIgnoreCase)=0  
+    let TokenNameEquals (tokenInfo : FSharpTokenInfo) token2 = 
+        String.Compare(tokenInfo .TokenName, token2, StringComparison.OrdinalIgnoreCase)=0  
     
     // The prefix of the sequence of token names to look for in TestMemberOrOverrideDeclaration, in reverse order
     let private expected = [ [|"dot"|]; [|"ident"|]; [|"member"; "override"|] ]
+
     /// Tests whether the user is typing something like "member x." or "override (*comment*) x."
-    let internal TestMemberOrOverrideDeclaration (tokens:TokenInformation[]) =
+    let internal TestMemberOrOverrideDeclaration (tokens:FSharpTokenInfo[]) =
         let filteredReversed = 
             tokens 
             |> Array.filter (fun tok ->
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Security.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Security.fs
deleted file mode 100644
index 4ba78ef390b..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Security.fs
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService 
-
-open System
-open System.Collections.Generic
-open System.Collections
-open System.ComponentModel
-open System.ComponentModel.Design
-open System.Diagnostics
-
-open Microsoft.VisualStudio.Shell
-open Microsoft.VisualStudio.Shell.Interop
-open Microsoft.VisualStudio.Shell.Flavor
-open Microsoft.VisualStudio
-
-open Internal.Utilities.Debug
-
-open System.Windows.Controls
-
-module internal TypeProviderSecurityGlobals =
-    //+++GLOBAL STATE
-    // This is poked with a value once, when the LS first initializes (Servicem.fs: CreateService).
-    // It is a convenient way for the LS or the PS to invalidate all LS cached results when the set of approved TPs changes.
-    let mutable invalidationCallback = Unchecked.defaultof unit>
-
-// TODO these are currently named A/B like the spec, but choose better names
-/// There are two dialogs, which we refer to as A and B
-///  - A: file in editor buffer needs TP reference (may be from project, or a script file)
-///  - B: build a project that needs a TP
-[]
-type internal TypeProviderSecurityDialogKind =
-    | A
-    | B
-
-type internal TypeProviderSecurityDialog =
-    // if kind=A and projectName is null, then this is a script with a #r
-    static member ShowModal(kind, filename, projectName, assem, pubInfo) =
-        let originalWidth = 600.0
-        let overallMargin = 12.0
-        let auto = System.Windows.GridLength(1.0, System.Windows.GridUnitType.Auto)
-        let addAt(grid:Grid, col, row, element) =
-            Grid.SetRow(element, row)
-            Grid.SetColumn(element, col)
-            grid.Children.Add(element) |> ignore
-
-        let assem = Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.partiallyCanonicalizeFileName assem
-        match kind with
-        | TypeProviderSecurityDialogKind.A -> assert(filename <> null || projectName <> null)
-        | TypeProviderSecurityDialogKind.B -> assert(filename = null && projectName <> null)
-
-        let di = new Microsoft.VisualStudio.PlatformUI.DialogWindow("type_provider_security_FS") // calling this constructor creates help topic link for F1 and [?] in top right corner
-        di.Title <- Strings.GetString "TPSEC_AB_Title"
-        let sp = new StackPanel(Orientation = Orientation.Vertical)
-                    
-        let mkText s = new TextBlock(TextWrapping=System.Windows.TextWrapping.Wrap, Text=s)
-        let mkTextBold s = new TextBlock(TextWrapping=System.Windows.TextWrapping.Wrap, FontWeight=System.Windows.FontWeights.Bold, Text=s) 
-
-        let tbTop =
-            match kind, projectName with
-            | TypeProviderSecurityDialogKind.A, null -> mkText (Strings.GetString "TPSEC_A_Script_Start")
-            | TypeProviderSecurityDialogKind.A, _    -> mkText (Strings.GetString "TPSEC_A_Project_Start")
-            | TypeProviderSecurityDialogKind.B, _    -> mkText (Strings.GetString "TPSEC_B_Start")
-
-        let gridTopInfo =
-            let grid = new Grid()
-            grid.ColumnDefinitions.Add(new ColumnDefinition(Width=auto))
-            grid.ColumnDefinitions.Add(new ColumnDefinition(Width=System.Windows.GridLength(8.0)))  //empty column yields whitespace 
-            grid.ColumnDefinitions.Add(new ColumnDefinition(Width=System.Windows.GridLength(1.0, System.Windows.GridUnitType.Star)))
-            let mutable row = 0
-            // Publisher info
-            grid.RowDefinitions.Add(new RowDefinition(Height=auto))
-            addAt(grid, 0, row, mkText (Strings.GetString "TPSEC_PublisherInfo"))
-            addAt(grid, 2, row, mkText (match pubInfo with Some(s) -> s | None -> (Strings.GetString "TPSEC_UnknownPublisher")))
-            row <- row + 1
-            // TP assembly
-            grid.RowDefinitions.Add(new RowDefinition(Height=auto))
-            addAt(grid, 0, row, mkText (Strings.GetString "TPSEC_TypeProviderReferenced"))
-            addAt(grid, 2, row, mkText assem)
-            row <- row + 1
-            // File
-            if filename <> null then
-                grid.RowDefinitions.Add(new RowDefinition(Height=auto))
-                addAt(grid, 0, row, mkText (Strings.GetString "TPSEC_File"))
-                addAt(grid, 2, row, mkText filename)
-            // Project
-            if projectName <> null then
-                grid.RowDefinitions.Add(new RowDefinition(Height=auto))
-                addAt(grid, 0, row, mkText (Strings.GetString "TPSEC_Project"))
-                addAt(grid, 2, row, mkText projectName)
-
-            grid.Margin <- new System.Windows.Thickness(0.0, 8.0, 0.0, 8.0)
-            grid
-
-        let tbQuestion = mkTextBold (Strings.GetString "TPSEC_TopQuestion")
-        tbQuestion.Margin <- new System.Windows.Thickness(0.0, 0.0, 0.0, 8.0)
-
-        let tbFinish = mkText (Strings.GetString "TPSEC_AB_Explain")
-        tbFinish.Margin <- new System.Windows.Thickness(0.0, 2.0, 0.0, 0.0)
-
-        sp.Children.Add(tbTop) |> ignore
-        sp.Children.Add(gridTopInfo) |> ignore
-        sp.Children.Add(tbQuestion) |> ignore
-
-        (* see if UX wants the link too 
-        let moreInfoRun = new System.Windows.Documents.Run(Strings.GetString "TPSEC_MoreInfoLink")
-        let moreInfoLink = new System.Windows.Documents.Hyperlink(moreInfoRun)
-        moreInfoLink.NavigateUri <- System.Uri("http://msdn.com") // TODO url
-        let moreInfo = new TextBlock()
-        moreInfo.Inlines.Add(moreInfoLink)
-        moreInfo.Margin <- new System.Windows.Thickness(0.0, 0.0, 0.0, 11.0)
-        sp.Children.Add(moreInfo) |> ignore
-        *)
-                    
-        let enabled = ref false
-        let enableButton = new Button(Content=Strings.GetString "TPSEC_Enable", MinWidth=75.0, MinHeight=23.0)
-        enableButton.Click.Add(fun _ -> enabled := true; di.Close())
-        let disableButton = new Button(Content=Strings.GetString "TPSEC_Disable", HorizontalAlignment=System.Windows.HorizontalAlignment.Right, MinWidth=75.0, MinHeight=23.0)
-        disableButton.Margin <- new System.Windows.Thickness(7.0, 0.0, 0.0, 0.0)
-        disableButton.Click.Add(fun _ -> di.Close())
-        let buttonPanel = new StackPanel(Orientation = Orientation.Horizontal, HorizontalAlignment=System.Windows.HorizontalAlignment.Right)
-        buttonPanel.Children.Add(enableButton) |> ignore
-        buttonPanel.Children.Add(disableButton) |> ignore
-        sp.Children.Add(buttonPanel) |> ignore
-
-        let separator = new System.Windows.Controls.Separator()
-        separator.Margin <- new System.Windows.Thickness(0.0, 8.0, 0.0, 0.0)
-        sp.Children.Add(separator) |> ignore
-
-        let theIcon =
-            let image = new Image()
-            let iconUri = new Uri("pack://application:,,,/FSharp.LanguageService;component/SecurityIconForTypeProviders.ico", UriKind.Absolute)
-            try
-                use iconStream = System.Windows.Application.GetResourceStream(iconUri).Stream // dispose ok, thanks to OnLoad caching on next line
-                let decoder = new System.Windows.Media.Imaging.IconBitmapDecoder(iconStream, System.Windows.Media.Imaging.BitmapCreateOptions.PreservePixelFormat, System.Windows.Media.Imaging.BitmapCacheOption.OnLoad)
-                image.Source <- decoder.Frames.[0]
-            with 
-                | :? System.IO.IOException -> ()
-            image
-        let iconAndFinishGrid =
-            let grid = new Grid()
-            grid.ColumnDefinitions.Add(new ColumnDefinition(Width=System.Windows.GridLength(32.0)))  // icon width
-            grid.ColumnDefinitions.Add(new ColumnDefinition(Width=System.Windows.GridLength(8.0)))   // space between icon and text
-            grid.ColumnDefinitions.Add(new ColumnDefinition(Width=System.Windows.GridLength(0.90, System.Windows.GridUnitType.Star)))
-            grid.RowDefinitions.Add(new RowDefinition(Height=auto))
-            addAt(grid, 0, 0, theIcon)
-            addAt(grid, 2, 0, tbFinish)
-            grid
-        iconAndFinishGrid.Margin <- new System.Windows.Thickness(0.0, 8.0, 0.0, 0.0)
-        sp.Children.Add(iconAndFinishGrid) |> ignore
-
-        sp.Margin <- new System.Windows.Thickness(overallMargin)
-        let scrollviewer = new ScrollViewer()
-        scrollviewer.Content <- sp
-        scrollviewer.HorizontalScrollBarVisibility <- ScrollBarVisibility.Disabled
-        scrollviewer.VerticalScrollBarVisibility <- ScrollBarVisibility.Auto 
-        di.Content <- scrollviewer
-        di.SizeToContent <- System.Windows.SizeToContent.Height 
-        di.Width <- originalWidth
-        di.HorizontalAlignment <- System.Windows.HorizontalAlignment.Center 
-        di.VerticalAlignment <- System.Windows.VerticalAlignment.Center
-        di.HasHelpButton <- false
-        di.WindowStartupLocation <- System.Windows.WindowStartupLocation.CenterOwner
-        di.Loaded.Add (fun _ -> System.Windows.Input.Keyboard.Focus(disableButton) |> ignore)
-        di.ShowModal() |> ignore
-        let approval =
-            if !enabled then
-                Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.TypeProviderApprovalStatus.Trusted(assem)
-            else
-                Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.TypeProviderApprovalStatus.NotTrusted(assem)
-        Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.ReplaceApprovalStatus None approval
-        // invalidate any language service caching
-        TypeProviderSecurityGlobals.invalidationCallback()
-                
-        
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SecurityIconForTypeProviders.ico b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SecurityIconForTypeProviders.ico
deleted file mode 100644
index 4d9fb2f6ab7..00000000000
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SecurityIconForTypeProviders.ico and /dev/null differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Servicem.fsi b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Servicem.fsi
deleted file mode 100644
index c8451dce3ac..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Servicem.fsi
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService
-  open Microsoft.VisualStudio.TextManager.Interop
-  open Microsoft.VisualStudio.Text
-  open Microsoft.VisualStudio.FSharp.LanguageService
-  open Microsoft.VisualStudio.Shell.Interop
-  open Microsoft.FSharp.Compiler.SourceCodeServices
-  open Microsoft.VisualStudio.OLE.Interop
-  open Microsoft.VisualStudio.Shell
-  open System.Collections
-
-
-  module internal Implementation = 
-      []
-      type internal FSharpScope =
-          inherit AuthoringScope
-          member GotoDefinition : textView:IVsTextView * row:int * column:int -> GotoDefinitionResult
-
-      []
-      type UntypedFSharpScope =
-          member GetHiddenRegions : file:string -> NewHiddenRegion list * Map
-          member SynchronizeNavigationDropDown : file:string * line:int * col:int * dropDownTypes:ArrayList * dropDownMembers:ArrayList * selectedType:int byref * selectedMember:int byref -> bool
-
-
-  []
-  type internal LanguageServiceState =
-      member InteractiveChecker : InteractiveChecker
-      member Artifacts : Artifacts
-      member GetColorizer : IVsTextLines -> FSharpColorizer
-      member Unhook : unit -> unit
-      member ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients : unit -> unit
-      member WaitForBackgroundCompile : unit -> unit
-      member ServiceProvider : Microsoft.VisualStudio.FSharp.LanguageService.ServiceProvider
-      member CreateSource : buffer:IVsTextLines -> IdealSource
-      member ExecuteBackgroundRequest : req:BackgroundRequest * source:IdealSource -> unit
-      member UntypedParseScope : Implementation.UntypedFSharpScope option
-      member Initialize : sp:Microsoft.VisualStudio.FSharp.LanguageService.ServiceProvider * dp:IdealDocumentationProvider * prefs:LanguagePreferences * enableStandaloneFileIntellisenseFlag:bool * createSource:(IVsTextLines -> IdealSource) -> unit
-      member CreateBackgroundRequest : line : int * col : int * info : TokenInfo * sourceText : string * snapshot : ITextSnapshot * methodTipMiscellany : MethodTipMiscellany * fname : string *
-                                         reason : BackgroundRequestReason * view : IVsTextView *
-                                         sink : AuthoringSink * source : ISource * timestamp : int * synchronous : bool -> BackgroundRequest
-      member OnIdle : unit -> unit
-      static member Create : unit -> LanguageServiceState
-
-
-
-  []
-  type internal FSharpLanguageService =
-      inherit LanguageService
-      interface IVsRunningDocTableEvents
-      interface IVsProvideColorableItems     
-      member LanguageServiceState : LanguageServiceState
-
-  []
-  type internal FSharpPackage =
-      inherit Package
-      interface IOleComponent
-      new : unit -> FSharpPackage
-
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Source.fsi b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Source.fsi
deleted file mode 100644
index f5f14211c95..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Source.fsi
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService
-    open Microsoft.VisualStudio.TextManager.Interop
-    open Microsoft.VisualStudio.FSharp.LanguageService
-    open Microsoft.VisualStudio.Shell.Interop
-    
-    module internal Source = 
-       // ~- These are unittest-only ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
-       /// Create a source which delegates to functions in support of unittesting.
-       val internal CreateDelegatingSource :
-                      recolorizeWholeFile:(unit -> unit) * 
-                      recolorizeLine:(int -> unit) * 
-                      fileName:string *
-                      isClosed:(unit -> bool) * 
-                      fileChangeEx:IVsFileChangeEx -> IdealSource
-        // ~- These are unittest-only ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
-            
-        /// Create a real production source object.
-        val internal CreateSource : 
-                        service:LanguageService * 
-                        textLines:IVsTextLines * 
-                        colorizer:Colorizer * 
-                        filechange:IVsFileChangeEx -> IdealSource
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SourceFile.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SourceFile.fs
index 2b132cdad0f..81220c3fc5b 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SourceFile.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SourceFile.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler.VsLanguageService
 open System
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/VSPackage.resx b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/VSPackage.resx
index 6d23f93cab3..fc479948336 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/VSPackage.resx and b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/VSPackage.resx differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Vs.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Vs.fs
index b216318ba57..360f3229791 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Vs.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Vs.fs
@@ -1,7 +1,7 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.VisualStudio.FSharp.LanguageService
+
 open System
 open System.IO
 open System.Collections
@@ -10,13 +10,39 @@ open System.Reflection
 open Microsoft.VisualStudio
 open Microsoft.VisualStudio.Shell
 open Microsoft.VisualStudio.Shell.Interop
+open Microsoft.VisualStudio.Text
 open Microsoft.VisualStudio.TextManager.Interop
 open Microsoft.VisualStudio.OLE.Interop
-open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
+open Microsoft.FSharp.Compiler.Range
 open Internal.Utilities.Debug
-open Com 
 open System.Runtime.InteropServices
 
+/// Helper methods for interoperating with COM                
+module internal Com = 
+    let ThrowOnFailure0(hr) = 
+        ErrorHandler.ThrowOnFailure(hr)  |> ignore
+        
+    let ThrowOnFailure1(hr,res) = 
+        ErrorHandler.ThrowOnFailure(hr) |> ignore; 
+        res
+        
+    let ThrowOnFailure2(hr,res1,res2) = 
+        ErrorHandler.ThrowOnFailure(hr) |> ignore; 
+        res1,res2
+        
+    let ThrowOnFailure3(hr,res1,res2,res3) = 
+        ErrorHandler.ThrowOnFailure(hr) |> ignore; 
+        res1,res2,res3
+
+    let ThrowOnFailure4(hr,res1,res2,res3,res4) = 
+        ErrorHandler.ThrowOnFailure(hr) |> ignore; 
+        res1,res2,res3,res4
+        
+    let Succeeded hr = 
+        // REVIEW: Not the correct check for succeeded
+        hr = VSConstants.S_OK
+        
+
 /// Methods for dealing with IVsHierarchy
 module internal VsHierarchy = 
     let private getItemId (o:obj) : uint32 =
@@ -27,45 +53,45 @@ module internal VsHierarchy =
         seq {
             yield itemid
             let hr, sibling = hier.GetProperty(itemid, int32 __VSHPROPID.VSHPROPID_NextSibling)
-            if Succeeded hr then yield! selfAndSiblings hier (getItemId sibling) 
+            if Com.Succeeded hr then yield! selfAndSiblings hier (getItemId sibling) 
         } 
 
     let private VirtualFolderGuid = new Guid("6bb5f8f0-4483-11d3-8bcf-00c04f8ec28c")
     
     let isVirtualFolder (hier:IVsHierarchy) (itemid:uint32) =
         let hr, guid = hier.GetGuidProperty(itemid, int32 __VSHPROPID.VSHPROPID_TypeGuid)
-        Succeeded hr && guid = VirtualFolderGuid
+        Com.Succeeded hr && guid = VirtualFolderGuid
         
     /// Get the path+filename for a particular item, return empty string if none
     let filenameOrEmpty (hier:IVsHierarchy) (itemid:uint32) = 
         let hr, canonicalName = hier.GetCanonicalName(itemid)
-        if Succeeded hr then canonicalName else System.String.Empty
+        if Com.Succeeded hr then canonicalName else System.String.Empty
         
     /// Get the typename for a particular item, return empty string if none
     let typeName (hier:IVsHierarchy) (itemid:uint32) = 
         let hr, typename = hier.GetProperty(itemid, int32 __VSHPROPID.VSHPROPID_TypeName)
-        if Succeeded hr then (typename :?> System.String) else System.String.Empty        
+        if Com.Succeeded hr then (typename :?> System.String) else System.String.Empty        
 
     /// Get the name for a particular item, return empty string if none
     let name (hier:IVsHierarchy) (itemid:uint32) = 
         let hr, typename = hier.GetProperty(itemid, int32 __VSHPROPID.VSHPROPID_Name)
-        if Succeeded hr then (typename :?> System.String) else System.String.Empty  
+        if Com.Succeeded hr then (typename :?> System.String) else System.String.Empty  
         
     /// Get the projectDirectory for a particular item, return empty string if none
     let projectDirectory (hier:IVsHierarchy) (itemid:uint32) = 
         let hr, typename = hier.GetProperty(itemid, int32 __VSHPROPID.VSHPROPID_ProjectDir)
-        if Succeeded hr then (typename :?> System.String) else System.String.Empty  
+        if Com.Succeeded hr then (typename :?> System.String) else System.String.Empty  
         
     /// Owner key string that identifies the project GUID of the owning project.
     let ownerkey (hier:IVsHierarchy) (itemid:uint32) = 
         let hr, typename = hier.GetProperty(itemid, int32 __VSHPROPID.VSHPROPID_OwnerKey)
-        if Succeeded hr then (typename :?> System.String) else System.String.Empty            
+        if Com.Succeeded hr then (typename :?> System.String) else System.String.Empty            
         
     /// All the children itemids ov the given item
     let children (hier:IVsHierarchy) (itemid:uint32) = 
         seq {
             let hr, child = hier.GetProperty(itemid, int32 __VSHPROPID.VSHPROPID_FirstChild)
-            if Succeeded hr then yield! selfAndSiblings hier (getItemId child) 
+            if Com.Succeeded hr then yield! selfAndSiblings hier (getItemId child) 
         }
 
     /// Flatten the hierarchy starting at a particular item and return all itemids
@@ -79,51 +105,55 @@ module internal VsHierarchy =
     /// Flatten starting at the root of the hierarchy
     let flatten (hier:IVsHierarchy) = flattenChild hier VSConstants.VSITEMID_ROOT
 
-/// Strongly typed QueryService    
-type internal ServiceProvider(getService:Type->obj) = 
-    member private sp.GetService<'S,'T>():'T = unbox(box(getService (typeof<'T>)))
-    member sp.TextManager:IVsTextManager = downcast (getService (typeof))
-    member sp.Rdt:IVsRunningDocumentTable = downcast (getService (typeof))
-    member sp.XmlService:IVsXMLMemberIndexService = downcast (getService (typeof))
-    member sp.DTE:EnvDTE.DTE = downcast (getService (typeof))
-    static member Stub = ServiceProvider(fun _t->raise (Error.UseOfUnitializedServiceProvider))
+[]
+module internal ServiceProviderExtensions =
+    type internal System.IServiceProvider with 
+        member sp.GetService<'S,'T>() = sp.GetService(typeof<'S>) :?> 'T
+
+        member sp.TextManager = sp.GetService()
+        member sp.RunningDocumentTable = sp.GetService()
+        member sp.XmlService = sp.GetService()
+        member sp.DTE = sp.GetService()
 
 /// Isolate VsTextManager as much as possible to ease transition into new editor architecture
 module internal VsTextManager =
+
     /// Get the current active view
     let GetActiveView (textManager:IVsTextManager) (mustHaveFocus:bool) buffer = Com.ThrowOnFailure1(textManager.GetActiveView((if mustHaveFocus then 1 else 0), buffer))
     
 
 /// Isolate IVsTextColorState as much as possible to ease transition into new editor architecture
 module internal VsTextColorState =
+
     /// Recolorize the given lines
     let ReColorizeLines (colorState:IVsTextColorState) topLine bottomLine = 
         Com.ThrowOnFailure0(colorState.ReColorizeLines(topLine,bottomLine))
+
     /// May trigger a recolorization.
     let GetColorStateAtStartOfLine (colorState:IVsTextColorState) line =
         Com.ThrowOnFailure1(colorState.GetColorStateAtStartOfLine(line))
     
-/// Isolate IVsTextLayer as much as possible to ease transition into new editor architecture
-module internal VsTextLayer =
-    // Convert a local line and index to base.
-    let LocalLineIndexToBase (layer:IVsTextLayer) localLine localIndex = Com.ThrowOnFailure2(layer.LocalLineIndexToBase(localLine,localIndex))
-
 /// Isolate IVsTextView as much as possible to ease transition into new editor architecture
 module internal VsTextView =
+
     /// Get the scroll info
     let GetScrollInfo (view:IVsTextView) code = Com.ThrowOnFailure4(view.GetScrollInfo(code))
+
     /// Get the layered view
     let LayeredTextView (view:IVsTextView) : IVsLayeredTextView = unbox(box(view))
+
     /// Get the buffer for this view.
-    let Buffer (view:IVsTextView) = ThrowOnFailure1(view.GetBuffer())
+    let Buffer (view:IVsTextView) = Com.ThrowOnFailure1(view.GetBuffer())
     
 /// Isolate IVsColorState as much as possible to ease transition into new editor architecture
 module internal VsColorState = 
+
     /// Recolorize the given lines
     let RecolorizeLines (cs:IVsTextColorState) top bottom =
         Com.ThrowOnFailure0(cs.ReColorizeLines(top,bottom))
         
 module internal VsUserData = 
+
     let vsBufferMoniker = Guid("978A8E17-4DF8-432A-9623-D530A26452BC")
 
     // This is the file name of the buffer.
@@ -132,14 +162,18 @@ module internal VsUserData =
        
 /// Isolate IVsTextLines as much as possible to ease transition into new editor architecture
 module internal VsTextLines =
-    // Get the length of the given line.
+
+    /// Get the length of the given line.
     let LengthOfLine (buffer:IVsTextBuffer) (line:int) : int = 
-        ThrowOnFailure1(buffer.GetLengthOfLine(line))
+        Com.ThrowOnFailure1(buffer.GetLengthOfLine(line))
+
     /// Get the text for a particular line.
     let LineText (buffer:IVsTextLines) line = 
-        ThrowOnFailure1(buffer.GetLineText(line, 0, line, LengthOfLine buffer line))
+        Com.ThrowOnFailure1(buffer.GetLineText(line, 0, line, LengthOfLine buffer line))
+
     /// Get the color state
     let TextColorState (buffer:IVsTextLines) : IVsTextColorState= unbox(box(buffer))
+
     /// Get the filename of the given buffer (via IVsUserData). Not all buffers have a file. This will be an exception.
     let GetFilename(buffer : IVsTextLines) =
         let ud = (box buffer) :?> IVsUserData
@@ -147,6 +181,7 @@ module internal VsTextLines =
     
 
 module internal VsRunningDocumentTable = 
+
     let FindDocumentWithoutLocking(rdt:IVsRunningDocumentTable, url:string) : (IVsHierarchy * IVsTextLines) option =
         let (hr:int, hier:IVsHierarchy, _itemid:uint32, unkData:IntPtr, _cookie:uint32) = rdt.FindAndLockDocument(uint32 _VSRDTFLAGS.RDT_NoLock, url)
         try
@@ -164,3 +199,27 @@ module internal VsRunningDocumentTable =
             if IntPtr.Zero <> unkData then Marshal.Release(unkData)|>ignore
             
         
+[]
+module internal TextSpanHelpers =
+
+    let TextSpanOfRange (r1:range) =
+        let sc = r1.StartColumn
+        let sl = r1.StartLine 
+        let ec = r1.EndColumn
+        let el = r1.EndLine
+        TextSpan(iStartLine = sl-1, iStartIndex = sc, iEndLine = el-1, iEndIndex = ec)
+
+    let MakeSpan(ss:ITextSnapshot, sl, sc, el, ec) =
+        let makeSnapshotPoint l c =
+            let lineNum, fsharpRangeIsPastEOF =
+                if l <= ss.LineCount - 1 then
+                    l, false
+                else
+                    ss.LineCount - 1, true
+            let line = ss.GetLineFromLineNumber(lineNum)
+            line.Start.Add(if fsharpRangeIsPastEOF then line.Length else min c line.Length)
+        let start = makeSnapshotPoint sl sc
+        let end_  = makeSnapshotPoint el ec
+        assert(start.CompareTo(end_) <= 0)
+        (new SnapshotSpan(start, end_)).Span
+
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/XmlDocumentation.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/XmlDocumentation.fs
index 64b7fcbfbba..0bb9e24e48b 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/XmlDocumentation.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/XmlDocumentation.fs
@@ -1,19 +1,28 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.VisualStudio.FSharp.LanguageService
+
 open System
 open System.Text
-open System.Collections.Generic
 open Internal.Utilities.Collections
-open Microsoft.VisualStudio
 open EnvDTE
 open EnvDTE80
 open Microsoft.VisualStudio.Shell.Interop
 open Microsoft.FSharp.Compiler.SourceCodeServices
 
+/// XmlDocumentation builder, using the VS interfaces to build documentation.  An interface is used
+/// to allow unit testing to give an alternative implementation which captures the documentation.
+type internal IDocumentationBuilder =
+
+    /// Append the given raw XML formatted into the string builder
+    abstract AppendDocumentationFromProcessedXML : appendTo:StringBuilder * processedXml:string * showExceptions:bool * showParameters:bool * paramName:string option-> unit
+
+    /// Appends text for the given filename and signature into the StringBuilder
+    abstract AppendDocumentation : appendTo: StringBuilder * filename: string * signature: string * showExceptions: bool * showParameters: bool * paramName: string option-> unit
+
 /// Documentation helpers.
 module internal XmlDocumentation =
+
     /// If the XML comment starts with '<' not counting whitespace then treat it as a literal XML comment.
     /// Otherwise, escape it and surround it with 
     let ProcessXml(xml:string) =
@@ -147,7 +156,7 @@ module internal XmlDocumentation =
             if (showExceptions) then AppendExceptions appendTo memberData
 //          AppendRemarks appendTo memberData
 
-        interface IdealDocumentationProvider with 
+        interface IDocumentationBuilder with 
             /// Append the given processed XML formatted into the string builder
             override this.AppendDocumentationFromProcessedXML
                             ( /// StringBuilder to append to
@@ -191,20 +200,20 @@ module internal XmlDocumentation =
                             let ok,xml = index.GetMemberXML(idx)
                             let processedXml = ProcessXml(xml)
                             if Com.Succeeded(ok) then 
-                                (this:>IdealDocumentationProvider).AppendDocumentationFromProcessedXML(appendTo,processedXml,showExceptions,showParameters, paramName)
+                                (this:>IDocumentationBuilder).AppendDocumentationFromProcessedXML(appendTo,processedXml,showExceptions,showParameters, paramName)
                     | None -> ()
                 with e-> 
                     Assert.Exception(e)
                     reraise()    
  
     /// Append an XmlCommnet to the segment.
-    let AppendXmlComment(documentationProvider:IdealDocumentationProvider, segment:StringBuilder, xml, showExceptions, showParameters, paramName) =
+    let AppendXmlComment(documentationProvider:IDocumentationBuilder, segment:StringBuilder, xml, showExceptions, showParameters, paramName) =
         match xml with
-        | XmlCommentNone -> ()
-        | XmlCommentSignature(filename,signature) -> 
+        | FSharpXmlDoc.None -> ()
+        | FSharpXmlDoc.XmlDocFileSignature(filename,signature) -> 
             segment.Append("\n") |> ignore
             documentationProvider.AppendDocumentation(segment,filename,signature,showExceptions,showParameters, paramName)
-        | XmlCommentText(rawXml) ->
+        | FSharpXmlDoc.Text(rawXml) ->
             let processedXml = ProcessXml(rawXml)
             segment.Append("\n") |> ignore
             documentationProvider.AppendDocumentationFromProcessedXML(segment,processedXml,showExceptions,showParameters, paramName)
@@ -218,27 +227,27 @@ module internal XmlDocumentation =
           .Trim([|'\n'|])
 
     /// Build a data tip text string with xml comments injected.
-    let BuildTipText(documentationProvider:IdealDocumentationProvider, dataTipText:DataTipElement list, showText, showExceptions, showParameters, showOverloadText) = 
+    let BuildTipText(documentationProvider:IDocumentationBuilder, dataTipText:FSharpToolTipElement list, showText, showExceptions, showParameters, showOverloadText) = 
         let maxLinesInText = 45
-        let Format(dataTipElement:DataTipElement) =
+        let Format(dataTipElement:FSharpToolTipElement) =
             let segment = 
                 match dataTipElement with 
-                | DataTipElementNone->StringBuilder()
-                | DataTipElement(text,xml) -> 
+                | FSharpToolTipElement.None ->StringBuilder()
+                | FSharpToolTipElement.Single (text,xml) -> 
                     let segment = StringBuilder()
                     if showText then 
                         segment.Append(text) |> ignore
 
                     AppendXmlComment(documentationProvider, segment, xml, showExceptions, showParameters, None)
                     segment
-                | DataTipElementParameter(text, xml, paramName) ->
+                | FSharpToolTipElement.SingleParameter(text, xml, paramName) ->
                     let segment = StringBuilder()
                     if showText then 
                         segment.Append(text) |> ignore
 
                     AppendXmlComment(documentationProvider, segment, xml, showExceptions, showParameters, Some paramName)
                     segment
-                | DataTipElementGroup(overloads) -> 
+                | FSharpToolTipElement.Group (overloads) -> 
                     let segment = StringBuilder()
                     let overloads = Array.ofList overloads
                     let len = Array.length overloads
@@ -258,7 +267,7 @@ module internal XmlDocumentation =
                         let _,xml = overloads.[0]
                         AppendXmlComment(documentationProvider, segment, xml, showExceptions, showParameters, None)
                     segment
-                | DataTipElementCompositionError(errText) -> StringBuilder(errText)
+                | FSharpToolTipElement.CompositionError(errText) -> StringBuilder(errText)
             CleanDataTipSegment(segment) 
 
         let segments = dataTipText |> List.map Format |> List.filter (fun d->d<>null) |> Array.ofList
@@ -273,8 +282,10 @@ module internal XmlDocumentation =
 
         join
 
-    let BuildDataTipText(documentationProvider:IdealDocumentationProvider, DataTipText(dataTipText)) = 
+    let BuildDataTipText(documentationProvider, FSharpToolTipText(dataTipText)) = 
         BuildTipText(documentationProvider,dataTipText,true, true, false, true) 
 
-    let BuildMethodOverloadTipText(documentationProvider:IdealDocumentationProvider, DataTipText(dataTipText)) = 
+    let BuildMethodOverloadTipText(documentationProvider, FSharpToolTipText(dataTipText)) = 
         BuildTipText(documentationProvider,dataTipText,false, false, true, false) 
+
+    let CreateDocumentationBuilder(xmlIndexService, dte) = Provider(xmlIndexService, dte) :> IDocumentationBuilder
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/XmlDocumentation.fsi b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/XmlDocumentation.fsi
deleted file mode 100644
index ced7c5340f3..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/XmlDocumentation.fsi
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService
-open System
-open System.Text
-open Microsoft.VisualStudio.Shell.Interop
-open Microsoft.FSharp.Compiler.SourceCodeServices
-open EnvDTE
-
-module internal XmlDocumentation = 
-    type Provider =
-        interface IdealDocumentationProvider
-        new : xmlIndexService:IVsXMLMemberIndexService * dte: DTE -> Provider
-
-    /// Build a data tip text string with xml comments injected.
-    val BuildDataTipText :  IdealDocumentationProvider * DataTipText -> string
-
-    /// Build a data tip text string with xml comments injected.
-    val BuildMethodOverloadTipText :  IdealDocumentationProvider * DataTipText -> string
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/servicem.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/servicem.fs
deleted file mode 100644
index 02c45aa5ecf..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/servicem.fs
+++ /dev/null
@@ -1,2150 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.FSharp.LanguageService
-
-open Internal.Utilities.Collections
-open Microsoft.FSharp.Compiler.SourceCodeServices
-open System
-open System.Text
-open System.IO
-open System.Collections.Generic
-open System.Collections
-open System.Configuration
-open System.Diagnostics
-open System.Globalization
-open System.Threading
-open System.ComponentModel.Design
-open System.Runtime.InteropServices
-open Microsoft.VisualStudio
-open Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.VisualStudio.Shell
-open Microsoft.VisualStudio.Shell.Interop 
-open Microsoft.VisualStudio.TextManager.Interop 
-open Microsoft.VisualStudio.Text
-open Microsoft.VisualStudio.OLE.Interop
-open Microsoft.VisualStudio.FSharp.LanguageService
-open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
-open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-open Microsoft.FSharp.Compiler.Lib
-open Internal.Utilities.Debug
-
-#nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method
-#nowarn "47" // Self-referential uses within object constructors will be checked for initialization soundness at runtime. Consider placing self-references within 'do' statements after the last 'let' binding in a class
-
-#if DEBUG
-module ParserState = 
-    open System.Text.RegularExpressions
-    let private rxState = Regex("state (\d+):", RegexOptions.Compiled)
-    let private (|StateLine|_|) l = 
-        let m = rxState.Match l
-        if m.Success then m.Groups.[1].Value |> int |> Some
-        else None
-    
-    let FsyListingVariableName = "FSY_LISTING"
-    let private cache = 
-        lazy
-            match Environment.GetEnvironmentVariable FsyListingVariableName with
-            | null -> None
-            | x when not (File.Exists x) -> None
-            | path ->
-                let d = Dictionary()
-                try
-                    (
-                        use f = File.OpenText(path)
-                        let rec doRead () = 
-                            match f.ReadLine() with
-                            | null -> ()
-                            | StateLine l ->
-                                match readStates [] with
-                                | Some states ->
-                                    d.Add(l, states)
-                                    doRead ()
-                                | None -> ()
-                            | _ -> doRead ()
-                        and readStates acc = 
-                            match f.ReadLine() with
-                            | null -> None
-                            | x when String.IsNullOrEmpty x -> Some (List.rev acc)
-                            | x -> readStates (x::acc)
-                        doRead ()
-                    )
-                    let lastWriteTime = File.GetLastWriteTime(path)
-                    Some (d, lastWriteTime, path)
-                with
-                    _ -> None                
-
-    let Get s = 
-        match cache.Value with
-        | None -> None
-        | Some (dict, lastWriteTime, path) ->
-            match dict.TryGetValue s with
-            | true, v -> Some (v, lastWriteTime, path)
-            | _ -> None
-#endif
-
-module Implementation =
-
-    module FSharpConstants = 
-        let fsharpCodeDomProviderName       = "FSharp"  
-
-        // These are the IDs from fslangservice.dll
-        let packageGuidString               = "871D2A70-12A2-4e42-9440-425DD92A4116"
-        []
-        let languageServiceGuidString       = Microsoft.VisualStudio.FSharp.Shared.FSharpCommonConstants.languageServiceGuidString
-
-        // These are the IDs from the Python sample:
-        let intellisenseProviderGuidString  = "8b1807ea-d222-4765-afa8-c092d480e451"
-        
-        // These are the entries from fslangservice.dll
-        let PLKMinEdition                   = "standard"
-        let PLKCompanyName                  = "Microsoft" // "Microsoft Corporation"
-        let PLKProductName                  = "f#" // "Visual Studio Integration of FSharp Language Service"
-        let PLKProductVersion               = "1.0"
-        let PLKResourceID                   = 1s
-        
-        // App.config keys for determining whether not-shipping features are turned on or off
-        // Edit devenv.exe.config and place these at the end.
-        //   
-        //      
-        //      
-        //      
-        //   
-        let enableNavBar = "fsharp-navigationbar-enabled"
-        let enableRegions = "fsharp-regions-enabled"
-        let enableStandaloneFileIntellisense = "fsharp-standalone-file-intellisense-enabled"
-        let enableLanguageService = "fsharp-language-service-enabled"
-
-    type FSharpColorableItem(canonicalName: string, displayName : Lazy, foreground, background) =
-        interface IVsColorableItem with 
-            member x.GetDefaultColors(piForeground, piBackground) =
-#if DEBUG
-                Check.ArrayArgumentNotNullOrEmpty piForeground "piForeground"
-                Check.ArrayArgumentNotNullOrEmpty piBackground "piBackground"
-#endif
-                piForeground.[0] <- foreground
-                piBackground.[0] <- background
-                VSConstants.S_OK
-            member x.GetDefaultFontFlags(pdwFontFlags) =
-                pdwFontFlags <- 0u
-                VSConstants.S_OK
-            member x.GetDisplayName(pbstrName) =
-                pbstrName <- displayName.Force()
-                VSConstants.S_OK 
-        interface IVsMergeableUIItem with
-            member this.GetCanonicalName(s) =
-                s <- canonicalName
-                VSConstants.S_OK 
-            member this.GetDescription(s) =
-                s <- ""
-                VSConstants.S_OK 
-            member x.GetDisplayName(s) =
-                s <- displayName.Force()
-                VSConstants.S_OK 
-            member x.GetMergingPriority(i) =
-                i <- 0x1000  // as per docs, MS products should use a value between 0x1000 and 0x2000
-                VSConstants.S_OK 
-
-    /// A Single declaration.
-    type FSharpDeclaration( documentationProvider : IdealDocumentationProvider,
-                            decl:Declaration ) = 
-        member d.Kind with get() = decl.Glyph // Note: Snippet is Kind=205
-        member d.Shortcut with get() = ""
-        member d.Title with get() = decl.Name
-        member d.Description 
-            with get() = 
-                XmlDocumentation.BuildDataTipText(documentationProvider,decl.DescriptionText)
- 
-    type FSharpMethodListForAMethodTip(documentationProvider : IdealDocumentationProvider, methodsName, methods: Method[], nwpl : NoteworthyParamInfoLocations, snapshot : ITextSnapshot, isThisAStaticArgumentsTip : bool) =
-        inherit MethodListForAMethodTip() 
-
-        let tupleEnds = [| 
-            yield nwpl.LongIdStartLocation
-            yield nwpl.LongIdEndLocation
-            yield nwpl.OpenParenLocation
-            for i in 0..nwpl.TupleEndLocations.Length-2 do
-                let line,col = nwpl.TupleEndLocations.[i]
-                yield line, col-1  // col is the location of the comma, we want param to end just before it
-            let line, col = nwpl.TupleEndLocations.[nwpl.TupleEndLocations.Length-1]
-            yield line,(if nwpl.IsThereACloseParen then col-1 else col) 
-            |]
-
-        let safe i dflt f = if 0 <= i && i < methods.Length then f methods.[i] else dflt
-
-        let parameterRanges =
-            let ss = snapshot
-            [| 
-                // skip 2 because don't want longid start&end, just want open paren and tuple ends
-                for (sl,sc),(el,ec) in tupleEnds |> Seq.skip 2 |> Seq.pairwise do
-                    let span = ss.CreateTrackingSpan(FSharpMethodListForAMethodTip.MakeSpan(ss,sl,sc,el,ec), SpanTrackingMode.EdgeInclusive)
-                    yield span 
-            |]
-
-        do assert(methods.Length > 0)
-
-        static member MakeSpan(ss:ITextSnapshot, sl, sc, el, ec) =
-            let makeSnapshotPoint l c =
-                let lineNum, fsharpRangeIsPastEOF =
-                    // -1 because F# reports 1-based line nums, whereas VS wants 0-based
-                    if l - 1 <= ss.LineCount - 1 then
-                        l - 1, false
-                    else
-                        ss.LineCount - 1, true
-                let line = ss.GetLineFromLineNumber(lineNum)
-                line.Start.Add(if fsharpRangeIsPastEOF then line.Length else Math.Min(c, line.Length))
-            let start = makeSnapshotPoint sl sc
-            let end_  = makeSnapshotPoint el ec
-            assert(start.CompareTo(end_) <= 0)
-            (new SnapshotSpan(start, end_)).Span
-
-        override x.GetColumnOfStartOfLongId() = (snd nwpl.LongIdStartLocation)-1 // is 1-based, wants 0-based
-
-        override x.IsThereACloseParen() = nwpl.IsThereACloseParen
-
-        override x.GetNoteworthyParamInfoLocations() = tupleEnds
-
-        override x.GetParameterNames() = nwpl.NamedParamNames
-
-        override x.GetParameterRanges() = parameterRanges
-
-        override x.GetCount() = methods.Length
-
-        override x.GetDescription(index) = 
-            safe index "" (fun m -> XmlDocumentation.BuildMethodOverloadTipText(documentationProvider, m.Description))
-            
-        override x.GetType(index) = safe index "" (fun m -> m.Type)
-
-        override x.GetParameterCount(index) =  safe index 0 (fun m -> m.Parameters.Length) 
-            
-        override x.GetParameterInfo(index, parameter, nameOut, displayOut, descriptionOut) =
-            let name,display,description = safe index ("","","") (fun m -> 
-                                                                        let p = m.Parameters.[parameter]
-                                                                        p.Name,p.Display,p.Description )
-           
-            nameOut <- name
-            displayOut <- display
-            descriptionOut <- description
-
-        override x.GetName(_index) = methodsName
-
-        override x.OpenBracket = if isThisAStaticArgumentsTip then "<" else "("
-        override x.CloseBracket = if isThisAStaticArgumentsTip then ">" else ")"
-
-    /// A collections of declarations as would be returned by a dot-completion request.
-    //
-    // Note, the Declarations type inherited by this code is defined in the F# Project System C# code. This is the only implementation
-    // in the codebase, hence we are free to change it and refactor things (e.g. bring more things into F# code) 
-    // if we wish.
-    type FSharpDeclarations(declarations: FSharpDeclaration[], reason : BackgroundRequestReason) = 
-        
-        inherit Declarations()  
-
-        // Sort the declarations, NOTE: we used ORDINAL comparison here, this is "by design" from F# 2.0, partly because it puts lowercase last.
-        let declarations = declarations |> Array.sortWith (fun d1 d2 -> compare d1.Title d2.Title)
-        let mutable lastBestMatch = ""
-        let isEmpty = (declarations.Length = 0)
-
-        let tab = Dictionary()
-
-        // Given a prefix, narrow the items to the include the ones containing that prefix, and store in a lookaside table
-        // attached to this declaration set.
-        let trimmedDeclarations filterText : FSharpDeclaration[] = 
-            if reason = BackgroundRequestReason.DisplayMemberList then declarations 
-            elif tab.ContainsKey filterText then tab.[filterText] 
-            else 
-                let matcher = AbstractPatternMatcher.Singleton
-                let decls = 
-                    // Find the first prefix giving a non-empty declaration set after filtering
-                    seq { for i in filterText.Length-1 .. -1 .. 0 do 
-                                let filterTextPrefix = filterText.[0..i]
-                                match tab.TryGetValue filterTextPrefix with
-                                | true, decls -> yield decls
-                                | false, _ -> yield declarations |> Array.filter (fun s -> matcher.MatchSingleWordPattern(s.Title, filterTextPrefix)<>null) 
-                          yield declarations }
-                    |> Seq.tryFind (fun arr -> arr.Length > 0)
-                    |> (function None -> declarations | Some s -> s)
-                tab.[filterText] <- decls
-                decls
-
-        override decl.GetCount(filterText) = 
-            let decls = trimmedDeclarations filterText
-            decls.Length
-
-        override decl.GetDisplayText(filterText, index) =
-            let decls = trimmedDeclarations filterText
-            if (index >= 0 && index < decls.Length) then
-                decls.[index].Title
-            else ""
-
-        override decl.IsEmpty() = isEmpty
-
-        override decl.GetName(filterText, index) =
-            let decls = trimmedDeclarations filterText
-            if (index >= 0 && index < decls.Length) then
-                let item = decls.[index]
-                if (item.Kind = 205) then
-                    decls.[index].Shortcut
-                else 
-                    item.Title
-            else String.Empty
-
-        override decl.GetDescription(filterText, index) =
-            let decls = trimmedDeclarations filterText
-            if (index >= 0 && index < decls.Length) then
-                decls.[index].Description
-            else ""
-
-        override decl.GetGlyph(filterText, index) =
-            let decls = trimmedDeclarations filterText
-            //The following constants are the index of the various glyphs in the ressources of Microsoft.VisualStudio.Package.LanguageService.dll
-            if (index >= 0 && index < decls.Length) then
-                let item = decls.[index]
-                item.Kind
-            else 0
-
-        // This method is called to get the string to commit to the source buffer.
-        // Note that the initial extent is only what the user has typed so far.
-        override decl.OnCommit(filterText, index) =
-            // We intercept this call only to get the initial extent
-            // of what was committed to the source buffer.
-            let result = decl.GetName(filterText, index)
-            Microsoft.FSharp.Compiler.Lexhelp.Keywords.QuoteIdentifierIfNeeded result
-
-        override decl.IsCommitChar(commitCharacter) =
-            // Usual language identifier rules...
-            not (Char.IsLetterOrDigit(commitCharacter) || commitCharacter = '_')
-        
-        // A helper to aid in determining how much text is relevant to the items chosen in the completion list.
-        override decl.Reason = reason
-        
-        // Note, there is no real reason for this code to use byrefs, except that we're calling it from C#.
-        override decl.GetBestMatch(filterText, textSoFar, index : int byref, uniqueMatch : bool byref, shouldSelectItem : bool byref) =
-            let decls = trimmedDeclarations filterText
-            let compareStrings(s,t,l,b : bool) = System.String.Compare(s,0,t,0,l,b)
-            let tryFindDeclIndex text length ignoreCase = 
-                decls 
-                |> Array.tryFindIndex (fun d -> compareStrings(d.Title, text, length, ignoreCase) = 0)
-            // The best match is the first item that begins with the longest prefix of the 
-            // given word (value).  
-            let rec findMatchOfLength len ignoreCase = 
-                if len = 0 then
-                    let indexLastBestMatch = tryFindDeclIndex lastBestMatch lastBestMatch.Length ignoreCase
-                    match indexLastBestMatch with
-                    | Some index -> (index, false, false)
-                    | None -> (0,false, false)
-                else 
-                    let firstMatchingLenChars = tryFindDeclIndex textSoFar len ignoreCase
-                    match firstMatchingLenChars with
-                    | Some index -> 
-                        lastBestMatch <- decls.[index].Title
-                        let select = len = textSoFar.Length
-                        if (index <> decls.Length- 1) && (compareStrings(decls.[index+1].Title , textSoFar, len, ignoreCase) = 0) 
-                        then (index, false, select)
-                        else (index, select, select)
-                    | None -> 
-                        match ignoreCase with
-                        | false -> findMatchOfLength len true
-                        | true -> findMatchOfLength (len-1) false
-            let (i, u, p) = findMatchOfLength textSoFar.Length false
-            index <- i
-            uniqueMatch <- u
-            let preselect =
-                // select an item in the list if what the user has typed is a prefix...
-                p || (
-                    // ... or if the list has filtered down to a single item, and the user's text is still a 'match'
-                    // for example, "System.Console.WrL" will filter down to one, and still be a match, whereas
-                    // "System.Console.WrLx" will filter down to one, but no longer be a match
-                    decls.Length = 1 &&
-                    AbstractPatternMatcher.Singleton.MatchSingleWordPattern(decls.[0].Title, textSoFar)<>null
-                )
-            shouldSelectItem <- preselect
-
-        // This method is called after the string has been committed to the source buffer.
-        //
-        // Note: this override is a bit out of place as nothing in this type has anything to do with text buffers.
-        override decl.OnAutoComplete(_textView, _committedText, _commitCharacter, _index) =
-            // Would need special handling code for snippets.
-            '\000'
-
-
-    // ----------------------------------------------------------------------------------
-    // Provides functionality that is available based  on the untyped AST
-
-    // This type ia a little complex. 
-    //    -- Each time we get a new UntypedParseInfo, we create a new UntypedFSharpScope that "folds in" the
-    //       new region information while keeping the same unique identifiers for the regions in the text
-    //
-    //    -- The navigation items in the object are computed lazily 
-    
-    type UntypedFSharpScope(untypedParse:UntypedParseInfo, prevRegions, regionGenerator) =
-        
-        // Do we need to update the list?
-        let mutable navigationItems : NavigationItems option = None
-        let mutable displayedRegions = prevRegions
-
-        // Utilities
-        let copyTo (target:ArrayList) arr selector =
-            target.Clear()
-            for m in arr do 
-                let (m:DeclarationItem) = selector m
-                let (sc, sl), (ec, el) = m.Range 
-                let memb = new DropDownMember(m.Name, new TextSpan(iStartLine=sl - 1,iStartIndex=sc,iEndLine=el - 1,iEndIndex=ec), 
-                                              m.Glyph, DROPDOWNFONTATTR.FONTATTR_PLAIN)
-                target.Add(memb) |> ignore
-
-        let findDeclaration (declarations:'a[]) allowEqualEndLine (selector:'a -> DeclarationItem) line _col = 
-            let _, sel, _ = 
-              declarations
-              |> Array.fold (fun (n, idx, size) decl -> 
-                  // TODO this looks like an algorithm that was ad-hoc'd to deal with bad ranges from the interactiveChecker, maybe can be simplified now
-                  let (_, sl), (_, el) = (selector decl).Range
-                  if ((line >= sl) && (line < el || (allowEqualEndLine && el = line))) && (el - sl) < size then
-                    (n+1, n, el - sl) 
-                  else 
-                    (n+1, idx, size)                    
-                ) (0, -1, Int32.MaxValue)
-                
-            if sel<> -1 then sel else
-                let mutable lastBefore = -1
-                let mutable lastLine = -1
-                for i in 0 .. declarations.Length - 1 do
-                  let decl = declarations.[i]
-                  let (_, _sl), (_, el) = (selector decl).Range
-                  if el < line && el > lastLine then 
-                    lastBefore <- i
-                    lastLine <- el
-                if (lastBefore = -1 && declarations.Length > 0) 
-                then 0 else lastBefore 
-        
-        let ensureNavigationItemsUpToDate() =
-            if navigationItems.IsNone then
-                navigationItems <- Some(untypedParse.GetNavigationItems())
-        
-        member this.FileName  = untypedParse.FileName
-        member this.Regions = displayedRegions
-        member this.RegionGenerator = regionGenerator
-        
-        static member WithNewParseInfo(untypedParse:UntypedParseInfo, prev:UntypedFSharpScope option) =
-            match prev with
-            | Some(prev) -> 
-                let regs = 
-                    if (prev.FileName = untypedParse.FileName) then 
-                        prev.Regions 
-                    else 
-                        Map.empty 
-                new UntypedFSharpScope(untypedParse, regs, prev.RegionGenerator)
-            | None -> 
-                let generator = 
-                  let count = ref 0u
-                  (fun () -> count := !count + 1u; !count) // unchecked? overflow?
-                new UntypedFSharpScope(untypedParse, Map.empty, generator)
-                
-        // Synchronize...
-        member this.SynchronizeNavigationDropDown(file, line, col:int, dropDownTypes:ArrayList, dropDownMembers:ArrayList, selectedType:int byref, selectedMember:int byref) =    
-#if DEBUG            
-            use t = Trace.Call("LanguageService", "SynchronizeNavigationDropDown", fun _->sprintf " line=%d col=%d" line col)
-#endif
-            
-            try
-                let current = untypedParse.FileName
-                
-                if file <> current then
-                    dropDownTypes.Clear()
-                    dropDownTypes.Add(new DropDownMember("(Parsing project files)", new TextSpan(), -1, DROPDOWNFONTATTR.FONTATTR_GRAY)) |> ignore
-                    dropDownMembers.Clear()
-                    selectedType <- 0
-                    selectedMember <- -1
-                    true
-                else
-                    ensureNavigationItemsUpToDate () 
-                    
-                    // Test whether things have changed so that we don't update the dropdown every time
-                    copyTo dropDownTypes navigationItems.Value.Declarations (fun decl -> decl.Declaration)    
-                    let line = line + 1
-                    let selLeft = findDeclaration navigationItems.Value.Declarations true (fun decl -> decl.Declaration) line col
-                    selectedType <- selLeft
-                    match selLeft with 
-                    | n when n >= 0 -> 
-                        copyTo dropDownMembers (navigationItems.Value.Declarations.[n].Nested) id
-                        selectedMember <- findDeclaration navigationItems.Value.Declarations.[n].Nested true id line col
-                    | _ -> 
-                        selectedMember <- -1
-                    true
-            with e-> 
-                Assert.Exception(e)
-                reraise()        
-
-
-        member x.ValidateBreakpointLocation(line,col) = 
-            untypedParse.ValidateBreakpointLocation(line,col)
-                
-        member x.GetHiddenRegions(file) =
-            ensureNavigationItemsUpToDate()
-            let current = untypedParse.FileName
-            match navigationItems with 
-            | Some(res) when file = current ->
-                res.Declarations 
-                  |> Array.filter(fun decl -> not(decl.Declaration.IsSingleTopLevel))
-                  |> Array.fold (fun (toCreate, toUpdate:Map<_,_>) decl ->
-                    let declKey = decl.Declaration.UniqueName
-                    let (sc, sl), (ec, el) = decl.Declaration.BodyRange                    
-                    let context = new TextSpan(iEndIndex = ec, iEndLine = el-1, iStartIndex = sc, iStartLine = sl-1)
-                    match (Map.tryFind declKey displayedRegions) with
-                    | Some(uniqueId) ->
-                        // do not add if the region hasn't changed
-                        (toCreate, toUpdate.Add(uniqueId, context))
-                    | None ->
-                        let id = regionGenerator()
-                        let reg = 
-                          new NewHiddenRegion
-                            (iType = int HIDDEN_REGION_TYPE.hrtCollapsible, dwBehavior = uint32 HIDDEN_REGION_BEHAVIOR.hrbClientControlled,
-                             dwState = uint32 HIDDEN_REGION_STATE.hrsExpanded, tsHiddenText = context, pszBanner = null, dwClient = id)
-                        displayedRegions <- displayedRegions.Add(declKey, id)
-                        (reg::toCreate, toUpdate)
-                        ) ([], Map.empty)
-            | _ -> 
-                displayedRegions <- Map.empty
-                [], Map.empty
-        
-        member x.ClearDisplayedRegions() =
-            displayedRegions <- Map.empty
-            
-                   
-    /// The scope object is the result of computing a particular typecheck. It may be queried for things like
-    /// data tip text, member completion and so forth.
-    type FSharpScope(/// The recent result of parsing
-                     untypedResults: UntypedParseInfo,
-                     /// Line/column/snapshot of BackgroundRequest that initiated creation of this scope
-                     brLine:int, brCol:int, brSnapshot:ITextSnapshot,
-                     /// The possibly staler result of typechecking
-                     typedResults: TypeCheckResults,
-                     /// The project
-                     projectSite: IProjectSite,
-                     /// The text view
-                     view: IVsTextView,
-                     /// The colorizer for this view (though why do we need to be lazy about creating this?)
-                     colorizer: Lazy,
-                     /// A service that will provide Xml Content
-                     documentationProvider : IdealDocumentationProvider
-                     ) = 
-        inherit AuthoringScope() 
-
-        // go ahead and compute this now, on this background thread, so will have info ready when UI thread asks
-        let noteworthyParamInfoLocations = untypedResults.FindNoteworthyParamInfoLocations(brLine, brCol)
-
-        let lastRequestedMethodListForMethodTip : MethodListForAMethodTip option ref = ref None
-
-        member scope.LastRequestedMethodListForMethodTipUsingFallback() = 
-            lastRequestedMethodListForMethodTip := None
-
-        member scope.InitLastRequestedMethodListForMethodTipUsingFallback() = 
-            lastRequestedMethodListForMethodTip := Some (scope.DoGetMethodListForAMethodTip(true))
-
-        static member HasTextChangedSinceLastTypecheck (curTextSnapshot: ITextSnapshot, oldTextSnapshot: ITextSnapshot, ((sl:int,sc:int),(el:int,ec:int))) = 
-            // compare the text from (sl,sc) to (el,ec) to see if it changed from the old snapshot to the current one
-            // (sl,sc)-(el,ec) are line/col positions in the current snapshot
-            if el >= oldTextSnapshot.LineCount then
-                true  // old did not even have 'el' many lines, note 'el' is zero-based
-            else
-                assert(el < curTextSnapshot.LineCount)
-                let oldFirstLine = oldTextSnapshot.GetLineFromLineNumber sl  
-                let oldLastLine = oldTextSnapshot.GetLineFromLineNumber el
-                if oldFirstLine.Length < sc || oldLastLine.Length < ec then
-                    true  // one of old lines was not even long enough to contain the position we're looking at
-                else
-                    let posOfStartInOld = oldFirstLine.Start.Position + sc
-                    let posOfEndInOld = oldLastLine.Start.Position + ec
-                    let curFirstLine = curTextSnapshot.GetLineFromLineNumber sl  
-                    let curLastLine = curTextSnapshot.GetLineFromLineNumber el  
-                    assert(curFirstLine.Length >= sc)
-                    assert(curLastLine.Length >= ec)
-                    let posOfStartInCur = curFirstLine.Start.Position + sc
-                    let posOfEndInCur = curLastLine.Start.Position + ec
-                    if posOfEndInCur - posOfStartInCur <> posOfEndInOld - posOfStartInOld then
-                        true  // length of text between two endpoints changed
-                    else
-                        let mutable oldPos = posOfStartInOld
-                        let mutable curPos = posOfStartInCur
-                        let mutable ok = true
-                        while ok && oldPos < posOfEndInOld do
-                            let oldChar = oldTextSnapshot.[oldPos]
-                            let curChar = curTextSnapshot.[curPos]
-                            if oldChar <> curChar then
-                                ok <- false
-                            oldPos <- oldPos + 1
-                            curPos <- curPos + 1
-                        not ok
-
-        member __.GetExtraColorizations() =  typedResults.GetExtraColorizations()
-
-        override scope.GetDataTipText(line, col) =
-            // in cases like 'A' when cursor in on '<' there is an ambiguity that cannot be resolved based only on lexer information
-            // '<' can be treated both as operator and as part of identifier
-            // in this case we'll do 2 passes:
-            // 1. treatTokenAsIdentifier=false - we'll pick raw token under the cursor and try find it among resolved names, is attempt was successful - great we are done, otherwise
-            // 2. treatTokenAsIdentifier=true - even if raw token was recognized as operator we'll use different branch 
-            // that calls QuickParse.GetCompleteIdentifierIsland and then tries previous column...
-            let rec getDataTip(alwaysTreatTokenAsIdentifier) =
-                let token = colorizer.Value.GetTokenInfoAt(VsTextLines.TextColorState (VsTextView.Buffer view),line,col)
-#if DEBUG
-                use t = Trace.Call("LanguageService",
-                                   "GetDataTipText",
-                                   fun _->sprintf " line=%d col=%d tokeninfo=%A" line col token.Token)
-#endif
-
-                try
-                    let lineText = VsTextLines.LineText (VsTextView.Buffer view) line
-                    
-                    // If we're not on the first column; we don't find any identifier, we also look at the previous one
-                    // This allows us to do Ctrl+K, I in this case:  let f$ x = x  
-                    // Note: this is triggered by hovering over the next thing after 'f' as well - even in 
-                    //   case like "f(x)" when hovering over "(", but MPF doesn't show tooltip in that case
-                    // Note: MPF also doesn't show the tooltip if we're past the end of the line (Ctrl+K, I after 
-                    //  the last character on the line), so tooltip isn't shown in that case (suggestion 4371)
-                    
-                    // Try the actual column first...
-                    let tokenTag, col, possibleIdentifier, makeSecondAttempt =
-                      if token.Type = TokenType.Operator && not alwaysTreatTokenAsIdentifier then                      
-                          let tag, startCol, endCol = OperatorToken.asIdentifier token                      
-                          let op = lineText.Substring(startCol, endCol - startCol)
-                          tag, startCol, Some(op, endCol, false), true
-                      else
-                          match (QuickParse.GetCompleteIdentifierIsland false lineText col) with
-                          | None when col > 0 -> 
-                              // Try the previous column & get the token info for it
-                              let tokenTag = 
-                                  let token = colorizer.Value.GetTokenInfoAt(VsTextLines.TextColorState (VsTextView.Buffer view),line,col - 1)
-                                  token.Token 
-                              let possibleIdentifier = QuickParse.GetCompleteIdentifierIsland false lineText (col - 1)
-                              tokenTag, col - 1, possibleIdentifier, false
-                          | _ as poss -> token.Token, col, poss, false
-
-#if DEBUG
-                    let isDiagnostic = Keyboard.IsKeyPressed Keyboard.Keys.Shift
-#else
-                    let isDiagnostic = false
-#endif 
-                    let diagnosticTipSpan = TextSpan(iStartLine=line, iEndLine=line, iStartIndex=col, iEndIndex=col+1)
-                    match possibleIdentifier with 
-                    | None -> (if isDiagnostic then "No identifier found at this position." else ""),diagnosticTipSpan
-                    | Some (s,colAtEndOfNames, isQuotedIdentifier) -> 
-
-                        // REVIEW: Need to capture and display XML
-                        let diagnosticText lead = 
-                            let errorText = String.Concat(typedResults.Errors |> Seq.truncate 5 |> Seq.map(fun pi->sprintf "%s\n" pi.Message)|>Seq.toArray)
-                            let errorText = match errorText.Length with 0->"" | _->"Errors:\n"+errorText
-                            let dataTipText = sprintf "%s\nIsland(col=%d,token=%d):\n%A\n%s%s" lead col tokenTag possibleIdentifier (projectSite.DescriptionOfProject()) errorText
-                            dataTipText
-
-                        if typedResults.HasFullTypeCheckInfo then 
-                            let qualId  = PrettyNaming.GetLongNameFromString s
-#if DEBUG                            
-                            Trace.PrintLine("LanguageService", (fun () -> sprintf "Got qualId = %A" qualId))
-#endif
-                            let parserState = 
-#if DEBUG
-                                match qualId with
-                                | [x] ->
-                                    match Int32.TryParse x with
-                                    | true, v -> 
-                                        match ParserState.Get v with
-                                        | Some (lines, lastWriteTime, path) ->
-                                            Some [ yield sprintf "Listing file: %s" path
-                                                   yield sprintf "Last write time: %A" lastWriteTime
-                                                   yield! lines ]
-                                        | None -> 
-                                            Some [ "Grammar debugging requires FSYacc listing file"
-                                                   "FSYacc puts listing in the same folder with output file but with extension 'fsyacc.output'."
-                                                   "If output file is not set - then listing will be placed in the folder with input file and will use the name of input file (with extension fsyacc.output)"
-                                                   "run 'fsyacc -v "
-                                                   sprintf "Create %s env variable with value - path to the listing file" ParserState.FsyListingVariableName ]
-                                    | _ -> None
-                                | _ -> None
-#else
-                                None
-#endif
-                                                
-                            // Corrrect the identifier (e.g. to correctly handle active pattern names that end with "BAR" token)
-                            let tokenTag = QuickParse.CorrectIdentifierToken s tokenTag
-                            let dataTip = typedResults.GetDataTipText((line, colAtEndOfNames), lineText, qualId, tokenTag)
-#if DEBUG
-                            Trace.PrintLine("LanguageService", fun () -> sprintf "Got datatip=%A" dataTip)
-#endif
-                            match dataTip with
-                            | DataTipText [] when makeSecondAttempt -> getDataTip true
-                            | _ -> 
-                            if isDiagnostic then 
-                                let text = sprintf "plid:%A\ndataTip:\n%A" qualId dataTip
-                                let text = 
-                                    match parserState with
-                                    | None -> text
-                                    | Some lines ->
-                                        sprintf "%s\n%s\n" text (String.concat "\n" lines)
-                                diagnosticText text, diagnosticTipSpan
-                            else
-                                let dataTipText =  XmlDocumentation.BuildDataTipText(documentationProvider, dataTip)
-
-                                // The data tip is located w.r.t. the start of the last identifier
-                                let sizeFixup = if isQuotedIdentifier then 4 else 0
-                                let lastStringLength = (qualId |> List.rev |> List.head).Length  + sizeFixup
-#if DEBUG
-                                Trace.PrintLine("LanguageService", (fun () -> sprintf "Got dataTip = %A, colOfEndOfText = %d, lastStringLength = %d, line = %d" dataTipText colAtEndOfNames lastStringLength line))
-#endif
-
-                                // This is the span of text over which the data tip is active. If the mouse moves away from it then the
-                                // data tip goes away
-                                let dataTipSpan = TextSpan(iStartLine=line, iEndLine=line, iStartIndex=max 0 (colAtEndOfNames-lastStringLength), iEndIndex=colAtEndOfNames)
-                                (dataTipText, dataTipSpan)                                
-                        else
-                            "Bug: TypeCheckInfo option was None", diagnosticTipSpan
-                with e-> 
-                    Assert.Exception(e)
-                    reraise()
-
-            getDataTip false
-            
-
-        static member IsReasonRequiringSyncParse(reason) =
-            match reason with
-            | BackgroundRequestReason.MethodTip // param info...
-            | BackgroundRequestReason.MatchBracesAndMethodTip // param info...
-            | BackgroundRequestReason.CompleteWord | BackgroundRequestReason.MemberSelect | BackgroundRequestReason.DisplayMemberList // and intellisense-completion...
-                -> true // ...require a sync parse (so as to call FindNoteworthyParamInfoLocations and GetRangeOfExprLeftOfDot, respectively)
-            | _ -> false
-
-        /// Intellisense autocompletions
-        []
-        override scope.GetDeclarations(textSnapshot, line, col, reason) =
-            ignore () // to be able to place a breakpoint
-            assert(FSharpScope.IsReasonRequiringSyncParse(reason))
-            async {
-                let tokenInfo = colorizer.Value.GetTokenInfoAt(VsTextLines.TextColorState (VsTextView.Buffer view),line,col)
-                let prevCol = if (col <= 0) then 0 else col - 1  // Note: check <= 0 to show FxCop that there is no underflow risk
-                let prevTokenInfo = colorizer.Value.GetTokenInfoAt(VsTextLines.TextColorState (VsTextView.Buffer view),line,prevCol)
-                // denotes if we got token that matches exact specified position or it was just last token before EOF
-                let exactMatch = col >= tokenInfo.StartIndex && col <= tokenInfo.EndIndex
-#if DEBUG
-                use _t = Trace.Call("LanguageService",
-                                   "GetDeclarations",
-                                   fun _->sprintf " line=%d col=%d reason=%A" line col reason)
-#endif
-                try
-                    if exactMatch && 
-                                (
-                                    (tokenInfo.Color = TokenColor.Comment && prevTokenInfo.Color = TokenColor.Comment) || 
-                                    (tokenInfo.Color = TokenColor.String  && prevTokenInfo.Color = TokenColor.String)
-                                ) then
-                        // We don't want to show info in comments & strings (in case of exact match)
-                        // (but we want to show it if the thing before or after isn't comment/string)
-                        dprintf "GetDeclarations: We won't show anything in comment or string.\n"
-                        return null 
-                    
-                    elif typedResults.HasFullTypeCheckInfo then 
-                        let lineText = VsTextLines.LineText (VsTextView.Buffer view) line
-                        let colorState = VsTextLines.TextColorState (VsTextView.Buffer view)
-                        let state = VsTextColorState.GetColorStateAtStartOfLine colorState line
-                        let tokens = colorizer.Value.GetFullLineInfo(lineText, state)
-                        // An ugly check to suppress declaration lists at 'System.Int32.'
-                        if reason = BackgroundRequestReason.MemberSelect && col > 1 && lineText.[col-2]='.' then
-                            //           System.Int32..Parse("42")
-                            // just pressed dot here  ^
-                            // don't want any completion for that, we only trigger a MemberSelect on the ".." token in order to be able to get completion
-                            //           System.Int32..Parse("42")
-                            //                 here  ^
-                            return null
-                        // An ugly check to suppress declaration lists at 'member' declarations
-                        elif QuickParse.TestMemberOrOverrideDeclaration tokens then  
-                            return null
-                        else
-                            let untypedParseInfoOpt =
-                                if reason = BackgroundRequestReason.MemberSelect || reason = BackgroundRequestReason.DisplayMemberList || reason = BackgroundRequestReason.CompleteWord then
-                                    Some untypedResults
-                                else
-                                    None
-                            // TODO don't use QuickParse below, we have parse info available
-                            let plid = QuickParse.GetPartialLongNameEx(lineText, col-1) // Subtract one to convert to zero-relative
-                            ignore plid // for breakpoint
-
-                            let detectTextChange (oldTextSnapshotInfo: obj, range) = 
-                                let oldTextSnapshot = oldTextSnapshotInfo :?> ITextSnapshot
-                                FSharpScope.HasTextChangedSinceLastTypecheck (textSnapshot, oldTextSnapshot, range)
-                            let! decls = typedResults.GetDeclarations(untypedParseInfoOpt,(line, col), lineText, plid, detectTextChange)
-                            let declarations =  decls.Items |> Array.map (fun d -> FSharpDeclaration(documentationProvider, d))
-                            return (new FSharpDeclarations(declarations, reason) :> Declarations) 
-                    else
-                        dprintf "GetDeclarations found no TypeCheckInfo in ParseResult.\n"
-                        return null 
-                with e-> 
-                    Assert.Exception(e)
-                    raise e
-                    return null
-            }
-
-        /// Get methods for parameter info
-        override scope.GetMethodListForAMethodTip(useNameResolutionFallback) =
-            if useNameResolutionFallback then
-                // lastRequestedMethodListForMethodTip should be initialized in the ExecuteBackgroundRequest
-                // if not - just return null
-                defaultArg lastRequestedMethodListForMethodTip.Value null
-            else
-                // false is passed only from unit tests
-                scope.DoGetMethodListForAMethodTip(false)
-        
-        member scope.DoGetMethodListForAMethodTip(useNameResolutionFallback) =
-#if DEBUG
-            use t = Trace.Call("LanguageService",
-                               "GetMethodListForAMethodTip",
-                               fun _->sprintf " line=%d col=%d" brLine brCol)
-#endif
-            try
-                // we need some typecheck info, even if stale, in order to look up e.g. method overload types/xmldocs
-                if typedResults.HasFullTypeCheckInfo then 
-
-                    // we need recent parse info to e.g. know how many commas and thus how many args there are
-                    match noteworthyParamInfoLocations with
-                    | Some nwpl -> 
-                        // Note: this may alternatively workaround some parts of 90778 - the real fix for that is to have before-overload-resolution name-sink work correctly.
-                        // However it also deals with stale typecheck info that may not have recorded name resolutions for a recently-typed long-id.
-                        let names = 
-                            if not useNameResolutionFallback then
-                                None
-                            else
-                                Some nwpl.LongId
-                        // "names" is a long-id that we can fallback-lookup in the local environment if captured name resolutions finds nothing at the location.
-                        // This can happen e.g. if you are typing quickly and the typecheck results are stale enough that you don't have a captured resolution for
-                        // the name you just typed, but fresh enough that you do have the right name-resolution-environment to look up the name.
-                        let lidEndLine,lidEndCol = nwpl.LongIdEndLocation
-                        let methods = typedResults.GetMethods((lidEndLine-1, lidEndCol-1), "", names)  // -1 because wants 0-based
-                        
-                        // If the name is an operator ending with ">" then it is a mistake 
-                        // we can't tell whether "  >(" is a generic method call or an operator use 
-                        // (it depends on the previous line), so we fitler it
-                        //
-                        // Note: this test isn't particularly elegant - encoded operator name would be something like "( ...> )"                        
-                        if (methods.Methods.Length = 0 || methods.Name.EndsWith("> )")) then
-                            null
-                        else                    
-                            // "methods" contains both real methods for this longId, as well as static-parameters in the case of type providers.
-                            // They "conflict" for cases of TP(...) (calling a constructor, no static args provided) versus TP<...> (static args), since
-                            // both point to the same longId.  However we can look at the character at the 'OpenParen' location and see if it is a '(' or a '<' and then
-                            // filter the "methods" list accordingly.
-                            let isThisAStaticArgumentsTip =
-                                let parenLine, parenCol = nwpl.OpenParenLocation 
-                                let textAtOpenParenLocation =
-                                    if brSnapshot=null then
-                                        // we are unit testing, use the view
-                                        let _hr, buf = view.GetBuffer()
-                                        let _hr, s = buf.GetLineText(parenLine-1, parenCol-1, parenLine-1, parenCol)  // -1 because F# reports 1-based line nums, whereas VS wants 0-based
-                                        s
-                                    else
-                                        // we are in the product, use the ITextSnapshot
-                                        brSnapshot.GetText(FSharpMethodListForAMethodTip.MakeSpan(brSnapshot, parenLine, parenCol-1, parenLine, parenCol))
-                                if textAtOpenParenLocation = "<" then
-                                    true
-                                else
-                                    false  // note: textAtOpenParenLocation is not necessarily otherwise "(", for example in "sin 42.0" it is "4"
-                            let filteredMethods =
-                                [| for m in methods.Methods do 
-                                        if m.IsStaticArguments = isThisAStaticArgumentsTip then   // need to distinguish TP<...>(...)  angle brackets tip from parens tip
-                                            yield m |]
-                            if filteredMethods.Length <> 0 then
-                                FSharpMethodListForAMethodTip(documentationProvider, methods.Name, filteredMethods, nwpl, brSnapshot, isThisAStaticArgumentsTip) :> MethodListForAMethodTip
-                            else
-                                null
-                    | _ -> 
-                        null
-                else
-                    dprintf "GetMethodListForAMethodTip found no TypeCheckInfo in ParseResult.\n"
-                    null
-            with e-> 
-                Assert.Exception(e)
-                reraise()
-
-        override this.GetF1KeywordString(span : TextSpan, context : IVsUserContext) : unit =
-            let shouldTryToFindIdentToTheLeft (token : TokenInformation) =
-                match token.CharClass with
-                |   TokenCharKind.WhiteSpace -> true
-                |   TokenCharKind.Delimiter -> true
-                |   _ -> false
-            let keyword =
-                let line = span.iStartLine
-                let lineText = VsTextLines.LineText (VsTextView.Buffer view) line                       
-                let tokenInformation, col =
-                    let col = 
-                        if span.iStartIndex = lineText.Length && span.iStartIndex > 0 then
-                            // if we are at the end of the line, we always step back one character
-                            span.iStartIndex - 1
-                        else
-                            span.iStartIndex
-                    let textColorState = VsTextLines.TextColorState (VsTextView.Buffer view)
-                    match colorizer.Value.GetTokenInformationAt(textColorState,line,col) with
-                    | (Some token) as original when col > 0 && shouldTryToFindIdentToTheLeft token ->
-                        // try to step back one char
-                        match colorizer.Value.GetTokenInformationAt(textColorState,line,col-1) with
-                        | (Some token) as newInfo when token.CharClass <> TokenCharKind.WhiteSpace -> newInfo, col - 1
-                        |   _ -> original, col
-                    | otherwise -> otherwise, col
-                match tokenInformation with
-                |   None -> None
-                |   Some token ->
-                        match token.CharClass, token.ColorClass with
-                        |   TokenCharKind.Keyword, _
-                        |   TokenCharKind.Operator, _ 
-                        |   _, TokenColorKind.PreprocessorKeyword ->
-                                lineText.Substring(token.LeftColumn, token.RightColumn - token.LeftColumn + 1) + "_FS" |> Some
-                                
-                        |   (TokenCharKind.Comment|TokenCharKind.LineComment), _ -> Some "comment_FS"
-                                
-                        |   TokenCharKind.Identifier, _ ->            
-                                try
-                                    let lineText = VsTextLines.LineText (VsTextView.Buffer view) line
-                                    let possibleIdentifier = QuickParse.GetCompleteIdentifierIsland false lineText col
-                                    match possibleIdentifier with
-                                    |   None -> None // no help keyword
-                                    |   Some(s,colAtEndOfNames, _) ->
-                                            if typedResults.HasFullTypeCheckInfo then 
-                                                let qualId = PrettyNaming.GetLongNameFromString s
-                                                match typedResults.GetF1Keyword((line,colAtEndOfNames), lineText, qualId) with
-                                                | Some s -> Some s
-                                                | None -> None 
-                                            else None                           
-                                with e ->
-                                    Assert.Exception (e)
-                                    reraise()
-                        | _ -> None
-            match keyword with
-            |   Some f1Keyword ->
-                    context.AddAttribute(VSUSERCONTEXTATTRIBUTEUSAGE.VSUC_Usage_Filter, "devlang", "fsharp") |> ignore
-                    // TargetFrameworkMoniker is not set for files that are not part of project (scripts and orphan fs files)
-                    if not (String.IsNullOrEmpty projectSite.TargetFrameworkMoniker) then
-                        context.AddAttribute(VSUSERCONTEXTATTRIBUTEUSAGE.VSUC_Usage_Filter, "TargetFrameworkMoniker", projectSite.TargetFrameworkMoniker) |> ignore
-                    context.AddAttribute(VSUSERCONTEXTATTRIBUTEUSAGE.VSUC_Usage_LookupF1_CaseSensitive, "keyword", f1Keyword) |> ignore
-                    ()
-            |   None -> ()
-
-          
-        // for tests
-        member this.GotoDefinition (textView, line, column) =
-            GotoDefinition.GotoDefinition (colorizer.Value, typedResults, textView, line, column)
-
-        override this.Goto (textView, line, column) =
-            GotoDefinition.GotoDefinition (colorizer.Value, typedResults, textView, line, column)
-
-
-                
-open Implementation
-
-/// This class defines capabilities of the language service. 
-/// CodeSense = true\false, for example
-type FSharpLanguagePreferences(site, langSvc, name) = 
-    inherit LanguagePreferences(site, langSvc, name) 
-
-type ExecuteBackgroundRequestData =
-    {
-        projectSite : IProjectSite
-        checkOptions : CheckOptions
-        projectFileName : string
-        interactiveChecker : InteractiveChecker
-        colorizer : Lazy
-    }
-type FSharpBackgroundRequest(line, col, info, sourceText, snapshot : ITextSnapshot, 
-                             methodTipMiscellany : MethodTipMiscellany, fileName, reason, view, sink, 
-                             source:ISource, timestamp:int, synchronous:bool,
-                             executeBackgroundRequestData : Lazy option) = 
-    inherit BackgroundRequest(line, col, info, sourceText, snapshot, methodTipMiscellany, fileName, reason, view, sink, source, timestamp, synchronous)
-
-    member this.ExecuteBackgroundRequestData = executeBackgroundRequestData
-    member this.TryGetColorizer() = match executeBackgroundRequestData with None -> None | Some data -> Some (data.Force().colorizer.Force())
-
-// Container class that delays loading of FSharp.Compiler.dll compiler types until they're actually needed
-type internal InteractiveCheckerContainer(interactiveChecker) =
-    member this.InteractiveChecker = interactiveChecker
-
-/// LanguageService state. 
-//
-// Note: It appears that a load of this type (+ a construction of an instance) should not load FSharp.Compiler.dll. This is subtle
-// because it depends on deferred loading characteristics of the CLR. The type InteractiveCheckerContainer is an (otherwise 
-// unnecessary) indirection holding the types referenced in FSharp.Compiler.dll. This is sufficient to delay loading.
-type internal LanguageServiceState() =
-    static let colorizerGuid = new Guid("{A2976312-7D71-4BB4-A5F8-66A08EBF46C8}") // Guid for colorizwed user data on IVsTextBuffer
-    let mutable serviceProvider:ServiceProvider option = None
-    let mutable interactiveCheckerContainerOpt:InteractiveCheckerContainer option = None
-    let mutable artifacts:Artifacts option = None
-    let mutable preferences:LanguagePreferences option = None
-    let mutable documentationProvider:IdealDocumentationProvider option = None
-    let mutable sourceFactory : (IVsTextLines -> IdealSource) option = None
-    let mutable dirtyForTypeCheckFiles : Set = Set.empty
-    let mutable isInitialized = false
-    let mutable unhooked = false
-    let mutable untypedParseScope : UntypedFSharpScope option = None
-    let mutable enableStandaloneFileIntellisense = true
-    let outOfDateProjectFileNames = new System.Collections.Generic.HashSet()
-    
-    member this.InteractiveChecker = 
-        if not this.IsInitialized then raise (Error.UseOfUninitializedLanguageServiceState)
-        
-        match interactiveCheckerContainerOpt with 
-        | Some interactiveCheckerContainer -> interactiveCheckerContainer.InteractiveChecker 
-        | None ->
-            let notifyFileTypeCheckStateIsDirty = NotifyFileTypeCheckStateIsDirty (fun filename -> UIThread.Run(fun () -> this.NotifyFileTypeCheckStateIsDirty(filename)))
-            let interactiveChecker = InteractiveChecker.Create(notifyFileTypeCheckStateIsDirty)
-            let pc = InteractiveCheckerContainer(interactiveChecker)
-            interactiveCheckerContainerOpt <- Some pc
-            interactiveChecker
-
-    member this.Artifacts = 
-        if not this.IsInitialized then raise (Error.UseOfUninitializedLanguageServiceState)
-        match artifacts with 
-        | Some artifacts -> artifacts
-        | None-> 
-            let a = new Artifacts()
-            artifacts <- Some a
-            a
-        
-    member this.Preferences = 
-        if this.Unhooked then raise (Error.UseOfUnhookedLanguageServiceState)
-        if not this.IsInitialized then raise (Error.UseOfUninitializedLanguageServiceState)
-        preferences.Value
-        
-    member this.ServiceProvider = 
-        if not this.IsInitialized then raise (Error.UseOfUninitializedLanguageServiceState)
-        match serviceProvider with 
-        | Some serviceProvider -> serviceProvider
-        | None->failwith "ServiceProvider not available"   
-        
-    member this.SourceFactory = 
-        if not this.IsInitialized then raise (Error.UseOfUninitializedLanguageServiceState)
-        match sourceFactory with 
-        | Some sourceFactory -> sourceFactory
-        | None->failwith "SourceFactory not available"           
-        
-    member this.UntypedParseScope with get() = untypedParseScope and set v = untypedParseScope <- v
-    member this.IsInitialized = isInitialized
-    member this.Unhooked = unhooked
-    member this.DocumentationProvider = documentationProvider.Value
-    
-    /// Construct a new LanguageService state
-    static member Create() = LanguageServiceState()
-    
-    /// Handle late intialization pieces
-    member this.Initialize 
-                (sp:ServiceProvider,
-                 dp:IdealDocumentationProvider, 
-                 prefs:LanguagePreferences,
-                 enableStandaloneFileIntellisenseFlag:bool,
-                 createSource:IVsTextLines -> IdealSource) = 
-#if DEBUG                
-        use t = Trace.CallByThreadNamed("LanguageService",
-                                        "LanguageServiceState::Initialize",
-                                        "UI", // Name this thread.
-                                        fun _->"")
-#endif                                        
-        if this.Unhooked then raise (Error.UseOfUnhookedLanguageServiceState)        
-        
-        isInitialized<-true
-        unhooked<-false
-        
-        serviceProvider<-Some sp
-        documentationProvider<-Some dp
-        preferences<-Some prefs
-        enableStandaloneFileIntellisense <- enableStandaloneFileIntellisenseFlag
-
-        sourceFactory<-Some createSource
-
-    
-    // This method is executed on the UI thread
-    member this.CreateBackgroundRequest(line : int, col : int, info : TokenInfo, sourceText : string, snapshot : ITextSnapshot, methodTipMiscellany : MethodTipMiscellany, 
-                                         fileName : string, reason : BackgroundRequestReason, view : IVsTextView,
-                                         sink : AuthoringSink, source : ISource, timestamp : int, synchronous : bool) : BackgroundRequest =
-        let backgroundRequestData =
-            match sourceText with
-            |   null -> 
-                    // sourceText being null indicates that the cached results for this request will be used, so 
-                    // ExecuteBackgroundRequest will not be called.                    
-                    None 
-            |   _ ->       
-                    let colorizer =
-                        lazy                                
-                            let tl = Com.ThrowOnFailure1(view.GetBuffer())
-                            this.GetColorizer(tl)                         
-                    if SourceFile.MustBeSingleFileProject(fileName) then
-                        let data = 
-                            lazy // For scripts, GetCheckOptionsFromScriptRoot involves parsing and sync op, so do it on language service thread later
-                                // This portion is executed on the language service thread
-                                let timestamp = if source=null then System.DateTime(2000,1,1) else source.OpenedTime // source is null in unit tests
-                                let checkOptions = this.InteractiveChecker.GetCheckOptionsFromScriptRoot(fileName, sourceText, timestamp) // REVIEW: Could pass in version for caching. SHOULD ALLOW CACHING when not Full Parse
-                                let projectSite = ProjectSiteOptions.ToProjectSite(fileName, checkOptions)
-                                { projectSite = projectSite
-                                  checkOptions = checkOptions 
-                                  projectFileName = projectSite.ProjectFileName()
-                                  interactiveChecker = this.InteractiveChecker
-                                  colorizer = colorizer } 
-                        Some data
-                    else 
-                        // This portion is executed on the UI thread.
-                        // For projects, we need to access RDT on UI thread, so do it now
-                        let projectSite = this.Artifacts.FindOwningProject(this.ServiceProvider.Rdt,fileName,enableStandaloneFileIntellisense)
-                        let checkOptions = ProjectSiteOptions.Create(projectSite, fileName)                            
-                        let projectFileName = projectSite.ProjectFileName()
-                        let data = 
-                            {   projectSite = projectSite
-                                checkOptions = checkOptions 
-                                projectFileName = projectFileName 
-                                interactiveChecker = this.InteractiveChecker
-                                colorizer = colorizer
-                            } 
-                        Some (Lazy<_>.CreateFromValue data)
-
-        let br =
-            new FSharpBackgroundRequest(line, col, info, sourceText, snapshot, methodTipMiscellany, fileName, reason, view, sink, source, timestamp, synchronous, 
-                                        backgroundRequestData)
-        br :> BackgroundRequest 
-
-    member this.NotifyFileTypeCheckStateIsDirty(filename) = 
-#if DEBUG
-        Trace.PrintLine("ChangeEvents", fun _ -> sprintf "HandleBackgroundBeforeTypeCheckFile(%s)" filename)
-#endif
-        dirtyForTypeCheckFiles <- dirtyForTypeCheckFiles.Add filename
-
-    /// Clear all language service caches and finalize all transient references to compiler objects
-    member this.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() = 
-        if this.Unhooked then raise (Error.UseOfUnhookedLanguageServiceState)
-        if this.IsInitialized then
-            this.InteractiveChecker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients()
-
-    /// Unhook the object. These are the held resources that need to be disposed.
-    member this.Unhook() =
-        if this.Unhooked then raise (Error.UseOfUnhookedLanguageServiceState)
-        if (this.IsInitialized) then
-            // Dispose the preferences.
-            if this.Preferences<>null then this.Preferences.Dispose()
-            // Stop the background compile.
-            // here we refer to interactiveCheckerContainerOpt directly to avoid triggering its creation
-            match interactiveCheckerContainerOpt with
-            | Some container -> 
-                let checker = container.InteractiveChecker
-                checker.StopBackgroundCompile()
-                checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients()
-            | None -> ()
-            
-            serviceProvider <- None
-            interactiveCheckerContainerOpt <- None  // TODO: DISPOSAL: Dispose here
-            artifacts<-None
-            preferences<-None
-            documentationProvider <- None
-            unhooked<-true
-    
-    /// Respond to project settings changes
-    member this.OnProjectSettingsChanged(site:IProjectSite) = 
-        // The project may have changed its references.  These would be represented as 'dependency files' of each source file.  Each source file will eventually start listening
-        // for changes to those dependencies, at which point we'll get OnFilesChanged notifications.  Until then, though, we just 'make a note' that this project is out of date.
-        outOfDateProjectFileNames.Add(site.ProjectFileName()) |> ignore
-        for filename in site.SourceFilesOnDisk() do
-            match this.Artifacts.GetSourceOfFilename(this.ServiceProvider.Rdt,filename) with
-            | Some source -> 
-                source.RecolorizeWholeFile()
-                source.RecordChangeToView()
-            | None -> ()
-
-    /// Respond to project being cleaned/rebuilt (any live type providers in the project should be refreshed)
-    member this.OnProjectCleaned(projectSite:IProjectSite) = 
-        let checkOptions = ProjectSiteOptions.Create(projectSite, "")
-        this.InteractiveChecker.NotifyProjectCleaned(checkOptions)
-
-    /// Invalidate the configuration if we notice any changes for any files that were listed
-    /// in the DependencyFiles set for the last untypedParse for a project
-    member this.OnFilesChanged(projectSite:IProjectSite) = 
-#if DEBUG
-        Trace.PrintLine("ChangeEvents", fun _ -> sprintf "OnFilesChanged")
-#endif
-        let checkOptions = ProjectSiteOptions.Create(projectSite, "")
-        this.InteractiveChecker.InvalidateConfiguration(checkOptions)
-    
-    /// Unittestable complement to LanguageServce.CreateSource
-    member this.CreateSource(buffer:IVsTextLines) : IdealSource =
-    
-        // Each time a source is created, also verify that the IProjectSite has been initialized to listen to changes to the project.
-        // We can't listen to OnProjectLoaded because the language service is not guaranteed to be loaded when this is called.
-        let filename = VsTextLines.GetFilename buffer
-        let result = VsRunningDocumentTable.FindDocumentWithoutLocking(this.ServiceProvider.Rdt,filename)
-        match result with 
-        | Some(hier,_) -> 
-            match hier with 
-            | :? IProvideProjectSite as siteProvider ->
-                let site = siteProvider.GetProjectSite()
-                site.AdviseProjectSiteChanges(KnownAdviseProjectSiteChangesCallbackOwners.LanguageService, 
-                                              new AdviseProjectSiteChanges(fun () -> this.OnProjectSettingsChanged(site))) 
-                site.AdviseProjectSiteCleaned(KnownAdviseProjectSiteChangesCallbackOwners.LanguageService, 
-                                              new AdviseProjectSiteChanges(fun () -> this.OnProjectCleaned(site))) 
-            | _ -> 
-                // This can happen when the file is in a solution folder or in, say, a C# project.
-                ()
-        | _ ->
-            // This can happen when renaming a file from a different language service into .fs or fsx.
-            // This naturally won't have an associated project.
-            ()
-        
-        // Create the source and register file change callbacks there.       
-        let source = this.SourceFactory(buffer)
-        source.SetDependencyFileChangeCallback(this.OnFilesChanged, this.NotifyFileTypeCheckStateIsDirty)
-        this.Artifacts.SetSource(buffer, source)
-        source
-    
-
-    member this.ExecuteBackgroundRequest(req:BackgroundRequest, source:IdealSource)= 
-        if not req.Terminate then
-            let freq = req :?> FSharpBackgroundRequest
-            this.ExecuteFSharpBackgroundRequest(freq, source)
-
-    /// Handle an incoming request to parse the source code. 
-    /// BackgroundRequest.Text -- the full text of the source file.   
-    ///
-    /// isFreshFullTypeCheck should be set to true if the returned AuthoringScope represents
-    /// the results of a fresh typecheck of the file.
-    member this.ExecuteFSharpBackgroundRequest(req:FSharpBackgroundRequest, source:IdealSource)= 
-#if DEBUG
-        use t = Trace.CallByThreadNamed("LanguageService",
-                                        "LanguageServiceState.ExecuteBackgroundRequest", 
-                                        "MPF Worker", 
-                                        fun _->sprintf " location=(%d:%d), reason=%A, filename=%s" req.Line req.Col req.Reason req.FileName)
-#endif
-        try
-#if DEBUG
-            Check.ArgumentNotNull req "req"
-#endif        
-            let data =
-                    match req.ExecuteBackgroundRequestData with
-                    |   Some lazyData -> lazyData.Force()
-                    |   None -> failwith "ExecuteFSharpBackgroundRequest called for supposedly cached request"
-            let projectSite = data.projectSite
-            let checkOptions = data.checkOptions
-            let projectFileName = data.projectFileName
-            let interactiveChecker = data.interactiveChecker
-            let colorizer = data.colorizer 
-            source.ProjectSite <- Some projectSite
-            
-            // Do brace matching if required
-            if req.ResultSink.BraceMatching then  
-                // Record brace-matching
-                let braceMatches = interactiveChecker.MatchBraces(req.FileName,req.Text,checkOptions)
-                    
-                let mutable pri = 0
-                for (((l1,c1),(l2,c2)),((l1e,c1e),(l2e,c2e))) in braceMatches do
-                    let span = TextSpan(iStartLine=l1,iStartIndex=c1,iEndLine=l2,iEndIndex=c2)
-                    let endContext = TextSpan(iStartLine=l1e,iStartIndex=c1e,iEndLine=l2e,iEndIndex=c2e)
-                    req.ResultSink.MatchPair(span, endContext, pri)
-                    pri<-pri+1
-                          
-            match req.Reason with 
-            | BackgroundRequestReason.MatchBraces -> 
-                ()
-                // work has already been done above
-
-            | BackgroundRequestReason.UntypedParse ->
-
-                // invoke UntypedParse directly - relying on cache inside the interactiveChecker
-                let untypedParse = interactiveChecker.UntypedParse(req.FileName, req.Text, checkOptions)
-#if DEBUG
-                Trace.PrintLine("LanguageService", (fun () -> sprintf " dependencies for UntypedParse: %A" (untypedParse.DependencyFiles())))
-#endif
-                untypedParseScope <- Some(UntypedFSharpScope.WithNewParseInfo(untypedParse, untypedParseScope))                  
-                ()
-
-            | _ -> 
-                let sync_UntypedParseOpt = 
-                    if FSharpScope.IsReasonRequiringSyncParse(req.Reason) then
-                        Some(interactiveChecker.UntypedParse(req.FileName,req.Text,checkOptions))
-                    else None
-
-                // Try to grab recent results, unless BackgroundRequestReason = Check
-                // This may fail if the CompilerServices API decides that
-                // it would like a chance to really check the contents of the file again,
-                let untypedParse,typedResults,containsFreshFullTypeCheck,aborted,resultTimestamp = 
-                    let possibleShortcutResults = 
-                        if (req.Reason = BackgroundRequestReason.FullTypeCheck) then 
-                           None
-                        else 
-                            if req.RequireFreshResults = RequireFreshResults.Yes then
-                                // Getting here means we're in second chance intellisense. For example, the user has pressed dot 
-                                // we tried stale results and got nothing. Now we need real results even if we have to wait.
-                                None
-                            else                            
-                                // This line represents a critical decision in the LS. If we're _not_
-                                // doing a full typecheck, and some stale typecheck results are available, then
-                                // use the stale results. This means, for example, that completion is fast,
-                                // but less accurate (since we can't possibly afford to typecheck while generating a completion)
-                                interactiveChecker.TryGetRecentTypeCheckResultsForFile((req.FileName,checkOptions))
-                    
-                    match possibleShortcutResults with 
-                    | Some (untypedParse,typedResults,fileversion) -> 
-                        defaultArg sync_UntypedParseOpt untypedParse,Some typedResults, false, false, fileversion // Note: untypedparse and typed results have different timestamps/snapshots, typed may be staler
-                    | None -> 
-                        // Perform a fresh two-phase parse of the source file
-                        let untypedParse = 
-                            match sync_UntypedParseOpt with 
-                            | Some x -> x
-                            | None -> interactiveChecker.UntypedParse(req.FileName,req.Text,checkOptions)
-#if DEBUG
-                        Trace.PrintLine("LanguageService", (fun () -> sprintf " dependencies for other: %A" (untypedParse.DependencyFiles())))
-#endif
-                        
-                        // Should never matter but don't let anything in FSharp.Compiler extend the lifetime of 'source'
-                        let sr = ref (Some source)
-                        let isResultObsolete() = 
-                            match !sr with
-                            | None -> false
-                            | Some(source) -> req.Timestamp <> source.ChangeCount
-                        
-                        // Type-checking
-                        let typedResults,aborted = 
-                            match interactiveChecker.TypeCheckSource(untypedParse,req.FileName,req.Timestamp,req.Text,checkOptions,IsResultObsolete(isResultObsolete),req.Snapshot) with 
-                            | NoAntecedant -> None,false
-                            | Aborted -> 
-                                // isResultObsolete returned true during the type check.
-                                None,true
-                            | TypeCheckSucceeded results -> Some results, false
-
-                        sr := None
-                        untypedParse,typedResults,true,aborted,req.Timestamp
-                
-                // Now that we have the untypedParse, we can SetDependencyFiles().
-                // 
-                // We may have missed a file change event for a dependent file (e.g. after the user added a project reference, he might immediately build that project, but 
-                // we haven't yet started listening for changes to that file on disk - the call to SetDependencyFiles() below starts listening).  This can only happen if 
-                // the set of dependencies has changed (otherwise we were _already_ listening and would not have missed the event)...
-                let anyDependenciesChanged = source.SetDependencyFiles(Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.ApprovalsAbsoluteFileName :: untypedParse.DependencyFiles())
-                // .. so if dependencies have changed, and we may have missed an event, let's behave as though this typecheck is failing and the file still needs to be re-type-checked
-                if anyDependenciesChanged then
-                    req.ResultClearsDirtinessOfFile <- false
-                    // Furthermore, if we know our project is out-of-date, this may mean that dependent DLLs may have changed on disk without us knowing, 
-                    // since we only just started listening for those changes a moment ago in the SetDependencyFiles() call.  So behave just as if we were 
-                    // just notified that those dependency files changed.  (In the future, it would be good to partition a source file's dependencies into
-                    // 'project' dependencies (that only depend on the IProjectSite, e.g. project/asseembly references) and 'source' dependencies (e.g. #r's).)
-                    if outOfDateProjectFileNames.Contains(projectFileName) then
-                        interactiveChecker.InvalidateConfiguration(checkOptions)
-                        interactiveChecker.StartBackgroundCompile(checkOptions) 
-                        outOfDateProjectFileNames.Remove(projectFileName) |> ignore
-
-                // (Note also that source's dependency files are not 'per configuration', which you might think means we'll miss updates when
-                //  - create solution with 2 projects, app and lib, and p2p reference between them
-                //  - start in Debug mode (incremental builder will look at project and note the missing project reference)
-                //  - switch Debug -> Release
-                //  - go outside VS and build the lib on disk with msbuild (Debug version)
-                //     - indeed, we are not curently watching for bin\Debug\Lib.dll on disk, we're only watching bin\Release\Lib.dll
-                //  - switch back to Debug in VS
-                // That is, do we now see errors about the DLL not existing?  No, because here:
-                //        let buildCache = MruCache(Flags.buildCacheSize, CreateIncrementalBuilder, areSame = CheckOptions.AreSameProject, areSameForSubsumption = CheckOptions.AreSameProjectName)
-                // the 'areSameForSubsumption' means effectively that switching to 'Release' kicks out the info for 'Debug', which means when switching back to Debug, 
-                // we recompute build cache based on state of world now.)
-
-                else
-                    untypedParseScope <- Some(UntypedFSharpScope.WithNewParseInfo(untypedParse, untypedParseScope))                  
-                    
-                    match typedResults with 
-                    | None -> 
-                        // OK, the typed results were not available because the background state to typecheck the file is not yet
-                        // ready.  However, we will be notified when it _is_ ready, courtesy of the background builder. Hence
-                        // we can clear the dirty bit and wait for that notification.
-                        req.ResultClearsDirtinessOfFile <- not aborted
-                        req.IsAborted <- aborted
-                        // On 'FullTypeCheck', send a message to the reactor to start the background compile for this project, just in case
-                        if req.Reason = BackgroundRequestReason.FullTypeCheck then    
-                            interactiveChecker.StartBackgroundCompile(checkOptions) 
-                    | Some typedResults -> 
-                        // Post the parse errors. 
-                        if containsFreshFullTypeCheck then 
-                            for error in typedResults.Errors do
-                                let span = new TextSpan(iStartLine=error.StartLine,iStartIndex=error.StartColumn,iEndLine=error.EndLine,iEndIndex=error.EndColumn)                             
-                                let sev = 
-                                    match error.Severity with 
-                                    | Microsoft.FSharp.Compiler.Severity.Warning -> Severity.Warning
-                                    | Microsoft.FSharp.Compiler.Severity.Error -> Severity.Error
-                                req.ResultSink.AddError(req.FileName, error.Subcategory, error.Message, span, sev)
-                          
-
-                        let scope = new FSharpScope(untypedParse, req.Line, req.Col, req.Snapshot, typedResults, projectSite, req.View, colorizer, this.DocumentationProvider) 
-
-                        req.ResultScope <- scope
-                        req.ResultTimestamp <- resultTimestamp  // This will be different from req.Timestamp when we're using stale results.
-                        req.ResultClearsDirtinessOfFile <- containsFreshFullTypeCheck
-
-                        if req.Reason = BackgroundRequestReason.MethodTip || req.Reason = BackgroundRequestReason.MatchBracesAndMethodTip then
-                            scope.InitLastRequestedMethodListForMethodTipUsingFallback()
-
-                        // On 'FullTypeCheck', send a message to the reactor to start the background compile for this project, just in case
-                        if req.Reason = BackgroundRequestReason.FullTypeCheck then    
-                            interactiveChecker.StartBackgroundCompile(checkOptions) 
-                            
-                        // On 'QuickInfo', get the text for the quick info while we're off the UI thread, instead of doing it later
-                        if req.Reason = BackgroundRequestReason.QuickInfo then 
-                            let text,span = scope.GetDataTipText(req.Line, req.Col)
-                            req.ResultQuickInfoText <- text
-                            req.ResultQuickInfoSpan <- span 
-
-                        // NOTE: if you do any more "work" here for any of the background requests, then 
-                        // make sure you update IsRecentScopeSufficientForBackgroundRequest
-                
-        with
-        | e ->
-            req.IsAborted <- true
-            Assert.Exception(e)
-            reraise()                
-
-
-    /// Do OnIdle processing       
-    member this.OnIdle() = 
-        for file in dirtyForTypeCheckFiles do
-            match this.Artifacts.GetSourceOfFilename(this.ServiceProvider.Rdt, file) with
-            | Some(source) -> 
-#if DEBUG
-                Trace.PrintLine("ChangeEvents", fun _ -> sprintf "OnIdle found source for file %s to dirty" file)
-#endif
-                source.RecordChangeToView()
-            | None -> 
-#if DEBUG
-                Trace.PrintLine("ChangeEvents", fun _ -> sprintf "OnIdle did not find source for file %s to dirty" file)
-#else
-                ()
-#endif
-        dirtyForTypeCheckFiles<-Set.empty
-        
-
-    /// Remove a colorizer.
-    member this.CloseColorizer(colorizer:FSharpColorizer) = 
-        let buffer = colorizer.Buffer
-        let mutable guid = colorizerGuid
-        (buffer :?> IVsUserData).SetData(&guid, null) |> ErrorHandler.ThrowOnFailure |> ignore
-
-    /// Get a colorizer for a particular buffer.
-    member this.GetColorizer(buffer:IVsTextLines) : FSharpColorizer = 
-        let mutable guid = colorizerGuid
-        let mutable colorizerObj = null
-        
-        (buffer :?> IVsUserData).GetData(&guid, &colorizerObj) |> ignore
-        match colorizerObj with
-        | null ->
-            let scanner = 
-                new FSharpScanner(fun source ->
-                    // Note: in theory, the next few lines do not need to be recomputed every line.  Instead we could just cache the tokenizer
-                    // and only update it when e.g. the project system notifies us there is an important change (e.g. a file rename, etc).
-                    // In practice we have been there, and always screwed up some non-unit-tested/testable corner-cases.
-                    // So this is not ideal from a perf perspective, but it is easy to reason about the correctness.
-                    let filename = VsTextLines.GetFilename buffer
-                    let defines = this.Artifacts.GetDefinesForFile(this.ServiceProvider.Rdt, filename, enableStandaloneFileIntellisense)
-                    let sourceTokenizer = SourceTokenizer(defines,filename)
-                    sourceTokenizer.CreateLineTokenizer(source))
-
-            let colorizer = new FSharpColorizer(this.CloseColorizer, buffer, scanner) 
-            (buffer :?> IVsUserData).SetData(&guid, colorizer) |> ErrorHandler.ThrowOnFailure |> ignore
-            colorizer
-        | _ -> colorizerObj :?> FSharpColorizer
-    
-    /// Block until the background compile finishes.
-    //
-    // This is for unit testing only
-    member this.WaitForBackgroundCompile() =
-        this.InteractiveChecker.WaitForBackgroundCompile()            
-
-module VsConstants =
-    let guidStdEditor = new Guid("9ADF33D0-8AAD-11D0-B606-00A0C922E851")
-    let guidCodeCloneProvider = new Guid("38fd587e-d4b7-4030-9a95-806ff0d5c2c6")
-
-    let cmdidGotoDecl = 936u // "Go To Declaration"
-    let cmdidGotoRef = 1107u // "Go To Reference"
-    
-    let IDM_VS_EDITOR_CSCD_OUTLINING_MENU = 773u // "Outlining"
-    let ECMD_OUTLN_HIDE_SELECTION = 128u // "Hide Selection" - 
-    let ECMD_OUTLN_TOGGLE_CURRENT = 129u // "Toggle Outlining Expansion" - 
-    let ECMD_OUTLN_TOGGLE_ALL = 130u // "Toggle All Outlining"
-    let ECMD_OUTLN_STOP_HIDING_ALL = 131u // "Stop Outlining"
-    let ECMD_OUTLN_STOP_HIDING_CURRENT = 132u // "Stop Hiding Current"
-
-type QueryStatusResult =
-    | NOTSUPPORTED = 0
-    | SUPPORTED = 1
-    | ENABLED = 2
-    | LATCHED = 4
-    | NINCHED = 8
-    | INVISIBLE = 16
-
-type FsharpViewFilter(mgr:CodeWindowManager,view:IVsTextView) =
-    inherit ViewFilter(mgr,view)
-
-    override this.Dispose() = base.Dispose()
-
-    member this.IsSupportedCommand(guidCmdGroup:byref,cmd:uint32) =
-        if guidCmdGroup = VsMenus.guidStandardCommandSet97 && (cmd = VsConstants.cmdidGotoDecl || cmd = VsConstants.cmdidGotoRef) then false
-        elif guidCmdGroup = VsConstants.guidCodeCloneProvider then false // disable commands for CodeClone package
-        else
-            // These are all the menu options in the "Outlining" cascading menu. We need to disable all the individual
-            // items to disable the cascading menu. QueryCommandStatus does not get called for the cascading menu itself.
-            assert((guidCmdGroup = VsConstants.guidStdEditor && cmd = VsConstants.IDM_VS_EDITOR_CSCD_OUTLINING_MENU) = false)
-            if guidCmdGroup = VsMenus.guidStandardCommandSet2K && (cmd = VsConstants.ECMD_OUTLN_HIDE_SELECTION ||
-                                                                   cmd = VsConstants.ECMD_OUTLN_TOGGLE_CURRENT ||
-                                                                   cmd = VsConstants.ECMD_OUTLN_TOGGLE_ALL ||
-                                                                   cmd = VsConstants.ECMD_OUTLN_STOP_HIDING_ALL ||
-                                                                   cmd = VsConstants.ECMD_OUTLN_STOP_HIDING_CURRENT) then false
-            else true
-
-    override this.QueryCommandStatus(guidCmdGroup:byref,cmd:uint32) =        
-        if this.IsSupportedCommand(&guidCmdGroup,cmd) then
-            base.QueryCommandStatus(&guidCmdGroup,cmd)
-        else
-            // Hide the menu item. Just returning QueryStatusResult.NOTSUPPORTED does not work
-            QueryStatusResult.INVISIBLE ||| QueryStatusResult.SUPPORTED |> int
-
-
-// Forward request for navigation info to the scope built after parsing untyped AST
-type FSharpNavigation(svc:LanguageService, stateFunc:unit -> LanguageServiceState) = 
-    inherit TypeAndMemberDropdownBars(svc)        
-    override x.OnSynchronizeDropdowns(_, textView, line, col, dropDownTypes, dropDownMembers, selectedType:int byref, selectedMember:int byref) =
-        match (stateFunc()).UntypedParseScope with
-        | Some(scope) -> 
-            let file = FilePathUtilities.GetFilePath(VsTextView.Buffer textView)
-            scope.SynchronizeNavigationDropDown(file, line, col, dropDownTypes, dropDownMembers, &selectedType, &selectedMember)
-        | _ -> 
-            dropDownTypes.Clear()
-            dropDownTypes.Add(new DropDownMember("(Parsing project files)", new TextSpan(), -1, DROPDOWNFONTATTR.FONTATTR_GRAY)) |> ignore
-            dropDownMembers.Clear()
-            selectedType <- 0
-            selectedMember <- -1
-            true
-        
-        
-and []
-    FSharpLanguageService() = 
-    inherit LanguageService() 
-    
-    // In case the config file is incorrect, we silently recover and disable the feature
-    let enableRegions = 
-        try "true" = System.Configuration.ConfigurationManager.AppSettings.[FSharpConstants.enableRegions]
-        with e ->  
-            System.Diagnostics.Debug.Assert
-              (false, sprintf "Error while loading 'devenv.exe.config' configuration: %A" e)
-            false
-        
-    // In case the config file is incorrect, we silently recover and disable the feature
-    let enableNavBar = 
-        try "true" = ConfigurationManager.AppSettings.[FSharpConstants.enableNavBar]
-        with e -> 
-            System.Diagnostics.Debug.Assert
-              (false, sprintf "Error while loading 'devenv.exe.config' configuration: %A" e)
-            false
-            
-    // In case the config file is incorrect, we silently recover and leave the feature enabled
-    let enableStandaloneFileIntellisense = 
-        try "false" <> ConfigurationManager.AppSettings.[FSharpConstants.enableStandaloneFileIntellisense]
-        with e -> 
-            System.Diagnostics.Debug.Assert
-              (false, sprintf "Error while loading 'devenv.exe.config' configuration: %A" e)
-            true
-
-    let ls = LanguageServiceState.Create()
-    let mutable rdtCookie = VSConstants.VSCOOKIE_NIL
-    
-    let mutable lastUntypedParseRequest : BackgroundRequest = null
-
-    let thisAssembly = typeof.Assembly 
-    let resources = lazy (new System.Resources.ResourceManager("VSPackage", thisAssembly))
-    let GetString(name:string) = 
-        resources.Force().GetString(name, CultureInfo.CurrentUICulture)
-
-    let formatFilterList = lazy(
-                                    let fsFile = GetString("FSharpFile")
-                                    let fsInterfaceFile = GetString("FSharpInterfaceFile")
-                                    let fsxFile = GetString("FSXFile")
-                                    let fsScriptFile = GetString("FSharpScriptFile")
-                                    let result = sprintf "%s|*.fs\n%s|*.fsi\n%s|*.fsx\n%s|*.fsscript"
-                                                             fsFile fsInterfaceFile fsxFile fsScriptFile
-                                    result)
-    
-    // This array contains the definition of the colorable items provided by this
-    // language service.
-    let colorableItems = [|
-            // See e.g. the TokenColor type defined in Scanner.cs.  Position 0 is implicit and always means "Plain Text".
-            // The next 5 items in this list MUST be these default items in this order:
-            new FSharpColorableItem("Keyword",              lazy (GetString("Keyword")),             COLORINDEX.CI_BLUE,         COLORINDEX.CI_USERTEXT_BK)
-            new FSharpColorableItem("Comment",              lazy (GetString("Comment")),             COLORINDEX.CI_DARKGREEN,    COLORINDEX.CI_USERTEXT_BK)
-            new FSharpColorableItem("Identifier",           lazy (GetString("Identifier")),          COLORINDEX.CI_USERTEXT_FG,  COLORINDEX.CI_USERTEXT_BK)
-            new FSharpColorableItem("String",               lazy (GetString("String")),              COLORINDEX.CI_MAROON,       COLORINDEX.CI_USERTEXT_BK)
-            new FSharpColorableItem("Number",               lazy (GetString("Number")),              COLORINDEX.CI_USERTEXT_FG,  COLORINDEX.CI_USERTEXT_BK)
-            // User-defined color classes go here:
-            new FSharpColorableItem("Excluded Code",        lazy (GetString("ExcludedCode")),         COLORINDEX.CI_DARKGRAY,     COLORINDEX.CI_USERTEXT_BK)
-            new FSharpColorableItem("Preprocessor Keyword", lazy (GetString("PreprocessorKeyword")),  COLORINDEX.CI_BLUE,         COLORINDEX.CI_USERTEXT_BK)
-            new FSharpColorableItem("Operator",             lazy (GetString("Operator")),             COLORINDEX.CI_USERTEXT_FG,  COLORINDEX.CI_USERTEXT_BK)
-#if COLORIZE_TYPES
-            new FSharpColorableItem("User Types",           lazy (GetString("UserTypes")),                 COLORINDEX.CI_AQUAMARINE,  COLORINDEX.CI_USERTEXT_BK)
-#endif
-        |]
-
-    /// Initialize the language service
-    override fls.Initialize() =
-        if not ls.IsInitialized then 
-#if DEBUG            
-            Flags.init()
-            use t = Trace.Call("LanguageService", "FSharpLanguageService::Initialize", fun _->"FLS being initialized for first time and registering for RDT events")
-#endif
-            let sp = ServiceProvider(fls.GetService)
-            let rdt = sp.Rdt
-            let preferences = new FSharpLanguagePreferences(fls.Site, (typeof).GUID, fls.Name)
-            preferences.Init() // Reads preferences from the VS registry.
-            preferences.MaxErrorMessages <- 1000
-            let fileChangeEx = fls.GetService(typeof) :?> IVsFileChangeEx
-            let createSource(buffer:IVsTextLines) =
-                Source.CreateSource(fls, buffer, fls.GetColorizer(buffer), fileChangeEx)                
-            ls.Initialize
-               (sp,
-                (XmlDocumentation.Provider(sp.XmlService, sp.DTE) :> IdealDocumentationProvider),
-                (preferences :> LanguagePreferences),
-                enableStandaloneFileIntellisense,
-                createSource)
-            rdtCookie <- (Com.ThrowOnFailure1 (rdt.AdviseRunningDocTableEvents (fls:>IVsRunningDocTableEvents)))
-
-                          
-    override fls.Dispose() =
-        try
-            try
-                if rdtCookie <> VSConstants.VSCOOKIE_NIL then 
-                    let sp = ServiceProvider(fls.GetService)
-                    Com.ThrowOnFailure0 (sp.Rdt.UnadviseRunningDocTableEvents rdtCookie)
-            finally
-                if ls.IsInitialized then 
-                    ls.Unhook()
-        finally 
-            base.Dispose()
-
-    member fls.LanguageServiceState = ls
-
-    override fls.GetInteractiveChecker() = box ls.InteractiveChecker        
-
-    member fls.AddSpecialSource(_source, _view) = ()
-
-    override fls.OnActiveViewChanged(textView) =
-        base.OnActiveViewChanged(textView)
-        match fls.LanguageServiceState.UntypedParseScope with
-        | Some scope -> scope.ClearDisplayedRegions()
-        | None -> ()
-        fls.LanguageServiceState.UntypedParseScope <- None
-        lastUntypedParseRequest <- null // abandon any request for untyped parse information, without cancellation
-        if enableNavBar || enableRegions then
-           fls.TriggerUntypedParse() |> ignore
-      
-    /// Do OnIdle processing       
-    member fls.TrySynchronizeUntypedParseInformation(millisecondsTimeout:int) =
-
-            //Source s = this.GetSource(view)
-        let view = fls.LastActiveTextView
-        if (view <> null) then
-            let s = fls.GetSource(view)
-            if (s <> null) then 
-
-                if (lastUntypedParseRequest = null || lastUntypedParseRequest.Timestamp <> s.ChangeCount) then
-                    let req = fls.TriggerUntypedParse()
-                    
-                    if req <> null && (req.IsSynchronous || req.Result <> null) then
-                        // This blocks the UI thread. Give it a slice of time (1000ms) and then just give up on this particular synchronization.
-                        // If we end up aborting here then the caller has the option of just using the old untyped parse information 
-                        // for the active view if one is available. Sooner or later the request may complete and the new untyped parse information
-                        // will become available.
-                        lastUntypedParseRequest <- req
-                        req.Result.TryWaitForBackgroundRequestCompletion(millisecondsTimeout) 
-                    else
-                        false
-                else
-                    // OK, the last request is still active, so try to wait again
-                    lastUntypedParseRequest.Result.TryWaitForBackgroundRequestCompletion(millisecondsTimeout) 
-            else
-                false
-        else
-            false
-                    
-      
-    /// This is used as part of the registry key to read user preferences.
-    override fls.Name = "F#"
-
-    /// This is used to return the expression evaluator language to the debugger
-    override fls.GetLanguageID(_buffer,_line, _col, langId) =
-        langId <- DebuggerEnvironment.GetLanguageID()
-        VSConstants.S_OK
-
-    override fls.CurFileExtensionFormat(filename) = 
-        // These indexes match the "GetFormatFilterList" function
-        match Path.GetExtension(filename) with
-        | ".fs" -> 0
-        | ".ml" -> 1
-        | ".fsi" -> 2
-        | ".mli" -> 3
-        | ".fsx" -> 4
-        | ".fsscript" -> 5
-        | _ -> -1
-
-    override fls.GetFormatFilterList() = 
-        formatFilterList.Value 
-
-    // This seems to be called by codeWinMan.OnNewView(textView) to install a ViewFilter on the TextView.    
-    override this.CreateViewFilter(mgr:CodeWindowManager,newView:IVsTextView) = new FsharpViewFilter(mgr,newView) :> ViewFilter
-
-    override fls.CreateSource(buffer:IVsTextLines) =
-        ls.CreateSource(buffer) :?> ISource
-        
-    override fls.GetLanguagePreferences() = ls.Preferences
-
-    override fls.CreateBackgroundRequest(line, col, info, sourceText, snapshot, methodTipMiscellany, fname, reason, view, sink, source, timestamp, synchronous) =
-        ls.CreateBackgroundRequest(line, col, info, sourceText, snapshot, methodTipMiscellany, fname,reason, view,sink, source, timestamp, synchronous)                                                
-        
-    override fls.ExecuteBackgroundRequest(req:BackgroundRequest) = 
-#if DEBUG
-        use t = Trace.CallByThreadNamed("FSharpLanguageService",
-                                        "ExecuteBackgroundRequest", 
-                                        "MPF Worker", 
-                                        fun _->sprintf " location=(%d:%d), reason=%A, filename=%s" req.Line req.Col req.Reason req.FileName)
-#endif
-
-        let idealSource = req.Source :?> IdealSource
-        ls.ExecuteBackgroundRequest(req, idealSource)
-
-    // Check if we can shortcut executing the background request and just fill in the latest
-    // cached scope for the active view from this.service.RecentFullTypeCheckResults.
-    //
-    // THIS MUST ONLY RETURN TRUE IF ---> ExecuteBackgroundRequest is equivalent to fetching a recent,
-    // perhaps out-of-date scope.
-    override fls.IsRecentScopeSufficientForBackgroundRequest(reason:BackgroundRequestReason) = 
-    
-        match reason with 
-        | BackgroundRequestReason.MatchBraces 
-        | BackgroundRequestReason.MatchBracesAndMethodTip
-        | BackgroundRequestReason.UntypedParse 
-        | BackgroundRequestReason.FullTypeCheck -> false
-            
-        // For QuickInfo, we grab the result while we're on the background thread,
-        // so returning the scope alone is not sufficient
-        | BackgroundRequestReason.QuickInfo -> false
-        // For MethodTip, we need a fresh parse to get accurate position info for arguments
-        | BackgroundRequestReason.MethodTip -> false
-        // For all others, the request is identical to using the latest cached scope
-        | BackgroundRequestReason.MemberSelect 
-        | BackgroundRequestReason.MemberSelectAndHighlightBraces 
-        | BackgroundRequestReason.CompleteWord 
-        | BackgroundRequestReason.DisplayMemberList
-        | BackgroundRequestReason.Goto
-        | _ -> true
-      
-    // This is called on the UI thread after fresh full typecheck results are available
-    override fls.OnUntypedParseOrFullTypeCheckComplete( req:BackgroundRequest) =
-        base.OnUntypedParseOrFullTypeCheckComplete(req)
-
-        match req, req.Source, req.ResultScope, req.View with 
-        | (:? FSharpBackgroundRequest as fbreq), (:? IdealSource as source), (:? FSharpScope as scope), textView when textView <> null && not req.Source.IsClosed -> 
-             match fbreq.TryGetColorizer() with 
-             | Some colorizer -> 
-                 //let oldSnapshot = fbreq.Snapshot
-
-#if COLORIZE_TYPES
-                 //let checkValidity (newSnapshot, range) =SharpScope.HasTextChangedSinceLastTypecheck (newSnapshot, oldSnapshot, range)
-#endif
-                 for line in colorizer.SetExtraColorizations((* checkValidity, *) scope.GetExtraColorizations()) do
-                     source.RecolorizeLine line
-             | None -> ()
-             
-        | _ -> ()
-
-        // Process regions only if they are enabled
-        if enableRegions then
-            // REVIEW: Do we need to update regions during every parse request?
-            match fls.LanguageServiceState.UntypedParseScope with
-            | Some scope -> fls.UpdateHiddenRegions(scope, req.Source)
-            | None -> ()
-
-    member fls.UpdateHiddenRegions(scope:UntypedFSharpScope,source:ISource) =
-#if DEBUG
-        use t = Trace.CallByThreadNamed("FSharpLanguageService",
-                                        "UpdateHiddenRegions", 
-                                        "UI", 
-                                        fun _-> "")
-#endif
-
-        let toCreate, toUpdate = scope.GetHiddenRegions(FilePathUtilities.GetFilePath(VsTextView.Buffer fls.LastActiveTextView))
-        if not (toCreate = [] && toUpdate = Map.empty) then
-            // Compare the existing regions with the new regions and 
-            // remove any that do not match the new regions.
-            let session = source.GetHiddenTextSession()
-            let (aregion:IVsHiddenRegion[]) = Array.zeroCreate(1)
-            
-            // Get current regions from Visual Studio        
-            let ppenum = Com.ThrowOnFailure1(session.EnumHiddenRegions(uint32 FIND_HIDDEN_REGION_FLAGS.FHR_ALL_REGIONS, 0u, Array.zeroCreate(1)))
-            let regions = 
-              seq { let fetched = ref 0u
-                    while (ppenum.Next(1u, aregion, fetched) = VSConstants.S_OK && !fetched = 1u) do
-                      yield aregion.[0] }
-            
-            for reg in regions do
-                let unique = Com.ThrowOnFailure1(reg.GetClientData())
-                match toUpdate.TryFind(unique) with
-                | Some(span) -> reg.SetSpan( [| span |]) |> Com.ThrowOnFailure0
-                | _ -> reg.Invalidate(uint32 CHANGE_HIDDEN_REGION_FLAGS.chrNonUndoable) |> Com.ThrowOnFailure0
-                    
-            // TODO: this is what MPF comment says...
-            //    For very large documents this can take a while, so add them in chunks of 
-            //    1000 and stop after 5 seconds. 
-            
-            if (toCreate.Length > 0) then
-                let arr = toCreate |> Array.ofList
-                let mutable (outEnum:IVsEnumHiddenRegions[]) = Array.zeroCreate(arr.Length)
-                session.AddHiddenRegions(uint32 CHANGE_HIDDEN_REGION_FLAGS.chrNonUndoable, arr.Length, arr, outEnum) |> Com.ThrowOnFailure0
-            
-    override fls.GetColorizer(buffer) = 
-        fls.Initialize()
-        ls.GetColorizer(buffer) :> Colorizer
-
-    override fls.ValidateBreakpointLocation(buffer:IVsTextBuffer, line, col, pCodeSpan:TextSpan[]) =
-        let result = 
-            if (pCodeSpan <> null) && (pCodeSpan.Length > 0) && (buffer :? IVsTextLines) then
-                let syncOk = fls.TrySynchronizeUntypedParseInformation(millisecondsTimeout = 100) 
-                let lineText = VsTextLines.LineText (buffer :?> IVsTextLines) line
-                let firstNonWhitespace = lineText.Length - (lineText.TrimStart [| ' '; '\t' |]).Length 
-                let lastNonWhitespace = (lineText.TrimEnd [| ' '; '\t' |]).Length 
-                // If the column is before the range of text then zap it to the text
-                // If the column is after the range of text then zap it to the _start_ of the text (like C#)
-                let attempt1, haveScope  = 
-                    let col = if col > lastNonWhitespace || col < firstNonWhitespace then firstNonWhitespace else col
-                    match fls.LanguageServiceState.UntypedParseScope with
-                    | Some(scope) -> 
-                        match scope.ValidateBreakpointLocation(line,col) with
-                        | Some ((a,b),(c,d)) -> Some (TextSpan(iStartLine = a, iStartIndex = b, iEndLine = c, iEndIndex = d)), true
-                        | None -> None, true
-                    | None ->   
-                        None, false
-                match attempt1 with 
-                | Some r -> Some r
-                | None -> 
-                    if syncOk || haveScope then 
-                        None
-                    else 
-                        // If we didn't sync OK AND we don't even have an UntypedParseScope then just accept the whole line.
-                        // This is unfortunate but necessary.
-                        let span = new TextSpan(iStartLine = line, iStartIndex = firstNonWhitespace, iEndLine = line, iEndIndex = lastNonWhitespace)
-                        Some span
-            else 
-                None
-                
-        match result with 
-        | Some span -> 
-            pCodeSpan.[0] <- span
-            VSConstants.S_OK
-        | None -> 
-            VSConstants.S_FALSE                
-            
-    override fls.CreateDropDownHelper(_view) =
-        if enableNavBar then 
-            (new FSharpNavigation(fls, fun () -> fls.LanguageServiceState)) :> TypeAndMemberDropdownBars
-        else null
-
-    override fls.OnIdle(periodic, mgr : IOleComponentManager) =
-        try
-            let r = base.OnIdle(periodic, mgr)
-            ls.OnIdle()
-            r
-        with e-> 
-            Assert.Exception(e)
-            reraise()
-                        
-    interface IVsProvideColorableItems with
-
-        override x.GetItemCount(count: int byref) =
-            count <- colorableItems.Length
-            VSConstants.S_OK
-
-        override x.GetColorableItem(index, item: IVsColorableItem byref) =
-                if (index < 1) || (index > colorableItems.Length) then 
-                    VSConstants.E_INVALIDARG
-                else
-                    item <- colorableItems.[index - 1]
-                    VSConstants.S_OK
-
-    /// Respond to changes to documents in the Running Document Table.
-    interface IVsRunningDocTableEvents with
-        override this.OnAfterAttributeChange(_docCookie, _grfAttribs) = VSConstants.S_OK
-        override this.OnAfterDocumentWindowHide(_docCookie, _frame) = VSConstants.S_OK
-        override this.OnAfterFirstDocumentLock(_docCookie,_dwRDTLockType,_dwReadLocks,_dwEditLocks) = VSConstants.S_OK
-        override this.OnAfterSave(_docCookie) = VSConstants.S_OK
-        override this.OnBeforeDocumentWindowShow(_docCookie,_isFirstShow,_frame) = VSConstants.S_OK
-        override this.OnBeforeLastDocumentUnlock(docCookie,_dwRDTLockType,dwReadLocksRemaining,dwEditLocksRemaining) =
-            let (_, _, _, _, file, _, _, unkdoc) = (ServiceProvider this.GetService).Rdt.GetDocumentInfo docCookie // see here http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsrunningdocumenttable.getdocumentinfo(VS.80).aspx for info on the `GetDocumentInfo` results we're ignoring
-            try
-                if int dwReadLocksRemaining = 0 && int dwEditLocksRemaining = 0 then // check that this is there are no other read / edit locks
-                    if SourceFile.IsCompilable file then
-                        if IntPtr.Zero<>unkdoc then
-                            match Marshal.GetObjectForIUnknown(unkdoc) with
-                            | :? IVsTextLines as tl ->
-                                ls.Artifacts.UnsetSource(tl)
-                            | _ -> ()
-            finally 
-                if IntPtr.Zero <> unkdoc then Marshal.Release(unkdoc)|>ignore
-            VSConstants.S_OK
-
-module FSharpIntellisenseProvider = 
-    /// 
-    /// This class is used to store the information about one specific instance
-    /// of EnvDTE.FileCodeModel.
-    /// 
-    []
-    type FileCodeModelInfo =
-        {  CodeModel: EnvDTE.FileCodeModel
-           ItemId : uint32 }
-
-    type SourceFileInfo(filename:string, itemId:uint32) =
-        let mutable hostProject : IVsIntellisenseProjectHost = null
-        let mutable fileCode : EnvDTE.FileCodeModel = null
-        // let mutable codeProvider : CodeDomProvider = null
-
-        member x.HostProject 
-            with get() = hostProject
-            and set(value) = 
-                if (hostProject <> value) then
-                    fileCode <- null
-                hostProject <- value
-
-        member x.FileCodeModel =
-            // Don't build the object more than once.
-            if (null <> fileCode) then
-                fileCode
-            else
-                // Verify that the host project is set.
-                if (null = hostProject) then raise (Error.NoHostObject)
-
-                // Get the hierarchy from the host project.
-                let propValue = Com.ThrowOnFailure1(hostProject.GetHostProperty(uint32(HOSTPROPID.HOSTPROPID_HIERARCHY)))
-                let hierarchy = (propValue :?> IVsHierarchy)
-                if (null = hierarchy) then null else
-
-                // Try to get the extensibility object for the item.
-                // NOTE: here we assume that the __VSHPROPID.VSHPROPID_ExtObject property returns a VSLangProj.VSProjectItem
-                // or a EnvDTE.ProjectItem object. No other kind of extensibility is supported.
-                let propValue = Com.ThrowOnFailure1(hierarchy.GetProperty(itemId, int32(__VSHPROPID.VSHPROPID_ExtObject)))
-                let vsprojItem = (propValue :?> VSLangProj.VSProjectItem)
-                let projectItem = 
-                    match vsprojItem with
-                    | null -> (propValue :?> EnvDTE.ProjectItem)
-                    | _ -> vsprojItem.ProjectItem
-                if (null = projectItem) then null else
-
-                null
-
-        member x.ItemId = itemId
-
-        member x.Name = filename
-
-#if UNUSED
-module Setup = 
-    /// This attribute adds a intellisense provider for a specific language 
-    /// type. 
-    /// For Example:
-    ///   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\Languages\IntellisenseProviders\
-    ///         [Custom_Provider]
-    /// 
-    []
-    type ProvideIntellisenseProviderAttribute(provider:Type, providerName:string, addItemLanguageName:string, defaultExtension:string, shortLanguageName:string, templateFolderName:string) =
-        inherit RegistrationAttribute() 
-        let mutable additionalExtensions : Option = None
-
-        /// Private function to get the provider base key name
-        let providerRegKey() = String.Format(CultureInfo.InvariantCulture, @"Languages\IntellisenseProviders\{0}", [| box providerName |])
-        
-            /// Gets the Type of the intellisense provider.
-        member x.Provider = provider
-            /// Get the Guid representing the generator type
-        member x.ProviderGuid = provider.GUID
-            /// Get the ProviderName
-        member x.ProviderName = providerName
-            /// Get item language
-        member x.AddItemLanguageName = addItemLanguageName
-            /// Get the Default extension
-        member x.DefaultExtension = defaultExtension
-            /// Get the short language name
-        member x.ShortLanguageName = shortLanguageName
-            /// Get the tempalte folder name
-        member x.TemplateFolderName = templateFolderName
-            /// Get/Set Additional extensions
-        member x.AdditionalExtensions 
-            with get() = additionalExtensions
-            and set v = additionalExtensions <- Some(v)
-            ///     Called to register this attribute with the given context.  The context
-            ///     contains the location where the registration inforomation should be placed.
-            ///     It also contains other information such as the type being registered and path information.
-        override x.Register(context:RegistrationAttribute.RegistrationContext) =
-            Check.ArgumentNotNull context "context"
-            use childKey = context.CreateKey(providerRegKey())
-            let mutable providerGuid = provider.GUID
-            childKey.SetValue("GUID", providerGuid.ToString("B"))
-            childKey.SetValue("AddItemLanguageName", addItemLanguageName)
-            childKey.SetValue("DefaultExtension", defaultExtension)
-            childKey.SetValue("ShortLanguageName", shortLanguageName)
-            childKey.SetValue("TemplateFolderName", templateFolderName)
-            match additionalExtensions with 
-            | None | Some "" -> ()
-            | Some(s) ->  childKey.SetValue("AdditionalExtensions", s)
-
-            /// 
-            /// Unregister this file extension.
-            /// 
-            /// 
-        override x.Unregister(context:RegistrationAttribute.RegistrationContext) =
-            if (null <> context) then
-                context.RemoveKey(providerRegKey())
-#endif
-
-// Workaround to access non-public settings persistence type.
-// GetService( ) with this will work as long as the GUID matches the real type.
-[]
-type internal SVsSettingsPersistenceManager = class end
-
-[]
-type FSharpPackage() as self =
-    inherit Package()
-    
-    // In case the config file is incorrect, we silently recover and leave the feature enabled
-    let enableLanguageService = 
-        try 
-            "false" <> ConfigurationManager.AppSettings.[FSharpConstants.enableLanguageService]
-        with e -> 
-            System.Diagnostics.Debug.Assert
-              (false, sprintf "Error while loading 'devenv.exe.config' configuration: %A" e)
-            true         
-
-    let mutable componentID = 0u
-    
-    let CreateIfEnabled container serviceType = 
-        if enableLanguageService then 
-            self.CreateService(container,serviceType) 
-        else 
-            null
-            
-    let callback = new ServiceCreatorCallback(CreateIfEnabled)
-    
-    let mutable mgr : IOleComponentManager = null
-
-#if !VS_VERSION_DEV12
-    let fsharpSpecificProfileSettings =
-        [| "TextEditor.F#.Insert Tabs", box false
-           "TextEditor.F#.Brace Completion", box true
-           "TextEditor.F#.Make URLs Hot", box false
-           "TextEditor.F#.Indent Style", box 1u |]
-#endif
-
-    override self.Initialize() =
-        UIThread.CaptureSynchronizationContext()
-        self.EstablishDefaultSettingsIfMissing()
-        (self :> IServiceContainer).AddService(typeof, callback, true)
-        base.Initialize()
-
-    /// In case custom VS profile settings for F# are not applied, explicitly set them here.
-    /// e.g. 'keep tabs' is the text editor default, but F# requires 'insert spaces'.
-    /// We specify our customizations in the General profile for VS, but we have found that in some cases
-    /// those customizations are incorrectly ignored.
-    member private this.EstablishDefaultSettingsIfMissing() =
-#if VS_VERSION_DEV12
-        ()  // ISettingsManager only implemented for VS 14.0+
-#else
-        match this.GetService(typeof) with
-        | :? Microsoft.VisualStudio.Settings.ISettingsManager as settingsManager ->
-            for settingName,defaultValue in fsharpSpecificProfileSettings do
-                // Only take action if the setting has no current custom value
-                // If cloud-synced settings have already been applied or the user has made an explicit change, do nothing
-                match settingsManager.TryGetValue(settingName) with
-                | Microsoft.VisualStudio.Settings.GetValueResult.Missing, _ ->
-                    settingsManager.SetValueAsync(settingName, defaultValue, false) |> ignore
-                | _ -> ()
-        | _ -> ()
-#endif
-
-    member self.RegisterForIdleTime() =
-        mgr <- (self.GetService(typeof) :?> IOleComponentManager)
-        if (componentID = 0u && mgr <> null) then
-            let crinfo = Array.zeroCreate(1)
-            let mutable crinfo0 = crinfo.[0]
-            crinfo0.cbSize <- Marshal.SizeOf(typeof) |> uint32
-            crinfo0.grfcrf <- uint32 (_OLECRF.olecrfNeedIdleTime ||| _OLECRF.olecrfNeedPeriodicIdleTime)
-            crinfo0.grfcadvf <- uint32 (_OLECADVF.olecadvfModal ||| _OLECADVF.olecadvfRedrawOff ||| _OLECADVF.olecadvfWarningsOff)
-            crinfo0.uIdleTimeInterval <- 1000u
-            crinfo.[0] <- crinfo0 
-            let componentID_out = ref componentID
-            let _hr = mgr.FRegisterComponent(self, crinfo, componentID_out)
-            componentID <- componentID_out.Value
-            ()
-
-    member self.CreateService(_container:IServiceContainer, serviceType:Type) =
-        match serviceType with 
-        | x when x = typeof -> 
-            let language = new FSharpLanguageService()
-            language.SetSite(self)
-            language.Initialize()
-            TypeProviderSecurityGlobals.invalidationCallback <- fun () -> language.LanguageServiceState.InteractiveChecker.InvalidateAll()
-            Microsoft.FSharp.Compiler.ExtensionTyping.GlobalsTheLanguageServiceCanPoke.displayLSTypeProviderSecurityDialogBlockingUI <- Some(fun (typeProviderRunTimeAssemblyFileName) ->
-                let pubInfo = GetVerifiedPublisherInfo.GetVerifiedPublisherInfo typeProviderRunTimeAssemblyFileName
-                let filename = 
-                    match Microsoft.FSharp.Compiler.ExtensionTyping.GlobalsTheLanguageServiceCanPoke.theMostRecentFileNameWeChecked with
-                    | None -> assert false; ""  // this should never happen
-                    | Some fn -> fn
-                UIThread.RunSync(fun() ->
-                    // need to access the RDT on the UI thread
-                    match language.LanguageServiceState.Artifacts.TryFindOwningProject((ServiceProvider language.GetService).Rdt, filename) with
-                    | Some owningProjectSite ->
-                        let projectName = Path.GetFileNameWithoutExtension(owningProjectSite.ProjectFileName())
-                        TypeProviderSecurityDialog.ShowModal(TypeProviderSecurityDialogKind.A, null, projectName, typeProviderRunTimeAssemblyFileName, pubInfo) 
-                    | None -> 
-                        TypeProviderSecurityDialog.ShowModal(TypeProviderSecurityDialogKind.A, filename, null, typeProviderRunTimeAssemblyFileName, pubInfo) 
-                    )
-                // the 'displayLSTypeProviderSecurityDialogBlockingUI' callback is run async to the background typecheck, so after the user has interacted with the dialog, request a re-typecheck
-                TypeProviderSecurityGlobals.invalidationCallback() 
-                )
-            self.RegisterForIdleTime()
-            box language
-        | _ -> null
-
-    override self.Dispose(disposing) =
-        try 
-            if (componentID <> 0u) then
-                begin match self.GetService(typeof) with 
-                | :? IOleComponentManager as mgr -> 
-                    mgr.FRevokeComponent(componentID) |> ignore
-                | _ -> ()
-                end
-                componentID <- 0u
-        finally
-            base.Dispose(disposing)
-
-    interface IOleComponent with
-
-        override x.FContinueMessageLoop(_uReason:uint32, _pvLoopData:IntPtr, _pMsgPeeked:MSG[]) = 
-            1
-
-        override x.FDoIdle(grfidlef:uint32) =
-            // see e.g "C:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Common\IDL\olecm.idl" for details
-            //Trace.Print("CurrentDirectoryDebug", (fun () -> sprintf "curdir='%s'\n" (System.IO.Directory.GetCurrentDirectory())))  // can be useful for watching how GetCurrentDirectory changes
-            match x.GetService(typeof) with 
-            | :? FSharpLanguageService as pl -> 
-                let periodic = (grfidlef &&& (uint32 _OLEIDLEF.oleidlefPeriodic)) <> 0u
-                let mutable r = pl.OnIdle(periodic, mgr)
-                if r = 0 && periodic && mgr.FContinueIdle() <> 0 then
-                    r <- TaskReporterIdleRegistration.DoIdle(mgr)
-                r
-            | _ -> 0
-
-        override x.FPreTranslateMessage(_pMsg) = 0
-
-        override x.FQueryTerminate(_fPromptUser) = 1
-
-        override x.FReserved1(_dwReserved, _message, _wParam, _lParam) = 1
-
-        override x.HwndGetWindow(_dwWhich, _dwReserved) = 0n
-
-        override x.OnActivationChange(_pic, _fSameComponent, _pcrinfo, _fHostIsActivating, _pchostinfo, _dwReserved) = ()
-
-        override x.OnAppActivate(_fActive, _dwOtherThreadID) = ()
-
-        override x.OnEnterState(_uStateID, _fEnter)  = ()
-        
-        override x.OnLoseActivation() = ()
-
-        override x.Terminate() = ()
-
-     
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyInfo.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyInfo.cs
index ff097aea26a..e81d624dba3 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyInfo.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyInfo.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Reflection;
@@ -18,8 +18,8 @@
 /* Make internals visible to other project system DLLs */
 [assembly:System.Runtime.CompilerServices.InternalsVisibleTo("FSharp.ProjectSystem.FSharp, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
 [assembly:System.Runtime.CompilerServices.InternalsVisibleTo("FSharp.ProjectSystem.PropertyPages, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
-[assembly:System.Runtime.CompilerServices.InternalsVisibleTo("Salsa, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
-[assembly:System.Runtime.CompilerServices.InternalsVisibleTo("Unittests, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
+[assembly:System.Runtime.CompilerServices.InternalsVisibleTo("VisualFSharp.Salsa, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
+[assembly:System.Runtime.CompilerServices.InternalsVisibleTo("VisualFSharp.Unittests, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
 /* F# additions: end */
 
 #if STAMP_OSS_VERSION
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyReferenceNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyReferenceNode.cs
index 85348732d9b..274d3a72854 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyReferenceNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyReferenceNode.cs
@@ -1,6 +1,5 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-using FSSafe = Internal.Utilities.FileSystem;
 using System;
 using System.Runtime.InteropServices;
 using System.Collections;
@@ -48,21 +47,18 @@ private struct AssemblyMSBuildProjectionInfo
             public bool? WantSpecificVersion;  // null -> nothing in .fsproj, true/false mean serialize that value to .fsproj
         }
 
-        #region fields
         private string myAssemblyPath = String.Empty;
         private FileChangeManager myFileChangeListener;
         private bool myIsDisposed = false;
         private AssemblyResolvedInfo resolvedInfo;
         private AssemblyMSBuildProjectionInfo msbuildProjectionInfo;
         private bool fsprojIncludeHasFilename = false;
-        #endregion
 
-        #region properties
         /// 
         /// The name of the assembly this reference represents.
         /// 
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public System.Reflection.AssemblyName AssemblyName
+        public System.Reflection.AssemblyName AssemblyName
         {
             get
             {
@@ -75,7 +71,7 @@ private struct AssemblyMSBuildProjectionInfo
         /// machine. It can be different from the AssemblyName property because it can
         /// be more specific.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public System.Reflection.AssemblyName ResolvedAssembly
+        public System.Reflection.AssemblyName ResolvedAssembly
         {
             get { return this.resolvedInfo.ResolvedAssemblyName; }
         }
@@ -120,7 +116,7 @@ public override string Caption
         }
 
         private Automation.OAAssemblyReference assemblyRef;
-        /*internal, but public for FSharp.Project.dll*/ public override object Object
+        public override object Object
         {
             get
             {
@@ -131,9 +127,6 @@ public override string Caption
                 return assemblyRef;
             }
         }
-        #endregion
-
-        #region ctors
 
         internal static AssemblyReferenceNode CreateFromProjectFile(ProjectNode root, ProjectElement element, BuildResult buildResult)
         { return new AssemblyReferenceNode(root, element, buildResult); }
@@ -201,9 +194,6 @@ private AssemblyReferenceNode(int dummy, ProjectNode root, string assemblyName)
 
             this.InitializeFileChangeEvents();
         }
-        #endregion
-
-        #region methods
 
         internal static bool IsFSharpCoreReference(ReferenceNode node)
         {
@@ -283,10 +273,7 @@ private void InitializeAssemblyName(string assemblyName)
                 }
             }
         }
-        /// 
-        /// Closes the node.
-        /// 
-        /// 
+
         public override int Close()
         {
             try
@@ -325,7 +312,7 @@ private bool IsSpecialFSharpCoreReference
             get { return ProjectMgr.CanUseTargetFSharpCoreReference && IsFSharpCoreReference(this) && ContainsUsagesOfTargetFSharpCoreVersionProperty(this); }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
+        public override NodeProperties CreatePropertiesObject()
         {
             if (IsSpecialFSharpCoreReference)
             {
@@ -338,7 +325,7 @@ private bool IsSpecialFSharpCoreReference
         /// 
         /// Links a reference node to the project and hierarchy.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void BindReferenceData()
+        public override void BindReferenceData()
         {
             // BindReferenceData only happens for newly created AssemblyReferenceNodes (as opposed to loaded from fsproj)
             Debug.Assert(this.resolvedInfo.WasSuccessfullyResolved, "assembly was not resolved, we should not be trying to link a node to put in .fsproj file");
@@ -383,10 +370,6 @@ private bool IsSpecialFSharpCoreReference
             // LBXML_KEY_REFERENCE_EXTENSION       "ExecutableExtension"
         }
 
-        /// 
-        /// Disposes the node
-        /// 
-        /// 
         protected override void Dispose(bool disposing)
         {
             if (this.myIsDisposed)
@@ -440,7 +423,7 @@ public override void Remove(bool removeFromStorage)
 	    /// Determines if this is node a valid node for painting the default reference icon.
 	    /// 
 	    /// 
-	    public /*protected, but public for FSharp.Project.dll*/ override bool CanShowDefaultIcon()
+	    public override bool CanShowDefaultIcon()
  	    {
 		    if (String.IsNullOrEmpty(this.myAssemblyPath) || !File.Exists(this.myAssemblyPath))
 		    {
@@ -474,7 +457,7 @@ public void DoOneOffResolve()
             var result = this.ProjectMgr.Build(MsBuildTarget.ResolveAssemblyReferences);
             this.ResolveReference(result);
         }
-        internal /*protected, but public for FSharp.Project.dll*/ override void ResolveReference(BuildResult buildResult)
+        internal override void ResolveReference(BuildResult buildResult)
         {
             Debug.Assert(this.ItemNode != null && this.ItemNode.Item != null, "called ResolveReference before initializing ItemNode");
             this.ResolveFromBuiltProject(MSBuildItem.GetEvaluatedInclude(this.ItemNode.Item), buildResult);
@@ -687,7 +670,7 @@ private void OnAssemblyReferenceChangedOnDisk(object sender, FileChangedOnDiskEv
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override Guid GetBrowseLibraryGuid()
+        public override Guid GetBrowseLibraryGuid()
         {
             return VSConstants.guidCOMPLUSLibrary;
         }
@@ -706,7 +689,5 @@ public override object GetProperty(int propId)
             return base.GetProperty(propId);
         }
 #endif
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Attributes.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Attributes.cs
index d91bf63f071..eb98cf8eaf3 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Attributes.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Attributes.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.OLE.Interop;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -24,18 +24,13 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Property | AttributeTargets.Field)]
     internal sealed class PropertyPageTypeConverterAttribute : Attribute
     {
-        #region fields
         Type converterType;
-        #endregion
 
-        #region ctors
         public PropertyPageTypeConverterAttribute(Type type)
         {
             this.converterType = type;
         } 
-        #endregion
 
-        #region properties
         public Type ConverterType
         {
             get
@@ -43,24 +38,18 @@ public Type ConverterType
                 return this.converterType;
             }
         } 
-        #endregion
     }
 
     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field, Inherited = false, AllowMultiple = false)]
     internal sealed class LocDisplayNameAttribute : DisplayNameAttribute
     {
-        #region fields
         string name;
-        #endregion
 
-        #region ctors
         public LocDisplayNameAttribute(string name)
         {
             this.name = name;
         } 
-        #endregion
 
-        #region properties
         public override string DisplayName
         {
             get
@@ -74,6 +63,5 @@ public override string DisplayName
                 return result;
             }
         } 
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFileItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFileItem.cs
index 9fd2aa1c4d1..c2189715bc4 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFileItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFileItem.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -26,15 +26,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAFileItem : OAProjectItem
     {
-        #region ctors
         internal OAFileItem(OAProject project, FileNode node)
             : base(project, node)
         {
         }
 
-        #endregion
-
-        #region overridden methods
         /// 
         /// Returns the dirty state of the document.
         /// 
@@ -222,10 +218,9 @@ public override EnvDTE.Window Open(string viewKind)
         /// 
         /// The name with which to save the project or project item.
         /// Is thrown if the save operation failes.
-        /// Is thrown if fileName is null.
         public override void Save(string fileName)
         {
-            this.DoSave(false, fileName);
+            this.DoSave(false, fileName ?? string.Empty);
         }
 
         /// 
@@ -233,6 +228,7 @@ public override void Save(string fileName)
         /// 
         /// The file name with which to save the solution, project, or project item. If the file exists, it is overwritten
         /// true if the rename was successful. False if Save as failes
+        /// Is thrown if fileName is null.
         public override bool SaveAs(string fileName)
         {
             try
@@ -307,9 +303,6 @@ public override bool get_IsOpen(string viewKind)
             });
         }
 
-        /// 
-        /// Gets the ProjectItems for the object.
-        /// 
         public override ProjectItems ProjectItems
         {
             get
@@ -324,10 +317,6 @@ public override ProjectItems ProjectItems
             }
         }
 
-
-        #endregion
-
-        #region helpers
         /// 
         /// Saves or Save As the  file
         /// 
@@ -432,7 +421,6 @@ private void DoSave(bool isCalledFromSaveAs, string fileName)
                 }
             });
         }
-        #endregion
 
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFolderItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFolderItem.cs
index bbf73082ccc..42363416c74 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFolderItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFolderItem.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -24,15 +24,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAFolderItem : OAProjectItem
     {
-        #region ctors
         internal OAFolderItem(OAProject project, FolderNode node)
             : base(project, node)
         {
         }
 
-        #endregion
-
-        #region overridden methods
         public override ProjectItems Collection
         {
             get
@@ -51,6 +47,5 @@ public override ProjectItems ProjectItems
                 return this.Collection;
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANavigableProjectItems.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANavigableProjectItems.cs
index 3e32fb4b96b..ce5ed121431 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANavigableProjectItems.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANavigableProjectItems.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -24,17 +24,14 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OANavigableProjectItems : EnvDTE.ProjectItems
     {
-        #region fields
         private OAProject project;
         private IList items;
         private HierarchyNode nodeWithItems;
-        #endregion
 
-        #region properties
         /// 
-        /// Defines an /*internal, but public for FSharp.Project.dll*/ public list of project items
+        /// Defines an public list of project items
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public IList Items
+        public IList Items
         {
             get
             {
@@ -45,7 +42,7 @@ public class OANavigableProjectItems : EnvDTE.ProjectItems
         /// 
         /// Defines a relationship to the associated project.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public OAProject Project
+        public OAProject Project
         {
             get
             {
@@ -56,16 +53,14 @@ public class OANavigableProjectItems : EnvDTE.ProjectItems
         /// 
         /// Defines the node that contains the items
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public HierarchyNode NodeWithItems
+        public HierarchyNode NodeWithItems
         {
             get
             {
                 return this.nodeWithItems;
             }
         }
-        #endregion
 
-        #region ctor
         /// 
         /// Constructor.
         /// 
@@ -90,9 +85,6 @@ internal OANavigableProjectItems(OAProject project, IList it
             this.project = project;
             this.nodeWithItems = nodeWithItems;
         }
-        #endregion
-
-        #region EnvDTE.ProjectItems
 
         /// 
         /// Gets a value indicating the number of objects in the collection.
@@ -105,9 +97,6 @@ public virtual int Count
             }
         }
 
-        /// 
-        /// Gets the immediate parent object of a ProjectItems collection.
-        /// 
         public virtual object Parent
         {
             get
@@ -232,10 +221,6 @@ public virtual EnvDTE.ProjectItem Item(object index)
             return null;
         }
 
-        /// 
-        /// Returns an enumeration for items in a collection. 
-        /// 
-        /// An IEnumerator for this object.
         public virtual IEnumerator GetEnumerator()
         {
             if (this.items == null)
@@ -251,14 +236,11 @@ public virtual IEnumerator GetEnumerator()
             }
         }
 
-        #endregion
-
-        #region virtual methods
         /// 
         /// Retrives a list of items associated with the current node.
         /// 
         /// A List of project items
-        public /*protected, but public for FSharp.Project.dll*/ IList GetListOfProjectItems()
+        public IList GetListOfProjectItems()
         {
             return UIThread.DoOnUIThread(delegate() {
                 List list = new List();
@@ -277,6 +259,5 @@ public virtual IEnumerator GetEnumerator()
                 return list;
             });
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANestedProjectItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANestedProjectItem.cs
deleted file mode 100644
index d14fd4516c5..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANestedProjectItem.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if UNUSED_NESTED_PROJECTS
-using System;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.Shell;
-using System.Runtime.InteropServices;
-using System.Collections.Generic;
-using System.Collections;
-using System.Diagnostics;
-using System.Runtime.Serialization;
-using System.Reflection;
-using IServiceProvider = System.IServiceProvider;
-using Microsoft.VisualStudio.OLE.Interop;
-using System.Diagnostics.CodeAnalysis;
-using Microsoft.VisualStudio.Fsharp.ProjectSystem;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
-{
-    [SuppressMessage("Microsoft.Interoperability", "CA1405:ComVisibleTypeBaseTypesShouldBeComVisible")]
-    [ComVisible(true), CLSCompliant(false)]
-    public class OANestedProjectItem : OAProjectItem
-    {
-        #region fields
-        EnvDTE.Project nestedProject = null;
-        #endregion
-
-        #region ctors
-        internal OANestedProjectItem(OAProject project, NestedProjectNode node)
-            : base(project, node)
-        {
-            object nestedproject = null;
-            if (ErrorHandler.Succeeded(node.NestedHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out nestedproject)))
-            {
-                this.nestedProject = nestedproject as EnvDTE.Project;
-            }
-        }
-
-        #endregion
-
-        #region overridden methods
-        /// 
-        /// Returns the collection of project items defined in the nested project
-        /// 
-        public override EnvDTE.ProjectItems ProjectItems
-        {
-            get
-            {
-                if (this.nestedProject != null)
-                {
-                    return this.nestedProject.ProjectItems;
-                }
-                return null;
-            }
-        }
-
-        /// 
-        /// Returns the nested project.
-        /// 
-        public override EnvDTE.Project SubProject
-        {
-            get
-            {
-                return this.nestedProject;
-            }
-        }
-        #endregion
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANullProperty.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANullProperty.cs
index eadfd214372..94d8adcabb9 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANullProperty.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANullProperty.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -21,19 +21,12 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [CLSCompliant(false), ComVisible(true)]
     public class OANullProperty : EnvDTE.Property
     {
-        #region fields
         private OAProperties parent;
-        #endregion
-
-        #region ctors
 
         internal OANullProperty(OAProperties parent)
         {
             this.parent = parent;
         }
-        #endregion
-
-        #region EnvDTE.Property
 
         public object Application
         {
@@ -97,6 +90,5 @@ public object Value
             get { return String.Empty; }
             set { }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProject.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProject.cs
index ea37bb417be..3d441a1c7f6 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProject.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProject.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -22,39 +22,19 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAProject : EnvDTE.Project, EnvDTE.ISupportVSProperties
     {
-        #region fields
         private ProjectNode project;
-#if UNUSED_NESTED_PROJECTS
-        Automation.OASolutionFolder solutionFolder;
-#endif
         EnvDTE.ConfigurationManager configurationManager;
-        #endregion
 
-        #region properties
         public ProjectNode Project
         {
             get { return this.project; }
         }
-        #endregion
 
-        #region ctor
         internal OAProject(ProjectNode project)
         {
             this.project = project;
-
-#if UNUSED_NESTED_PROJECTS
-            if (project is ProjectContainerNode)
-            {
-                this.solutionFolder = new Automation.OASolutionFolder((ProjectContainerNode)project);
-            }
-#endif
         }
-        #endregion
 
-        #region EnvDTE.Project
-        /// 
-        /// Gets or sets the name of the object. 
-        /// 
         public virtual string Name
         {
             get
@@ -414,10 +394,9 @@ public virtual void SaveAs(string fileName)
         /// 
         /// The file name of the project
         /// Is thrown if the save operation failes.
-        /// Is thrown if fileName is null.        
         public virtual void Save(string fileName)
         {
-            this.DoSave(false, fileName);
+            this.DoSave(false, fileName ?? string.Empty);
         }
 
         /// 
@@ -449,18 +428,14 @@ public virtual void Delete()
                 }
             });
         }
-        #endregion
 
-        #region ISupportVSProperties methods
         /// 
         /// For use by F# tooling only. 
         /// 
         public virtual void NotifyPropertiesDelete()
         {
         }
-        #endregion
 
-        #region private methods
         /// 
         /// Saves or Save Asthe project.
         /// 
@@ -588,6 +563,5 @@ private void DoSave(bool isCalledFromSaveAs, string fileName)
                 }
             });
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItem.cs
index e193f233613..146fd45f1cf 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItem.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -22,13 +22,10 @@ public class OAProjectItem : EnvDTE.ProjectItem
          where T : HierarchyNode
     {
 
-        #region fields
         private T node;
         private OAProject project;
-        #endregion
 
-        #region properties
-        public /*protected, but public for FSharp.Project.dll*/ T Node
+        public T Node
         {
             get
             {
@@ -39,24 +36,19 @@ public class OAProjectItem : EnvDTE.ProjectItem
         /// 
         /// Returns the automation project
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ OAProject Project
+        public OAProject Project
         {
             get
             {
                 return this.project;
             }
         }
-        #endregion
 
-        #region ctors
         internal OAProjectItem(OAProject project, T node)
         {
             this.node = node;
             this.project = project;
         }
-        #endregion
-
-        #region EnvDTE.ProjectItem
 
         /// 
         /// Gets the requested Extender if it is available for this object
@@ -298,9 +290,6 @@ public virtual bool IsDirty
             }
         }
 
-        /// 
-        /// Gets or sets the name of the object.
-        /// 
         public virtual string Name
         {
             get
@@ -489,7 +478,5 @@ public virtual EnvDTE.Window Open(string ViewKind)
         {
             throw new NotImplementedException();
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItems.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItems.cs
index 2746e29360d..23ac0c7a2fa 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItems.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItems.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -28,14 +28,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAProjectItems : OANavigableProjectItems
     {
-        #region ctor
         internal OAProjectItems(OAProject project, HierarchyNode nodeWithItems)
             : base(project, nodeWithItems)
         {
         }
-        #endregion
 
-        #region EnvDTE.ProjectItems
         /// 
         /// Creates a new project item from an existing item template file and adds it to the project. 
         /// 
@@ -192,16 +189,13 @@ public override EnvDTE.ProjectItem AddFromFile(string fileName)
             return this.AddItem(fileName, VSADDITEMOPERATION.VSADDITEMOP_OPENFILE);
         }
 
-        #endregion
-
-        #region helper methods
         /// 
         /// Adds an item to the project.
         /// 
         /// The full path of the item to add.
         /// The VSADDITEMOPERATION to use when adding the item.
         /// A ProjectItem object. 
-        public /*protected, but public for FSharp.Project.dll*/ virtual EnvDTE.ProjectItem AddItem(string path, VSADDITEMOPERATION op)
+        public virtual EnvDTE.ProjectItem AddItem(string path, VSADDITEMOPERATION op)
         {
             return UIThread.DoOnUIThread(delegate() {
                 if (this.Project == null || this.Project.Project == null || this.Project.Project.Site == null || this.Project.Project.IsClosed)
@@ -247,7 +241,7 @@ public override EnvDTE.ProjectItem AddFromFile(string fileName)
         /// The VSADDRESULT returned by the Add methods
         /// The full path of the item added.
         /// A ProjectItem object.
-        public /*protected, but public for FSharp.Project.dll*/ virtual EnvDTE.ProjectItem EvaluateAddResult(VSADDRESULT result, string path)
+        public virtual EnvDTE.ProjectItem EvaluateAddResult(VSADDRESULT result, string path)
         {
             return UIThread.DoOnUIThread(delegate() {
                 if (result == VSADDRESULT.ADDRESULT_Success)
@@ -261,12 +255,6 @@ public override EnvDTE.ProjectItem AddFromFile(string fileName)
                         {
                             item = new OAFileItem(this.Project, nodeAdded as FileNode);
                         }
-#if UNUSED_NESTED_PROJECTS
-                        else if (nodeAdded is NestedProjectNode)
-                        {
-                            item = new OANestedProjectItem(this.Project, nodeAdded as NestedProjectNode);
-                        }
-#endif
                         else
                         {
                             item = new OAProjectItem(this.Project, nodeAdded);
@@ -313,7 +301,5 @@ private static string GetTemplateNoZip(string fileName)
 
             return Path.Combine(components);
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperties.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperties.cs
index 50bda5edb6e..e88ec915c27 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperties.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperties.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -25,12 +25,9 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [CLSCompliant(false), ComVisible(true)]
     public class OAProperties : EnvDTE.Properties
     {
-        #region fields
         private NodeProperties target;
         private Dictionary properties = new Dictionary(StringComparer.OrdinalIgnoreCase);
-        #endregion
 
-        #region properties
         /// 
         /// Defines the NodeProperties object that contains the defines the properties.
         /// 
@@ -63,9 +60,7 @@ public HierarchyNode Node
                 return this.properties;
             }
         }
-        #endregion
 
-        #region ctor
         internal OAProperties(NodeProperties target)
         {
             System.Diagnostics.Debug.Assert(target != null);
@@ -73,9 +68,7 @@ internal OAProperties(NodeProperties target)
             this.target = target;
             this.AddPropertiesFromType(target.GetType());
         }
-        #endregion
 
-        #region EnvDTE.Properties
         /// 
         /// For use by F# tooling only.
         /// 
@@ -170,21 +163,17 @@ public virtual EnvDTE.Property Item(object index)
 
             throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "index");
         }
-        /// 
-        /// Gets the immediate parent object of a Properties collection.
-        /// 
+
         public virtual object Parent
         {
             get { return null; }
         }
-        #endregion
 
-        #region methods
         /// 
         /// Add properties to the collection of properties filtering only those properties which are com-visible and AutomationBrowsable
         /// 
         /// The type of NodeProperties the we should filter on
-        public /*protected, but public for FSharp.Project.dll*/ void AddPropertiesFromType(Type targetType)
+        public void AddPropertiesFromType(Type targetType)
         {
             Debug.Assert(targetType != null);
 
@@ -202,20 +191,15 @@ public virtual object Parent
                 }
             }
         }
-        #endregion
 
-        #region virtual methods
         /// 
         /// Creates a new OAProperty object and adds it to the current list of properties
         /// 
         /// The property to be associated with an OAProperty object
-        public /*protected, but public for FSharp.Project.dll*/ virtual void AddProperty(PropertyInfo propertyInfo)
+        public virtual void AddProperty(PropertyInfo propertyInfo)
         {
             this.properties.Add(propertyInfo.Name, new OAProperty(this, propertyInfo));
         }
-        #endregion
-
-        #region helper methods
 
         private bool IsInMap(PropertyInfo propertyInfo)
         {
@@ -263,6 +247,5 @@ private bool IsComVisible(PropertyInfo propertyInfo)
             }
             return true;
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperty.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperty.cs
index 796ee8995d0..bd2fdf6be0d 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperty.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperty.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -19,21 +19,15 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [CLSCompliant(false), ComVisible(true)]
     public class OAProperty : EnvDTE.Property
     {
-        #region fields
         private OAProperties parent;
         private PropertyInfo pi;
-        #endregion
-
-        #region ctors
 
         internal OAProperty(OAProperties parent, PropertyInfo pi)
         {
             this.parent = parent;
             this.pi = pi;
         }
-        #endregion
 
-        #region EnvDTE.Property
         /// 
         /// For use by F# tooling only.
         /// 
@@ -202,6 +196,5 @@ public object Value
                 }
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceFolderItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceFolderItem.cs
index 8c12f3f749c..381e4edc88f 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceFolderItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceFolderItem.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -23,15 +23,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAReferenceFolderItem : OAProjectItem
     {
-        #region ctors
         internal OAReferenceFolderItem(OAProject project, ReferenceContainerNode node)
             : base(project, node)
         {
         }
 
-        #endregion
-
-        #region overridden methods
         /// 
         /// Returns the project items collection of all the references defined for this project.
         /// 
@@ -43,10 +39,6 @@ public override EnvDTE.ProjectItems ProjectItems
             }
         }
 
-
-        #endregion
-
-        #region Helper methods
         private List GetListOfProjectItems()
         {
             List list = new List();
@@ -60,6 +52,5 @@ public override EnvDTE.ProjectItems ProjectItems
 
             return list;
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceItem.cs
index 3f36e326f03..4c4f4a2dcaa 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceItem.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -23,15 +23,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAReferenceItem : OAProjectItem
     {
-        #region ctors
         internal OAReferenceItem(OAProject project, ReferenceNode node)
             : base(project, node)
         {
         }
 
-        #endregion
-
-        #region overridden methods
         /// 
         /// Not implemented. If called throws invalid operation exception.
         ///     
@@ -51,9 +47,6 @@ public override EnvDTE.Window Open(string viewKind)
             throw new InvalidOperationException();
         }
 
-        /// 
-        /// Gets or sets the name of the object.
-        /// 
         public override string Name
         {
             get
@@ -87,6 +80,5 @@ public override EnvDTE.ProjectItems Collection
                 return null;
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OASolutionFolder.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OASolutionFolder.cs
deleted file mode 100644
index 98ecaa960e2..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OASolutionFolder.cs
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if UNUSED_NESTED_PROJECTS
-
-using System;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.Shell;
-using System.Runtime.InteropServices;
-using System.Collections.Generic;
-using System.Collections;
-using System.Diagnostics;
-using System.Runtime.Serialization;
-using System.Reflection;
-using IServiceProvider = System.IServiceProvider;
-using Microsoft.VisualStudio.OLE.Interop;
-using System.Globalization;
-using Microsoft.VisualStudio.FSharp.ProjectSystem;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
-{
-    [ComVisible(true), CLSCompliant(false)]
-    public class OASolutionFolder : EnvDTE80.SolutionFolder
-        where T : HierarchyNode
-    {
-        bool hidden = false;
-        T node;
-
-        internal OASolutionFolder(T associatedNode)
-        {
-            if (associatedNode == null)
-            {
-                throw new ArgumentNullException("associatedNode");
-            }
-
-            Debug.Assert(associatedNode.ProjectMgr is ProjectContainerNode, "Expecting obejct of type" + typeof(ProjectContainerNode).Name);
-
-            if (!(associatedNode.ProjectMgr is ProjectContainerNode))
-                throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "associatedNode");
-
-            this.node = associatedNode;
-        }
-
-
-        #region SolutionFolder Members
-
-        public virtual EnvDTE.Project AddFromFile(string fileName)
-        {
-            ProjectContainerNode projectContainer = (ProjectContainerNode)this.node.ProjectMgr;
-            ProjectElement newElement = new ProjectElement(projectContainer, fileName, ProjectFileConstants.SubProject);
-            NestedProjectNode newNode = projectContainer.AddExistingNestedProject(newElement, __VSCREATEPROJFLAGS.CPF_NOTINSLNEXPLR | __VSCREATEPROJFLAGS.CPF_SILENT | __VSCREATEPROJFLAGS.CPF_OPENFILE);
-            if (newNode == null)
-                return null;
-            // Now that the sub project was created, get its extensibility object so we can return it
-            object newProject = null;
-            if (ErrorHandler.Succeeded(newNode.NestedHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out newProject)))
-                return newProject as EnvDTE.Project;
-            else
-                return null;
-        }
-
-        public virtual EnvDTE.Project AddFromTemplate(string fileName, string destination, string projectName)
-        {
-            bool isVSTemplate = Utilities.IsTemplateFile(fileName);
-
-            NestedProjectNode newNode = null;
-            if (isVSTemplate)
-            {
-                // Get the wizard to run, we will get called again and use the alternate code path
-                ProjectElement newElement = new ProjectElement(this.node.ProjectMgr, System.IO.Path.Combine(destination, projectName), ProjectFileConstants.SubProject);
-                newElement.SetMetadata(ProjectFileConstants.Template, fileName);
-                ((ProjectContainerNode)this.node.ProjectMgr).RunVsTemplateWizard(newElement, false);
-            }
-            else
-            {
-                if ((String.IsNullOrEmpty(System.IO.Path.GetExtension(projectName))))
-                {
-                    string targetExtension = System.IO.Path.GetExtension(fileName);
-                    projectName = System.IO.Path.ChangeExtension(projectName, targetExtension);
-                }
-
-                ProjectContainerNode projectContainer = (ProjectContainerNode)this.node.ProjectMgr;
-                newNode = projectContainer.AddNestedProjectFromTemplate(fileName, destination, projectName, null, __VSCREATEPROJFLAGS.CPF_NOTINSLNEXPLR | __VSCREATEPROJFLAGS.CPF_SILENT | __VSCREATEPROJFLAGS.CPF_CLONEFILE);
-            }
-            if (newNode == null)
-                return null;
-
-            // Now that the sub project was created, get its extensibility object so we can return it
-            object newProject = null;
-            if (ErrorHandler.Succeeded(newNode.NestedHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out newProject)))
-                return newProject as EnvDTE.Project;
-            else
-                return null;
-        }
-
-        public virtual EnvDTE.Project AddSolutionFolder(string Name)
-        {
-            throw new NotImplementedException();
-        }
-
-        public virtual EnvDTE.Project Parent
-        {
-            get
-            {
-                throw new NotImplementedException();
-            }
-        }
-
-        public virtual bool Hidden
-        {
-            get
-            {
-                return hidden;
-            }
-            set
-            {
-                hidden = value;
-            }
-        }
-
-        public virtual EnvDTE.DTE DTE 
-        {
-            get
-            {
-                return (EnvDTE.DTE)this.node.ProjectMgr.Site.GetService(typeof(EnvDTE.DTE));
-            }
-        }
-
-        #endregion
-    }
-
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAAssemblyReference.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAAssemblyReference.cs
index d51e03e4caf..c6fcdd6b77e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAAssemblyReference.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAAssemblyReference.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Reflection;
@@ -20,7 +20,6 @@ internal OAAssemblyReference(AssemblyReferenceNode assemblyReference) :
         {
         }
 
-        #region Reference override
         public override int BuildNumber
         {
             get
@@ -155,6 +154,5 @@ public override string Version
                 return BaseReferenceNode.ResolvedAssembly.Version.ToString();
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OABuildManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OABuildManager.cs
index 6874d174d50..95098178e6d 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OABuildManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OABuildManager.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
@@ -24,8 +24,6 @@ internal OABuildManager(ProjectNode project)
         }
 
 
-        #region BuildManager Members
-
         public string BuildDesignTimeOutput(string bstrOutputMoniker)
         {
             throw new NotImplementedException();
@@ -53,16 +51,10 @@ public object Parent
             get { throw new NotImplementedException(); }
         }
 
-        #endregion
-
-        #region _dispBuildManagerEvents_Event Members
-
         public event _dispBuildManagerEvents_DesignTimeOutputDeletedEventHandler DesignTimeOutputDeleted;
 
         public event _dispBuildManagerEvents_DesignTimeOutputDirtyEventHandler DesignTimeOutputDirty;
 
-        #endregion
-
         private void OnDesignTimeOutputDeleted(object sender, EventArgs args)
         {
             if (DesignTimeOutputDeleted == null)
@@ -97,8 +89,6 @@ private static string GetOutputMoniker(object sender)
             return moniker;
         }
 
-        #region IEventSource<_dispBuildManagerEvents> Members
-
         void IEventSource<_dispBuildManagerEvents>.OnSinkAdded(_dispBuildManagerEvents sink)
         {
             DesignTimeOutputDeleted += new _dispBuildManagerEvents_DesignTimeOutputDeletedEventHandler(sink.DesignTimeOutputDeleted);
@@ -110,7 +100,5 @@ void IEventSource<_dispBuildManagerEvents>.OnSinkRemoved(_dispBuildManagerEvents
             DesignTimeOutputDeleted -= new _dispBuildManagerEvents_DesignTimeOutputDeletedEventHandler(sink.DesignTimeOutputDeleted);
             DesignTimeOutputDirty -= new _dispBuildManagerEvents_DesignTimeOutputDirtyEventHandler(sink.DesignTimeOutputDirty);
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAComReference.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAComReference.cs
index e1c4f3fe22c..5abd5a58ce7 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAComReference.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAComReference.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Globalization;
@@ -19,7 +19,6 @@ internal OAComReference(ComReferenceNode comReference) :
         {
         }
 
-        #region Reference override
         public override string Culture
         {
             get
@@ -68,6 +67,5 @@ public override string Version
                 return version.ToString();
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAProjectReference.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAProjectReference.cs
index 15cce0bbcb9..7322fd75dc3 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAProjectReference.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAProjectReference.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Runtime.InteropServices;
@@ -23,7 +23,6 @@ internal OAProjectReference(ProjectReferenceNode projectReference) :
         {
         }
 
-        #region Reference override
         public override string Culture
         {
             get { return string.Empty; }
@@ -82,6 +81,5 @@ public override string Version
         {
             get { return string.Empty; }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferenceBase.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferenceBase.cs
index 591263c5825..4de53d9e120 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferenceBase.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferenceBase.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Runtime.InteropServices;
@@ -19,25 +19,18 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     public class OAReferenceBase : Reference
         where RefType : ReferenceNode
     {
-        #region fields
         private RefType referenceNode;
-        #endregion
 
-        #region ctors
         internal OAReferenceBase(RefType referenceNode)
         {
             this.referenceNode = referenceNode;
         }
-        #endregion
 
-        #region properties
-        public /*protected, but public for FSharp.Project.dll*/ RefType BaseReferenceNode
+        public RefType BaseReferenceNode
         {
             get { return referenceNode; }
         }
-        #endregion
 
-        #region Reference Members
         public virtual int BuildNumber
         {
             get { return 0; }
@@ -200,6 +193,5 @@ public virtual object get_Extender(string ExtenderName)
                 return ((ReferenceNodeProperties)referenceNode.NodeProperties).Extender(ExtenderName);
             });
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferences.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferences.cs
index fb380df68cb..c6933c38bb1 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferences.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferences.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
@@ -34,7 +34,6 @@ internal OAReferences(ReferenceContainerNode containerNode)
             container.OnChildRemoved += new EventHandler(OnReferenceRemoved);
         }
 
-        #region Private Members
         private Reference AddFromSelectorData(VSCOMPONENTSELECTORDATA selector)
         {
             ReferenceNode refNode = container.AddReferenceFromSelectorData(selector);
@@ -57,9 +56,6 @@ private Reference FindByName(string stringIndex)
             }
             return null;
         }
-        #endregion
-
-        #region References Members
 
         public Reference Add(string bstrPath)
         {
@@ -258,15 +254,10 @@ public object Parent
             }
         }
 
-        #endregion
-
-        #region _dispReferencesEvents_Event Members
         public event _dispReferencesEvents_ReferenceAddedEventHandler ReferenceAdded;
         public event _dispReferencesEvents_ReferenceChangedEventHandler ReferenceChanged;
         public event _dispReferencesEvents_ReferenceRemovedEventHandler ReferenceRemoved;
-        #endregion
 
-        #region Callbacks for the HierarchyNode events
         private void OnReferenceAdded(object sender, HierarchyNodeEventArgs args)
         {
             // Validate the parameters.
@@ -336,9 +327,7 @@ private void OnReferenceRemoved(object sender, HierarchyNodeEventArgs args)
                 ReferenceRemoved(reference);
             }
         }
-        #endregion
 
-        #region IEventSource<_dispReferencesEvents> Members
         void IEventSource<_dispReferencesEvents>.OnSinkAdded(_dispReferencesEvents sink)
         {
             ReferenceAdded += new _dispReferencesEvents_ReferenceAddedEventHandler(sink.ReferenceAdded);
@@ -352,6 +341,5 @@ void IEventSource<_dispReferencesEvents>.OnSinkRemoved(_dispReferencesEvents sin
             ReferenceChanged -= new _dispReferencesEvents_ReferenceChangedEventHandler(sink.ReferenceChanged);
             ReferenceRemoved -= new _dispReferencesEvents_ReferenceRemovedEventHandler(sink.ReferenceRemoved);
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProject.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProject.cs
index e1215b4517f..80c30daf67f 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProject.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProject.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -24,19 +24,13 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAVSProject : VSProject
     {
-        #region fields
         private ProjectNode project;
         private OAVSProjectEvents events;
-        #endregion
 
-        #region ctors
         internal OAVSProject(ProjectNode project)
         {
             this.project = project;
         }
-        #endregion
-
-        #region VSProject Members
 
         public ProjectItem AddWebReference(string bstrUrl)
         {
@@ -168,8 +162,6 @@ public bool WorkOffline
                 throw new NotImplementedException();
             }
         }
-
-        #endregion
     }
 
     /// 
@@ -179,18 +171,12 @@ public bool WorkOffline
     [ComVisible(true), CLSCompliant(false)]
     public class OAVSProjectEvents : VSProjectEvents
     {
-        #region fields
         private OAVSProject vsProject;
-        #endregion
 
-        #region ctors
         internal OAVSProjectEvents(OAVSProject vsProject)
         {
             this.vsProject = vsProject;
         }
-        #endregion
-
-        #region VSProjectEvents Members
 
         public BuildManagerEvents BuildManagerEvents
         {
@@ -216,8 +202,6 @@ public ReferencesEvents ReferencesEvents
                 return vsProject.References as ReferencesEvents;
             }
         }
-
-        #endregion
     }
 
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProjectItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProjectItem.cs
index 73c9f80f38b..1bc2ba34e3e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProjectItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProjectItem.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -25,18 +25,12 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAVSProjectItem : VSProjectItem
     {
-        #region fields
         private FileNode fileNode;
-        #endregion
 
-        #region ctors
         internal OAVSProjectItem(FileNode fileNode)
         {
             this.FileNode = fileNode;
         }
-        #endregion
-
-        #region VSProjectItem Members
 
         public virtual Project ContainingProject
         {
@@ -55,17 +49,8 @@ public virtual DTE DTE
 
         public virtual void RunCustomTool()
         {
-#if SINGLE_FILE_GENERATOR
-            this.FileNode.RunGenerator();
-#endif
         }
 
-        #endregion
-
-        #region public properties
-        /// 
-        /// File Node property
-        /// 
         public FileNode FileNode
         {
             get
@@ -77,7 +62,5 @@ public FileNode FileNode
                 fileNode = value;
             }
         }
-        #endregion
-
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildDependency.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildDependency.cs
index d2efa7c89a7..23bb86765ac 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildDependency.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildDependency.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.Shell.Interop;
 using System;
@@ -23,7 +23,6 @@ public BuildDependency(ProjectNode projectMgr, Guid projectReference)
             this.projectMgr = projectMgr;
         }
 
-        #region IVsBuildDependency methods
         public int get_CanonicalName(out string canonicalName)
         {
             canonicalName = null;
@@ -73,9 +72,6 @@ public int get_ReferredProject(out object unknownProject)
             return (unknownProject == null) ? VSConstants.S_FALSE : VSConstants.S_OK;
         }
 
-        #endregion
-
-        #region helper methods
         private IVsHierarchy GetReferencedHierarchy()
         {
             IVsHierarchy hierarchy = null;
@@ -89,7 +85,5 @@ private IVsHierarchy GetReferencedHierarchy()
 
         }
 
-        #endregion
-
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildPropertyPage.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildPropertyPage.cs
index a642c65543d..9e6df9a4281 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildPropertyPage.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildPropertyPage.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.VisualStudio.Shell.Interop;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ComReferenceNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ComReferenceNode.cs
index 9a46f493137..f3986099f92 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ComReferenceNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ComReferenceNode.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using Microsoft.Win32;
@@ -35,7 +35,6 @@ private enum RegKind
         [ DllImport( "oleaut32.dll", CharSet = CharSet.Unicode, PreserveSig = false )]
         private static extern void LoadTypeLibEx(string strTypeLibName, RegKind regKind, [ MarshalAs( UnmanagedType.Interface )] out object typeLib );
 
-        #region fields
         private string typeName;
         private Guid typeGuid;
         private string projectRelativeFilePath;
@@ -43,9 +42,7 @@ [ DllImport( "oleaut32.dll", CharSet = CharSet.Unicode, PreserveSig = false )]
         private string minorVersionNumber;
         private string majorVersionNumber;
         private readonly int lcid;
-        #endregion
 
-        #region properties
         public override string Caption
         {
             get { return this.typeName; }
@@ -104,7 +101,7 @@ public int MinorVersionNumber
             }
         }
         private Automation.OAComReference comReference;
-        /*internal, but public for FSharp.Project.dll*/ public override object Object
+        public override object Object
         {
             get
             {
@@ -115,12 +112,7 @@ public int MinorVersionNumber
                 return comReference;
             }
         }
-        #endregion
 
-        #region ctors
-        /// 
-        /// Constructor for the ComReferenceNode. 
-        /// 
         internal ComReferenceNode(ProjectNode root, ProjectElement element)
             : base(root, element)
         {
@@ -213,13 +205,10 @@ internal ComReferenceNode(ProjectNode root, string filePath)
             }
         }
 
-        #endregion
-
-        #region methods
         /// 
         /// Links a reference node to the project and hierarchy.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void BindReferenceData()
+        public override void BindReferenceData()
         {
             Debug.Assert(this.ItemNode != null, "The AssemblyName field has not been initialized");
 
@@ -240,7 +229,7 @@ internal ComReferenceNode(ProjectNode root, string filePath)
         /// Checks if a reference is already added. The method parses all references and compares the the FinalItemSpec and the Guid.
         /// 
         /// true if the assembly has already been added.
-        public /*protected, but public for FSharp.Project.dll*/ override bool IsAlreadyAdded(out ReferenceNode existingNode)
+        public override bool IsAlreadyAdded(out ReferenceNode existingNode)
         {
             ReferenceContainerNode referencesFolder = this.ProjectMgr.FindChild(ReferenceContainerNode.ReferencesNodeVirtualName) as ReferenceContainerNode;
             Debug.Assert(referencesFolder != null, "Could not find the References node");
@@ -268,7 +257,7 @@ internal ComReferenceNode(ProjectNode root, string filePath)
         /// Determines if this is node a valid node for painting the default reference icon.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanShowDefaultIcon()
+        public override bool CanShowDefaultIcon()
         {
             return !String.IsNullOrEmpty(this.installedFilePath);
         }
@@ -380,7 +369,5 @@ private void SetInstalledFilePath()
                 }
             }
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigProvider.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigProvider.cs
index 19160614c1a..7f239e8ce9a 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigProvider.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigProvider.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.Shell.Interop;
 using System;
@@ -30,18 +30,15 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [ComVisible(true)]
     public class ConfigProvider : IVsCfgProvider2, IVsProjectCfgProvider, IVsExtensibleObject
     {
-        #region fields
         private ProjectNode project;
         private EventSinkCollection cfgEventSinks = new EventSinkCollection();
         private List, string>> newCfgProps = new List, string>>();
         private Dictionary configurationsList = new Dictionary();
-        #endregion
 
-        #region Properties
         /// 
         /// The associated project.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ ProjectNode ProjectMgr
+        public ProjectNode ProjectMgr
         {
             get
             {
@@ -65,16 +62,11 @@ public virtual List, string>> NewConfi
             }
         }
 
-        #endregion
-
-        #region ctors
         internal ConfigProvider(ProjectNode manager)
         {
             this.project = manager;
         }
-        #endregion
 
-        #region methods
         /// 
         /// Creates new Project Configuartion objects based on the configuration name.
         /// 
@@ -99,9 +91,6 @@ internal virtual ProjectConfig CreateProjectConfiguration(ConfigCanonicalName ca
             return new ProjectConfig(this.project, canonicalName);
         }
 
-        #endregion
-
-        #region IVsProjectCfgProvider methods
         /// 
         /// Provides access to the IVsProjectCfg interface implemented on a project's configuration object. 
         /// 
@@ -162,11 +151,8 @@ public virtual int get_UsesIndependentConfigurations(out int usesIndependentConf
             usesIndependentConfigurations = 1;
             return VSConstants.S_OK;
         }
-        #endregion
 
 
-
-        #region IVsCfgProvider2 methods
         /// 
         /// Copies an existing configuration name or creates a new one. 
         /// 
@@ -690,9 +676,6 @@ public virtual int AdviseCfgProviderEvents(IVsCfgProviderEvents sink, out uint c
             cookie = this.cfgEventSinks.Add(sink);
             return VSConstants.S_OK;
         }
-        #endregion
-
-#region IVsExtensibleObject Members
 
         /// 
         /// Proved access to an IDispatchable object being a list of configuration properties
@@ -717,9 +700,7 @@ public virtual int GetAutomationObject(string configurationName, out object conf
             return VSConstants.S_OK;
 
         }
-        #endregion
 
-#region helper methods
         /// 
         /// Called when a new configuration name was added.
         /// 
@@ -880,7 +861,6 @@ private static int GetPlatforms(uint celt, string[] names, uint[] actual, string
 
             return VSConstants.S_OK;
         }
-        #endregion
 
         /// 
         /// Get all the configurations in the project.
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigurationProperties.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigurationProperties.cs
index 2bedbb1e7d7..c2a2395d271 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigurationProperties.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigurationProperties.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.Shell.Interop;
 using System;
@@ -24,18 +24,12 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     public class ProjectConfigProperties : 
          VSLangProj.ProjectConfigurationProperties
     {
-        #region fields
         private ProjectConfig projectConfig;
-        #endregion
 
-        #region ctors
         internal ProjectConfigProperties(ProjectConfig projectConfig)
         {
             this.projectConfig = projectConfig;
         }
-        #endregion
-
-        #region IProjectConfigProperties Members
 
         public virtual string OutputPath
         {
@@ -49,8 +43,6 @@ public virtual string OutputPath
             }
         }
 
-        #endregion
-        #region VSLangProj.ProjectConfigurationProperties
         public string __id
         {
             get { return UIThread.DoOnUIThread(() => projectConfig.ConfigName); }
@@ -336,7 +328,6 @@ public string RemoteDebugMachine
             get { return UIThread.DoOnUIThread(() => projectConfig.RemoteDebugMachine); }
             set { UIThread.DoOnUIThread(() => { projectConfig.RemoteDebugMachine = value; }); }
         }
-        #endregion
 
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DataObject.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DataObject.cs
index ee937d49399..ed58ca81795 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DataObject.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DataObject.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Diagnostics;
@@ -34,7 +34,6 @@ internal enum tagTYMED
 
         internal sealed class DataCacheEntry : IDisposable
         {
-                #region fields
                 /// 
                 /// Defines an object that will be a mutex for this object for synchronizing thread calls.
                 /// 
@@ -47,10 +46,8 @@ internal sealed class DataCacheEntry : IDisposable
                 private DATADIR dataDir;
 
                 private bool isDisposed;
-                #endregion
 
-                #region properties
-                /*internal, but public for FSharp.Project.dll*/ public FORMATETC Format
+                public FORMATETC Format
                 {
                         get
                         {
@@ -58,7 +55,7 @@ internal sealed class DataCacheEntry : IDisposable
                         }
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public long Data
+                public long Data
                 {
                         get
                         {
@@ -67,7 +64,7 @@ internal sealed class DataCacheEntry : IDisposable
                 }
 
                 [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-                /*internal, but public for FSharp.Project.dll*/ public DATADIR DataDir
+                public DATADIR DataDir
                 {
                         get
                         {
@@ -75,19 +72,16 @@ internal sealed class DataCacheEntry : IDisposable
                         }
                 }
 
-                #endregion
-
                 /// 
                 /// The IntPtr is data allocated that should be removed. It is allocated by the ProcessSelectionData method.
                 /// 
-                /*internal, but public for FSharp.Project.dll*/ public DataCacheEntry(FORMATETC fmt, IntPtr data, DATADIR dir)
+                public DataCacheEntry(FORMATETC fmt, IntPtr data, DATADIR dir)
                 {
                         this.format = fmt;
                         this.data = (long)data;
                         this.dataDir = dir;
                 }
 
-                #region Dispose
                 ~DataCacheEntry()
                 {
                         Dispose(false);
@@ -128,7 +122,6 @@ private void Dispose(bool disposing)
                                 }
                         }
                 }
-                #endregion
         }
 
         /// 
@@ -137,28 +130,25 @@ private void Dispose(bool disposing)
         /// 
         internal sealed class DataObject : IDataObject
         {
-                #region fields
-                /*internal, but public for FSharp.Project.dll*/ public const int DATA_S_SAMEFORMATETC = 0x00040130;
+                public const int DATA_S_SAMEFORMATETC = 0x00040130;
 
-                /*internal, but public for FSharp.Project.dll*/ public static readonly int DATA_E_FORMATETC = ForceCast(0x80040064);
+                public static readonly int DATA_E_FORMATETC = ForceCast(0x80040064);
 
                 EventSinkCollection map;
 
                 ArrayList entries;
-                #endregion
 
-                /*internal, but public for FSharp.Project.dll*/ public DataObject()
+                public DataObject()
                 {
                         this.map = new EventSinkCollection();
                         this.entries = new ArrayList();
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public void SetData(FORMATETC format, IntPtr data)
+                public void SetData(FORMATETC format, IntPtr data)
                 {
                         this.entries.Add(new DataCacheEntry(format, data, DATADIR.DATADIR_SET));
                 }
 
-                #region IDataObject methods
                 int IDataObject.DAdvise(FORMATETC[] e, uint adv, IAdviseSink sink, out uint cookie)
                 {
                         STATDATA sdata = new STATDATA();
@@ -237,32 +227,28 @@ int IDataObject.QueryGetData(FORMATETC[] fmt)
                 void IDataObject.SetData(FORMATETC[] fmt, STGMEDIUM[] m, int fRelease)
                 {
                 }
-                #endregion
 
-                #region static methods
-                /*internal, but public for FSharp.Project.dll*/ public static int ForceCast(uint i)
+                public static int ForceCast(uint i)
                 {
                         unchecked { return (int)i; }
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public static uint ForceCast(int i)
+                public static uint ForceCast(int i)
                 {
                         unchecked { return (uint)i; }
                 }
-
-                #endregion
         }
 
         [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
         internal static class DragDropHelper
         {
 #pragma warning disable 414
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_VSREFPROJECTS = 0;
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_VSSTGPROJECTS = 0;
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_VSREFPROJECTITEMS = 0;
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_VSSTGPROJECTITEMS = 0;
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_PROJECTCLIPDESCRIPTOR = 0;
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_VSPROJECTCLIPDESCRIPTOR = 0;
+                internal static readonly ushort CF_VSREFPROJECTS = 0;
+                internal static readonly ushort CF_VSSTGPROJECTS = 0;
+                internal static readonly ushort CF_VSREFPROJECTITEMS = 0;
+                internal static readonly ushort CF_VSSTGPROJECTITEMS = 0;
+                internal static readonly ushort CF_PROJECTCLIPDESCRIPTOR = 0;
+                internal static readonly ushort CF_VSPROJECTCLIPDESCRIPTOR = 0;
 #pragma warning restore 414
 
                 static DragDropHelper()
@@ -414,7 +400,7 @@ public static string GetSourceProjectPath(Microsoft.VisualStudio.OLE.Interop.IDa
                 /// 
                 /// 
                 /// 
-                /*internal, but public for FSharp.Project.dll*/ public static string GetData(IntPtr dropHandle)
+                public static string GetData(IntPtr dropHandle)
                 {
                         IntPtr data = UnsafeNativeMethods.GlobalLock(dropHandle);
                         try
@@ -437,7 +423,7 @@ public static string GetSourceProjectPath(Microsoft.VisualStudio.OLE.Interop.IDa
                         return null;
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public static void FillFormatEtc(ref FORMATETC template, ushort clipFormat, ref FORMATETC result)
+                public static void FillFormatEtc(ref FORMATETC template, ushort clipFormat, ref FORMATETC result)
                 {
                         if (clipFormat != 0)
                         {
@@ -450,7 +436,7 @@ public static string GetSourceProjectPath(Microsoft.VisualStudio.OLE.Interop.IDa
                         }
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public static void OleCopyFormatEtc(ref FORMATETC src, ref FORMATETC dest)
+                public static void OleCopyFormatEtc(ref FORMATETC src, ref FORMATETC dest)
                 {
                         dest.cfFormat = src.cfFormat;
                         dest.ptd = Marshal.AllocCoTaskMem(Marshal.SizeOf(src.ptd));
@@ -460,7 +446,7 @@ public static string GetSourceProjectPath(Microsoft.VisualStudio.OLE.Interop.IDa
                         dest.tymed = src.tymed;
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public static IntPtr CopyHGlobal(IntPtr data)
+                public static IntPtr CopyHGlobal(IntPtr data)
                 {
                         IntPtr src = UnsafeNativeMethods.GlobalLock(data);
                         int size = UnsafeNativeMethods.GlobalSize(data);
@@ -491,7 +477,7 @@ public static string GetSourceProjectPath(Microsoft.VisualStudio.OLE.Interop.IDa
                         return ptr;
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public static void CopyStringToHGlobal(string s, IntPtr data, int bufferSize)
+                public static void CopyStringToHGlobal(string s, IntPtr data, int bufferSize)
                 {
                         Int16 nullTerminator = 0;
                         int dwSize = Marshal.SizeOf(nullTerminator);
@@ -529,7 +515,6 @@ void IEnumSTATDATA.Clone(out IEnumSTATDATA clone)
                 int IEnumSTATDATA.Next(uint celt, STATDATA[] d, out uint fetched)
                 {
                         uint rc = 0;
-                        //uint size = (fetched != null) ? fetched[0] : 0;
                         for (uint i = 0; i < celt; i++)
                         {
                                 if (e.MoveNext())
@@ -588,7 +573,6 @@ void IEnumFORMATETC.Clone(out IEnumFORMATETC clone)
                 int IEnumFORMATETC.Next(uint celt, FORMATETC[] d, uint[] fetched)
                 {
                         uint rc = 0;
-                        //uint size = (fetched != null) ? fetched[0] : 0;
                         for (uint i = 0; i < celt; i++)
                         {
                                 if (e.MoveNext())
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DependentFileNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DependentFileNode.cs
deleted file mode 100644
index 7807dc77049..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DependentFileNode.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if UNUSED_DEPENDENT_FILES
-using System;
-using System.Runtime.InteropServices;
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Windows.Forms;
-using System.Diagnostics;
-using System.Globalization;
-using System.Text;
-using System.Threading;
-using Microsoft.VisualStudio.Shell;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.OLE.Interop;
-using Microsoft.VisualStudio.TextManager.Interop;
-using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants;
-using VsCommands = Microsoft.VisualStudio.VSConstants.VSStd97CmdID;
-using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID;
-using MSBuild = Microsoft.Build.BuildEngine;
-using System.Diagnostics.CodeAnalysis;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    /// 
-    /// Defines the logic for all dependent file nodes (solution explorer icon, commands etc.)
-    /// 
-    [CLSCompliant(false)]
-    [ComVisible(true)]
-    public class DependentFileNode : FileNode
-    {
-        #region fields
-        /// 
-        /// Defines if the node has a name relation to its parent node
-        /// e.g. Form1.ext and Form1.resx are name related (until first occurence of extention separator)
-        /// 
-        #endregion
-
-        #region Properties
-        public override int ImageIndex
-        {
-            get { return (this.CanShowDefaultIcon() ? (int)ProjectNode.ImageName.DependentFile : (int) ProjectNode.ImageName.MissingFile); }
-        }
-        #endregion
-
-        #region ctor
-        /// 
-        /// Constructor for the DependentFileNode
-        /// 
-        /// Root of the hierarchy
-        /// Associated project element
-        internal DependentFileNode(ProjectNode root, ProjectElement element)
-            : base(root, element)
-        {
-            this.HasParentNodeNameRelation = false;
-        }
-
-
-        #endregion
-
-        #region overridden methods
-        /// 
-        /// Disable rename
-        /// 
-        /// new label
-        /// E_NOTIMPLE in order to tell the call that we do not support rename
-        public override string GetEditLabel()
-        {
-            throw new NotImplementedException();
-        }
-
-        /// 
-        /// Gets a handle to the icon that should be set for this node
-        /// 
-        /// Whether the folder is open, ignored here.
-        /// Handle to icon for the node
-        public override object GetIconHandle(bool open)
-        {
-            return this.ProjectMgr.ImageHandler.GetIconHandle(this.ImageIndex);
-        }
-
-        /// 
-        /// Disable certain commands for dependent file nodes 
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText, ref QueryStatusResult result)
-        {
-            if (cmdGroup == VsMenus.guidStandardCommandSet97)
-            {
-                switch ((VsCommands)cmd)
-                {
-                    case VsCommands.Copy:
-                    case VsCommands.Paste:
-                    case VsCommands.Cut:
-                    case VsCommands.Rename:
-                        result |= QueryStatusResult.NOTSUPPORTED;
-                        return VSConstants.S_OK;
-
-                    case VsCommands.ViewCode:
-                    case VsCommands.Open:
-                    case VsCommands.OpenWith:
-                        result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED;
-                        return VSConstants.S_OK;
-                }
-            }
-            else if (cmdGroup == VsMenus.guidStandardCommandSet2K)
-            {
-                if ((VsCommands2K)cmd == VsCommands2K.EXCLUDEFROMPROJECT)
-                {
-                    result |= QueryStatusResult.NOTSUPPORTED;
-                    return VSConstants.S_OK;
-                }
-            }
-            else
-            {
-                return (int)OleConstants.OLECMDERR_E_UNKNOWNGROUP;
-            }
-            return base.QueryStatusOnNode(cmdGroup, cmd, pCmdText, ref result);
-        }
-
-        /// 
-        /// DependentFileNodes node cannot be dragged.
-        /// 
-        /// null
-        public /*protected, but public for FSharp.Project.dll*/ override StringBuilder PrepareSelectedNodesForClipBoard()
-        {
-            return null;
-        }
-
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
-        {
-            return new DependentFileNodeProperties(this);
-        }
-
-        /// 
-        /// Redraws the state icon if the node is not excluded from source control.
-        /// 
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
-        public /*protected, but public for FSharp.Project.dll*/ override void UpdateSccStateIcons()
-        {
-            if (!this.ExcludeNodeFromScc)
-            {
-                this.Parent.ReDraw(UIHierarchyElement.SccState);
-            }
-        }
-        #endregion
-
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DesignPropertyDescriptor.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DesignPropertyDescriptor.cs
index 65b7308e803..7353fc3fde3 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DesignPropertyDescriptor.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DesignPropertyDescriptor.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.OLE.Interop;
 using Microsoft.VisualStudio.Shell.Interop;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DocumentManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DocumentManager.cs
index 5a8e6d6648f..3310a9c85b2 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DocumentManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DocumentManager.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.Shell.Interop;
 using System;
@@ -27,28 +27,20 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// 
     internal abstract class DocumentManager
     {
-        #region fields
         private HierarchyNode node = null;
-        #endregion
 
-        #region properties
-        public /*protected, but public for FSharp.Project.dll*/ HierarchyNode Node
+        public HierarchyNode Node
         {
             get
             {
                 return this.node;
             }
         }
-        #endregion
         
-        #region ctors
-        public /*protected, but public for FSharp.Project.dll*/ DocumentManager(HierarchyNode node)
+        public DocumentManager(HierarchyNode node)
         {
             this.node = node;
         }
-        #endregion
-
-        #region virtual methods
 
         /// 
         /// Open a document using the standard editor. This method has no implementation since a document is abstract in this context
@@ -139,13 +131,10 @@ public virtual void Save(bool saveIfDirty)
             }
         }
 
-        #endregion
-
-        #region helper methods
         /// 
         /// Get document properties from RDT
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public void GetDocInfo(
+        public void GetDocInfo(
             out bool isOpen,     // true if the doc is opened
             out bool isDirty,    // true if the doc is dirty
             out bool isOpenedByUs, // true if opened by our project
@@ -186,7 +175,7 @@ public virtual void Save(bool saveIfDirty)
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ string GetOwnerCaption()
+        public string GetOwnerCaption()
         {
             Debug.Assert(this.node != null, "No node has been initialized for the document manager");
 
@@ -196,7 +185,7 @@ public virtual void Save(bool saveIfDirty)
             return (pvar as string);
         }
         
-        public /*protected, but public for FSharp.Project.dll*/ void CloseWindowFrame(ref IVsWindowFrame windowFrame)
+        public void CloseWindowFrame(ref IVsWindowFrame windowFrame)
         {
             if (windowFrame != null)
             {
@@ -211,7 +200,7 @@ public virtual void Save(bool saveIfDirty)
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ string GetFullPathForDocument()
+        public string GetFullPathForDocument()
         {
             string fullPath = String.Empty;
 
@@ -224,9 +213,6 @@ public virtual void Save(bool saveIfDirty)
             return fullPath;
         }
 
-        #endregion
-
-        #region static methods
         /// 
         /// Updates the caption for all windows associated to the document.
         /// 
@@ -349,6 +335,5 @@ public static void RenameDocument(IServiceProvider site, string oldName, string
                 }
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/EnumDependencies.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/EnumDependencies.cs
index 02e322f0ac0..f8d41aede21 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/EnumDependencies.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/EnumDependencies.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.Shell.Interop;
 using System;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileChangeManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileChangeManager.cs
index 5ca5e388f3f..9e113ab4ecd 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileChangeManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileChangeManager.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 {
@@ -17,7 +17,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// 
     internal class FileChangeManager : IVsFileChangeEvents
     {
-        #region nested objects
         /// 
         /// Defines a data structure that can link a item moniker to the item and its file change cookie.
         /// 
@@ -36,7 +35,7 @@ private struct ObservedItemInfo
             /// 
             /// Defines the nested project item that is to be reloaded.
             /// 
-            /*internal, but public for FSharp.Project.dll*/ public uint ItemID
+            public uint ItemID
             {
                 get
                 {
@@ -52,7 +51,7 @@ private struct ObservedItemInfo
             /// 
             /// Defines the file change cookie that is returned when listenning on file changes on the nested project item.
             /// 
-            /*internal, but public for FSharp.Project.dll*/ public uint FileChangeCookie
+            public uint FileChangeCookie
             {
                 get
                 {
@@ -65,9 +64,7 @@ private struct ObservedItemInfo
                 }
             }
         }
-        #endregion
 
-        #region Fields
         /// 
         /// Event that is raised when one of the observed file names have changed on disk.
         /// 
@@ -84,24 +81,14 @@ private struct ObservedItemInfo
         /// 
         private Dictionary observedItems = new Dictionary();
 
-        /// 
-        /// Has Disposed already been called?
-        /// 
         private bool disposed;
-        #endregion
 
-        #region Constructor
-        /// 
-        /// Overloaded ctor.
-        /// 
-        /*internal, but public for FSharp.Project.dll*/ public FileChangeManager(IServiceProvider serviceProvider)
+        public FileChangeManager(IServiceProvider serviceProvider)
         {
-            #region input validation
             if (serviceProvider == null)
             {
                 throw new ArgumentNullException("serviceProvider");
             }
-            #endregion
 
             this.fileChangeService = (IVsFileChangeEx)serviceProvider.GetService(typeof(SVsFileChangeEx));
 
@@ -111,12 +98,7 @@ private struct ObservedItemInfo
                 throw new InvalidOperationException();
             }
         }
-        #endregion
 
-        #region IDisposable Members
-        /// 
-        /// Disposes resources.
-        /// 
         public void Dispose()
         {
             // Don't dispose more than once
@@ -136,9 +118,7 @@ public void Dispose()
             // Clean the observerItems list
             this.observedItems.Clear();
         }
-        #endregion
 
-        #region IVsFileChangeEvents Members
         /// 
         /// Called when one of the file have changed on disk.
         /// 
@@ -173,14 +153,12 @@ int IVsFileChangeEvents.DirectoryChanged(string directory)
         {
             return VSConstants.S_OK;
         }
-        #endregion
 
-        #region helpers    
         /// 
         /// Observe when the given file is updated on disk. In this case we do not care about the item id that represents the file in the hierarchy.
         /// 
         /// File to observe.
-        /*internal, but public for FSharp.Project.dll*/ public void ObserveItem(string fileName)
+        public void ObserveItem(string fileName)
         {
             this.ObserveItem(fileName, VSConstants.VSITEMID_NIL);
         }
@@ -190,14 +168,12 @@ int IVsFileChangeEvents.DirectoryChanged(string directory)
         /// 
         /// File to observe.
         /// The item id of the item to observe.
-        /*internal, but public for FSharp.Project.dll*/ public void ObserveItem(string fileName, uint id)
+        public void ObserveItem(string fileName, uint id)
         {
-            #region Input validation
             if (String.IsNullOrEmpty(fileName))
             {
                 throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "fileName");
             }
-            #endregion
 
             string fullFileName = Utilities.CanonicalizeFileName(fileName);
             if (!this.observedItems.ContainsKey(fullFileName))
@@ -220,14 +196,12 @@ int IVsFileChangeEvents.DirectoryChanged(string directory)
         /// 
         /// File to ignore observing.
         /// Flag indicating whether or not to ignore changes (1 to ignore, 0 to stop ignoring).
-        /*internal, but public for FSharp.Project.dll*/ public void IgnoreItemChanges(string fileName, bool ignore)
+        public void IgnoreItemChanges(string fileName, bool ignore)
         {
-            #region Input validation
             if (String.IsNullOrEmpty(fileName))
             {
                 throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "fileName");
             }
-            #endregion
 
             string fullFileName = Utilities.CanonicalizeFileName(fileName);
             if (this.observedItems.ContainsKey(fullFileName))
@@ -241,14 +215,12 @@ int IVsFileChangeEvents.DirectoryChanged(string directory)
         /// Stop observing when the file is updated on disk.
         /// 
         /// File to stop observing.
-        /*internal, but public for FSharp.Project.dll*/ public void StopObservingItem(string fileName)
+        public void StopObservingItem(string fileName)
         {
-            #region Input validation
             if (String.IsNullOrEmpty(fileName))
             {
                 throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "fileName");
             }
-            #endregion
 
             string fullFileName = Utilities.CanonicalizeFileName(fileName);
 
@@ -266,6 +238,5 @@ int IVsFileChangeEvents.DirectoryChanged(string directory)
                 ErrorHandler.ThrowOnFailure(this.fileChangeService.UnadviseFileChange(itemInfo.FileChangeCookie));
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileDocumentManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileDocumentManager.cs
index 17b23909e3a..eb64887ddec 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileDocumentManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileDocumentManager.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.Shell.Interop;
 using System;
@@ -27,15 +27,10 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// 
     internal class FileDocumentManager : DocumentManager
     {
-        #region ctors
-
         public FileDocumentManager(FileNode node)
             : base(node)
         {
         }
-        #endregion
-
-        #region overriden methods
 
         /// 
         /// Open a file using the standard editor
@@ -71,9 +66,6 @@ public override int OpenWithSpecific(uint editorFlags, ref Guid editorType, stri
             return this.Open(newFile, openWith, editorFlags, ref editorType, physicalView, ref logicalView, docDataExisting, out windowFrame, windowFrameAction);
         }
 
-        #endregion
-
-        #region public methods
         /// 
         /// Open a file in a document window with a std editor
         /// 
@@ -142,9 +134,6 @@ public int Open(bool newFile, bool openWith, Guid logicalView, Guid fallbackLogi
             return returnValue;
         }
 
-        #endregion
-
-        #region virtual methods
         /// 
         /// Open a file in a document window
         /// 
@@ -162,10 +151,6 @@ public virtual int Open(bool newFile, bool openWith, ref Guid logicalView, IntPt
             return this.Open(newFile, openWith, 0, ref editorType, null, ref logicalView, docDataExisting, out windowFrame, windowFrameAction);
         }
 
-        #endregion
-
-        #region helper methods
-
         private int Open(bool newFile, bool openWith, uint editorFlags, ref Guid editorType, string physicalView, ref Guid logicalView, IntPtr docDataExisting, out IVsWindowFrame windowFrame, WindowFrameShowAction windowFrameAction)
         {
             windowFrame = null;
@@ -189,7 +174,7 @@ private int Open(bool newFile, bool openWith, uint editorFlags, ref Guid editorT
                 this.Node.OnInvalidateItems(this.Node.Parent);
 
                 // Bail since we are not able to open the item
-                // Do not return an error code otherwise an /*internal, but public for FSharp.Project.dll*/ public error message is shown. The scenario for this operation
+                // Do not return an error code otherwise an public error message is shown. The scenario for this operation
                 // normally is already a reaction to a dialog box telling that the item has been removed.
                 return VSConstants.S_FALSE;
             }
@@ -270,8 +255,5 @@ private int Open(bool newFile, bool openWith, uint editorFlags, ref Guid editorT
 
             return returnValue;
         }
-
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileNode.cs
index 6979ab1cb91..a9f6837ecee 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileNode.cs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-using FSSafe = Internal.Utilities.FileSystem;
+using FSLib = Microsoft.FSharp.Compiler.AbstractIL.Internal.Library;
 using System;
 using System.Runtime.InteropServices;
 using System.Collections;
@@ -72,11 +72,8 @@ public static void Try(Action stepWithEffect, Action compensatingEffect, Action
     [ComVisible(true)]
     public class FileNode : HierarchyNode
     {
-        #region static fiels
         private static Dictionary extensionIcons;
-        #endregion
 
-        #region overriden Properties
         /// 
         /// overwrites of the generic hierarchyitem.
         /// 
@@ -155,9 +152,7 @@ public override string Url
 
             }
         }
-        #endregion
 
-        #region ctor
         static FileNode()
         {
             // Build the dictionary with the mapping between some well known extensions
@@ -215,19 +210,9 @@ internal FileNode(ProjectNode root, ProjectElement element, uint? hierarchyId =
             } 
         } 
 
-        #endregion
-
-        #region overridden methods
-
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
+        public override NodeProperties CreatePropertiesObject()
         {
-#if SINGLE_FILE_GENERATOR
-            ISingleFileGenerator generator = this.CreateSingleFileGenerator();
-
-            return generator == null ? new FileNodeProperties(this) : new SingleFileGeneratorNodeProperties(this);
-#else
             return new FileNodeProperties(this);
-#endif
         }
 
         public override object GetIconHandle(bool open)
@@ -373,9 +358,9 @@ public override string GetMkDocument()
         /// Delete the item corresponding to the specified path from storage.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void DeleteFromStorage(string path)
+        public override void DeleteFromStorage(string path)
         {
-            if (FSSafe.File.SafeExists(path))
+            if (FSLib.Shim.FileSystem.SafeExists(path))
             {
                 File.SetAttributes(path, FileAttributes.Normal); // make sure it's not readonly.
                 File.Delete(path);
@@ -385,7 +370,7 @@ public override string GetMkDocument()
         /// 
         /// Rename the underlying document based on the change the user just made to the edit label.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ int SetEditLabel(string label, string relativePath)
+        public int SetEditLabel(string label, string relativePath)
         {
             int returnValue = VSConstants.S_OK;
             uint oldId = this.ID;
@@ -427,12 +412,7 @@ public override string GetMkDocument()
             string oldrelPath = this.ItemNode.GetMetadata(ProjectFileConstants.Include);
 
             RenameDocument(oldName, newName);
-#if UNUSED_DEPENDENT_FILES
-                                if (this is DependentFileNode)
-                                {
-                                        OnInvalidateItems(this.Parent);
-                                }
-#endif
+
             // Return S_FALSE if the hierarchy item id has changed.  This forces VS to flush the stale
             // hierarchy item id.
             if (returnValue == (int)VSConstants.S_OK || returnValue == (int)VSConstants.S_FALSE || returnValue == VSConstants.OLE_E_PROMPTSAVECANCELLED)
@@ -461,7 +441,7 @@ internal override DocumentManager GetDocumentManager()
         /// node delegate to the project and a folder/project node to itself.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override HierarchyNode GetDragTargetHandlerNode()
+        public override HierarchyNode GetDragTargetHandlerNode()
         {
             Debug.Assert(this.ProjectMgr != null, " The project manager is null for the filenode");
             HierarchyNode handlerNode = this;
@@ -472,7 +452,7 @@ internal override DocumentManager GetDocumentManager()
             return handlerNode;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
+        public override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
         {
             if (this.ProjectMgr == null || this.ProjectMgr.IsClosed)
             {
@@ -500,29 +480,6 @@ internal override DocumentManager GetDocumentManager()
                 }
             }
 
-            // Exec on special filenode commands
-            if (cmdGroup == VsMenus.guidStandardCommandSet2K)
-            {
-#if SINGLE_FILE_GENERATOR
-                switch ((VsCommands2K)cmd)
-                {
-                    case VsCommands2K.RUNCUSTOMTOOL:
-                        {
-                            try
-                            {
-                                this.RunGenerator();
-                                return VSConstants.S_OK;
-                            }
-                            catch (Exception e)
-                            {
-                                Trace.WriteLine("Running Custom Tool failed : " + e.Message);
-                                throw;
-                            }
-                        }
-                }
-#endif
-            }
-
             return base.ExecCommandOnNode(cmdGroup, cmd, nCmdexecopt, pvaIn, pvaOut);
         }
 
@@ -541,7 +498,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
                         return VSConstants.S_OK;
 
                     case VsCommands.ViewCode:
-                    //case VsCommands.Delete: goto case VsCommands.OpenWith;
                     case VsCommands.Open:
                     case VsCommands.OpenWith:
                         result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED;
@@ -555,16 +511,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
                     result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED;
                     return VSConstants.S_OK;
                 }
-#if SINGLE_FILE_GENERATOR
-                if ((VsCommands2K)cmd == VsCommands2K.RUNCUSTOMTOOL)
-                {
-                    if (string.IsNullOrEmpty(this.ItemNode.GetMetadata(ProjectFileConstants.DependentUpon)) && (this.NodeProperties is SingleFileGeneratorNodeProperties))
-                    {
-                        result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED;
-                        return VSConstants.S_OK;
-                    }
-                }
-#endif
             }
             else
             {
@@ -574,7 +520,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
         }
 
 
-        public /*protected, but public for FSharp.Project.dll*/ override void DoDefaultAction()
+        public override void DoDefaultAction()
         {
             CCITracing.TraceCall();
             FileDocumentManager manager = this.GetDocumentManager() as FileDocumentManager;
@@ -588,7 +534,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
         /// A pointer to the document in the rdt
         /// The new file path to the document
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int AfterSaveItemAs(IntPtr docData, string newFilePath)
+        public override int AfterSaveItemAs(IntPtr docData, string newFilePath)
         {
             if (String.IsNullOrEmpty(newFilePath))
             {
@@ -694,11 +640,11 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
         /// Determines if this is node a valid node for painting the default file icon.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanShowDefaultIcon()
+        public override bool CanShowDefaultIcon()
         {
             string moniker = this.GetMkDocument();
 
-            if (String.IsNullOrEmpty(moniker) || !FSSafe.File.SafeExists(moniker))
+            if (String.IsNullOrEmpty(moniker) || !FSLib.Shim.FileSystem.SafeExists(moniker))
             {
                 return false;
             }
@@ -706,9 +652,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return true;
         }
 
-        #endregion
-
-#region virtual methods
         public virtual string FileName
         {
             get
@@ -726,7 +669,7 @@ public virtual string FileName
         /// 
         /// true if user should be presented for UI in case the file is not present
         /// true if file is on disk
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool IsFileOnDisk(bool showMessage)
+        public virtual bool IsFileOnDisk(bool showMessage)
         {
             bool fileExist = IsFileOnDisk(this.Url);
 
@@ -749,9 +692,9 @@ public virtual string FileName
         /// 
         /// Url representing the file
         /// True if the file exist
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool IsFileOnDisk(string path)
+        public virtual bool IsFileOnDisk(string path)
         {
-            return FSSafe.File.SafeExists(path);
+            return FSLib.Shim.FileSystem.SafeExists(path);
         }
 
         /// 
@@ -762,7 +705,7 @@ public virtual string FileName
         /// The new parent id of the item.
         /// The newly added FileNode.
         /// While a new node will be used to represent the item, the underlying MSBuild item will be the same and as a result file properties saved in the project file will not be lost.
-        public /*protected, but public for FSharp.Project.dll*/ virtual FileNode RenameFileNode(string oldFileName, string newFileName, uint newParentId)
+        public virtual FileNode RenameFileNode(string oldFileName, string newFileName, uint newParentId)
         {
             if (string.Compare(oldFileName, newFileName, StringComparison.Ordinal) == 0)
             {
@@ -874,7 +817,7 @@ public virtual string FileName
         /// Rename all childnodes
         /// 
         /// The newly added Parent node.
-        public /*protected, but public for FSharp.Project.dll*/ virtual void RenameChildNodes(FileNode parentNode)
+        public virtual void RenameChildNodes(FileNode parentNode)
         {
             foreach (HierarchyNode child in GetChildNodes())
             {
@@ -914,7 +857,7 @@ public virtual string FileName
         /// 
         ///  The file that failed to be renamed.
         /// The original filenamee
-        public /*protected, but public for FSharp.Project.dll*/ virtual void RecoverFromRenameFailure(string fileThatFailed, string originalFileName)
+        public virtual void RecoverFromRenameFailure(string fileThatFailed, string originalFileName)
         {
             // TODO does this do anything useful?  did it ever change in the first place?
             if (this.ItemNode != null && !String.IsNullOrEmpty(originalFileName))
@@ -924,7 +867,7 @@ public virtual string FileName
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
+        public override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
         {
             if (deleteOperation == __VSDELETEITEMOPERATION.DELITEMOP_DeleteFromStorage)
             {
@@ -938,22 +881,11 @@ public virtual string FileName
         /// 
         /// Previous name in storage
         /// New name in storage
-        public /*protected, but public for FSharp.Project.dll*/ virtual void RenameInStorage(string oldName, string newName)
+        public virtual void RenameInStorage(string oldName, string newName)
         {
             File.Move(oldName, newName);
         }
 
-#if SINGLE_FILE_GENERATOR
-        /// 
-        /// factory method for creating single file generators.
-        /// 
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual ISingleFileGenerator CreateSingleFileGenerator()
-        {
-            return new SingleFileGenerator(this.ProjectMgr);
-        }
-#endif
-
         /// 
         /// This method should be overridden to provide the list of special files and associated flags for source control.
         /// 
@@ -962,7 +894,7 @@ public virtual string FileName
         /// The flags that are associated to the files.
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "scc")]
-        public /*protected, but public for FSharp.Project.dll*/ override void GetSccSpecialFiles(string sccFile, IList files, IList flags)
+        public override void GetSccSpecialFiles(string sccFile, IList files, IList flags)
         {
             if (this.ExcludeNodeFromScc)
             {
@@ -985,14 +917,10 @@ public virtual string FileName
             }
         }
 
-        #endregion
-
-#region Helper methods
         /// 
         /// Get's called to rename the eventually running document this hierarchyitem points to
         /// 
         /// returns FALSE if the doc can not be renamed
-        /*internal, but public for FSharp.Project.dll*/
         public bool RenameDocument(string oldName, string newName)
         {
             IVsRunningDocumentTable pRDT = this.GetService(typeof(IVsRunningDocumentTable)) as IVsRunningDocumentTable;
@@ -1120,50 +1048,6 @@ private void RenameCaseOnlyChange(string newFileName)
             uiWindow.ExpandItem(this.ProjectMgr.InteropSafeIVsUIHierarchy, this.ID, EXPANDFLAGS.EXPF_SelectItem);
         }
 
-        #endregion
-
-#region SingleFileGenerator Support methods
-#if SINGLE_FILE_GENERATOR
-        /// 
-        /// Event handler for the Custom tool property changes
-        /// 
-        /// FileNode sending it
-        /// Node event args
-        /*internal, but public for FSharp.Project.dll*/
-        internal virtual void OnCustomToolChanged(object sender, HierarchyNodeEventArgs e)
-        {
-            this.RunGenerator();
-        }
-
-        /// 
-        /// Event handler for the Custom tool namespce property changes
-        /// 
-        /// FileNode sending it
-        /// Node event args
-        /*internal, but public for FSharp.Project.dll*/
-        internal virtual void OnCustomToolNameSpaceChanged(object sender, HierarchyNodeEventArgs e)
-        {
-            this.RunGenerator();
-        }
-#endif
-        #endregion
-
-#region helpers
-#if SINGLE_FILE_GENERATOR
-        /// 
-        /// Runs a generator.
-        /// 
-        /*internal, but public for FSharp.Project.dll*/
-        public void RunGenerator()
-        {
-            ISingleFileGenerator generator = this.CreateSingleFileGenerator();
-            if (generator != null)
-            {
-                generator.RunGenerator(this.Url);
-            }
-        }
-#endif
-
         /// 
         /// Update the ChildNodes after the parent node has been renamed
         /// 
@@ -1187,6 +1071,5 @@ private List GetChildNodes()
             }
             return childNodes;
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FolderNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FolderNode.cs
index 18c3172d49f..1cb62b69ac0 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FolderNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FolderNode.cs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-using FSSafe = Internal.Utilities.FileSystem;
+using FSLib = Microsoft.FSharp.Compiler.AbstractIL.Internal.Library;
 using System;
 using System.Runtime.InteropServices;
 using System.Collections;
@@ -25,7 +25,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [ComVisible(true)]
     public class FolderNode : HierarchyNode
     {
-        #region ctors
         /// 
         /// Constructor for the FolderNode
         /// 
@@ -37,9 +36,7 @@ internal FolderNode(ProjectNode root, string relativePath, ProjectElement elemen
         {
             this.VirtualNodeName = relativePath.TrimEnd('\\');
         }
-        #endregion
 
-        #region overridden properties
         /// 
         /// This relates to the SCC glyph
         /// 
@@ -51,15 +48,13 @@ public override VsStateIcon StateIconIndex
                 return VsStateIcon.STATEICON_NOSTATEICON;
             }
         }
-        #endregion
 
-        #region overridden methods
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
+        public override NodeProperties CreatePropertiesObject()
         {
             return new FolderNodeProperties(this);
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override void DeleteFromStorage(string path)
+        public override void DeleteFromStorage(string path)
         {
             this.DeleteFolder(path);
         }
@@ -108,7 +103,7 @@ public override int SetEditLabel(string label)
             }
 
             // Verify that No Directory/file already exists with the new name on disk
-            if (Directory.Exists(newPath) || FSSafe.File.SafeExists(newPath))
+            if (Directory.Exists(newPath) || FSLib.Shim.FileSystem.SafeExists(newPath))
             {
                 return ShowFileOrFolderAlreadExistsErrorMessage(newPath);
             }
@@ -182,7 +177,7 @@ public override string GetMkDocument()
         /// 
         /// The list of files to be placed under source control.
         /// The flags that are associated to the files.
-        public /*protected, but public for FSharp.Project.dll*/ override void GetSccFiles(System.Collections.Generic.IList files, System.Collections.Generic.IList flags)
+        public override void GetSccFiles(System.Collections.Generic.IList files, System.Collections.Generic.IList flags)
         {
             return;
         }
@@ -195,7 +190,7 @@ public override string GetMkDocument()
         /// The flags that are associated to the files.
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "scc")]
-        public /*protected, but public for FSharp.Project.dll*/ override void GetSccSpecialFiles(string sccFile, IList files, IList flags)
+        public override void GetSccSpecialFiles(string sccFile, IList files, IList flags)
         {
             if (this.ExcludeNodeFromScc)
             {
@@ -216,23 +211,12 @@ public override string GetMkDocument()
             {
                 throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "sccFile");
             }
-
-            // Get the file node for the file passed in.
-            FileNode node = this.FindChild(sccFile) as FileNode;
-
-#if UNUSED_DEPENDENT_FILES
-            // Dependents do not participate directly in scc.
-            if (node != null && !(node is DependentFileNode))
-            {
-                node.GetSccSpecialFiles(sccFile, files, flags);
-            }
-#endif
         }
 
         /// 
         /// Recursevily walks the folder nodes and redraws the state icons
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void UpdateSccStateIcons()
+        public override void UpdateSccStateIcons()
         {
             for (HierarchyNode child = this.FirstChild; child != null; child = child.NextSibling)
             {
@@ -306,7 +290,7 @@ public override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt,
             return base.ExecCommandOnNode(cmdGroup, cmd, nCmdexecopt, pvaIn, pvaOut);
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
+        public override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
         {
             if (deleteOperation == __VSDELETEITEMOPERATION.DELITEMOP_DeleteFromStorage)
             {
@@ -315,9 +299,6 @@ public override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt,
             return false;
         }
 
-        #endregion
-
-        #region virtual methods
         /// 
         /// Override if your node is not a file system folder so that
         /// it does nothing or it deletes it from your storage location.
@@ -405,9 +386,7 @@ public virtual void RenameDirectory(string newPath)
                 Directory.Move(this.Url, newPath);
             }
         }
-        #endregion
 
-        #region helper methods
         private void RenameFolder(string newName)
         {
             // Do the rename (note that we only do the physical rename if the leaf name changed)
@@ -464,7 +443,5 @@ private int ShowFileOrFolderAlreadExistsErrorMessage(string newPath)
                 throw new InvalidOperationException(errorMessage);
             }
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalPropertyHandler.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalPropertyHandler.cs
deleted file mode 100644
index b2e48a93e0f..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalPropertyHandler.cs
+++ /dev/null
@@ -1,2 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalSuppressions.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalSuppressions.cs
index 650cd150977..743afa1dcce 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalSuppressions.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalSuppressions.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System.Diagnostics.CodeAnalysis;
 
@@ -34,23 +34,11 @@
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.HierarchyNode.#Remove(System.Boolean)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.HierarchyNode.#SaveItem(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS,System.String,System.UInt32,System.IntPtr,System.Int32&)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ImageHandler.#GetIconHandle(System.Int32)")]
-#if UNUSED_NESTED_PROJECTS
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#Init(System.String,System.String,System.String,Microsoft.VisualStudio.Shell.Interop.__VSCREATEPROJFLAGS)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#IsItemDirty(System.UInt32,System.IntPtr,System.Int32&)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#LockRDTEntry()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#RenameNestedProjectInParentProject(System.String)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#SaveItem(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS,System.String,System.UInt32,System.IntPtr,System.Int32&)")]
-#endif
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.OleServiceProvider.#QueryService(System.Guid&,System.Guid&,System.IntPtr&)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectConfig.#.ctor(Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectNode,System.String)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectConfig.#DebugLaunch(System.UInt32)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectConfig.#Microsoft.VisualStudio.Shell.Interop.IVsProjectFlavorCfg.get_CfgType(System.Guid&,System.IntPtr&)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectConfig.#SetConfigurationProperty(System.String,System.String)")]
-#if UNUSED_NESTED_PROJECTS
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#CloseChildren()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#GetNestedHierarchy(System.UInt32,System.Guid&,System.IntPtr&,System.UInt32&)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#OpenChildren()")]
-#endif
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectElement.#ItemName")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectElement.#SetMetadata(System.String,System.String)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectFactory.#CreateProject(System.String,System.String,System.String,System.UInt32,System.Guid&,System.IntPtr&,System.Int32&)")]
@@ -139,27 +127,9 @@
 [assembly: SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.IDEBuildLogger.#ShutdownLogger()", MessageId = "")]
 [assembly: SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.IDEBuildLogger.#get_WarningString()", MessageId = "")]
 [assembly: SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ImageHandler.#.ctor(System.Windows.Forms.ImageList)", MessageId = "")]
-#if UNUSED_NESTED_PROJECTS
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#DelegateGetPropertyToNested(System.Int32)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.GetProperty(System.UInt32,System.Int32,System.Object@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#GetIconHandle(System.Boolean)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.GetProperty(System.UInt32,System.Int32,System.Object@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#Init(System.String,System.String,System.String,Microsoft.VisualStudio.Shell.Interop.__VSCREATEPROJFLAGS)", MessageId = "")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#InitializeInstanceGuid()", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.GetGuidProperty(System.UInt32,System.Int32,System.Guid@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#InitializeInstanceGuid()", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.SetGuidProperty(System.UInt32,System.Int32,System.Guid@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#InitImageHandler()", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.GetProperty(System.UInt32,System.Int32,System.Object@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#OnChanged(System.Int32)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsProject3.GetMkDocument(System.UInt32,System.String@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#SaveItem(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS,System.String,System.UInt32,System.IntPtr,System.Int32&)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsUIShell.SaveDocDataToFile(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS,System.Object,System.String,System.String@,System.Int32@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#SetDocCookieOnNestedHier(System.UInt32)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.SetProperty(System.UInt32,System.Int32,System.Object)")]
-#endif
 [assembly: SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible", Scope = "type", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.OleServiceProvider+ServiceCreatorCallback", MessageId = "")]
 [assembly: SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.OleServiceProvider+ServiceData.#.ctor(System.Type,System.Object,Microsoft.VisualStudio.FSharp.ProjectSystem.OleServiceProvider+ServiceCreatorCallback,System.Boolean)", MessageId = "")]
 [assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectConfig.#IsFlavorDirty(Microsoft.VisualStudio.Shell.Interop._PersistStorageType)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IPersistXMLFragment.IsFragmentDirty(System.UInt32,System.Int32@)")]
-#if UNUSED_NESTED_PROJECTS
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#ReloadNestedProjectNode(Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsFireSolutionEvents.FireOnAfterLoadProject(Microsoft.VisualStudio.Shell.Interop.IVsHierarchy)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#ReloadNestedProjectNode(Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsSolution.CloseSolutionElement(System.UInt32,Microsoft.VisualStudio.Shell.Interop.IVsHierarchy,System.UInt32)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#ReloadNestedProjectNode(Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsSolution.GetProjectOfUniqueName(System.String,Microsoft.VisualStudio.Shell.Interop.IVsHierarchy@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#RunVsTemplateWizard(Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectElement,System.Boolean)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsDetermineWizardTrust.OnWizardCompleted")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#RunVsTemplateWizard(Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectElement,System.Boolean)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsDetermineWizardTrust.OnWizardInitiated(System.String,System.Guid@)")]
-#endif
 [assembly: SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "Microsoft.VisualStudio.Package.ProjectNode.#AddFolderFromOtherProject(System.String,Microsoft.VisualStudio.Package.HierarchyNode)", MessageId = "")]
 [assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.Package.ProjectNode.#AddItemWithSpecific(System.UInt32,Microsoft.VisualStudio.Shell.Interop.VSADDITEMOPERATION,System.String,System.UInt32,System.String[],System.IntPtr,System.UInt32,System.Guid&,System.String,System.Guid&,Microsoft.VisualStudio.Shell.Interop.VSADDRESULT[])", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsFileChangeEx.IgnoreFile(System.UInt32,System.String,System.Int32)")]
 [assembly: SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Microsoft.VisualStudio.Package.ProjectNode.#AddReferenceCouldNotBeAddedErrorMessage(System.String)", MessageId = "")]
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GroupingReferenceNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GroupingReferenceNode.cs
index 39e5806b9c5..102d0386bcf 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GroupingReferenceNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GroupingReferenceNode.cs
@@ -1,6 +1,5 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-using FSSafe = Internal.Utilities.FileSystem;
 using System;
 using System.Runtime.InteropServices;
 using System.Collections;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/HierarchyNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/HierarchyNode.cs
index c62daed4aab..2ea20da0a74 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/HierarchyNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/HierarchyNode.cs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-using FSSafe = Internal.Utilities.FileSystem;
+using FSLib = Microsoft.FSharp.Compiler.AbstractIL.Internal.Library;
 using Microsoft.VisualStudio.Shell.Interop;
 using System;
 using System.Collections.Generic;
@@ -37,9 +37,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     public abstract class HierarchyNode :
         IVsUIHierarchy,
         IVsPersistHierarchyItem,
-#if IMPLEMENT_IVSPERSISTHIERARCHYITEM2
-        IVsPersistHierarchyItem2,
-#endif
         Microsoft.VisualStudio.OLE.Interop.IOleCommandTarget,
         IVsHierarchyDropDataSource2,
         IVsHierarchyDropDataSource,
@@ -48,7 +45,6 @@ public abstract class HierarchyNode :
         IVsSetTargetFrameworkWorkerCallback,
         IVsProjectResources,
         IDisposable
-    //, IVsBuildStatusCallback 
     {
 
         // for good debugger experience
@@ -56,20 +52,18 @@ public override string ToString()
         {
             return string.Format("\"{0}\" ({1})", this.Caption, this.GetType());
         }
-        #region nested types
+
         /// 
         /// DropEffect as defined in oleidl.h
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public enum DropEffect
+        public enum DropEffect
         {
             None,
             Copy = 1,
             Move = 2,
             Link = 4
         };
-        #endregion
 
-        #region Events
         internal event EventHandler OnChildAdded
         {
             add { onChildAdded += value; }
@@ -80,18 +74,14 @@ internal event EventHandler OnChildRemoved
             add { onChildRemoved += value; }
             remove { onChildRemoved -= value; }
         }
-        #endregion
 
-        #region static/const fields
         public static readonly Guid SolutionExplorer = new Guid(EnvDTE.Constants.vsWindowKindSolutionExplorer);
         public const int NoImage = -1;
 #if DEBUG
         /*Available only in debug build for FSharp.Project.dll*/ 
         public static int LastTracedProperty = 0;
 #endif
-        #endregion
 
-        #region fields
         private EventSinkCollection hierarchyEventSinks = new EventSinkCollection();
         private ProjectNode projectMgr;
         private ProjectElement itemNode;
@@ -115,44 +105,22 @@ internal event EventHandler OnChildRemoved
         private List itemsDraggedOrCutOrCopied;
         private bool sourceDraggedOrCutOrCopied;
 
-        /// 
-        /// Has the object been disposed.
-        /// 
-        /// We will not specify a property for isDisposed, rather it is expected that the a private flag is defined
-        /// on all subclasses. We do not want get in a situation where the base class's dipose is not called because a child sets the flag through the property.
         private bool isDisposed;
-        #endregion
 
-        #region abstract properties
-        /// 
-        /// The URL of the node.
-        /// 
-        /// 
         public abstract string Url
         {
             get;
         }
 
-        /// 
-        /// The Caption of the node.
-        /// 
-        /// 
         public abstract string Caption
         {
             get;
         }
 
-        /// 
-        /// The item type guid associated to a node.
-        /// 
-        /// 
         public abstract Guid ItemTypeGuid
         {
             get;
         }
-        #endregion
-
-        #region virtual properties
 
         public virtual bool IsNonMemberItem
         {
@@ -262,13 +230,10 @@ public virtual NodeProperties NodeProperties
         /// Returns an object that is a special view over this object; this is the value
         /// returned by the Object property of the automation objects.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public virtual object Object
+        public virtual object Object
         {
             get { return this; }
         }
-        #endregion
-
-        #region properties
 
         internal OleServiceProvider OleServiceProvider
         {
@@ -471,7 +436,7 @@ public bool HasParentNodeNameRelation
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ bool SourceDraggedOrCutOrCopied
+        public bool SourceDraggedOrCutOrCopied
         {
             get
             {
@@ -483,16 +448,13 @@ public bool HasParentNodeNameRelation
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ List ItemsDraggedOrCutOrCopied
+        public List ItemsDraggedOrCutOrCopied
         {
             get
             {
                 return this.itemsDraggedOrCutOrCopied;
             }
         }
-        #endregion
-
-        #region ctors
 
         internal HierarchyNode()
         {
@@ -526,15 +488,13 @@ internal HierarchyNode(ProjectNode root)
             : this(root, new ProjectElement(root, null, true))
         {
         }
-        #endregion
 
-        #region virtual methods
         /// 
         /// Creates an object derived from NodeProperties that will be used to expose properties
         /// spacific for this object to the property browser.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual NodeProperties CreatePropertiesObject()
+        public virtual NodeProperties CreatePropertiesObject()
         {
             return null;
         }
@@ -560,8 +520,6 @@ public virtual void AddChild(HierarchyNode node)
                 throw new ArgumentNullException("node");
             }
 
-            var map = this.projectMgr.ItemIdMap;
-
             // make sure the node is in the map.
             Object nodeWithSameID = this.projectMgr.ItemIdMap[node.hierarchyId];
             if (!Object.ReferenceEquals(node, nodeWithSameID as HierarchyNode))
@@ -1067,7 +1025,7 @@ public virtual string GetRelationNameExtension()
         /// 
         /// Close open document frame for a specific node.
         ///  
-        public /*protected, but public for FSharp.Project.dll*/ void CloseDocumentWindow(HierarchyNode node)
+        public void CloseDocumentWindow(HierarchyNode node)
         {
             // We walk the RDT looking for all running documents attached to this hierarchy and itemid. There
             // are cases where there may be two different editors (not views) open on the same document.
@@ -1127,7 +1085,7 @@ public virtual string GetRelationNameExtension()
         /// Redraws the state icon if the node is not excluded from source control.
         /// 
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void UpdateSccStateIcons()
+        public virtual void UpdateSccStateIcons()
         {
             if (!this.ExcludeNodeFromScc)
             {
@@ -1143,7 +1101,7 @@ public virtual string GetRelationNameExtension()
         /// items to let its parent accept the drop
         /// 
         /// HierarchyNode that accept the drop handling
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual HierarchyNode GetDragTargetHandlerNode()
+        public virtual HierarchyNode GetDragTargetHandlerNode()
         {
             return this;
         }
@@ -1152,7 +1110,7 @@ public virtual string GetRelationNameExtension()
         /// Add a new Folder to the project hierarchy.
         /// 
         /// S_OK if succeeded, otherwise an error
-        public /*protected, but public for FSharp.Project.dll*/ virtual int AddNewFolder()
+        public virtual int AddNewFolder()
         {
             // Check out the project file.
             if (!this.ProjectMgr.QueryEditProjectFile(false))
@@ -1234,7 +1192,7 @@ internal virtual int AddItemToHierarchy(HierarchyAddType addType)
         /// 
         /// Overwritten in subclasses
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual void DoDefaultAction()
+        public virtual void DoDefaultAction()
         {
             CCITracing.TraceCall();
         }
@@ -1243,7 +1201,7 @@ internal virtual int AddItemToHierarchy(HierarchyAddType addType)
         /// Handles the exclude from project command.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual int ExcludeFromProject()
+        public virtual int ExcludeFromProject()
         {
             Debug.Assert(this.ProjectMgr != null, "The project item " + this.ToString() + " has not been initialised correctly. It has a null ProjectMgr");
             this.Remove(false);
@@ -1254,7 +1212,7 @@ internal virtual int AddItemToHierarchy(HierarchyAddType addType)
         /// Handles the Show in Designer command.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual int ShowInDesigner(IList selectedNodes)
+        public virtual int ShowInDesigner(IList selectedNodes)
         {
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
@@ -1266,7 +1224,7 @@ internal virtual int AddItemToHierarchy(HierarchyAddType addType)
         /// A stringbuilder.
         /// This method has to be public since seleceted nodes will call it.
         [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "ClipBoard")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual StringBuilder PrepareSelectedNodesForClipBoard()
+        public virtual StringBuilder PrepareSelectedNodesForClipBoard()
         {
             Debug.Assert(this.ProjectMgr != null, " No project mananager available for this node " + ToString());
             Debug.Assert(this.ProjectMgr.ItemsDraggedOrCutOrCopied != null, " The itemsdragged list should have been initialized prior calling this method");
@@ -1312,7 +1270,7 @@ internal virtual int AddItemToHierarchy(HierarchyAddType addType)
         /// Returns the Cannonical Name
         /// 
         /// Cannonical Name
-        public /*protected, but public for FSharp.Project.dll*/ virtual string GetCanonicalName()
+        public virtual string GetCanonicalName()
         {
             return this.GetMkDocument();
         }
@@ -1333,7 +1291,7 @@ internal virtual DocumentManager GetDocumentManager()
         /// list of selected nodes.
         /// contains the location (x,y) at which to show the menu.
         [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "pointer")]
-        public /*protected, but public for FSharp.Project.dll*/ virtual int DisplayContextMenu(IList selectedNodes, IntPtr pointerToVariant)
+        public virtual int DisplayContextMenu(IList selectedNodes, IntPtr pointerToVariant)
         {
             if (selectedNodes == null || selectedNodes.Count == 0 || pointerToVariant == IntPtr.Zero)
             {
@@ -1384,7 +1342,7 @@ internal virtual DocumentManager GetDocumentManager()
         /// The context menu ID.
         /// The GUID of the menu group.
         /// The location at which to show the menu.
-        public /*protected, but public for FSharp.Project.dll*/ virtual int ShowContextMenu(int menuId, Guid menuGroup, POINTS points)
+        public virtual int ShowContextMenu(int menuId, Guid menuGroup, POINTS points)
         {
             IVsUIShell shell = this.projectMgr.Site.GetService(typeof(SVsUIShell)) as IVsUIShell;
 
@@ -1399,7 +1357,6 @@ internal virtual DocumentManager GetDocumentManager()
             return shell.ShowContextMenu(0, ref menuGroup, menuId, pnts, (Microsoft.VisualStudio.OLE.Interop.IOleCommandTarget)this);
         }
 
-        #region initiation of command execution
         /// 
         /// Handles command execution.
         /// 
@@ -1412,7 +1369,7 @@ internal virtual DocumentManager GetDocumentManager()
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cmdexecopt")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "n")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "pva")]
-        public /*protected, but public for FSharp.Project.dll*/ virtual int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
+        public virtual int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
         {
             if (this.projectMgr == null || this.projectMgr.IsClosed)
             {
@@ -1671,9 +1628,6 @@ internal virtual int InternalExecCommand(Guid cmdGroup, uint cmdId, uint cmdExec
             return returnValue;
         }
 
-        #endregion
-
-        #region query command handling
         /// 
         /// Handles menus originating from IOleCommandTarget.
         /// 
@@ -1800,7 +1754,7 @@ internal virtual int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText,
         /// The command to be executed.
         /// A QueryStatusResult describing the status of the menu.
         [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "InCurrent")]
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool DisableCmdInCurrentMode(Guid commandGroup, uint command)
+        public virtual bool DisableCmdInCurrentMode(Guid commandGroup, uint command)
         {
             if (this.ProjectMgr == null || this.ProjectMgr.IsClosed)
             {
@@ -2025,8 +1979,7 @@ internal virtual QueryStatusResult QueryStatusSelectionOnNodes(IList
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool CanShowDefaultIcon()
+        public virtual bool CanShowDefaultIcon()
         {
             return false;
         }
@@ -2046,7 +1999,7 @@ internal virtual QueryStatusResult QueryStatusSelectionOnNodes(IListA pointer to the rdt
         /// The newName of the item
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual int AfterSaveItemAs(IntPtr docData, string newName)
+        public virtual int AfterSaveItemAs(IntPtr docData, string newName)
         {
             throw new NotImplementedException();
         }
@@ -2054,7 +2007,7 @@ internal virtual QueryStatusResult QueryStatusSelectionOnNodes(IList
         /// The method that does the cleanup.
         /// 
-        /// Is the Dispose called by some /*internal, but public for FSharp.Project.dll*/ public member, or it is called by from GC.
+        /// Is the Dispose called by some public member, or it is called by from GC.
         protected virtual void Dispose(bool disposing)
         {
             if (this.isDisposed)
@@ -2080,7 +2033,7 @@ protected virtual void Dispose(bool disposing)
         /// 
         /// The files to which an array of VSADDFILEFLAGS has to be specified.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual VSADDFILEFLAGS[] GetAddFileFlags(string[] files)
+        public virtual VSADDFILEFLAGS[] GetAddFileFlags(string[] files)
         {
             if (files == null || files.Length == 0)
             {
@@ -2102,7 +2055,7 @@ protected virtual void Dispose(bool disposing)
         /// 
         /// The files to which an array of VSADDFILEFLAGS has to be specified.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual VSQUERYADDFILEFLAGS[] GetQueryAddFileFlags(string[] files)
+        public virtual VSQUERYADDFILEFLAGS[] GetQueryAddFileFlags(string[] files)
         {
             if (files == null || files.Length == 0)
             {
@@ -2124,7 +2077,7 @@ protected virtual void Dispose(bool disposing)
         /// 
         /// The files to which an array of VSREMOVEFILEFLAGS has to be specified.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual VSREMOVEFILEFLAGS[] GetRemoveFileFlags(string[] files)
+        public virtual VSREMOVEFILEFLAGS[] GetRemoveFileFlags(string[] files)
         {
             if (files == null || files.Length == 0)
             {
@@ -2146,7 +2099,7 @@ protected virtual void Dispose(bool disposing)
         /// 
         /// The files to which an array of VSQUERYREMOVEFILEFLAGS has to be specified.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual VSQUERYREMOVEFILEFLAGS[] GetQueryRemoveFileFlags(string[] files)
+        public virtual VSQUERYREMOVEFILEFLAGS[] GetQueryRemoveFileFlags(string[] files)
         {
             if (files == null || files.Length == 0)
             {
@@ -2169,7 +2122,7 @@ protected virtual void Dispose(bool disposing)
         /// The list of files to be placed under source control.
         /// The flags that are associated to the files.
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void GetSccFiles(IList files, IList flags)
+        public virtual void GetSccFiles(IList files, IList flags)
         {
             if (this.ExcludeNodeFromScc)
             {
@@ -2188,11 +2141,7 @@ protected virtual void Dispose(bool disposing)
 
             files.Add(this.GetMkDocument());
 
-#if UNUSED_DEPENDENT_FILES
-            tagVsSccFilesFlags flagsToAdd = (this.firstChild != null && (this.firstChild is DependentFileNode)) ? tagVsSccFilesFlags.SFF_HasSpecialFiles : tagVsSccFilesFlags.SFF_NoFlags;
-#else
             tagVsSccFilesFlags flagsToAdd = tagVsSccFilesFlags.SFF_NoFlags;
-#endif
 
             flags.Add(flagsToAdd);
         }
@@ -2205,7 +2154,7 @@ protected virtual void Dispose(bool disposing)
         /// The flags that are associated to the files.
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "scc")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void GetSccSpecialFiles(string sccFile, IList files, IList flags)
+        public virtual void GetSccSpecialFiles(string sccFile, IList files, IList flags)
         {
             if (this.ExcludeNodeFromScc)
             {
@@ -2227,45 +2176,15 @@ protected virtual void Dispose(bool disposing)
         /// Delete the item corresponding to the specified path from storage.
         /// 
         /// Url of the item to delete
-        public /*protected, but public for FSharp.Project.dll*/ virtual void DeleteFromStorage(string path)
-        {
-        }
-
-#if IMPLEMENT_IVSPERSISTHIERARCHYITEM2
-        /// 
-        /// Determines whether a file change should be ignored or not.
-        /// 
-        /// Flag indicating whether or not to ignore changes (true to ignore changes).
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int IgnoreItemFileChanges(bool ignoreFlag)
-        {
-            return VSConstants.E_NOTIMPL;
-        }
-
-        /// 
-        /// Called to determine whether a project item is reloadable. 
-        /// 
-        /// True if the project item is reloadable.
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Reloadable")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual bool IsItemReloadable()
-        {
-            return false;
-        }
-
-        /// 
-        /// Reloads an item.
-        /// 
-        /// Reserved parameter defined at the IVsPersistHierarchyItem2::ReloadItem parameter.
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int ReloadItem(uint reserved)
+        public virtual void DeleteFromStorage(string path)
         {
-            return VSConstants.E_NOTIMPL;
         }
-#endif
 
         /// 
         /// Handle the Copy operation to the clipboard
         /// This method is typically overriden on the project node
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int CopyToClipboard()
+        public virtual int CopyToClipboard()
         {
             return VSConstants.E_NOTIMPL;
         }
@@ -2274,7 +2193,7 @@ protected virtual void Dispose(bool disposing)
         /// Handle the Cut operation to the clipboard
         /// This method is typically overriden on the project node
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int CutToClipboard()
+        public virtual int CutToClipboard()
         {
             return VSConstants.E_NOTIMPL;
         }
@@ -2283,7 +2202,7 @@ protected virtual void Dispose(bool disposing)
         /// Handle the paste from Clipboard command.
         /// This method is typically overriden on the project node
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int PasteFromClipboard(HierarchyNode targetNode)
+        public virtual int PasteFromClipboard(HierarchyNode targetNode)
         {
             return VSConstants.E_NOTIMPL;
         }
@@ -2292,7 +2211,7 @@ protected virtual void Dispose(bool disposing)
         /// Determines if the paste command should be allowed.
         /// This method is typically overriden on the project node
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual bool AllowPasteCommand()
+        public virtual bool AllowPasteCommand()
         {
             return false;
         }
@@ -2302,21 +2221,13 @@ protected virtual void Dispose(bool disposing)
         /// This method is typically overriden on the project node
         /// 
         /// true for register, false for unregister
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void RegisterClipboardNotifications(bool value)
+        public virtual void RegisterClipboardNotifications(bool value)
         {
             return;
         }
-        #endregion
-
-        #region public methods
 
         public void OnItemAdded(HierarchyNode parent, HierarchyNode child)
         {
-            if (null != parent.onChildAdded)
-            {
-                HierarchyNodeEventArgs args = new HierarchyNodeEventArgs(child);
-                parent.onChildAdded(parent, args);
-            }
             if (parent == null)
             {
                 throw new ArgumentNullException("parent");
@@ -2327,10 +2238,15 @@ public void OnItemAdded(HierarchyNode parent, HierarchyNode child)
                 throw new ArgumentNullException("child");
             }
 
-            HierarchyNode foo;
-            foo = this.projectMgr == null ? this : this.projectMgr;
+            if (parent.onChildAdded != null)
+            {
+                HierarchyNodeEventArgs args = new HierarchyNodeEventArgs(child);
+                parent.onChildAdded(parent, args);
+            }
 
-            if (foo == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
+            var root = this.projectMgr ?? this;
+
+            if (root == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
             {
                 return;
             }
@@ -2343,7 +2259,7 @@ public void OnItemAdded(HierarchyNode parent, HierarchyNode child)
 
             HierarchyNode prev = child.PreviousSibling;
             uint prevId = (prev != null) ? prev.hierarchyId : VSConstants.VSITEMID_NIL;
-            foreach (IVsHierarchyEvents sink in foo.hierarchyEventSinks)
+            foreach (IVsHierarchyEvents sink in root.hierarchyEventSinks)
             {
                 int result = sink.OnItemAdded(parent.hierarchyId, prevId, child.hierarchyId);
                 if (ErrorHandler.Failed(result) && result != VSConstants.E_NOTIMPL)
@@ -2357,10 +2273,9 @@ public void OnItemAdded(HierarchyNode parent, HierarchyNode child)
 
         public void OnItemDeleted()
         {
-            HierarchyNode foo;
-            foo = this.projectMgr == null ? this : this.projectMgr;
+            var root = this.projectMgr ?? this;
 
-            if (foo == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
+            if (root == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
             {
                 return;
             }
@@ -2370,14 +2285,14 @@ public void OnItemDeleted()
                 this.projectMgr.ExtensibilityEventsHelper.FireItemRemoved(this);
             }
 
-            if (foo.hierarchyEventSinks.Count > 0)
+            if (root.hierarchyEventSinks.Count > 0)
             {
                 // Note that in some cases (deletion of project node for example), an Advise
                 // may be removed while we are iterating over it. To get around this problem we
                 // take a snapshot of the advise list and walk that.
                 List clonedSink = new List();
 
-                foreach (IVsHierarchyEvents anEvent in foo.hierarchyEventSinks)
+                foreach (IVsHierarchyEvents anEvent in root.hierarchyEventSinks)
                 {
                     clonedSink.Add(anEvent);
                 }
@@ -2400,15 +2315,14 @@ public void OnItemsAppended(HierarchyNode parent)
                 throw new ArgumentNullException("parent");
             }
 
-            HierarchyNode foo;
-            foo = this.projectMgr == null ? this : this.projectMgr;
+            var root = this.projectMgr ?? this;
 
-            if (foo == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
+            if (root == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
             {
                 return;
             }
 
-            foreach (IVsHierarchyEvents sink in foo.hierarchyEventSinks)
+            foreach (IVsHierarchyEvents sink in root.hierarchyEventSinks)
             {
                 int result = sink.OnItemsAppended(parent.hierarchyId);
 
@@ -2427,14 +2341,15 @@ public void OnPropertyChanged(HierarchyNode node, int propid, uint flags)
             {
                 throw new ArgumentNullException("node");
             }
-            HierarchyNode foo;
-            foo = this.projectMgr == null ? this : this.projectMgr;
-            if (foo == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
+
+            var root = this.projectMgr ?? this;
+            
+            if (root == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
             {
                 return;
             }
 
-            foreach (IVsHierarchyEvents sink in foo.hierarchyEventSinks)
+            foreach (IVsHierarchyEvents sink in root.hierarchyEventSinks)
             {
                 int result = sink.OnPropertyChanged(node.hierarchyId, propid, flags);
 
@@ -2452,14 +2367,15 @@ public void OnInvalidateItems(HierarchyNode parent)
             {
                 throw new ArgumentNullException("parent");
             }
-            HierarchyNode foo;
-            foo = this.projectMgr == null ? this : this.projectMgr;
-            if (foo == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
+
+            var root = this.projectMgr ?? this;
+
+            if (root == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
             {
                 return;
             }
 
-            foreach (IVsHierarchyEvents sink in foo.hierarchyEventSinks)
+            foreach (IVsHierarchyEvents sink in root.hierarchyEventSinks)
             {
                 int result = sink.OnInvalidateItems(parent.hierarchyId);
 
@@ -2536,10 +2452,6 @@ public object GetService(Type type)
             return this.projectMgr.Site.GetService(type);
         }
 
-
-        #endregion
-
-        #region IDisposable
         /// 
         /// The IDispose interface Dispose method for disposing the object determinastically.
         /// 
@@ -2549,10 +2461,6 @@ public void Dispose()
             GC.SuppressFinalize(this);
         }
 
-        #endregion
-
-        #region IVsHierarchy methods
-
         public virtual int AdviseHierarchyEvents(IVsHierarchyEvents sink, out uint cookie)
         {
             cookie = this.hierarchyEventSinks.Add(sink) + 1;
@@ -2761,9 +2669,6 @@ public int Unused4()
         {
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
-
-        #region IVsUIHierarchy methods
 
         public virtual int ExecCommand(uint itemId, ref Guid guidCmdGroup, uint nCmdId, uint nCmdExecOpt, IntPtr pvain, IntPtr p)
         {
@@ -2774,7 +2679,6 @@ public virtual int QueryStatusCommand(uint itemId, ref Guid guidCmdGroup, uint c
         {
             return this.QueryStatusSelection(guidCmdGroup, cCmds, cmds, pCmdText, CommandOrigin.UiHierarchy);
         }
-        #endregion
 
         /// 
         /// Determines whether the hierarchy item changed. 
@@ -2903,7 +2807,7 @@ public virtual int SaveItem(VSSAVEFLAGS saveFlag, string silentSaveAsName, uint
                         {
                             // Cleanup.
                             this.DeleteFromStorage(docNew);
-                            if (this is ProjectNode && FSSafe.File.SafeExists(docNew))
+                            if (this is ProjectNode && FSLib.Shim.FileSystem.SafeExists(docNew))
                             {
                                 File.Delete(docNew);
                             }
@@ -2935,89 +2839,6 @@ public virtual int SaveItem(VSSAVEFLAGS saveFlag, string silentSaveAsName, uint
             return returnCode;
         }
 
-        #region IVsPersistHierarchyItem2 methods
-#if IMPLEMENT_IVSPERSISTHIERARCHYITEM2
-        /// 
-        /// Flag indicating that changes to a file can be ignored when item is saved or reloaded. 
-        /// 
-        /// Specifies the item id from VSITEMID.
-        /// Flag indicating whether or not to ignore changes (1 to ignore, 0 to stop ignoring).
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code.
-        public virtual int IgnoreItemFileChanges(uint itemId, int ignoreFlag)
-        {
-            if (this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                return VSConstants.E_FAIL;
-            }
-
-            HierarchyNode n = this.ProjectMgr.NodeFromItemId(itemId);
-            if (n != null)
-            {
-                return n.IgnoreItemFileChanges(ignoreFlag == 0 ? false : true);
-            }
-            else
-            {
-                return VSConstants.E_INVALIDARG;
-            }
-        }
-
-        /// 
-        /// Called to determine whether a project item is reloadable before calling ReloadItem. 
-        /// 
-        /// Item identifier of an item in the hierarchy. Valid values are VSITEMID_NIL, VSITEMID_ROOT and VSITEMID_SELECTION.
-        /// A flag indicating that the project item is reloadable (1 for reloadable, 0 for non-reloadable).
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code. 
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Reloadable")]
-        public virtual int IsItemReloadable(uint itemId, out int isReloadable)
-        {
-            isReloadable = 0;
-
-            if (this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                return VSConstants.E_FAIL;
-            }
-
-            HierarchyNode n = this.ProjectMgr.NodeFromItemId(itemId);
-            if (n != null)
-            {
-                isReloadable = (n.IsItemReloadable()) ? 1 : 0;
-                return VSConstants.S_OK;
-            }
-            else
-            {
-                return VSConstants.E_INVALIDARG;
-            }
-        }
-
-        /// 
-        /// Called to reload a project item. 
-        /// 
-        /// Specifies itemid from VSITEMID.
-        /// Reserved.
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code. 
-        public virtual int ReloadItem(uint itemId, uint reserved)
-        {
-        #region precondition
-            if (this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                return VSConstants.E_FAIL;
-            }
-            #endregion
-
-            HierarchyNode n = this.ProjectMgr.NodeFromItemId(itemId);
-            if (n != null)
-            {
-                return n.ReloadItem(reserved);
-            }
-            else
-            {
-                return VSConstants.E_INVALIDARG;
-            }
-        }
-#endif
-        #endregion
-
-        #region IOleCommandTarget methods
         /// 
         /// CommandTarget.Exec is called for most major operations if they are NOT UI based. Otherwise IVSUInode::exec is called first
         /// 
@@ -3034,9 +2855,6 @@ public virtual int QueryStatus(ref Guid guidCmdGroup, uint cCmds, OLECMD[] prgCm
         {
             return this.QueryStatusSelection(guidCmdGroup, cCmds, prgCmds, pCmdText, CommandOrigin.OleCommandTarget);
         }
-        #endregion
-
-        #region IVsHierarchyDeleteHandler methods
 
         public virtual int DeleteItem(uint delItemOp, uint itemId)
         {
@@ -3091,9 +2909,6 @@ public virtual int QueryDeleteItem(uint delItemOp, uint itemId, out int candelet
 
             return VSConstants.S_OK;
         }
-        #endregion
-
-        #region IVsHierarchyDropDataSource2 methods
 
         public virtual int GetDropInfo(out uint pdwOKEffects, out Microsoft.VisualStudio.OLE.Interop.IDataObject ppDataObject, out IDropSource ppDropSource)
         {
@@ -3114,9 +2929,6 @@ public virtual int OnBeforeDropNotify(Microsoft.VisualStudio.OLE.Interop.IDataOb
             fCancelDrop = 0;
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
-
-        #region IVsHierarchyDropDataTarget methods
 
         public virtual int DragEnter(Microsoft.VisualStudio.OLE.Interop.IDataObject pDataObject, uint grfKeyState, uint itemid, ref uint pdwEffect)
         {
@@ -3137,10 +2949,8 @@ public virtual int Drop(Microsoft.VisualStudio.OLE.Interop.IDataObject pDataObje
         {
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
 
-        #region helper methods
-        /*internal, but public for FSharp.Project.dll*/ public HierarchyNode FindChild(string name)
+        public HierarchyNode FindChild(string name)
         {
             if (String.IsNullOrEmpty(name))
             {
@@ -3175,7 +2985,7 @@ public virtual int Drop(Microsoft.VisualStudio.OLE.Interop.IDataObject pDataObje
         /// 
         /// The type of hierachy node being serched for
         /// A list of nodes of type T
-        /*internal, but public for FSharp.Project.dll*/ public void FindNodesOfType(List nodes)
+        public void FindNodesOfType(List nodes)
             where T : HierarchyNode
         {
             for (HierarchyNode n = this.FirstChild; n != null; n = n.NextSibling)
@@ -3190,11 +3000,10 @@ public virtual int Drop(Microsoft.VisualStudio.OLE.Interop.IDataObject pDataObje
             }
         }
 
-        /*internal, but public for FSharp.Project.dll*/ public void InstantiateItemsDraggedOrCutOrCopiedList()
+        public void InstantiateItemsDraggedOrCutOrCopiedList()
         {
             this.itemsDraggedOrCutOrCopied = new List();
         }
-        #endregion
 
         // Support for multitargeting.
 
@@ -3373,112 +3182,76 @@ string newTargetFrameworkMoniker
             return VSConstants.S_OK;
         }
 
-
-        #region IVsProjectResources methods
-
         private int CreateResourceDocDataHelper(FileNode f, uint itemidResource, out IVsPersistDocData persistDocData, out IVsTextLines textLines)
         {
-            int hr = VSConstants.E_FAIL;
-
-            /*
-            Guid CLSID_VsTextBuffer = new Guid("{8E7B96A8-E33D-11d0-A6D5-00C04FB67F6A}");
-            Guid iid = VSConstants.IID_IUnknown;
-            IntPtr docData = IntPtr.Zero;
-            */
-
-            IVsTextLines buffer;
             Type textLinesType = typeof(IVsTextLines);
             Guid riid = textLinesType.GUID;
             Guid clsid = typeof(VsTextBufferClass).GUID;
-            IntPtr docData = IntPtr.Zero;
 
             persistDocData = null;
             textLines = null;
 
-            try
-            {
-                /*
-                ILocalRegistry localReg = this.projectMgr.GetService(typeof(SLocalRegistry)) as ILocalRegistry;
-                hr = localReg.CreateInstance(CLSID_VsTextBuffer, null, ref iid, (uint)CLSCTX.CLSCTX_INPROC_SERVER, out docData);
-
-                if (!ErrorHandler.Succeeded(hr))
-                {
-                    return hr;
-                }
-                */
-
-                buffer = (IVsTextLines)this.projectMgr.Package.CreateInstance(ref clsid, ref riid, textLinesType);
-
-                if (buffer == null)
-                {
-                    return VSConstants.E_FAIL;
-                }
+            var buffer = (IVsTextLines)this.projectMgr.Package.CreateInstance(ref clsid, ref riid, textLinesType);
 
-                docData = Marshal.GetIUnknownForObject(buffer);
+            if (buffer == null)
+            {
+                return VSConstants.E_FAIL;
+            }
 
-                // persistDocData = Marshal.GetObjectForIUnknown(docData) as IVsPersistDocData;
-                persistDocData = buffer as IVsPersistDocData;
+            var docData = Marshal.GetIUnknownForObject(buffer);
 
-                if (persistDocData == null)
-                {
-                    return VSConstants.E_FAIL;
-                }
+            persistDocData = buffer as IVsPersistDocData;
 
-                IObjectWithSite siteObject = persistDocData as IObjectWithSite;
-                IOleServiceProvider site = GetService(typeof(IOleServiceProvider)) as IOleServiceProvider;
-                if (siteObject != null && site != null)
-                {
-                    siteObject.SetSite(site);
-                }
-                else
-                {
-                    // We need to set the site, and if we cannot, we need to fail
-                    Debug.Assert(false, "Cannot set site on VsTextBuffer!");
-                    return VSConstants.E_FAIL;
-                }
+            if (persistDocData == null)
+            {
+                return VSConstants.E_FAIL;
+            }
 
-                IVsRunningDocumentTable rdt = this.GetService(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;
-                if (rdt == null)
-                {
-                    Debug.Assert(false, "Cannot get RDT?");
-                    return VSConstants.E_FAIL;
-                }
+            var siteObject = persistDocData as IObjectWithSite;
+            var site = GetService(typeof(IOleServiceProvider)) as IOleServiceProvider;
+            if (siteObject != null && site != null)
+            {
+                siteObject.SetSite(site);
+            }
+            else
+            {
+                // We need to set the site, and if we cannot, we need to fail
+                Debug.Assert(false, "Cannot set site on VsTextBuffer!");
+                return VSConstants.E_FAIL;
+            }
 
-                string path = f.Url;
-                uint cookie = 0;
+            var rdt = this.GetService(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;
+            if (rdt == null)
+            {
+                Debug.Assert(false, "Cannot get RDT?");
+                return VSConstants.E_FAIL;
+            }
 
-                hr = rdt.RegisterAndLockDocument(
-                    (uint)(_VSRDTFLAGS.RDT_ReadLock | _VSRDTFLAGS.RDT_EditLock),
-                    path,
-                    this,
-                    itemidResource,
-                    docData,
-                    out cookie);
+            string path = f.Url;
+            uint cookie;
 
-                if (!ErrorHandler.Succeeded(hr))
-                {
-                    return hr;
-                }
+            var hr = rdt.RegisterAndLockDocument(
+                (uint)(_VSRDTFLAGS.RDT_ReadLock | _VSRDTFLAGS.RDT_EditLock),
+                path,
+                this,
+                itemidResource,
+                docData,
+                out cookie);
 
-                hr = persistDocData.LoadDocData(path);
+            if (!ErrorHandler.Succeeded(hr))
+            {
+                return hr;
+            }
 
-                if (!ErrorHandler.Succeeded(hr))
-                {
-                    return hr;
-                }
+            hr = persistDocData.LoadDocData(path);
 
-                textLines = buffer;
-            }
-            finally
+            if (!ErrorHandler.Succeeded(hr))
             {
-                /*
-                if (docData != IntPtr.Zero)
-                {
-                    Marshal.Release(docData);
-                }
-                */
+                return hr;
             }
 
+            textLines = buffer;
+
             return hr;
         }
 
@@ -3505,7 +3278,5 @@ public int GetResourceItem(uint itemidDocument, string pszCulture, uint grfPRF,
         {
             throw new NotImplementedException();
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IDEBuildLogger.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IDEBuildLogger.cs
index e13d221e7d7..760196f29f7 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IDEBuildLogger.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IDEBuildLogger.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Threading;
@@ -36,13 +36,9 @@ public static class LoggingConstants
     [ComVisible(true)]
     public sealed class IDEBuildLogger : Logger
     {
-        #region fields
         // TODO: Remove these constants when we have a version that supports getting the verbosity using automation.
         private string buildVerbosityRegistryRoot = LoggingConstants.DefaultVSRegistryRoot;
         // TODO: Re-enable this constants when we have a version that suppoerts getting the verbosity using automation.
-        //private const string EnvironmentCategory = "Environment";
-        //private const string ProjectsAndSolutionSubCategory = "ProjectsAndSolution";
-        //private const string BuildAndRunPage = "BuildAndRun";
 
 		private int currentIndent;
 		private IVsOutputWindowPane outputWindowPane;
@@ -55,9 +51,6 @@ public sealed class IDEBuildLogger : Logger
         private TaskReporter taskReporter;
         private bool haveCachedRegistry = false;
 
-		#endregion
-
-		#region properties
 		public string WarningString
 		{
 			get { return this.warningString; }
@@ -78,7 +71,7 @@ public bool IsLogTaskDone
 		/// enable the logger to retrive the verbosity from
 		/// the correct registry hive.
 		/// 
-		/*internal, but public for FSharp.Project.dll*/ public string BuildVerbosityRegistryRoot
+		public string BuildVerbosityRegistryRoot
 		{
 			get { return buildVerbosityRegistryRoot; }
 			set { buildVerbosityRegistryRoot = value; }
@@ -86,7 +79,7 @@ public bool IsLogTaskDone
 		/// 
 		/// Set to null to avoid writing to the output window
 		/// 
-		/*internal, but public for FSharp.Project.dll*/ public IVsOutputWindowPane OutputWindowPane
+		public IVsOutputWindowPane OutputWindowPane
 		{
 			get { return outputWindowPane; }
 			set { outputWindowPane = value; }
@@ -97,12 +90,7 @@ internal TaskReporter TaskReporter
             get { return taskReporter; }
             set { taskReporter = value; }
         }
-		#endregion
 
-		#region ctors
-		/// 
-		/// Constructor.  Inititialize member data.
-		/// 
 		internal IDEBuildLogger(IVsOutputWindowPane output, TaskProvider taskProvider, IVsHierarchy hierarchy)
 		{
 			if (taskProvider == null)
@@ -118,12 +106,7 @@ internal IDEBuildLogger(IVsOutputWindowPane output, TaskProvider taskProvider, I
 			Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hierarchy.GetSite(out site));
 			this.serviceProvider = new ServiceProvider(site);
 		}
-		#endregion
 
-		#region overridden methods
-		/// 
-		/// Overridden from the Logger class.
-		/// 
 		public override void Initialize(IEventSource eventSource)
 		{
 			if (null == eventSource)
@@ -145,9 +128,7 @@ public override void Initialize(IEventSource eventSource)
             eventSource.WarningRaised += new BuildWarningEventHandler(WarningHandler);
             eventSource.MessageRaised += new BuildMessageEventHandler(MessageHandler);
         }
-		#endregion
 
-		#region event delegates
 		/// 
 		/// This is the delegate for error events.
 		/// 
@@ -656,9 +637,6 @@ private void CustomHandler(object sender, CustomBuildEventArgs buildEvent)
             }
 		}
 
-		#endregion
-
-		#region helpers
 		/// 
 		/// This method takes a MessageImportance and returns true if messages
 		/// at importance i should be loggeed.  Otherwise return false.
@@ -814,7 +792,6 @@ private void SetVerbosity()
             //EnvDTE.DTE dte = this.serviceProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
             //EnvDTE.Properties properties = dte.get_Properties(EnvironmentCategory, ProjectsAndSolutionSubCategory);
         }
-		#endregion
     }
 
     /// 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IVsSQM.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IVsSQM.cs
index e23d52ddc46..04d8e7fce4e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IVsSQM.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IVsSQM.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 #pragma warning disable 3001
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ImageHandler.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ImageHandler.cs
index 033cfcf2dbe..7cd7098fde5 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ImageHandler.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ImageHandler.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Collections.Generic;
@@ -71,10 +71,6 @@ public void Close()
             }
         }
 
-        /// 
-        /// Add an image to the ImageHandler.
-        /// 
-        /// the image object to be added.
         public void AddImage(Image image)
         {
             if (null == image)
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Interfaces.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Interfaces.cs
index bb31fad5b9f..9dc9d738c12 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Interfaces.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Interfaces.cs
@@ -1,17 +1,9 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Runtime.InteropServices;
 using System.Collections.Generic;
-using System.IO;
-using System.Windows.Forms;
-using System.Diagnostics;
-using System.Globalization;
-using System.Text;
-using System.Threading;
-using Microsoft.VisualStudio.Shell;
 using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.OLE.Interop;
 using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants;
 using VsCommands = Microsoft.VisualStudio.VSConstants.VSStd97CmdID;
 using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID;
@@ -24,7 +16,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// 
     /// This interface defines the rules for handling build dependency on a project container.
     /// 
-    /// Normally this should be an /*internal, but public for FSharp.Project.dll*/ public interface but since it shouldbe available for the aggregator it must be made public.
     [ComVisible(true)]
     [CLSCompliant(false)]
     public interface IBuildDependencyOnProjectContainer
@@ -49,7 +40,6 @@ bool BuildNestedProjectsOnBuild
     /// 
     /// Interface for manipulating build dependency
     /// 
-    /// Normally this should be an /*internal, but public for FSharp.Project.dll*/ public interface but since it shouldbe available for the aggregator it must be made public.
     [ComVisible(true)]
     [CLSCompliant(false)]
     public interface IBuildDependencyUpdate
@@ -57,7 +47,6 @@ public interface IBuildDependencyUpdate
         /// 
         /// Defines a container for storing BuildDependencies
         /// 
-
         IVsBuildDependency[] BuildDependencies
         {
             get;
@@ -80,8 +69,6 @@ IVsBuildDependency[] BuildDependencies
     /// 
     /// Provides access to the reference data container.
     /// 
-    /// Normally this should be an /*internal, but public for FSharp.Project.dll*/ public interface but since it should be available for
-    /// the aggregator it must be made public.
     [ComVisible(true)]
     public interface IReferenceContainerProvider
     {
@@ -91,8 +78,6 @@ public interface IReferenceContainerProvider
     /// 
     /// Defines a container for manipulating references
     /// 
-    /// Normally this should be an /*internal, but public for FSharp.Project.dll*/ public interface but since it should be available for
-    /// the aggregator it must be made public.
     [ComVisible(true)]
     public interface IReferenceContainer
     {
@@ -126,7 +111,6 @@ public interface IProjectEvents
     [ComVisible(true)]
     public interface IProjectEventsListener
     {
-
         /// 
         /// Is the object a project events listener.
         /// 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/InternalsVisibleTo.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/InternalsVisibleTo.cs
index 77d1b63b055..2b0a62ef286 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/InternalsVisibleTo.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/InternalsVisibleTo.cs
@@ -1,11 +1,11 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 [assembly:InternalsVisibleTo("FSharp.ProjectSystem.FSharp, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
-[assembly: InternalsVisibleTo("Salsa, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
-[assembly: InternalsVisibleTo("Unittests, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
+[assembly: InternalsVisibleTo("VisualFSharp.Salsa, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
+[assembly: InternalsVisibleTo("VisualFSharp.Unittests, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
 [assembly: InternalsVisibleTo("FSharp.ProjectSystem.PropertyPages, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
 // Expose internals to testhook infrastructure and the test driver
 [assembly: InternalsVisibleTo("Tao.VSLanguages.FSharp, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LinkedFileNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LinkedFileNode.cs
index 05aeecefd54..cacfe667299 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LinkedFileNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LinkedFileNode.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Runtime.InteropServices;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LocalizableProperties.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LocalizableProperties.cs
index d9eaca41b42..82c9bc702bf 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LocalizableProperties.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LocalizableProperties.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.OLE.Interop;
 using Microsoft.VisualStudio.Shell.Interop;
@@ -27,7 +27,6 @@ internal LocalizableProperties()
         {
         }
 
-        #region ICustomTypeDescriptor
         public virtual AttributeCollection GetAttributes() 
         {
             AttributeCollection col = TypeDescriptor.GetAttributes(this, true);
@@ -107,7 +106,5 @@ public virtual string GetClassName()
         {
             return this.GetType().FullName;
         }
-
-        #endregion ICustomTypeDescriptor
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/MPFProjectAll.files b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/MPFProjectAll.files
index a90b19b47be..6e915a5dbc6 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/MPFProjectAll.files
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/MPFProjectAll.files
@@ -1,5 +1,5 @@
 
-
+
 
 
   
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.cs
index 861b5435b2a..2a568dd8a37 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 {
@@ -50,156 +50,156 @@ protected override string GetLocalizedString(string value)
             return SR.GetString(value, CultureInfo.CurrentUICulture);
         }
     }
-    /*internal, but public for FSharp.Project.dll*/ public sealed class SR
+    public sealed class SR
     {
-        /*internal, but public for FSharp.Project.dll*/ public const string AddToNullProjectError = "AddToNullProjectError";
-        /*internal, but public for FSharp.Project.dll*/ public const string Advanced = "Advanced";
-        /*internal, but public for FSharp.Project.dll*/ public const string AssemblyReferenceAlreadyExists = "AssemblyReferenceAlreadyExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string AttributeLoad = "AttributeLoad";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildAction = "BuildAction";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildActionDescription = "BuildActionDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildCaption = "BuildCaption";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildVerbosity = "BuildVerbosity";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildVerbosityDescription = "BuildVerbosityDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildEventError = "BuildEventError";
-        /*internal, but public for FSharp.Project.dll*/ public const string CancelQueryEdit = "CancelQueryEdit";
-        /*internal, but public for FSharp.Project.dll*/ public const string CannotAddFileThatIsOpenInEditor = "CannotAddFileThatIsOpenInEditor";
-        /*internal, but public for FSharp.Project.dll*/ public const string CannotAddItemToProjectWithWildcards = "CannotAddItemToProjectWithWildcards";
-        /*internal, but public for FSharp.Project.dll*/ public const string CanNotSaveFileNotOpeneInEditor = "CanNotSaveFileNotOpeneInEditor";
-        /*internal, but public for FSharp.Project.dll*/ public const string CannotStartLibraries = "CannotStartLibraries";
-        /*internal, but public for FSharp.Project.dll*/ public const string cli1 = "cli1";
-        /*internal, but public for FSharp.Project.dll*/ public const string Compile = "Compile";
-        /*internal, but public for FSharp.Project.dll*/ public const string ConfirmExtensionChange = "ConfirmExtensionChange";
-        /*internal, but public for FSharp.Project.dll*/ public const string Content = "Content";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyAlways = "CopyAlways";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyIfNewer = "CopyIfNewer";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyToLocal = "CopyToLocal";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyToLocalDescription = "CopyToLocalDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyToOutputDirectory = "CopyToOutputDirectory";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyToOutputDirectoryDescription = "CopyToOutputDirectoryDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string CustomTool = "CustomTool";
-        /*internal, but public for FSharp.Project.dll*/ public const string CustomToolDescription = "CustomToolDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string CustomToolNamespace = "CustomToolNamespace";
-        /*internal, but public for FSharp.Project.dll*/ public const string CustomToolNamespaceDescription = "CustomToolNamespaceDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsImport = "DetailsImport";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsUserImport = "DetailsUserImport";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsItem = "DetailsItem";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsItemLocation = "DetailsItemLocation";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsProperty = "DetailsProperty";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsTarget = "DetailsTarget";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsUsingTask = "DetailsUsingTask";
-        /*internal, but public for FSharp.Project.dll*/ public const string Detailed = "Detailed";
-        /*internal, but public for FSharp.Project.dll*/ public const string Diagnostic = "Diagnostic";
-        /*internal, but public for FSharp.Project.dll*/ public const string DirectoryExistError = "DirectoryExistError";
-        /*internal, but public for FSharp.Project.dll*/ public const string DoNotCopy = "DoNotCopy";
-        /*internal, but public for FSharp.Project.dll*/ public const string EditorViewError = "EditorViewError";
-        /*internal, but public for FSharp.Project.dll*/ public const string EmbeddedResource = "EmbeddedResource";
-        /*internal, but public for FSharp.Project.dll*/ public const string Error = "Error";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorInvalidFileName = "ErrorInvalidFileName";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorInvalidProjectName = "ErrorInvalidProjectName";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorReferenceCouldNotBeAdded = "ErrorReferenceCouldNotBeAdded";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorMsBuildRegistration = "ErrorMsBuildRegistration";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorSaving = "ErrorSaving";
-        /*internal, but public for FSharp.Project.dll*/ public const string Exe = "Exe";
-        /*internal, but public for FSharp.Project.dll*/ public const string ExpectedObjectOfType = "ExpectedObjectOfType";
-        /*internal, but public for FSharp.Project.dll*/ public const string FailedToGetService = "FailedToGetService";
-        /*internal, but public for FSharp.Project.dll*/ public const string FailedToRetrieveProperties = "FailedToRetrieveProperties";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileNameCannotContainALeadingPeriod = "FileNameCannotContainALeadingPeriod";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileCannotBeRenamedToAnExistingFile = "FileCannotBeRenamedToAnExistingFile";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileAlreadyExistsAndCannotBeRenamed = "FileAlreadyExistsAndCannotBeRenamed";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileAlreadyExists = "FileAlreadyExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileAlreadyExistsCaption = "FileAlreadyExistsCaption";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileAlreadyInProject = "FileAlreadyInProject";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileAlreadyInProjectCaption = "FileAlreadyInProjectCaption";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileCopyError = "FileCopyError";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileName = "FileName";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileNameDescription = "FileNameDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileOrFolderAlreadyExists = "FileOrFolderAlreadyExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileOrFolderCannotBeFound = "FileOrFolderCannotBeFound";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileProperties = "FileProperties";
-        /*internal, but public for FSharp.Project.dll*/ public const string FolderName = "FolderName";
-        /*internal, but public for FSharp.Project.dll*/ public const string FolderNameDescription = "FolderNameDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string FolderProperties = "FolderProperties";
-        /*internal, but public for FSharp.Project.dll*/ public const string FullPath = "FullPath";
-        /*internal, but public for FSharp.Project.dll*/ public const string FullPathDescription = "FullPathDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string ItemDoesNotExistInProjectDirectory = "ItemDoesNotExistInProjectDirectory";
-        /*internal, but public for FSharp.Project.dll*/ public const string InvalidAutomationObject = "InvalidAutomationObject";
-        /*internal, but public for FSharp.Project.dll*/ public const string InvalidLoggerType = "InvalidLoggerType";
-        /*internal, but public for FSharp.Project.dll*/ public const string InvalidParameter = "InvalidParameter";
-        /*internal, but public for FSharp.Project.dll*/ public const string Library = "Library";
-        /*internal, but public for FSharp.Project.dll*/ public const string LinkedItemsAreNotSupported = "LinkedItemsAreNotSupported";
-        /*internal, but public for FSharp.Project.dll*/ public const string Minimal = "Minimal";
-        /*internal, but public for FSharp.Project.dll*/ public const string Misc = "Misc";
-        /*internal, but public for FSharp.Project.dll*/ public const string None = "None";
-        /*internal, but public for FSharp.Project.dll*/ public const string NoWildcardsInProject = "NoWildcardsInProject";
-        /*internal, but public for FSharp.Project.dll*/ public const string NoZeroImpactProjects = "NoZeroImpactProjects";
-        /*internal, but public for FSharp.Project.dll*/ public const string Normal = "Normal";
-        /*internal, but public for FSharp.Project.dll*/ public const string NestedProjectFailedToReload = "NestedProjectFailedToReload";
-        /*internal, but public for FSharp.Project.dll*/ public const string OutputPath = "OutputPath";
-        /*internal, but public for FSharp.Project.dll*/ public const string OutputPathDescription = "OutputPathDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string PasteFailed = "PasteFailed";
-        /*internal, but public for FSharp.Project.dll*/ public const string ParameterMustBeAValidGuid = "ParameterMustBeAValidGuid";
-        /*internal, but public for FSharp.Project.dll*/ public const string ParameterMustBeAValidItemId = "ParameterMustBeAValidItemId";
-        /*internal, but public for FSharp.Project.dll*/ public const string ParameterCannotBeNullOrEmpty = "ParameterCannotBeNullOrEmpty";
-        /*internal, but public for FSharp.Project.dll*/ public const string PathTooLong = "PathTooLong";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectContainsCircularReferences = "ProjectContainsCircularReferences";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectReferencesDifferentFramework = "ProjectReferencesDifferentFramework";
-        /*internal, but public for FSharp.Project.dll*/ public const string Program = "Program";
-        /*internal, but public for FSharp.Project.dll*/ public const string Project = "Project";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectFile = "ProjectFile";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectFileDescription = "ProjectFileDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectFolder = "ProjectFolder";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectFolderDescription = "ProjectFolderDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectProperties = "ProjectProperties";
-        /*internal, but public for FSharp.Project.dll*/ public const string Quiet = "Quiet";
-        /*internal, but public for FSharp.Project.dll*/ public const string QueryReloadNestedProject = "QueryReloadNestedProject";
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferenceCouldNotBeAdded = "ReferenceCouldNotBeAdded";
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferenceAlreadyExists = "ReferenceAlreadyExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferenceWithAssemblyNameAlreadyExists = "ReferenceWithAssemblyNameAlreadyExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferencesNodeName = "ReferencesNodeName";
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferenceProperties = "ReferenceProperties";
-        /*internal, but public for FSharp.Project.dll*/ public const string RefName = "RefName";
-        /*internal, but public for FSharp.Project.dll*/ public const string RefNameDescription = "RefNameDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string RenameFolder = "RenameFolder";
-        /*internal, but public for FSharp.Project.dll*/ public const string RTL = "RTL";
-        /*internal, but public for FSharp.Project.dll*/ public const string SaveCaption = "SaveCaption";
-        /*internal, but public for FSharp.Project.dll*/ public const string SaveModifiedDocuments = "SaveModifiedDocuments";
-        /*internal, but public for FSharp.Project.dll*/ public const string SaveOfProjectFileOutsideCurrentDirectory = "SaveOfProjectFileOutsideCurrentDirectory";
-        /*internal, but public for FSharp.Project.dll*/ public const string SpecificVersion = "SpecificVersion";
-        /*internal, but public for FSharp.Project.dll*/ public const string SpecificVersionDescription = "SpecificVersionDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string StandardEditorViewError = "StandardEditorViewError";
-        /*internal, but public for FSharp.Project.dll*/ public const string URL = "URL";
-        /*internal, but public for FSharp.Project.dll*/ public const string UseOfDeletedItemError = "UseOfDeletedItemError";
-        /*internal, but public for FSharp.Project.dll*/ public const string v1 = "v1";
-        /*internal, but public for FSharp.Project.dll*/ public const string v11 = "v11";
-        /*internal, but public for FSharp.Project.dll*/ public const string v2 = "v2";
-        /*internal, but public for FSharp.Project.dll*/ public const string Warning = "Warning";
-        /*internal, but public for FSharp.Project.dll*/ public const string WinExe = "WinExe";
-        /*internal, but public for FSharp.Project.dll*/ public const string UpgradeCannotOpenProjectFileForEdit = "UpgradeCannotOpenProjectFileForEdit";
-        /*internal, but public for FSharp.Project.dll*/ public const string UpgradeNoNeedToUpgradeAfterCheckout = "UpgradeNoNeedToUpgradeAfterCheckout";        
-        /*internal, but public for FSharp.Project.dll*/ public const string InvalidOutputPath = "InvalidOutputPath";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectRefOnlyExeOrDll = "ProjectRefOnlyExeOrDll";
-        /*internal, but public for FSharp.Project.dll*/ public const string CannotBuildWhenBuildInProgress = "CannotBuildWhenBuildInProgress";
-        /*internal, but public for FSharp.Project.dll*/ public const string WorkingDirectoryNotExists = "WorkingDirectoryNotExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string CannotLoadUnknownTargetFrameworkProject = "CannotLoadUnknownTargetFrameworkProject";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProductName = "ProductName";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectReferencesHigherVersionWarning = "ProjectReferencesHigherVersionWarning";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectConversionNotRequired = "ProjectConversionNotRequired";
-        /*internal, but public for FSharp.Project.dll*/ public const string ConversionNotRequired = "ConversionNotRequired";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorMakingProjectBackup = "ErrorMakingProjectBackup";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectBackupSuccessful = "ProjectBackupSuccessful";
-        /*internal, but public for FSharp.Project.dll*/ public const string BackupNameConflict = "BackupNameConflict";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectContainsLinkedFile = "ProjectContainsLinkedFile";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorMakingBackup = "ErrorMakingBackup";
-        /*internal, but public for FSharp.Project.dll*/ public const string BackupSuccessful = "BackupSuccessful";
-        /*internal, but public for FSharp.Project.dll*/ public const string Identity = "Identity";
-        /*internal, but public for FSharp.Project.dll*/ public const string IdentityDescription = "IdentityDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string Path = "Path";
-        /*internal, but public for FSharp.Project.dll*/ public const string PathDescription = "PathDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string Version = "Version";
-        /*internal, but public for FSharp.Project.dll*/ public const string VersionDescription = "VersionDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyOf = "CopyOf";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyOf2 = "CopyOf2";
+        public const string AddToNullProjectError = "AddToNullProjectError";
+        public const string Advanced = "Advanced";
+        public const string AssemblyReferenceAlreadyExists = "AssemblyReferenceAlreadyExists";
+        public const string AttributeLoad = "AttributeLoad";
+        public const string BuildAction = "BuildAction";
+        public const string BuildActionDescription = "BuildActionDescription";
+        public const string BuildCaption = "BuildCaption";
+        public const string BuildVerbosity = "BuildVerbosity";
+        public const string BuildVerbosityDescription = "BuildVerbosityDescription";
+        public const string BuildEventError = "BuildEventError";
+        public const string CancelQueryEdit = "CancelQueryEdit";
+        public const string CannotAddFileThatIsOpenInEditor = "CannotAddFileThatIsOpenInEditor";
+        public const string CannotAddItemToProjectWithWildcards = "CannotAddItemToProjectWithWildcards";
+        public const string CanNotSaveFileNotOpeneInEditor = "CanNotSaveFileNotOpeneInEditor";
+        public const string CannotStartLibraries = "CannotStartLibraries";
+        public const string cli1 = "cli1";
+        public const string Compile = "Compile";
+        public const string ConfirmExtensionChange = "ConfirmExtensionChange";
+        public const string Content = "Content";
+        public const string CopyAlways = "CopyAlways";
+        public const string CopyIfNewer = "CopyIfNewer";
+        public const string CopyToLocal = "CopyToLocal";
+        public const string CopyToLocalDescription = "CopyToLocalDescription";
+        public const string CopyToOutputDirectory = "CopyToOutputDirectory";
+        public const string CopyToOutputDirectoryDescription = "CopyToOutputDirectoryDescription";
+        public const string CustomTool = "CustomTool";
+        public const string CustomToolDescription = "CustomToolDescription";
+        public const string CustomToolNamespace = "CustomToolNamespace";
+        public const string CustomToolNamespaceDescription = "CustomToolNamespaceDescription";
+        public const string DetailsImport = "DetailsImport";
+        public const string DetailsUserImport = "DetailsUserImport";
+        public const string DetailsItem = "DetailsItem";
+        public const string DetailsItemLocation = "DetailsItemLocation";
+        public const string DetailsProperty = "DetailsProperty";
+        public const string DetailsTarget = "DetailsTarget";
+        public const string DetailsUsingTask = "DetailsUsingTask";
+        public const string Detailed = "Detailed";
+        public const string Diagnostic = "Diagnostic";
+        public const string DirectoryExistError = "DirectoryExistError";
+        public const string DoNotCopy = "DoNotCopy";
+        public const string EditorViewError = "EditorViewError";
+        public const string EmbeddedResource = "EmbeddedResource";
+        public const string Error = "Error";
+        public const string ErrorInvalidFileName = "ErrorInvalidFileName";
+        public const string ErrorInvalidProjectName = "ErrorInvalidProjectName";
+        public const string ErrorReferenceCouldNotBeAdded = "ErrorReferenceCouldNotBeAdded";
+        public const string ErrorMsBuildRegistration = "ErrorMsBuildRegistration";
+        public const string ErrorSaving = "ErrorSaving";
+        public const string Exe = "Exe";
+        public const string ExpectedObjectOfType = "ExpectedObjectOfType";
+        public const string FailedToGetService = "FailedToGetService";
+        public const string FailedToRetrieveProperties = "FailedToRetrieveProperties";
+        public const string FileNameCannotContainALeadingPeriod = "FileNameCannotContainALeadingPeriod";
+        public const string FileCannotBeRenamedToAnExistingFile = "FileCannotBeRenamedToAnExistingFile";
+        public const string FileAlreadyExistsAndCannotBeRenamed = "FileAlreadyExistsAndCannotBeRenamed";
+        public const string FileAlreadyExists = "FileAlreadyExists";
+        public const string FileAlreadyExistsCaption = "FileAlreadyExistsCaption";
+        public const string FileAlreadyInProject = "FileAlreadyInProject";
+        public const string FileAlreadyInProjectCaption = "FileAlreadyInProjectCaption";
+        public const string FileCopyError = "FileCopyError";
+        public const string FileName = "FileName";
+        public const string FileNameDescription = "FileNameDescription";
+        public const string FileOrFolderAlreadyExists = "FileOrFolderAlreadyExists";
+        public const string FileOrFolderCannotBeFound = "FileOrFolderCannotBeFound";
+        public const string FileProperties = "FileProperties";
+        public const string FolderName = "FolderName";
+        public const string FolderNameDescription = "FolderNameDescription";
+        public const string FolderProperties = "FolderProperties";
+        public const string FullPath = "FullPath";
+        public const string FullPathDescription = "FullPathDescription";
+        public const string ItemDoesNotExistInProjectDirectory = "ItemDoesNotExistInProjectDirectory";
+        public const string InvalidAutomationObject = "InvalidAutomationObject";
+        public const string InvalidLoggerType = "InvalidLoggerType";
+        public const string InvalidParameter = "InvalidParameter";
+        public const string Library = "Library";
+        public const string LinkedItemsAreNotSupported = "LinkedItemsAreNotSupported";
+        public const string Minimal = "Minimal";
+        public const string Misc = "Misc";
+        public const string None = "None";
+        public const string NoWildcardsInProject = "NoWildcardsInProject";
+        public const string NoZeroImpactProjects = "NoZeroImpactProjects";
+        public const string Normal = "Normal";
+        public const string NestedProjectFailedToReload = "NestedProjectFailedToReload";
+        public const string OutputPath = "OutputPath";
+        public const string OutputPathDescription = "OutputPathDescription";
+        public const string PasteFailed = "PasteFailed";
+        public const string ParameterMustBeAValidGuid = "ParameterMustBeAValidGuid";
+        public const string ParameterMustBeAValidItemId = "ParameterMustBeAValidItemId";
+        public const string ParameterCannotBeNullOrEmpty = "ParameterCannotBeNullOrEmpty";
+        public const string PathTooLong = "PathTooLong";
+        public const string ProjectContainsCircularReferences = "ProjectContainsCircularReferences";
+        public const string ProjectReferencesDifferentFramework = "ProjectReferencesDifferentFramework";
+        public const string Program = "Program";
+        public const string Project = "Project";
+        public const string ProjectFile = "ProjectFile";
+        public const string ProjectFileDescription = "ProjectFileDescription";
+        public const string ProjectFolder = "ProjectFolder";
+        public const string ProjectFolderDescription = "ProjectFolderDescription";
+        public const string ProjectProperties = "ProjectProperties";
+        public const string Quiet = "Quiet";
+        public const string QueryReloadNestedProject = "QueryReloadNestedProject";
+        public const string ReferenceCouldNotBeAdded = "ReferenceCouldNotBeAdded";
+        public const string ReferenceAlreadyExists = "ReferenceAlreadyExists";
+        public const string ReferenceWithAssemblyNameAlreadyExists = "ReferenceWithAssemblyNameAlreadyExists";
+        public const string ReferencesNodeName = "ReferencesNodeName";
+        public const string ReferenceProperties = "ReferenceProperties";
+        public const string RefName = "RefName";
+        public const string RefNameDescription = "RefNameDescription";
+        public const string RenameFolder = "RenameFolder";
+        public const string RTL = "RTL";
+        public const string SaveCaption = "SaveCaption";
+        public const string SaveModifiedDocuments = "SaveModifiedDocuments";
+        public const string SaveOfProjectFileOutsideCurrentDirectory = "SaveOfProjectFileOutsideCurrentDirectory";
+        public const string SpecificVersion = "SpecificVersion";
+        public const string SpecificVersionDescription = "SpecificVersionDescription";
+        public const string StandardEditorViewError = "StandardEditorViewError";
+        public const string URL = "URL";
+        public const string UseOfDeletedItemError = "UseOfDeletedItemError";
+        public const string v1 = "v1";
+        public const string v11 = "v11";
+        public const string v2 = "v2";
+        public const string Warning = "Warning";
+        public const string WinExe = "WinExe";
+        public const string UpgradeCannotOpenProjectFileForEdit = "UpgradeCannotOpenProjectFileForEdit";
+        public const string UpgradeNoNeedToUpgradeAfterCheckout = "UpgradeNoNeedToUpgradeAfterCheckout";        
+        public const string InvalidOutputPath = "InvalidOutputPath";
+        public const string ProjectRefOnlyExeOrDll = "ProjectRefOnlyExeOrDll";
+        public const string CannotBuildWhenBuildInProgress = "CannotBuildWhenBuildInProgress";
+        public const string WorkingDirectoryNotExists = "WorkingDirectoryNotExists";
+        public const string CannotLoadUnknownTargetFrameworkProject = "CannotLoadUnknownTargetFrameworkProject";
+        public const string ProductName = "ProductName";
+        public const string ProjectReferencesHigherVersionWarning = "ProjectReferencesHigherVersionWarning";
+        public const string ProjectConversionNotRequired = "ProjectConversionNotRequired";
+        public const string ConversionNotRequired = "ConversionNotRequired";
+        public const string ErrorMakingProjectBackup = "ErrorMakingProjectBackup";
+        public const string ProjectBackupSuccessful = "ProjectBackupSuccessful";
+        public const string BackupNameConflict = "BackupNameConflict";
+        public const string ProjectContainsLinkedFile = "ProjectContainsLinkedFile";
+        public const string ErrorMakingBackup = "ErrorMakingBackup";
+        public const string BackupSuccessful = "BackupSuccessful";
+        public const string Identity = "Identity";
+        public const string IdentityDescription = "IdentityDescription";
+        public const string Path = "Path";
+        public const string PathDescription = "PathDescription";
+        public const string Version = "Version";
+        public const string VersionDescription = "VersionDescription";
+        public const string CopyOf = "CopyOf";
+        public const string CopyOf2 = "CopyOf2";
 
         static SR loader = null;
         ResourceManager resources;
@@ -218,7 +218,7 @@ private static Object InternalSyncObject
             }
         }
 
-        /*internal, but public for FSharp.Project.dll*/ public SR()
+        public SR()
         {
             resources = new System.Resources.ResourceManager("Microsoft.VisualStudio.Package.Project", this.GetType().Assembly);
         }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.resx b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.resx
index c8a1bc33a6e..2efe57568f9 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.resx
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.resx
@@ -1,5 +1,5 @@
 
-
+
 
   
+
 
   
+
 
   
     ..\..\..\..\..\..\..\src
@@ -76,12 +76,9 @@
     
     
     
-    
-    
     
     
     
-    
     
     
     
@@ -95,7 +92,6 @@
     
     
     
-    
     
     
     
@@ -105,7 +101,6 @@
     
     
     
-    
 
     
     
@@ -128,9 +123,7 @@
     
     
     
-    
     
-    
     
     
     
@@ -140,14 +133,11 @@
     
     
     
-    
-    
     
     
     
     
     
-    
     
     
     
@@ -161,21 +151,15 @@
     
     
     
-    
-    
-    
     
-    
     
     
     
     
     
     
-    
     
     
-    
     
     
     
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/PropertiesEditorLauncher.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/PropertiesEditorLauncher.cs
index d813694ef60..7887b39280c 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/PropertiesEditorLauncher.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/PropertiesEditorLauncher.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using Microsoft.VisualStudio.OLE.Interop;
 using Microsoft.VisualStudio.Shell;
@@ -23,7 +23,6 @@ internal class PropertiesEditorLauncher : ComponentEditor
     {
         private ServiceProvider serviceProvider;
 
-        #region ctor
         public PropertiesEditorLauncher(ServiceProvider serviceProvider)
         {
             if (serviceProvider == null)
@@ -31,8 +30,7 @@ public PropertiesEditorLauncher(ServiceProvider serviceProvider)
 
             this.serviceProvider = serviceProvider;
         }
-        #endregion
-        #region overridden methods
+
         /// 
         /// Launch the Project Properties Editor (properties pages)
         /// 
@@ -52,7 +50,6 @@ public override bool EditComponent(ITypeDescriptorContext context, object compon
 
             return false;
         }
-        #endregion
 
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceContainerNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceContainerNode.cs
index 8768304b301..a210ddcc6f0 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceContainerNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceContainerNode.cs
@@ -1,6 +1,5 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-using FSSafe = Internal.Utilities.FileSystem;
 using System;
 using System.Runtime.InteropServices;
 using System.Collections.Generic;
@@ -32,32 +31,25 @@ internal enum AddReferenceDialogTab
     [CLSCompliant(false), ComVisible(true)]
     public class ReferenceContainerNode : HierarchyNode, IReferenceContainer
     {
-        #region fields
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferencesNodeVirtualName = "References";
+        public const string ReferencesNodeVirtualName = "References";
         private List projectReferencesWithEnabledCaching = new List();
-        #endregion
         
-        #region ctor
         internal ReferenceContainerNode(ProjectNode root) : base(root)
         {
             this.VirtualNodeName = ReferencesNodeVirtualName;
             this.ExcludeNodeFromScc = true;
         }
-        #endregion
 
-        #region Properties
         private static string[] supportedReferenceTypes = new string[] {
             ProjectFileConstants.ProjectReference,
             ProjectFileConstants.Reference,
             ProjectFileConstants.COMReference
         };
-        public /*protected, but public for FSharp.Project.dll*/ virtual string[] SupportedReferenceTypes
+        public virtual string[] SupportedReferenceTypes
         {
             get { return supportedReferenceTypes; }
         }
-        #endregion
 
-        #region overridden properties
         public override int SortPriority
         {
             get 
@@ -93,7 +85,7 @@ public override string Caption
 
 
         private Automation.OAReferences references;
-        /*internal, but public for FSharp.Project.dll*/ public override object Object
+        public override object Object
         {
             get
             {
@@ -105,10 +97,6 @@ public override string Caption
             }
         }
 
-        #endregion
-
-        #region overridden methods
-
         public override void AddChild(HierarchyNode node)
         {
             base.AddChild(node);
@@ -141,7 +129,7 @@ public override string GetEditLabel()
 
         public override object GetIconHandle(bool open)
         {
-            return this.ProjectMgr.ImageHandler.GetIconHandle(open ? (int)ProjectNode.ImageName.OpenReferenceFolder : (int)ProjectNode.ImageName.ReferenceFolder);
+            return this.ProjectMgr.ImageHandler.GetIconHandle((int)ProjectNode.ImageName.ReferenceFolder);
         }
 
         
@@ -149,7 +137,7 @@ public override object GetIconHandle(bool open)
         /// References node cannot be dragged.
         /// 
         /// A stringbuilder.
-        public /*protected, but public for FSharp.Project.dll*/ override StringBuilder PrepareSelectedNodesForClipBoard()
+        public override StringBuilder PrepareSelectedNodesForClipBoard()
         {
             return null;
         }
@@ -157,7 +145,7 @@ public override object GetIconHandle(bool open)
         /// 
         /// Not supported.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int ExcludeFromProject()
+        public override int ExcludeFromProject()
         {
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
@@ -209,7 +197,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return base.QueryStatusOnNode(cmdGroup, cmd, pCmdText, ref result);
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
+        public override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
         {
             if (cmdGroup == VsMenus.guidStandardCommandSet2K)
             {
@@ -237,7 +225,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return base.ExecCommandOnNode(cmdGroup, cmd, nCmdexecopt, pvaIn, pvaOut);
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
+        public override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
         {
             return false;
         }
@@ -246,7 +234,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
         /// Defines whether this node is valid node for painting the refererences icon.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanShowDefaultIcon()
+        public override bool CanShowDefaultIcon()
         {
             if (!String.IsNullOrEmpty(this.VirtualNodeName))
             {
@@ -255,8 +243,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return false;
         }
 
-        #endregion
-
         public void BeginBatchUpdate()
         {
             foreach (var r in EnumReferences())
@@ -274,7 +260,6 @@ public void EndBatchUpdate()
             projectReferencesWithEnabledCaching.Clear();
         }
 
-        #region IReferenceContainer
         public IList EnumReferences()
         {
             List refs = new List();
@@ -478,7 +463,6 @@ public ReferenceNode AddReferenceFromSelectorData(VSCOMPONENTSELECTORDATA select
 
             return node;
         }
-        #endregion
 
         private void EnableCachingForProjectReferencesInBatchUpdate(HierarchyNode node)
         {
@@ -490,7 +474,6 @@ private void EnableCachingForProjectReferencesInBatchUpdate(HierarchyNode node)
             projectReferencesWithEnabledCaching.Add(projectReference);
         }
 
-        #region virtual methods
         internal virtual ReferenceNode CreateReferenceNode(string referenceType, ProjectElement element, BuildResult buildResult)
         {
             ReferenceNode node = null;
@@ -533,9 +516,7 @@ internal virtual ReferenceNode CreateReferenceNode(VSCOMPONENTSELECTORDATA selec
 
             return node;
         }
-        #endregion
 
-        #region Helper functions to add references
         /// 
         /// Creates a project reference node given an existing project element.
         /// 
@@ -546,7 +527,7 @@ internal virtual ProjectReferenceNode CreateProjectReferenceNode(ProjectElement
         /// 
         /// Create a Project to Project reference given a VSCOMPONENTSELECTORDATA structure
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual ProjectReferenceNode CreateProjectReferenceNode(VSCOMPONENTSELECTORDATA selectorData)
+        public virtual ProjectReferenceNode CreateProjectReferenceNode(VSCOMPONENTSELECTORDATA selectorData)
         {
             return new ProjectReferenceNode(this.ProjectMgr, selectorData.bstrTitle, selectorData.bstrFile, selectorData.bstrProjRef);
         }
@@ -694,12 +675,10 @@ private ComReferenceNode CreateComReferenceNode(string fileReference)
         /// 
         /// Creates a com reference node from a selector data.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual ComReferenceNode CreateComReferenceNode(Microsoft.VisualStudio.Shell.Interop.VSCOMPONENTSELECTORDATA selectorData)
+        public virtual ComReferenceNode CreateComReferenceNode(Microsoft.VisualStudio.Shell.Interop.VSCOMPONENTSELECTORDATA selectorData)
         {
             ComReferenceNode node = new ComReferenceNode(this.ProjectMgr, selectorData);
             return node;
         }
-        #endregion
-
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceNode.cs
index c31583e0058..6717f6f7844 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceNode.cs
@@ -1,6 +1,6 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-using FSSafe = Internal.Utilities.FileSystem;
+using FSLib = Microsoft.FSharp.Compiler.AbstractIL.Internal.Library;
 using System;
 using System.Runtime.InteropServices;
 using System.Collections;
@@ -25,30 +25,20 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [CLSCompliant(false), ComVisible(true)]
     public abstract class ReferenceNode : HierarchyNode
     {
-        public /*protected, but public for FSharp.Project.dll*/ delegate void CannotAddReferenceErrorMessage();
+        public delegate void CannotAddReferenceErrorMessage();
 
-        #region ctors
-        /// 
-        /// constructor for the ReferenceNode
-        /// 
         internal ReferenceNode(ProjectNode root, ProjectElement element)
             : base(root, element)
         {
             this.ExcludeNodeFromScc = true;
         }
 
-        /// 
-        /// constructor for the ReferenceNode
-        /// 
         internal ReferenceNode(ProjectNode root)
             : base(root)
         {
             this.ExcludeNodeFromScc = true;
         }
 
-        #endregion
-
-        #region overridden properties
         public override int MenuCommandId
         {
             get { return VsMenus.IDM_VS_CTXT_REFERENCE; }
@@ -74,10 +64,8 @@ public override string Caption
                 return String.Empty;
             }
         }
-        #endregion
 
-        #region overridden methods
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
+        public override NodeProperties CreatePropertiesObject()
         {
             return new ReferenceNodeProperties(this);
         }
@@ -124,7 +112,7 @@ public override string GetMkDocument()
         /// 
         /// Not supported.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int ExcludeFromProject()
+        public override int ExcludeFromProject()
         {
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
@@ -133,12 +121,12 @@ public override string GetMkDocument()
         /// References node cannot be dragged.
         /// 
         /// A stringbuilder.
-        public /*protected, but public for FSharp.Project.dll*/ override StringBuilder PrepareSelectedNodesForClipBoard()
+        public override StringBuilder PrepareSelectedNodesForClipBoard()
         {
             return null;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override void DoDefaultAction()
+        public override void DoDefaultAction()
         {
             this.ShowObjectBrowser();
         }
@@ -183,7 +171,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return base.QueryStatusOnNode(cmdGroup, cmd, pCmdText, ref result);
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
+        public override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
         {
             if (cmdGroup == VsMenus.guidStandardCommandSet2K)
             {
@@ -205,10 +193,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
 
         }
 
-        #endregion
-
-        #region  methods
-
         /// 
         /// If this is a managed assembly that has been resolved, its simple name.  Else if this is project reference, the filename (sans path/extension).  Else string.Empty.
         /// This is only used in the "IsAlreadyAdded" logic to prevent adding two references to same-named assemblies via the VS UI.
@@ -254,7 +238,6 @@ public virtual bool AddReference()
         /// 
         /// Refreshes a reference by re-resolving it and redrawing the icon.
         /// 
-        /*internal, but public for FSharp.Project.dll*/
         internal virtual void RefreshReference(BuildResult buildResult)
         {
             this.ResolveReference(buildResult);
@@ -264,7 +247,7 @@ internal virtual void RefreshReference(BuildResult buildResult)
         /// 
         /// Resolves references.
         /// 
-        internal /*protected, but public for FSharp.Project.dll*/ virtual void ResolveReference(BuildResult buildResult)
+        internal virtual void ResolveReference(BuildResult buildResult)
         {
 
         }
@@ -273,7 +256,7 @@ internal virtual void RefreshReference(BuildResult buildResult)
         /// Validates that a reference can be added.
         /// 
         /// Success if the reference can be added.
-        internal /*protected, but public for FSharp.Project.dll*/ virtual AddReferenceCheckResult CheckIfCanAddReference()
+        internal virtual AddReferenceCheckResult CheckIfCanAddReference()
         {
             // When this method is called this refererence has not yet been added to the hierarchy, only instantiated.
             ReferenceNode existingNode;
@@ -290,7 +273,7 @@ internal virtual void RefreshReference(BuildResult buildResult)
         /// Checks if a reference is already added. The method parses all references and compares the Url.
         /// 
         /// true if the assembly has already been added.
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool IsAlreadyAdded(out ReferenceNode existingNode)
+        public virtual bool IsAlreadyAdded(out ReferenceNode existingNode)
         {
             ReferenceContainerNode referencesFolder = this.ProjectMgr.FindChild(ReferenceContainerNode.ReferencesNodeVirtualName) as ReferenceContainerNode;
             Debug.Assert(referencesFolder != null, "Could not find the References node");
@@ -315,21 +298,21 @@ internal virtual void RefreshReference(BuildResult buildResult)
         /// 
         /// Gets the Guid to use to set VSOJBECTINFO.pguidLib for the call to IVsObjBrowser.NavigateTo
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual Guid GetBrowseLibraryGuid()
+        public virtual Guid GetBrowseLibraryGuid()
         {
             return Guid.Empty;
         }
 
         protected virtual bool CanShowUrlInOnObjectBrowser()
         {
-            return !string.IsNullOrEmpty(Url) && FSSafe.File.SafeExists(Url);
+            return !string.IsNullOrEmpty(Url) && FSLib.Shim.FileSystem.SafeExists(Url);
         }
 
         /// 
         /// Shows the Object Browser
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual int ShowObjectBrowser()
+        public virtual int ShowObjectBrowser()
         {
             if (!CanShowUrlInOnObjectBrowser())
             {
@@ -371,7 +354,7 @@ protected virtual bool CanShowUrlInOnObjectBrowser()
             return returnValue;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
+        public override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
         {
             if (deleteOperation == __VSDELETEITEMOPERATION.DELITEMOP_RemoveFromProject)
             {
@@ -380,10 +363,7 @@ protected virtual bool CanShowUrlInOnObjectBrowser()
             return false;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ abstract void BindReferenceData();
-
-        #endregion
-
+        public abstract void BindReferenceData();
     }
 
     internal class AddReferenceCheckResult
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/RegisteredProjectType.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/RegisteredProjectType.cs
deleted file mode 100644
index 0e3856bf30d..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/RegisteredProjectType.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if UNUSED_NESTED_PROJECTS
-using System;
-using System.Runtime.InteropServices;
-using System.Diagnostics;
-using System.Globalization;
-using System.IO;
-using Microsoft.Win32;
-using Microsoft.VisualStudio.Shell.Interop;
-using VSRegistry = Microsoft.VisualStudio.Shell.VSRegistry;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    /// 
-    /// Gets registry settings from for a project.
-    /// 
-    internal class RegisteredProjectType
-    {
-        private string defaultProjectExtension;
-
-        private string projectTemplatesDir;
-
-        private string wizardTemplatesDir;
-
-        private Guid packageGuid;
-
-        /*internal, but public for FSharp.Project.dll*/ public const string DefaultProjectExtension = "DefaultProjectExtension";
-        /*internal, but public for FSharp.Project.dll*/ public const string WizardsTemplatesDir = "WizardsTemplatesDir";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectTemplatesDir = "ProjectTemplatesDir";
-        /*internal, but public for FSharp.Project.dll*/ public const string Package = "Package";
-
-
-
-        /*internal, but public for FSharp.Project.dll*/ public string DefaultProjectExtensionValue
-        {
-            get
-            {
-                return this.defaultProjectExtension;
-            }
-            set
-            {
-                this.defaultProjectExtension = value;
-            }
-        }
-
-        /*internal, but public for FSharp.Project.dll*/ public string ProjectTemplatesDirValue
-        {
-            get
-            {
-                return this.projectTemplatesDir;
-            }
-            set
-            {
-                this.projectTemplatesDir = value;
-            }
-        }
-
-        /*internal, but public for FSharp.Project.dll*/ public string WizardTemplatesDirValue
-        {
-            get
-            {
-                return this.wizardTemplatesDir;
-            }
-            set
-            {
-                this.wizardTemplatesDir = value;
-            }
-        }
-
-        /*internal, but public for FSharp.Project.dll*/ public Guid PackageGuidValue
-        {
-            get
-            {
-                return this.packageGuid;
-            }
-            set
-            {
-                this.packageGuid = value;
-            }
-        }
-
-        /// 
-        /// If the project support VsTemplates, returns the path to
-        /// the vstemplate file corresponding to the requested template
-        /// 
-        /// You can pass in a string such as: "Windows\Console Application"
-        /// 
-        /*internal, but public for FSharp.Project.dll*/ public string GetVsTemplateFile(string templateFile)
-        {
-            // First see if this use the vstemplate model
-            if (!String.IsNullOrEmpty(DefaultProjectExtensionValue))
-            {
-                EnvDTE80.DTE2 dte = Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(EnvDTE.DTE)) as EnvDTE80.DTE2;
-                if (dte != null)
-                {
-                    EnvDTE80.Solution2 solution = dte.Solution as EnvDTE80.Solution2;
-                    if (solution != null)
-                    {
-                        string fullPath = solution.GetProjectTemplate(templateFile, DefaultProjectExtensionValue);
-                        // The path returned by GetProjectTemplate can be in the format "path|FrameworkVersion=x.y|Language=xxx"
-                        // where the framework version and language sections are optional.
-                        // Here we are interested only in the full path, so we have to remove all the other sections.
-                        int pipePos = fullPath.IndexOf('|');
-                        if (0 == pipePos)
-                        {
-                            return null;
-                        }
-                        if (pipePos > 0)
-                        {
-                            fullPath = fullPath.Substring(0, pipePos);
-                        }
-                        return fullPath;
-                    }
-                }
-
-            }
-            return null;
-        }
-
-        /*internal, but public for FSharp.Project.dll*/ public static RegisteredProjectType CreateRegisteredProjectType(Guid projectTypeGuid)
-        {
-            RegisteredProjectType registederedProjectType = null;
-
-            using (RegistryKey rootKey = VSRegistry.RegistryRoot(__VsLocalRegistryType.RegType_Configuration))
-            {
-                if (rootKey == null)
-                {
-                    return null;
-                }
-
-                string projectPath = "Projects\\" + projectTypeGuid.ToString("B");
-                using (RegistryKey projectKey = rootKey.OpenSubKey(projectPath))
-                {
-                    if (projectKey == null)
-                    {
-                        return null;
-                    }
-
-                    registederedProjectType = new RegisteredProjectType();
-                    registederedProjectType.DefaultProjectExtensionValue = projectKey.GetValue(DefaultProjectExtension) as string;
-                    registederedProjectType.ProjectTemplatesDirValue = projectKey.GetValue(ProjectTemplatesDir) as string;
-                    registederedProjectType.WizardTemplatesDirValue = projectKey.GetValue(WizardsTemplatesDir) as string;
-                    registederedProjectType.PackageGuidValue = new Guid(projectKey.GetValue(Package) as string);
-                }
-            }
-
-            return registederedProjectType;
-        }
-    }
-}
-#endif
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.Designer.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.Designer.cs
index 8a96e872b96..1a4f0604e99 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.Designer.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.Designer.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 {
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.cs
index ec2ab5aca1a..018499ea9c7 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 {
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.resx b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.resx
index 2d720e36f74..dcc0abfb89f 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.resx
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SecurityWarningDialog.resx
@@ -1,5 +1,5 @@
 
-
+
 
   
+
 
 
   
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs
index 06026613712..ce2d4e71300 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Globalization;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs
index 70b9c6b027a..d4fdce339d2 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Globalization;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs
index 5a43b38a71e..4fe84bbf665 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Globalization;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/ProvideAppCommandLineAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/ProvideAppCommandLineAttribute.cs
index 3caab75c2a9..84b71bd4b6e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/ProvideAppCommandLineAttribute.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/ProvideAppCommandLineAttribute.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.ComponentModel.Design;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/SingleFileGeneratorSupportRegistrationAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/SingleFileGeneratorSupportRegistrationAttribute.cs
deleted file mode 100644
index 56eb76d9fa9..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/SingleFileGeneratorSupportRegistrationAttribute.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if SINGLE_FILE_GENERATOR
-
-using System;
-using System.Globalization;
-
-namespace Microsoft.VisualStudio.Shell
-{
-	/// 
-	/// This attribute adds a custom file generator registry entry for specific file 
-    /// type. 
-	/// For Example:
-	///   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\
-    ///		[proj_fac_guid]
-	/// 
-	/// 
-	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
-	internal sealed class SingleFileGeneratorSupportRegistrationAttribute : RegistrationAttribute
-	{
-        private Guid _prjFacGuid;
-		/// 
-        /// Creates a new SingleFileGeneratorSupportRegistrationAttribute attribute to register a custom
-		/// code generator for the provided context. 
-		/// 
-        /// The type of Code generator. Type that implements IVsSingleFileGenerator
-        /// The generator name
-        /// The context GUID this code generator would appear under.
-        public SingleFileGeneratorSupportRegistrationAttribute(Type prjFactoryType)
-		{
-            if (prjFactoryType == null)
-                throw new ArgumentNullException("prjFactoryType");
-
-            _prjFacGuid = prjFactoryType.GUID;
-        }
-
-		
-        /// 
-        /// Get the Guid representing the generator type
-        /// 
-        public Guid ProjectFactoryGuid
-        {
-            get { return _prjFacGuid; }
-        }
-
-        /// 
-        /// Property that gets the generator base key name
-        /// 
-        private string GeneratorRegKey
-        {
-            get { return string.Format(CultureInfo.InvariantCulture, @"Generators\{0}", ProjectFactoryGuid.ToString("B")); }
-        }
-		/// 
-		///     Called to register this attribute with the given context.  The context
-		///     contains the location where the registration inforomation should be placed.
-		///     It also contains other information such as the type being registered and path information.
-		/// 
-		public override void Register(RegistrationContext context)
-		{
-            using (Key childKey = context.CreateKey(GeneratorRegKey))
-            {
-                childKey.SetValue(string.Empty, string.Empty);
-            }
-
-        }
-
-		/// 
-		/// Unregister this file extension.
-		/// 
-		/// 
-		public override void Unregister(RegistrationContext context)
-		{
-            context.RemoveKey(GeneratorRegKey);
-		}
-	}
-}
-#endif
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs
index e0b4302db48..11c0f2a7029 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 using System;
 using System.Globalization;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs
index 9c2b2bb2dc0..573ae07a1b0 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 
 using System;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs
index dcb96da35a2..0737638f3a3 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 
 using System;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs
index 2fd7ca45353..a679e335153 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 
 using Microsoft.VisualStudio.Shell;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectAttribute.cs
deleted file mode 100644
index 0d9953ce27c..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectAttribute.cs
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-
-#if UNUSED
-
-using System;
-using System.IO;
-using System.ComponentModel;
-using System.Globalization;
-using Microsoft.Win32;
-
-namespace Microsoft.VisualStudio.Shell
-{
-    /// 
-    /// This attribute adds a ProjectSubType to the exisiting list defined of ProjectSubTypes
-    /// for the Web Site Project
-    /// 
-    /// 
-    /// For example:
-    ///   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\(*version*)\Projects\
-    ///		{E24C65DC-7377-472B-9ABA-BC803B73C61A}\ProjectSubType(VsTemplate)\IronPython
-    ///			"Default"="Iron Python"
-    ///   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\NewProjectTemplates\TemplateDirs\{39c9c826-8ef8-4079-8c95-428f5b1c323f}\IronPython]
-    ///     @="Iron Python"
-    ///     "NewProjectDialogExOnly"=dword:00000001
-    ///     "SortPriority"=dword:0000012c
-    ///     "TemplatesDir"="D:\\Program Files\\Microsoft Visual Studio 8\\Web\\.\\WebProjects\\IronPython"
-    ///     "DeveloperActivity"="IronPython"
-
-    /// 
-    [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
-    [System.Runtime.InteropServices.ComVisibleAttribute(false)]
-    public sealed class WebSiteProjectAttribute : RegistrationAttribute
-    {
-        #region Constants
-        private const string webSiteProjectGuid = "{E24C65DC-7377-472B-9ABA-BC803B73C61A}";
-        private const string websitePackageGuid = "{39c9c826-8ef8-4079-8c95-428f5b1c323f}";
-        #endregion
-
-        #region Fields
-        private Type packageType;
-        private string languageID;
-        private string languageName;
-        #endregion
-
-        #region Constructors
-        /// 
-        /// Creates a new WebSiteProjectAttribute attribute to register a 
-        /// language with the web site project 
-        /// 
-        /// Language ID which is being referenced from the vstemplate
-        /// Language Name which shows up in the add new Web Site dialog under the list of languages
-        public WebSiteProjectAttribute(string languageID, string languageName)
-        {
-            if (languageID == null)
-            {
-                throw new ArgumentNullException("languageID", "languageID can not be null.");
-            }
-            if (languageName == null)
-            {
-                throw new ArgumentNullException("languageName", "languageName can not be null.");
-            }
-
-            this.languageID = languageID;
-            this.languageName = languageName;
-
-        }
-        #endregion
-
-        #region Properties
-        /// 
-        /// Gets the Language ID which is being referenced from the vstemplate
-        /// 
-        public string LanguageID
-        {
-            get { return languageID; }
-        }
-
-        /// 
-        /// Gets the Language Name which shows up in the add new Web Site dialog under the list of languages
-        /// 
-        public object LanguageName
-        {
-            get { return languageName; }
-        }
-
-        /// 
-        /// ProjectSubTypePath for Web Site Project
-        /// 
-        private string ProjectSubTypePath
-        {
-            get
-            {
-                return string.Format(CultureInfo.InvariantCulture, @"Projects\{0}\ProjectSubType(VsTemplate)", webSiteProjectGuid);
-            }
-        }
-
-        private string ProjectTemplatesDir
-        {
-            get
-            {
-                return string.Format(CultureInfo.InvariantCulture, @"NewProjectTemplates\TemplateDirs\{0}", websitePackageGuid);
-            }
-        }
-        /// 
-        /// Gets the Location of devenv.exe based on the RegistryRoot for the current package type
-        /// 
-        private string getVSInstallDir(RegistrationContext context)
-        {
-            DefaultRegistryRootAttribute regRootAttr = (DefaultRegistryRootAttribute)TypeDescriptor.GetAttributes(context.ComponentType)[typeof(DefaultRegistryRootAttribute)];
-            if (regRootAttr == null)
-            {
-                throw new NotSupportedException("could not find DefaultRegitryRootAttribute on " + context.ComponentType.ToString());
-            }
-
-            Win32.RegistryKey key = Win32.Registry.LocalMachine.OpenSubKey(regRootAttr.Root);
-            //We are using HKCU in the case that the HKLM Experimental hive doesn't exist
-            if (key == null || key.GetValue("InstallDir") == null)
-            {
-                key = Win32.Registry.CurrentUser.OpenSubKey(regRootAttr.Root + @"\Configuration");
-            }
-            string vsInstallDir = (string)key.GetValue("InstallDir");
-            key.Close();
-            return vsInstallDir;
-        }
-        #endregion
-
-        #region Methods
-        /// 
-        /// Called to register this attribute with the given context.  The context
-        /// contains the location where the registration information should be placed.
-        /// It also contains other information such as the type being registered and path information.
-        /// 
-        /// Given context to register in
-        public override void Register(RegistrationContext context)
-        {
-            if (context == null)
-            {
-                throw new ArgumentNullException("context");
-            }
-            packageType = context.ComponentType;
-            context.Log.WriteLine(String.Format(CultureInfo.CurrentCulture, "WebSiteProject: LanguageID = {0} Language Name = {1}\n", languageID, languageName));
-
-            //Register ProjectSubType(VsTemplates)
-            using (Key childKey = context.CreateKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", ProjectSubTypePath, languageID)))
-            {
-                childKey.SetValue("", languageName);
-            }
-
-            //Register NewProjectTemplates
-            using (Key childKey = context.CreateKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", ProjectTemplatesDir, languageID)))
-            {
-                childKey.SetValue("", languageName);
-                childKey.SetValue("NewProjectDialogExOnly", 1);
-                childKey.SetValue("SortPriority", 300);
-                string templateDir = context.RootFolder.TrimEnd('\\') + string.Format(CultureInfo.InvariantCulture, "\\Web\\.\\WebProjects\\{0}", languageID);
-                childKey.SetValue("TemplatesDir", context.EscapePath(templateDir));
-                childKey.SetValue("DeveloperActivity", languageID);
-            }
-        }
-
-        /// 
-        /// Unregister this languageID
-        /// 
-        /// Given context to unregister from
-        public override void Unregister(RegistrationContext context)
-        {
-            if (context != null)
-            {
-                //UnRegister ProjectSubType(VsTemplates)
-                context.RemoveKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", ProjectSubTypePath, languageID));
-
-                //Register NewProjectTemplates
-                context.RemoveKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", ProjectTemplatesDir, languageID));
-            }
-        }
-        #endregion
-    }
-}
-
-#endif
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectRelatedFilesAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectRelatedFilesAttribute.cs
deleted file mode 100644
index e9aacd19939..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectRelatedFilesAttribute.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-
-#if UNUSED
-
-using System;
-using System.IO;
-using System.ComponentModel;
-using System.Globalization;
-using Microsoft.Win32;
-
-namespace Microsoft.VisualStudio.Shell
-{
-    /// 
-    /// This attribute allows the Web Site Project to nest one file type (related) under another file type (primary) in the solution explorer
-    /// 
-    /// 
-    /// As an example the following Attribute definition 
-    /// [WebSiteProjectRelatedFiles("aspx","py")]
-    /// 
-    /// would add the following registry key:
-    ///   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\(*version*)\Projects\
-    ///		{E24C65DC-7377-472B-9ABA-BC803B73C61A}\RelatedFiles\.aspx\.py
-    ///			"Default"=""
-    
-    /// 
-    [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
-    [System.Runtime.InteropServices.ComVisibleAttribute(false)]
-    public sealed class WebSiteProjectRelatedFilesAttribute : RegistrationAttribute
-    {
-        #region Constants
-        private const string webSiteProjectGuid = "{E24C65DC-7377-472B-9ABA-BC803B73C61A}";
-        #endregion
-
-        #region Fields
-        //private Type packageType;
-        private string primaryFileExtension;
-        private string relatedFileExtension;
-        #endregion
-        
-        #region Constructors
-
-        /// 
-        /// Creates a new WebSiteProjectAttribute attribute to register a 
-        /// language with the web site project 
-        /// 
-        /// The primary file extension which will nest files.
-        /// The related file extion which willl nest under the primary file extension
-        public WebSiteProjectRelatedFilesAttribute(string primaryFileExtension, string relatedFileExtension)
-        {
-            if (string.IsNullOrEmpty(primaryFileExtension))
-            {
-                throw new ArgumentNullException("primaryFileExtension", "primaryFileExtension can not be null.");
-            }
-            if (primaryFileExtension.Contains("."))
-            {
-                throw new ArgumentNullException("primaryFileExtension", "primaryFileExtension must not contain '.'");
-            }
-            if (string.IsNullOrEmpty(relatedFileExtension))
-            {
-                throw new ArgumentNullException("relatedFileExtension", "relatedFileExtension can not be null.");
-            }
-            if (relatedFileExtension.Contains("."))
-            {
-                throw new ArgumentNullException("relatedFileExtension", "relatedFileExtension must not contain '.'");
-            }
-
-            this.primaryFileExtension = primaryFileExtension;
-            this.relatedFileExtension = relatedFileExtension;
-
-        }
-        #endregion
-
-        #region Properties
-        /// 
-        /// Gets the primary file extension which will nest files
-        /// 
-        public string PrimaryFileExtension
-        {
-            get { return primaryFileExtension; }
-        }
-
-        /// 
-        /// Gets the related file extion which willl nest under the primary file extension
-        /// 
-        public object RelatedFileExtension
-        {
-            get { return relatedFileExtension; }
-        }
-
-        /// 
-        /// Returns the Web Site Project RelatedFiles Path
-        /// 
-        private string RelatedFilePath
-        {
-            get
-            {
-                string relatedFiles = string.Format(CultureInfo.InvariantCulture, @"Projects\{0}\RelatedFiles", webSiteProjectGuid);
-                return string.Format(CultureInfo.InvariantCulture, "{0}\\.{1}\\.{2}", relatedFiles, primaryFileExtension, relatedFileExtension);
-            }
-        }
-
-        #endregion
-
-        #region Methods
-        /// 
-        /// Called to register this attribute with the given context.  The context
-        /// contains the location where the registration information should be placed.
-        /// It also contains other information such as the type being registered and path information.
-        /// 
-        /// Given context to register in
-        public override void Register(RegistrationContext context)
-        {
-            if (context == null)
-            {
-                throw new ArgumentNullException("context");
-            }
-            context.Log.WriteLine(String.Format(CultureInfo.CurrentCulture, "WebSiteProjectRelatedFiles: Primary File Ext = {0} Related File Ext = {1}\n", primaryFileExtension, relatedFileExtension));
-
-            //Register Related File
-            context.CreateKey(RelatedFilePath);
-        }
-
-        /// 
-        /// Unregister this related file extension
-        /// 
-        /// Given context to unregister from
-        public override void Unregister(RegistrationContext context)
-        {
-            if (context != null)
-            {
-                //UnRegister related file extextion
-                context.RemoveKey(RelatedFilePath);
-            }
-
-        }
-        #endregion
-    }
-}
-#endif
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/AppConfigHelper.fs b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/AppConfigHelper.fs
index 46731a6319f..6067a8d8505 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/AppConfigHelper.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/AppConfigHelper.fs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+// Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 
@@ -180,7 +180,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
             Debug.Assert(document <> null, "Null XmlDocument?")
             document
             
-        // #region IDisposable
         interface IDisposable with
             member x.Dispose() =
                 if rdtCookie <> 0u && rdtFlags <> _VSRDTFLAGS.RDT_NoLock then
@@ -188,7 +187,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
                     rdt.UnlockDocument((uint32 rdtFlags) ||| (uint32 _VSRDTFLAGS.RDT_Unlock_SaveIfDirty), rdtCookie) |> ignore
                     rdtCookie <- 0u
         
-        // #endregion
 
     // This type provides a wrapper around the app.config file and provides methods to update
     // the config file with framework moniker information.
@@ -352,16 +350,21 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
                         // The table below represents the appropriate redirections
                         // If the target version is between TagetMin and TargetMax inclusive then the redirects list contains the appropriate redirects
                         //
-                        //TargetMin, targetMax, redirects
-                        "2.3.0.0",  "2.3.0.0",   ["2.0.0.0";   "2.3.0.0"]
-                        "2.3.5.1",  "2.3.5.1",   ["2.3.5.0";   "2.3.5.1"]
-                        "3.7.4.0",  "3.7.4.0",   ["3.3.1.0";   "3.7.4.0"]
-                        "3.47.4.0", "3.47.4.0",  ["2.3.5.0";   "2.3.5.1";   "3.47.4.0"]
-                        "3.78.4.0", "3.78.4.0",  ["3.78.3.1";  "3.78.4.0"]
-                        "3.259.4.0","3.259.4.0", ["3.259.3.1"; "3.259.4.0"]
-                        "4.3.0.0",  "4.4.0.0",   ["2.0.0.0";   "2.3.0.0";   "2.3.5.0";   "4.0.0.0";    "4.3.0.0"]
-                        "4.3.1.0",  "4.4.0.0",   ["3.3.1.0";   "2.3.5.1";   "3.78.3.1";  "3.259.3.1";  "4.3.1.0"]
-                        "4.4.0.0",  "4.4.0.0",   ["3.47.4.0";  "3.78.4.0";  "3.259.4.0"; "4.4.0.0"]
+                        //TargetMin,  targetMax,    redirects
+                        "2.3.0.0",    "2.3.0.0",    ["2.0.0.0";    "2.3.0.0"]
+                        "2.3.5.1",    "2.3.5.1",    ["2.3.5.0";    "2.3.5.1"]
+                        "3.7.4.0",    "3.7.41.0",   ["3.3.1.0";    "3.7.4.0"]
+                        "3.7.41.0",   "3.7.41.0",   ["3.7.41.0"]   
+                        "3.47.4.0",   "3.47.41.0",  ["2.3.5.0";    "2.3.5.1";   "3.47.4.0"]
+                        "3.47.41.0",  "3.47.41.0",  ["3.47.41.0"]  
+                        "3.78.4.0",   "3.78.41.0",  ["3.78.3.1";   "3.78.4.0"]
+                        "3.78.41.0",  "3.78.41.0",  ["3.78.41.0"]  
+                        "3.259.4.0",  "3.259.41.0", ["3.259.3.1";  "3.259.4.0"]
+                        "3.259.41.0", "3.259.41.0", ["3.259.41.0"] 
+                        "4.3.0.0",    "4.4.1.0",    ["2.0.0.0";    "2.3.0.0";   "2.3.5.0";    "4.0.0.0";   "4.3.0.0"]
+                        "4.3.1.0",    "4.4.1.0",    ["3.3.1.0";    "2.3.5.1";   "3.78.3.1";   "3.259.3.1"; "4.3.1.0"]
+                        "4.4.0.0",    "4.4.1.0",    ["3.47.4.0";   "3.78.4.0";  "3.259.4.0";  "4.4.0.0"]
+                        "4.4.1.0",    "4.4.1.0",    ["3.47.41.0";  "3.78.41.0"; "3.259.41.0"; "4.4.0.0";   "4.4.1.0"]
                     ] |> Seq.where(fun (min, max, _) -> targetFSharpCoreVersion >= min && targetFSharpCoreVersion <= max)
 
                 // some helpers to simplify work with XLinq
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/FSharp.ProjectSystem.FSharp.dll.config b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/FSharp.ProjectSystem.FSharp.dll.config
index 9545b799ede..017bbf1d837 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/FSharp.ProjectSystem.FSharp.dll.config
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/FSharp.ProjectSystem.FSharp.dll.config
@@ -1,4 +1,4 @@
-
+
 
     
         
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/InternalsVisibleTo.fs b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/InternalsVisibleTo.fs index 49caf728223..7c367df7b07 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/InternalsVisibleTo.fs +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/InternalsVisibleTo.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp open System.Reflection @@ -6,8 +6,8 @@ open System.Runtime.CompilerServices [] [] -[] -[] +[] +[] [] // For QA testdrivers and testhooks diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MSBuildUtilities.fs b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MSBuildUtilities.fs index 97525f5c9dd..d56c7b27c10 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MSBuildUtilities.fs +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MSBuildUtilities.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.VisualStudio.FSharp.ProjectSystem diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MenusAndCommands.vsct b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MenusAndCommands.vsct index 435256120d6..95f1127dbf2 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MenusAndCommands.vsct +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MenusAndCommands.vsct @@ -1,5 +1,5 @@  - + diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/PkgCmd.vsct b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/PkgCmd.vsct index a5940ee1e98..a6bac18dc20 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/PkgCmd.vsct +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/PkgCmd.vsct @@ -1,5 +1,5 @@ - + + ..\..\..\..\..\..\src @@ -15,12 +15,11 @@ {6196B0F8-CAEA-4CF1-AF82-1B520F77FE44} Library FSharp.ProjectSystem.FSharp - FSharp.ProjectSystem.FSharp.fsi LIBRARY $(NoWarn);52;75;62 true $(OtherFlags) --warnon:1182 --subsystemversion:6.00 - FX_ATLEAST_45 + FX_ATLEAST_45 false true ProjectResources.rc @@ -29,17 +28,14 @@ - true + true fsiCommands.vsct - - - @@ -94,8 +90,8 @@ {ee85aab7-cda0-4c4e-bda0-a64ccc413e3f} True - - FSharp.VS.FSI + + FSHarp.VS.FSI {991dcf75-c2eb-42b6-9a0d-aa1d2409d519} True @@ -126,15 +122,12 @@ VSCTCompile;CopyCtoFile;$(BuildDependsOn) - + $(IntermediateOutputPath)\ProjectResources.rc.res - + - + \ No newline at end of file diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/VSPackage.resx b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/VSPackage.resx index fe1aec0f033..14118efbd86 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/VSPackage.resx +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/VSPackage.resx @@ -1,5 +1,5 @@  - + + ..\..\..\..\..\..\..\src diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/HelpKeywords.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/HelpKeywords.vb index 2db838756e9..9b2758cb45d 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/HelpKeywords.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/HelpKeywords.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. ' ' All help keywords for anything inside this assembly should be defined here, diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/ILangInactiveCfgPropertyNotifySink.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/ILangInactiveCfgPropertyNotifySink.vb index d64ea715e76..e4abf2b434e 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/ILangInactiveCfgPropertyNotifySink.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/ILangInactiveCfgPropertyNotifySink.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports System.Runtime.InteropServices Imports System.Diagnostics diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVbpackage.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVbpackage.vb index 1edc0b9c144..e1fc4498506 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVbpackage.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVbpackage.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports System Imports System.ComponentModel.Design diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsAppId.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsAppId.vb index a4dfbae3394..dedccf236d0 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsAppId.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsAppId.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports System Imports System.Runtime.InteropServices diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsBuildEventCommandLineDialogService.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsBuildEventCommandLineDialogService.vb index 569b85a3ccc..18d1f59c4a3 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsBuildEventCommandLineDialogService.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsBuildEventCommandLineDialogService.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports System Imports System.Runtime.InteropServices diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsBuildEventMacroProvider.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsBuildEventMacroProvider.vb index 50a6a3c7977..1ab9bc3a0db 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsBuildEventMacroProvider.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/IVsBuildEventMacroProvider.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports System Imports System.Runtime.InteropServices diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/NativeMethods.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/NativeMethods.vb index 500d76ad32c..dd855cf8648 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/NativeMethods.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/NativeMethods.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports System Imports System.Runtime.InteropServices diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/win.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/win.vb index d298c91f895..10daafac475 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/win.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Interop/win.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports System Imports Microsoft.Win32 diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Application.Designer.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Application.Designer.vb index e6687bbc56a..13bb5d09a78 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Application.Designer.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Application.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Option Strict On Option Explicit On diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Application.myapp b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Application.myapp index bf8567e333f..d2bc2618508 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Application.myapp +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Application.myapp @@ -1,5 +1,5 @@  - + false false diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/AssemblyInfo.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/AssemblyInfo.vb index 71c4852f6b8..84ede117216 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/AssemblyInfo.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/AssemblyInfo.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports System Imports System.Reflection diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Resources.Designer.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Resources.Designer.vb index 4afaa3091e9..6c57de7e7a6 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Resources.Designer.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Resources.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Option Strict On Option Explicit On diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Resources.resx b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Resources.resx index d00f3b38399..40c9af76e8c 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Resources.resx +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/Resources.resx @@ -1,5 +1,5 @@  - + + diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Package/Constants.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Package/Constants.vb index 7986bfbc160..3fd4fe3ee8d 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Package/Constants.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Package/Constants.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports Microsoft.VisualBasic Imports System diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Package/InternalException.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Package/InternalException.vb index deb8dd9bd39..e1be0a35ef3 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Package/InternalException.vb +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/Package/InternalException.vb @@ -1,4 +1,4 @@ -' Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +' Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports Microsoft.VisualBasic Imports System diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/PropertyPages/ApplicationPropPage.resx b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/PropertyPages/ApplicationPropPage.resx index 4d2a1e0066f..fa6e69e43f9 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/PropertyPages/ApplicationPropPage.resx +++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/PropertyPages/ApplicationPropPage.resx @@ -1,5 +1,5 @@  - + + + + + + + + + + + + + + diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj index 11a696c2622..11c34c16209 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj +++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj @@ -1,96 +1,99 @@  - + - - ..\..\..\..\..\src - FSharp - true - 14.0 - - - - Debug - AnyCPU - {991dcf75-c2eb-42b6-9a0d-aa1d2409d519} - Library - FSharp.VS.FSI - true - LIBRARY - $(NoWarn);47;75 - $(OtherFlags) --subsystemversion:6.00 - - - - - - - - - - - - - - - - Properties - Properties.resx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {DED3BBD7-53F4-428A-8C9F-27968E768605} - FSharp.Core - - - FSharp.Compiler.Server.Shared - {d5870cf0-ed51-4cbc-b3d7-6f56da84ac06} - - - FSharp.Compiler - {62499922-7085-43bd-b9f2-bb352bfbc408} - - - - + + ..\..\..\..\..\src + FSharp + true + 14.0 + FSharp.VS.FSI + + + + Debug + AnyCPU + {991dcf75-c2eb-42b6-9a0d-aa1d2409d519} + Library + FSharp.VS.FSI + true + LIBRARY + $(NoWarn);47;75 + $(OtherFlags) --subsystemversion:6.00 + + + + + + + CompilerLocationUtils.fs + + + + + + + + + + + Properties + Properties.resx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {DED3BBD7-53F4-428A-8C9F-27968E768605} + FSharp.Core + + + FSharp.Compiler.Server.Shared + {d5870cf0-ed51-4cbc-b3d7-6f56da84ac06} + + + FSharp.Compiler + {62499922-7085-43bd-b9f2-bb352bfbc408} + + + + \ No newline at end of file diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/InternalsVisibleTo.fs b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/InternalsVisibleTo.fs index ed1b2d7cec4..e4a5bd2e60d 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/InternalsVisibleTo.fs +++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/InternalsVisibleTo.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Properties.resx b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Properties.resx index 211a424a828..d1a9a926e9e 100644 --- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Properties.resx +++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Properties.resx @@ -1,5 +1,5 @@  - + + +